[llvm-branch-commits] [clang] release/19.x: [clang-format] Don't insert a space between :: and * (#105043) (PR #105773)
Tobias Hieta via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Aug 26 00:18:38 PDT 2024
https://github.com/tru updated https://github.com/llvm/llvm-project/pull/105773
>From 1241c762c165972690c4edfb82ec7421c1e64658 Mon Sep 17 00:00:00 2001
From: Owen Pan <owenpiano at gmail.com>
Date: Thu, 22 Aug 2024 20:02:48 -0700
Subject: [PATCH] [clang-format] Don't insert a space between :: and *
(#105043)
Also, don't insert a space after ::* for method pointers.
See
https://github.com/llvm/llvm-project/pull/86253#issuecomment-2298404887.
Fixes #100841.
(cherry picked from commit 714033a6bf3a81b1350f969ddd83bcd9fbb703e8)
---
clang/lib/Format/TokenAnnotator.cpp | 16 +++++----
clang/unittests/Format/FormatTest.cpp | 36 +++++++++----------
clang/unittests/Format/QualifierFixerTest.cpp | 36 +++++++++----------
3 files changed, 45 insertions(+), 43 deletions(-)
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp
index 6b9253613788c0..851f79895ac5ac 100644
--- a/clang/lib/Format/TokenAnnotator.cpp
+++ b/clang/lib/Format/TokenAnnotator.cpp
@@ -4467,10 +4467,8 @@ bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line,
}
if (Left.is(tok::colon))
return Left.isNot(TT_ObjCMethodExpr);
- if (Left.is(tok::coloncolon)) {
- return Right.is(tok::star) && Right.is(TT_PointerOrReference) &&
- Style.PointerAlignment != FormatStyle::PAS_Left;
- }
+ if (Left.is(tok::coloncolon))
+ return false;
if (Left.is(tok::less) || Right.isOneOf(tok::greater, tok::less)) {
if (Style.Language == FormatStyle::LK_TextProto ||
(Style.Language == FormatStyle::LK_Proto &&
@@ -4580,8 +4578,14 @@ bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line,
if (!BeforeLeft)
return false;
if (BeforeLeft->is(tok::coloncolon)) {
- return Left.is(tok::star) &&
- Style.PointerAlignment != FormatStyle::PAS_Right;
+ if (Left.isNot(tok::star))
+ return false;
+ assert(Style.PointerAlignment != FormatStyle::PAS_Right);
+ if (!Right.startsSequence(tok::identifier, tok::r_paren))
+ return true;
+ assert(Right.Next);
+ const auto *LParen = Right.Next->MatchingParen;
+ return !LParen || LParen->isNot(TT_FunctionTypeLParen);
}
return !BeforeLeft->isOneOf(tok::l_paren, tok::l_square);
}
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index 39fcbab3447a7b..82af149e048c94 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -3646,8 +3646,8 @@ TEST_F(FormatTest, FormatsClasses) {
" : public aaaaaaaaaaaaaaaaaaa<aaaaaaaaaaaaaaaaaaaaa,\n"
" aaaaaaaaaaaaaaaaaaaaaa> {};");
verifyFormat("template <class R, class C>\n"
- "struct Aaaaaaaaaaaaaaaaa<R (C:: *)(int) const>\n"
- " : Aaaaaaaaaaaaaaaaa<R (C:: *)(int)> {};");
+ "struct Aaaaaaaaaaaaaaaaa<R (C::*)(int) const>\n"
+ " : Aaaaaaaaaaaaaaaaa<R (C::*)(int)> {};");
verifyFormat("class ::A::B {};");
}
@@ -11141,10 +11141,10 @@ TEST_F(FormatTest, UnderstandsBinaryOperators) {
}
TEST_F(FormatTest, UnderstandsPointersToMembers) {
- verifyFormat("int A:: *x;");
- verifyFormat("int (S:: *func)(void *);");
- verifyFormat("void f() { int (S:: *func)(void *); }");
- verifyFormat("typedef bool *(Class:: *Member)() const;");
+ verifyFormat("int A::*x;");
+ verifyFormat("int (S::*func)(void *);");
+ verifyFormat("void f() { int (S::*func)(void *); }");
+ verifyFormat("typedef bool *(Class::*Member)() const;");
verifyFormat("void f() {\n"
" (a->*f)();\n"
" a->*x;\n"
@@ -11162,16 +11162,16 @@ TEST_F(FormatTest, UnderstandsPointersToMembers) {
FormatStyle Style = getLLVMStyle();
EXPECT_EQ(Style.PointerAlignment, FormatStyle::PAS_Right);
- verifyFormat("typedef bool *(Class:: *Member)() const;", Style);
- verifyFormat("void f(int A:: *p) { int A:: *v = &A::B; }", Style);
+ verifyFormat("typedef bool *(Class::*Member)() const;", Style);
+ verifyFormat("void f(int A::*p) { int A::*v = &A::B; }", Style);
Style.PointerAlignment = FormatStyle::PAS_Left;
- verifyFormat("typedef bool* (Class::* Member)() const;", Style);
+ verifyFormat("typedef bool* (Class::*Member)() const;", Style);
verifyFormat("void f(int A::* p) { int A::* v = &A::B; }", Style);
Style.PointerAlignment = FormatStyle::PAS_Middle;
- verifyFormat("typedef bool * (Class:: * Member)() const;", Style);
- verifyFormat("void f(int A:: * p) { int A:: * v = &A::B; }", Style);
+ verifyFormat("typedef bool * (Class::*Member)() const;", Style);
+ verifyFormat("void f(int A::* p) { int A::* v = &A::B; }", Style);
}
TEST_F(FormatTest, UnderstandsUnaryOperators) {
@@ -12514,7 +12514,7 @@ TEST_F(FormatTest, FormatsFunctionTypes) {
verifyFormat("int (*func)(void *);");
verifyFormat("void f() { int (*func)(void *); }");
verifyFormat("template <class CallbackClass>\n"
- "using Callback = void (CallbackClass:: *)(SomeObject *Data);");
+ "using MyCallback = void (CallbackClass::*)(SomeObject *Data);");
verifyGoogleFormat("A<void*(int*, SomeType*)>;");
verifyGoogleFormat("void* (*a)(int);");
@@ -19437,13 +19437,13 @@ TEST_F(FormatTest, AlignConsecutiveDeclarations) {
"int bbbbbbb = 0;",
Alignment);
// http://llvm.org/PR68079
- verifyFormat("using Fn = int (A:: *)();\n"
- "using RFn = int (A:: *)() &;\n"
- "using RRFn = int (A:: *)() &&;",
+ verifyFormat("using Fn = int (A::*)();\n"
+ "using RFn = int (A::*)() &;\n"
+ "using RRFn = int (A::*)() &&;",
Alignment);
- verifyFormat("using Fn = int (A:: *)();\n"
- "using RFn = int *(A:: *)() &;\n"
- "using RRFn = double (A:: *)() &&;",
+ verifyFormat("using Fn = int (A::*)();\n"
+ "using RFn = int *(A::*)() &;\n"
+ "using RRFn = double (A::*)() &&;",
Alignment);
// PAS_Right
diff --git a/clang/unittests/Format/QualifierFixerTest.cpp b/clang/unittests/Format/QualifierFixerTest.cpp
index 3a5f63e5de65b4..f9255c6e4c7088 100644
--- a/clang/unittests/Format/QualifierFixerTest.cpp
+++ b/clang/unittests/Format/QualifierFixerTest.cpp
@@ -305,7 +305,7 @@ TEST_F(QualifierFixerTest, RightQualifier) {
verifyFormat("Foo inline static const;", "Foo inline const static;", Style);
verifyFormat("Foo inline static const;", Style);
- verifyFormat("Foo<T volatile>::Bar<Type const, 5> const volatile A:: *;",
+ verifyFormat("Foo<T volatile>::Bar<Type const, 5> const volatile A::*;",
"volatile const Foo<volatile T>::Bar<const Type, 5> A::*;",
Style);
@@ -523,15 +523,14 @@ TEST_F(QualifierFixerTest, RightQualifier) {
verifyFormat("const INTPTR a;", Style);
// Pointers to members
- verifyFormat("int S:: *a;", Style);
- verifyFormat("int const S:: *a;", "const int S:: *a;", Style);
- verifyFormat("int const S:: *const a;", "const int S::* const a;", Style);
- verifyFormat("int A:: *const A:: *p1;", Style);
- verifyFormat("float (C:: *p)(int);", Style);
- verifyFormat("float (C:: *const p)(int);", Style);
- verifyFormat("float (C:: *p)(int) const;", Style);
- verifyFormat("float const (C:: *p)(int);", "const float (C::*p)(int);",
- Style);
+ verifyFormat("int S::*a;", Style);
+ verifyFormat("int const S::*a;", "const int S::*a;", Style);
+ verifyFormat("int const S::*const a;", "const int S::* const a;", Style);
+ verifyFormat("int A::*const A::*p1;", Style);
+ verifyFormat("float (C::*p)(int);", Style);
+ verifyFormat("float (C::*const p)(int);", Style);
+ verifyFormat("float (C::*p)(int) const;", Style);
+ verifyFormat("float const (C::*p)(int);", "const float (C::*p)(int);", Style);
}
TEST_F(QualifierFixerTest, LeftQualifier) {
@@ -831,15 +830,14 @@ TEST_F(QualifierFixerTest, LeftQualifier) {
verifyFormat("INTPTR const a;", Style);
// Pointers to members
- verifyFormat("int S:: *a;", Style);
- verifyFormat("const int S:: *a;", "int const S:: *a;", Style);
- verifyFormat("const int S:: *const a;", "int const S::* const a;", Style);
- verifyFormat("int A:: *const A:: *p1;", Style);
- verifyFormat("float (C:: *p)(int);", Style);
- verifyFormat("float (C:: *const p)(int);", Style);
- verifyFormat("float (C:: *p)(int) const;", Style);
- verifyFormat("const float (C:: *p)(int);", "float const (C::*p)(int);",
- Style);
+ verifyFormat("int S::*a;", Style);
+ verifyFormat("const int S::*a;", "int const S::*a;", Style);
+ verifyFormat("const int S::*const a;", "int const S::*const a;", Style);
+ verifyFormat("int A::*const A::*p1;", Style);
+ verifyFormat("float (C::*p)(int);", Style);
+ verifyFormat("float (C::*const p)(int);", Style);
+ verifyFormat("float (C::*p)(int) const;", Style);
+ verifyFormat("const float (C::*p)(int);", "float const (C::*p)(int);", Style);
}
TEST_F(QualifierFixerTest, ConstVolatileQualifiersOrder) {
More information about the llvm-branch-commits
mailing list