[clang] [clang-format] Hanlde qualified type names (PR #125327)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 31 18:37:05 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-format
Author: Owen Pan (owenca)
<details>
<summary>Changes</summary>
Fixes #<!-- -->125178.
---
Full diff: https://github.com/llvm/llvm-project/pull/125327.diff
2 Files Affected:
- (modified) clang/lib/Format/QualifierAlignmentFixer.cpp (+7-1)
- (modified) clang/unittests/Format/QualifierFixerTest.cpp (+12)
``````````diff
diff --git a/clang/lib/Format/QualifierAlignmentFixer.cpp b/clang/lib/Format/QualifierAlignmentFixer.cpp
index 21fb5074b4928f..f777ac2a89f755 100644
--- a/clang/lib/Format/QualifierAlignmentFixer.cpp
+++ b/clang/lib/Format/QualifierAlignmentFixer.cpp
@@ -132,8 +132,10 @@ static void rotateTokens(const SourceManager &SourceMgr,
// Then move through the other tokens.
auto *Tok = Begin;
while (Tok != End) {
- if (!NewText.empty() && !endsWithSpace(NewText))
+ if (!NewText.empty() && !endsWithSpace(NewText) &&
+ Tok->isNot(tok::coloncolon)) {
NewText += " ";
+ }
NewText += Tok->TokenText;
Tok = Tok->Next;
@@ -412,6 +414,10 @@ const FormatToken *LeftRightQualifierAlignmentFixer::analyzeLeft(
// The case `const long long volatile int` -> `const volatile long long int`
// The case `long volatile long int const` -> `const volatile long long int`
if (TypeToken->isTypeName(LangOpts)) {
+ if (const auto *Prev = TypeToken->getPreviousNonComment();
+ Prev && Prev->endsSequence(tok::coloncolon, tok::identifier)) {
+ TypeToken = Prev->getPreviousNonComment();
+ }
const FormatToken *LastSimpleTypeSpecifier = TypeToken;
while (isConfiguredQualifierOrType(
LastSimpleTypeSpecifier->getPreviousNonComment(),
diff --git a/clang/unittests/Format/QualifierFixerTest.cpp b/clang/unittests/Format/QualifierFixerTest.cpp
index 129828b0d187a9..530587bbf2ca74 100644
--- a/clang/unittests/Format/QualifierFixerTest.cpp
+++ b/clang/unittests/Format/QualifierFixerTest.cpp
@@ -1291,6 +1291,18 @@ TEST_F(QualifierFixerTest, WithCpp11Attribute) {
"[[maybe_unused]] constexpr static int A", Style);
}
+TEST_F(QualifierFixerTest, WithQualifiedTypeName) {
+ auto Style = getLLVMStyle();
+ Style.QualifierAlignment = FormatStyle::QAS_Custom;
+ Style.QualifierOrder = {"constexpr", "type", "const"};
+
+ verifyFormat("constexpr std::int64_t x{123};",
+ "std::int64_t constexpr x{123};", Style);
+
+ Style.TypeNames.push_back("bar");
+ verifyFormat("constexpr foo::bar x{12};", "foo::bar constexpr x{12};", Style);
+}
+
TEST_F(QualifierFixerTest, DisableRegions) {
FormatStyle Style = getLLVMStyle();
Style.QualifierAlignment = FormatStyle::QAS_Custom;
``````````
</details>
https://github.com/llvm/llvm-project/pull/125327
More information about the cfe-commits
mailing list