> Unless I'm missing something, before the (Used from #{CallerFilter.first_non_rspec_line}) would have made every message different for each usage,

Yep, the message would be different for each usage, but the deprecation formatter is smart enough to ignore file:line bits when grouping messges:

https://github.com/rspec/rspec-core/blob/508f93baf6063080007266265f909683871f2f8d/lib/rspec/core/formatters/deprecation_formatter.rb#L77-L79

> with this change this drops to one per legacy matcher... I'm open to changing this but what if someone has more than one legacy matchers

The user will still get one deprecation warning per use of a legacy matcher with your change or with my suggestion (and that's intended).  What we're trying to accomplish with the `:type` option is to make all legacy matcher deprecation warnings get grouped as a single type.  `:type` only affects the grouping, and doesn't prevent multiple deprecations with the same type (but different text) from being issued.