[clang-format] Left/Right alignment fixer can cause false positive replacements when...
authormydeveloperday <mydeveloperday@gmail.com>
Sat, 25 Sep 2021 16:34:34 +0000 (17:34 +0100)
committermydeveloperday <mydeveloperday@gmail.com>
Sat, 25 Sep 2021 16:35:41 +0000 (17:35 +0100)
commitc2ec5dd209532b1d618958ade6a7d550a0c31ea5
tree56dee378fd23e87c12b5302695bc38b6886af384
parent8c83bd3bd4c482b22abf7468687269ba010d36e4
[clang-format] Left/Right alignment fixer can cause false positive replacements when they don't actually change anything

Earlier during the development of {D69764} I felt it was no longer necessary to
ensure we were not trying to change code which didn't need to change
and we felt this could be removed, however I'd like to bring this back for now
as I am seeing some false positives in terms of the "replacements"

What I see is the generation of a replacement which is a "No Op" on the original
code, I think this comes about because of the merging of replacements:

```
static const a;
->
const static a;
->
static const a;
```

The replacements don't really merge, in such a way as to identify when we have gone
back to the original

Also remove the Penalty as I'm not using it (and it became marked as set and no used,
I'd rather get rid of it if it means nothing)

I think we need to do this step for now, as many people use the --output-replacements-xml
to identify that the file "needs a clang-format"

The same can be seen with the -n or --dry-run option as this uses the replacements
to drive the error/warning output.

Reviewed By: HazardyKnusperkeks

Differential Revision: https://reviews.llvm.org/D110392
clang/lib/Format/QualifierAlignmentFixer.cpp
clang/unittests/Format/QualifierFixerTest.cpp