https://github.com/owenca created https://github.com/llvm/llvm-project/pull/125327
Fixes #125178. >From af3d964d74634f0dd9f7216572c1d852b7a549dc Mon Sep 17 00:00:00 2001 From: Owen Pan <owenpi...@gmail.com> Date: Fri, 31 Jan 2025 18:32:33 -0800 Subject: [PATCH] [clang-format] Hanlde qualified type names Fixes #125178. --- clang/lib/Format/QualifierAlignmentFixer.cpp | 8 +++++++- clang/unittests/Format/QualifierFixerTest.cpp | 12 ++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) 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; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits