[clang] [clang-format] Improve QualifierAlignment in guessing macros (PR #145468)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 23 23:36:33 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-format
Author: Owen Pan (owenca)
<details>
<summary>Changes</summary>
Fixes #<!-- -->145388
---
Full diff: https://github.com/llvm/llvm-project/pull/145468.diff
2 Files Affected:
- (modified) clang/lib/Format/QualifierAlignmentFixer.cpp (+18-7)
- (modified) clang/unittests/Format/QualifierFixerTest.cpp (+5-2)
``````````diff
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) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/145468
More information about the cfe-commits
mailing list