Merged fixes

Sometimes, multiple fixes apply to the same span of code. For example, we might want a fixer to replace deprecated($x) with nondeprecated($x). So what if we see the line deprecated(deprecated(0))?

One approach, which Refex often follows, is to suggest multiple rewrites. This works great if they do not overlap at all – perhaps if we just replace the span deprecated with nondeprecated. But if they do overlap, Refex will iteratively try to apply as many fixes as it can in one go.

The resulting message might be a bit confusing. We concatenate all the “important” messages together with their explanatory URLs. The “unimportant” ones are generally for trivial fixes that don’t really matter in context – e.g. a spelling correction, or a minor idiomatic rewording.