This is an archive of the discontinued LLVM Phabricator instance.

[clang-format] Left/Right alignment fixer can cause false positive replacements when they don't actually change anything
ClosedPublic

Authored by MyDeveloperDay on Sep 24 2021, 1:44 AM.

Details

Summary

Earlier during the development of D69764: [clang-format] Add Left/Right Const fixer capability 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.

Diff Detail

Event Timeline

MyDeveloperDay requested review of this revision.Sep 24 2021, 1:44 AM
MyDeveloperDay created this revision.
clang/lib/Format/QualifierAlignmentFixer.cpp
95

The message may be confusing, but honestly I don't know what to put in either, since "adding non no op replacements" may be even more confusing.

clang/unittests/Format/QualifierFixerTest.cpp
818

Doesn't the two argument version suffice?

MyDeveloperDay marked 2 inline comments as done.

Address review comment

This revision is now accepted and ready to land.Sep 25 2021, 7:22 AM
This revision was landed with ongoing or failed builds.Sep 25 2021, 9:36 AM
This revision was automatically updated to reflect the committed changes.