https://github.com/llvmbot updated https://github.com/llvm/llvm-project/pull/126839
>From 82150695fb944729a7fa2e6622318ca90e5d5e95 Mon Sep 17 00:00:00 2001 From: Owen Pan <owenpi...@gmail.com> Date: Tue, 4 Feb 2025 01:33:44 -0800 Subject: [PATCH] [clang-format] Hanlde qualified type name for `QualifierAlignment` (#125327) Fixes #125178. (cherry picked from commit eb6ca1242c1035fac6a8f1edfe7925b4994d4ecf) --- clang/lib/Format/QualifierAlignmentFixer.cpp | 12 +++++++++++- clang/unittests/Format/QualifierFixerTest.cpp | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/clang/lib/Format/QualifierAlignmentFixer.cpp b/clang/lib/Format/QualifierAlignmentFixer.cpp index 21fb5074b4928..23e8b44eee15c 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,14 @@ 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)) { + for (const auto *Prev = TypeToken->Previous; + Prev && Prev->is(tok::coloncolon); Prev = Prev->Previous) { + TypeToken = Prev; + Prev = Prev->Previous; + if (!(Prev && Prev->is(tok::identifier))) + break; + TypeToken = Prev; + } const FormatToken *LastSimpleTypeSpecifier = TypeToken; while (isConfiguredQualifierOrType( LastSimpleTypeSpecifier->getPreviousNonComment(), diff --git a/clang/unittests/Format/QualifierFixerTest.cpp b/clang/unittests/Format/QualifierFixerTest.cpp index 129828b0d187a..3eae39f267c3e 100644 --- a/clang/unittests/Format/QualifierFixerTest.cpp +++ b/clang/unittests/Format/QualifierFixerTest.cpp @@ -1291,6 +1291,21 @@ 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 ::int64_t x{1};", "::int64_t constexpr x{1};", Style); + verifyFormat("constexpr std::int64_t x{123};", + "std::int64_t constexpr x{123};", Style); + 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; _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits