This is an archive of the discontinued LLVM Phabricator instance.

[clang-format] Fix variable lacks of blank when previous operator is star
Needs RevisionPublic

Authored by cqak on Jul 19 2023, 11:06 PM.

Details

Summary

In binary operator of star, the second operand lacks of blank leading by the wrong type of token. For example:

x*y;

converts to:

x *y;

which should be:

x * y;

Diff Detail

Event Timeline

cqak created this revision.Jul 19 2023, 11:06 PM
Herald added projects: Restricted Project, Restricted Project. · View Herald TranscriptJul 19 2023, 11:06 PM
Herald added a subscriber: cfe-commits. · View Herald Transcript
NOTE: Clang-Format Team Automated Review Comment

It looks like your clang-format review does not contain any unit tests, please try to ensure all code changes have a unit test (unless this is an NFC or refactoring, adding documentation etc..)

Add your unit tests in clang/unittests/Format and you can build with ninja FormatTests. We recommend using the verifyFormat(xxx) format of unit tests rather than EXPECT_EQ as this will ensure you change is tolerant to random whitespace changes (see FormatTest.cpp as an example)

For situations where your change is altering the TokenAnnotator.cpp which can happen if you are trying to improve the annotation phase to ensure we are correctly identifying the type of a token, please add a token annotator test in TokenAnnotatorTest.cpp

cqak requested review of this revision.Jul 19 2023, 11:06 PM
cqak updated this revision to Diff 542316.Jul 19 2023, 11:21 PM

add test case.

Please provide a diff with the full context (-U999999 will do the trick).

And another context is needed, just x * y will never be (meaningful) be formatted. At least a ; is missing, and I'd argue if your example is just

... something ...
x * y;
... something ...

Your patch is wrong. While it is of course possible to just multiply something and drop the result, that's nonsense.
If the overloaded operator* has side effects, that's also possible, but bad code.
But defining a pointer y pointing to type x and not initializing it directly is more often the case:

struct x;
x* y;
... something ...
clang/unittests/Format/FormatTest.cpp
96 ↗(On Diff #542316)

This is the wrong place.

You want a TokenAnnotatorTests, there is UnderstandStarAmp or something like that.

MyDeveloperDay requested changes to this revision.Aug 8 2023, 12:30 AM
This revision now requires changes to proceed.Aug 8 2023, 12:30 AM