[clang] [clang-format] Fix a bug in annotating StartOfName (PR #99791)
Owen Pan via cfe-commits
cfe-commits at lists.llvm.org
Sat Jul 20 16:45:08 PDT 2024
https://github.com/owenca created https://github.com/llvm/llvm-project/pull/99791
Fixes #99758.
>From f38256c028e1600bc6b957f851ffcc0dedab589c Mon Sep 17 00:00:00 2001
From: Owen Pan <owenpiano at gmail.com>
Date: Sat, 20 Jul 2024 16:43:39 -0700
Subject: [PATCH] [clang-format] Fix a bug in annotating StartOfName
Fixes #99758.
---
clang/lib/Format/TokenAnnotator.cpp | 4 +++-
clang/unittests/Format/TokenAnnotatorTest.cpp | 14 ++++++++++++++
2 files changed, 17 insertions(+), 1 deletion(-)
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) {
More information about the cfe-commits
mailing list