-
Notifications
You must be signed in to change notification settings - Fork 10.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[clang-format] Fix anonymous reference parameter with default value #86254
Conversation
@llvm/pr-subscribers-clang-format Author: None (rayroudc) ChangesWhen enabling alignment of consecutive declarations and reference right alignment, the needed space between Problem (does not compile)
Expected:
Test command:
Full diff: https://github.com/llvm/llvm-project/pull/86254.diff 2 Files Affected:
diff --git a/clang/lib/Format/WhitespaceManager.cpp b/clang/lib/Format/WhitespaceManager.cpp
index 6577c19cdf7978..c4a7d54e5bc8ed 100644
--- a/clang/lib/Format/WhitespaceManager.cpp
+++ b/clang/lib/Format/WhitespaceManager.cpp
@@ -471,6 +471,10 @@ AlignTokenSequence(const FormatStyle &Style, unsigned Start, unsigned End,
Previous >= 0 &&
Changes[Previous].Tok->getType() == TT_PointerOrReference;
--Previous) {
+ // Don't align function default argument using return type maximum size
+ if (Changes[Previous + 1].Tok->is(tok::equal)) {
+ continue;
+ }
assert(Changes[Previous].Tok->isPointerOrReference());
if (Changes[Previous].Tok->isNot(tok::star)) {
if (ReferenceNotRightAligned)
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index a14b002c37c631..23169363542ec1 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -19056,6 +19056,9 @@ TEST_F(FormatTest, AlignConsecutiveDeclarations) {
verifyFormat("int a(int x);\n"
"double b();",
Alignment);
+ verifyFormat("int a(const Test & = Test());\n"
+ "double b();",
+ Alignment);
verifyFormat("struct Test {\n"
" Test(const Test &) = default;\n"
" ~Test() = default;\n"
@@ -19277,6 +19280,10 @@ TEST_F(FormatTest, AlignConsecutiveDeclarations) {
"int foobar;",
AlignmentLeft);
+ verifyFormat("int a(const Test& = Test());\n"
+ "double b();",
+ AlignmentLeft);
+
// PAS_Middle
FormatStyle AlignmentMiddle = Alignment;
AlignmentMiddle.PointerAlignment = FormatStyle::PAS_Middle;
|
✅ With the latest revision this PR passed the C/C++ code formatter. |
3feaef9
to
fa7abef
Compare
fa7abef
to
6fee149
Compare
✅ With the latest revision this PR passed the Python code formatter. |
a1acaee
to
9a4e613
Compare
9a4e613
to
bda7c42
Compare
@HazardyKnusperkeks, thank you for the review! |
When enabling alignment of consecutive declarations and reference right alignment, the needed space between
&
and=
is removed in the following use case.Problem (does not compile)
Expected:
Test command: