-
Notifications
You must be signed in to change notification settings - Fork 15.2k
[clang-format] Fix a bug in annotating StartOfName #99791
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
@llvm/pr-subscribers-clang-format Author: Owen Pan (owenca) ChangesFixes #99758. Full diff: https://github.com/llvm/llvm-project/pull/99791.diff 2 Files Affected:
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp
index db66911f00f63..06c34bd45eb31 100644
--- a/clang/lib/Format/TokenAnnotator.cpp
+++ b/clang/lib/Format/TokenAnnotator.cpp
@@ -2625,8 +2625,10 @@ class AnnotatingParser {
return false;
// int a or auto a.
- if (PreviousNotConst->isOneOf(tok::identifier, tok::kw_auto))
+ if (PreviousNotConst->isOneOf(tok::identifier, tok::kw_auto) &&
+ PreviousNotConst->isNot(TT_StatementAttributeLikeMacro)) {
return true;
+ }
// *a or &a or &&a.
if (PreviousNotConst->is(TT_PointerOrReference))
diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp
index f70424c3ee060..e7bc15d7e1dfa 100644
--- a/clang/unittests/Format/TokenAnnotatorTest.cpp
+++ b/clang/unittests/Format/TokenAnnotatorTest.cpp
@@ -2125,6 +2125,13 @@ TEST_F(TokenAnnotatorTest, UnderstandsTrailingReturnArrow) {
ASSERT_EQ(Tokens.size(), 21u) << Tokens;
EXPECT_TOKEN(Tokens[13], tok::arrow, TT_Unknown);
+ auto Style = getLLVMStyle();
+ Style.StatementAttributeLikeMacros.push_back("emit");
+ Tokens = annotate("emit foo()->bar;", Style);
+ ASSERT_EQ(Tokens.size(), 8u) << Tokens;
+ EXPECT_TOKEN(Tokens[0], tok::identifier, TT_StatementAttributeLikeMacro);
+ EXPECT_TOKEN(Tokens[4], tok::arrow, TT_Unknown);
+
// Mixed
Tokens = annotate("auto f() -> int { auto a = b()->c; }");
ASSERT_EQ(Tokens.size(), 18u) << Tokens;
@@ -2950,6 +2957,13 @@ TEST_F(TokenAnnotatorTest, StartOfName) {
ASSERT_EQ(Tokens.size(), 7u) << Tokens;
EXPECT_TOKEN(Tokens[0], tok::at, TT_ObjCDecl);
EXPECT_TOKEN(Tokens[2], tok::identifier, TT_StartOfName);
+
+ auto Style = getLLVMStyle();
+ Style.StatementAttributeLikeMacros.push_back("emit");
+ Tokens = annotate("emit foo = 0;", Style);
+ ASSERT_EQ(Tokens.size(), 6u) << Tokens;
+ EXPECT_TOKEN(Tokens[0], tok::identifier, TT_StatementAttributeLikeMacro);
+ EXPECT_TOKEN(Tokens[1], tok::identifier, TT_Unknown);
}
TEST_F(TokenAnnotatorTest, BraceKind) {
|
wait until new clang-format with is released with llvm/llvm-project#99791
|
Can we expect this to be backported and released with clang-format-18? |
|
Unfortunately no because clang-format is part of llvm, and as far as I know there will be no more llvm 18 point releases. |
|
That is very unfortunate. It means one will either get different results for the clang-format versions, one disables the formatting, or works around it by sth. Like Q_EMIT(something()->mySignal()). |
Or wait for the next release (in this case 19.1.0, which is just around the corner). |
|
But that does not mean everyone who works on the projects will update to that version right away :( |
|
Wouldn't you have the same problem if we were to backport the fix, say, to 18.1.9? Anyway, LLVM 19.1.0 has just been released. |
|
I think it would be normal for distros to backport bugfixes. Thus, users should get the new version rather soonish. |
Fixes #99758.