[clang] 01b288f - [clang-format] Improve QualifierAlignment in guessing macros (#145468)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 25 00:01:10 PDT 2025
Author: Owen Pan
Date: 2025-06-25T00:01:06-07:00
New Revision: 01b288fe6a1e627954329198ed5641f2bf55ee8d
URL: https://github.com/llvm/llvm-project/commit/01b288fe6a1e627954329198ed5641f2bf55ee8d
DIFF: https://github.com/llvm/llvm-project/commit/01b288fe6a1e627954329198ed5641f2bf55ee8d.diff
LOG: [clang-format] Improve QualifierAlignment in guessing macros (#145468)
Fixes #145388
Added:
Modified:
clang/lib/Format/QualifierAlignmentFixer.cpp
clang/unittests/Format/QualifierFixerTest.cpp
Removed:
################################################################################
diff --git a/clang/lib/Format/QualifierAlignmentFixer.cpp b/clang/lib/Format/QualifierAlignmentFixer.cpp
index 8e55d339b2388..b0dda65adfba1 100644
--- a/clang/lib/Format/QualifierAlignmentFixer.cpp
+++ b/clang/lib/Format/QualifierAlignmentFixer.cpp
@@ -635,15 +635,26 @@ bool isConfiguredQualifierOrType(const FormatToken *Tok,
// If a token is an identifier and it's upper case, it could
// be a macro and hence we need to be able to ignore it.
bool isPossibleMacro(const FormatToken *Tok) {
- if (!Tok)
- return false;
+ assert(Tok);
if (Tok->isNot(tok::identifier))
return false;
- if (Tok->TokenText.upper() == Tok->TokenText.str()) {
- // T,K,U,V likely could be template arguments
- return Tok->TokenText.size() != 1;
- }
- return false;
+
+ const auto Text = Tok->TokenText;
+ assert(Text.size() > 0);
+
+ // T,K,U,V likely could be template arguments
+ if (Text.size() == 1)
+ return false;
+
+ // It's unlikely that qualified names are object-like macros.
+ const auto *Prev = Tok->getPreviousNonComment();
+ if (Prev && Prev->is(tok::coloncolon))
+ return false;
+ const auto *Next = Tok->getNextNonComment();
+ if (Next && Next->is(tok::coloncolon))
+ return false;
+
+ return Text == Text.upper();
}
} // namespace format
diff --git a/clang/unittests/Format/QualifierFixerTest.cpp b/clang/unittests/Format/QualifierFixerTest.cpp
index 3eae39f267c3e..f42f2e307f713 100644
--- a/clang/unittests/Format/QualifierFixerTest.cpp
+++ b/clang/unittests/Format/QualifierFixerTest.cpp
@@ -1122,14 +1122,17 @@ TEST_F(QualifierFixerTest, IsQualifierType) {
}
TEST_F(QualifierFixerTest, IsMacro) {
-
auto Tokens = annotate("INT INTPR Foo int");
ASSERT_EQ(Tokens.size(), 5u) << Tokens;
-
EXPECT_TRUE(isPossibleMacro(Tokens[0]));
EXPECT_TRUE(isPossibleMacro(Tokens[1]));
EXPECT_FALSE(isPossibleMacro(Tokens[2]));
EXPECT_FALSE(isPossibleMacro(Tokens[3]));
+
+ Tokens = annotate("FOO::BAR");
+ ASSERT_EQ(Tokens.size(), 4u) << Tokens;
+ EXPECT_FALSE(isPossibleMacro(Tokens[0]));
+ EXPECT_FALSE(isPossibleMacro(Tokens[2]));
}
TEST_F(QualifierFixerTest, OverlappingQualifier) {
More information about the cfe-commits
mailing list