[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/owenca closed https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/owenca approved this pull request. https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme updated https://github.com/llvm/llvm-project/pull/74943 >From b80f8579dbc745ddfaa3d60770dd0d3e79e6c641 Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 14:31:12 -0300 Subject: [PATCH 1/9] Fixes overload operator in BreakAfterAttributes --- clang/lib/Format/ContinuationIndenter.cpp | 3 ++- clang/unittests/Format/FormatTest.cpp | 14 ++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index 9e4e939503dfe4..de3768d475e7b2 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -593,7 +593,8 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { // name. !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { + Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && + (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { return true; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 24b2fd599dc397..a1f3beed475ff3 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -26417,6 +26417,20 @@ TEST_F(FormatTest, BreakAfterAttributes) { "void g() {}", CtorDtorCode, Style); + Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; + constexpr StringRef OperatorOverloadCode( + "struct Foo {\n" + "[[maybe_unused]] void operator+();\n" + "};\n" + "[[nodiscard]] Foo& operator-(Foo&);"); + verifyFormat("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + OperatorOverloadCode, Style); + Style.BreakBeforeBraces = FormatStyle::BS_Linux; verifyFormat("struct Foo {\n" " [[deprecated]]\n" >From 67a018f8c27f547fdea3443100ec7255e7aa4f2e Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 16:05:12 -0300 Subject: [PATCH 2/9] Addresses 1, 2 and 4 comments --- clang/lib/Format/ContinuationIndenter.cpp | 2 +- clang/unittests/Format/FormatTest.cpp | 20 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index de3768d475e7b2..d05a16f87038ce 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -594,7 +594,7 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && - (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { + Current.Tok.isNot(tok::kw_operator)) { return true; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index a1f3beed475ff3..bccc3162c34367 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -26418,18 +26418,14 @@ TEST_F(FormatTest, BreakAfterAttributes) { CtorDtorCode, Style); Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; - constexpr StringRef OperatorOverloadCode( - "struct Foo {\n" - "[[maybe_unused]] void operator+();\n" - "};\n" - "[[nodiscard]] Foo& operator-(Foo&);"); - verifyFormat("struct Foo {\n" - " [[maybe_unused]]\n" - " void operator+();\n" - "};\n" - "[[nodiscard]]\n" - "Foo& operator-(Foo&);", - OperatorOverloadCode, Style); + verifyNoChange("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + Style); + Style.ReferenceAlignment = getLLVMStyle().ReferenceAlignment; Style.BreakBeforeBraces = FormatStyle::BS_Linux; verifyFormat("struct Foo {\n" >From f9b8d8cee9cf1fd313497c72e7829114a5d4b083 Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 18:46:15 -0300 Subject: [PATCH 3/9] Addresses comment 3 --- clang/lib/Format/ContinuationIndenter.cpp | 25 +-- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index d05a16f87038ce..a9ce3d20142984 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -584,20 +584,23 @@ bool ContinuationIndenter::mustBreak(const LineSta
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -26451,6 +26451,20 @@ TEST_F(FormatTest, BreakAfterAttributes) { "{\n" "}", CtorDtorCode, Style); + + Style.BreakBeforeBraces = FormatStyle::BS_Attach; + Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; + verifyFormat("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + "struct Foo {\n" + "[[maybe_unused]] void operator+();\n" + "};\n" + "[[nodiscard]] Foo &operator-(Foo&);", owenca wrote: Please split the test cases and use the single argument version of `verifyFormat`, e.g.: ```suggestion verifyFormat("struct Foo {\n" " [[maybe_unused]]\n" " void operator+();\n" "};\n" "[[nodiscard]]\n" "Foo &operator-(Foo &);", Style); Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; verifyFormat("[[nodiscard]]\n" "Foo& operator-(Foo&);", ``` https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme updated https://github.com/llvm/llvm-project/pull/74943 >From b80f8579dbc745ddfaa3d60770dd0d3e79e6c641 Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 14:31:12 -0300 Subject: [PATCH 1/8] Fixes overload operator in BreakAfterAttributes --- clang/lib/Format/ContinuationIndenter.cpp | 3 ++- clang/unittests/Format/FormatTest.cpp | 14 ++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index 9e4e939503dfe4..de3768d475e7b2 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -593,7 +593,8 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { // name. !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { + Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && + (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { return true; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 24b2fd599dc397..a1f3beed475ff3 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -26417,6 +26417,20 @@ TEST_F(FormatTest, BreakAfterAttributes) { "void g() {}", CtorDtorCode, Style); + Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; + constexpr StringRef OperatorOverloadCode( + "struct Foo {\n" + "[[maybe_unused]] void operator+();\n" + "};\n" + "[[nodiscard]] Foo& operator-(Foo&);"); + verifyFormat("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + OperatorOverloadCode, Style); + Style.BreakBeforeBraces = FormatStyle::BS_Linux; verifyFormat("struct Foo {\n" " [[deprecated]]\n" >From 67a018f8c27f547fdea3443100ec7255e7aa4f2e Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 16:05:12 -0300 Subject: [PATCH 2/8] Addresses 1, 2 and 4 comments --- clang/lib/Format/ContinuationIndenter.cpp | 2 +- clang/unittests/Format/FormatTest.cpp | 20 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index de3768d475e7b2..d05a16f87038ce 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -594,7 +594,7 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && - (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { + Current.Tok.isNot(tok::kw_operator)) { return true; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index a1f3beed475ff3..bccc3162c34367 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -26418,18 +26418,14 @@ TEST_F(FormatTest, BreakAfterAttributes) { CtorDtorCode, Style); Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; - constexpr StringRef OperatorOverloadCode( - "struct Foo {\n" - "[[maybe_unused]] void operator+();\n" - "};\n" - "[[nodiscard]] Foo& operator-(Foo&);"); - verifyFormat("struct Foo {\n" - " [[maybe_unused]]\n" - " void operator+();\n" - "};\n" - "[[nodiscard]]\n" - "Foo& operator-(Foo&);", - OperatorOverloadCode, Style); + verifyNoChange("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + Style); + Style.ReferenceAlignment = getLLVMStyle().ReferenceAlignment; Style.BreakBeforeBraces = FormatStyle::BS_Linux; verifyFormat("struct Foo {\n" >From f9b8d8cee9cf1fd313497c72e7829114a5d4b083 Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 18:46:15 -0300 Subject: [PATCH 3/8] Addresses comment 3 --- clang/lib/Format/ContinuationIndenter.cpp | 25 +-- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index d05a16f87038ce..a9ce3d20142984 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -584,20 +584,23 @@ bool ContinuationIndenter::mustBreak(const LineSta
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -583,20 +583,26 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { return true; } - // If the return type spans multiple lines, wrap before the function name. - if (((Current.is(TT_FunctionDeclarationName) && -!State.Line->ReturnTypeWrapped && -// Don't break before a C# function when no break after return type. -(!Style.isCSharp() || - Style.AlwaysBreakAfterReturnType != FormatStyle::RTBS_None) && -// Don't always break between a JavaScript `function` and the function -// name. -!Style.isJavaScript()) || - (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && owenca wrote: Simply removing line 595 above seems to work: ``` if (Current.is(TT_FunctionDeclarationName) && !State.Line->ReturnTypeWrapped && // Don't break before a C# function when no break after return type. (!Style.isCSharp() || Style.AlwaysBreakAfterReturnType != FormatStyle::RTBS_None) && // Don't always break between a JavaScript `function` and the function // name. !Style.isJavaScript() && Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { return true; } ``` https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
XDeme wrote: Is it not a regression, I didn't verify the path of clang-format correctly, I thought I was using clang 16.0.6, but it was using the one I built https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
HazardyKnusperkeks wrote: I got a mail, but it seems you have deleted the comment? Is it a regression? Could you bisect it? And you don't need (for me) to comment, when you addressed a comment, just click on resolved. Would reduce the amount of mails in my inbox. ;) https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme edited https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme edited https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme edited https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme edited https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme edited https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme edited https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme edited https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme edited https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme edited https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
XDeme wrote: One thing that I checked only now, is that with clang-format 16.0.6 and 17.0.6, it formats correctly. But with `clang-format version 18.0.0 (https://github.com/llvm/llvm-project.git a6c02edd6eac476523b5c73f29619a7a9e054872)` is doens't anymore, so this is a regression introduced recently. https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -583,20 +583,31 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { return true; } - // If the return type spans multiple lines, wrap before the function name. - if (((Current.is(TT_FunctionDeclarationName) && -!State.Line->ReturnTypeWrapped && -// Don't break before a C# function when no break after return type. -(!Style.isCSharp() || - Style.AlwaysBreakAfterReturnType != FormatStyle::RTBS_None) && -// Don't always break between a JavaScript `function` and the function -// name. -!Style.isJavaScript()) || - (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { + const auto WrapBeforeName = [&]() { XDeme wrote: Fixed https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -26465,6 +26451,21 @@ TEST_F(FormatTest, BreakAfterAttributes) { "{\n" "}", CtorDtorCode, Style); + + Style.BreakBeforeBraces = FormatStyle::BS_Attach; + Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; + verifyFormat("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + XDeme wrote: Fixed https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -583,21 +583,31 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { return true; } - // If the return type spans multiple lines, wrap before the function name. - if (((Current.is(TT_FunctionDeclarationName) && -!State.Line->ReturnTypeWrapped && -// Don't break before a C# function when no break after return type. -(!Style.isCSharp() || - Style.AlwaysBreakAfterReturnType != FormatStyle::RTBS_None) && -// Don't always break between a JavaScript `function` and the function -// name. -!Style.isJavaScript()) || - (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && - (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { + const auto WrapBeforeName = [&]() { +// If the return type spans multiple lines, wrap before the function name. +if (Current.isNot(TT_FunctionDeclarationName) || +State.Line->ReturnTypeWrapped) { + return false; +} +if (Previous.is(tok::kw_template) || Current.is(tok::kw_operator)) + return false; +if (!CurrentState.BreakBeforeParameter) + return false; +return true; XDeme wrote: Fixed https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme updated https://github.com/llvm/llvm-project/pull/74943 >From b80f8579dbc745ddfaa3d60770dd0d3e79e6c641 Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 14:31:12 -0300 Subject: [PATCH 1/7] Fixes overload operator in BreakAfterAttributes --- clang/lib/Format/ContinuationIndenter.cpp | 3 ++- clang/unittests/Format/FormatTest.cpp | 14 ++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index 9e4e939503dfe4..de3768d475e7b2 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -593,7 +593,8 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { // name. !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { + Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && + (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { return true; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 24b2fd599dc397..a1f3beed475ff3 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -26417,6 +26417,20 @@ TEST_F(FormatTest, BreakAfterAttributes) { "void g() {}", CtorDtorCode, Style); + Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; + constexpr StringRef OperatorOverloadCode( + "struct Foo {\n" + "[[maybe_unused]] void operator+();\n" + "};\n" + "[[nodiscard]] Foo& operator-(Foo&);"); + verifyFormat("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + OperatorOverloadCode, Style); + Style.BreakBeforeBraces = FormatStyle::BS_Linux; verifyFormat("struct Foo {\n" " [[deprecated]]\n" >From 67a018f8c27f547fdea3443100ec7255e7aa4f2e Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 16:05:12 -0300 Subject: [PATCH 2/7] Addresses 1, 2 and 4 comments --- clang/lib/Format/ContinuationIndenter.cpp | 2 +- clang/unittests/Format/FormatTest.cpp | 20 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index de3768d475e7b2..d05a16f87038ce 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -594,7 +594,7 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && - (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { + Current.Tok.isNot(tok::kw_operator)) { return true; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index a1f3beed475ff3..bccc3162c34367 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -26418,18 +26418,14 @@ TEST_F(FormatTest, BreakAfterAttributes) { CtorDtorCode, Style); Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; - constexpr StringRef OperatorOverloadCode( - "struct Foo {\n" - "[[maybe_unused]] void operator+();\n" - "};\n" - "[[nodiscard]] Foo& operator-(Foo&);"); - verifyFormat("struct Foo {\n" - " [[maybe_unused]]\n" - " void operator+();\n" - "};\n" - "[[nodiscard]]\n" - "Foo& operator-(Foo&);", - OperatorOverloadCode, Style); + verifyNoChange("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + Style); + Style.ReferenceAlignment = getLLVMStyle().ReferenceAlignment; Style.BreakBeforeBraces = FormatStyle::BS_Linux; verifyFormat("struct Foo {\n" >From f9b8d8cee9cf1fd313497c72e7829114a5d4b083 Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 18:46:15 -0300 Subject: [PATCH 3/7] Addresses comment 3 --- clang/lib/Format/ContinuationIndenter.cpp | 25 +-- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index d05a16f87038ce..a9ce3d20142984 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -584,20 +584,23 @@ bool ContinuationIndenter::mustBreak(const LineSta
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme edited https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -583,20 +583,31 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { return true; } - // If the return type spans multiple lines, wrap before the function name. - if (((Current.is(TT_FunctionDeclarationName) && -!State.Line->ReturnTypeWrapped && -// Don't break before a C# function when no break after return type. -(!Style.isCSharp() || - Style.AlwaysBreakAfterReturnType != FormatStyle::RTBS_None) && -// Don't always break between a JavaScript `function` and the function -// name. -!Style.isJavaScript()) || - (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { + const auto WrapBeforeName = [&]() { XDeme wrote: The original condition could be rewritten like this: ```cpp const auto WrapBeforeName = [&] { if(Previous.is(tok::kw_template) || !CurrentState.BreakBeforeParameter) return false; if((Current.isNot(tok::kw_operator) || Previous.is(tok::coloncolon)) && (Current.isNot(TT_FunctionDeclarationName) || State.Line->ReturnTypeWrapped)) return false; // Don't break before a C# function when no break after return type. return (!Style.isCSharp() || Style.AlwaysBreakAfterReturnType != FormatStyle::RTBS_None) && // Don't always break between a JavaScript `function` and the // function name. !Style.isJavaScript(); }; ``` The problem is that `Current.isNot(tok::kw_operator)` is returning false and then the last check will return true, forcing the return type of a operator overload to wrap. We could fix this by adding a `Curret.is(tok::kw_operator) return false` before that line like this: ```cpp const auto WrapBeforeName = [&] { if(Previous.is(tok::kw_template) || !CurrentState.BreakBeforeParameter) return false; if(Current.is(tok::kw_operator)) return false; if((Current.isNot(tok::kw_operator) || Previous.is(tok::coloncolon)) && (Current.isNot(TT_FunctionDeclarationName) || State.Line->ReturnTypeWrapped)) return false; return (!Style.isCSharp() || Style.AlwaysBreakAfterReturnType != FormatStyle::RTBS_None) && // Don't always break between a JavaScript `function` and the // function name. !Style.isJavaScript(); }; ``` I am not sure what the original conditional was exactly checking for, but my change didn't break any test. And for the `ReferenceAlignment: Left` with `BreakAfterAttributes: Always` not working on non-member operator overload, it fixed by just changing this condition. https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -583,21 +583,31 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { return true; } - // If the return type spans multiple lines, wrap before the function name. - if (((Current.is(TT_FunctionDeclarationName) && -!State.Line->ReturnTypeWrapped && -// Don't break before a C# function when no break after return type. -(!Style.isCSharp() || - Style.AlwaysBreakAfterReturnType != FormatStyle::RTBS_None) && -// Don't always break between a JavaScript `function` and the function -// name. -!Style.isJavaScript()) || - (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && - (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { + const auto WrapBeforeName = [&]() { +// If the return type spans multiple lines, wrap before the function name. +if (Current.isNot(TT_FunctionDeclarationName) || +State.Line->ReturnTypeWrapped) { + return false; +} +if (Previous.is(tok::kw_template) || Current.is(tok::kw_operator)) + return false; +if (!CurrentState.BreakBeforeParameter) + return false; +return true; HazardyKnusperkeks wrote: ```suggestion // Don't break before a C# function when no break after return type. return (!Style.isCSharp() || Style.AlwaysBreakAfterReturnType != FormatStyle::RTBS_None) && // Don't always break between a JavaScript `function` and the function // name. !Style.isJavaScript(); ``` Don't call the lambda twice. https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -583,20 +583,31 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { return true; } - // If the return type spans multiple lines, wrap before the function name. - if (((Current.is(TT_FunctionDeclarationName) && -!State.Line->ReturnTypeWrapped && -// Don't break before a C# function when no break after return type. -(!Style.isCSharp() || - Style.AlwaysBreakAfterReturnType != FormatStyle::RTBS_None) && -// Don't always break between a JavaScript `function` and the function -// name. -!Style.isJavaScript()) || - (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { + const auto WrapBeforeName = [&]() { HazardyKnusperkeks wrote: ```suggestion const auto WrapBeforeName = [&] { ``` I think LLVM style is to omit the empty parenthesis. https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -26465,6 +26451,21 @@ TEST_F(FormatTest, BreakAfterAttributes) { "{\n" "}", CtorDtorCode, Style); + + Style.BreakBeforeBraces = FormatStyle::BS_Attach; + Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; + verifyFormat("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + HazardyKnusperkeks wrote: Remove the blank line. https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -583,20 +583,31 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { return true; } - // If the return type spans multiple lines, wrap before the function name. - if (((Current.is(TT_FunctionDeclarationName) && -!State.Line->ReturnTypeWrapped && -// Don't break before a C# function when no break after return type. -(!Style.isCSharp() || - Style.AlwaysBreakAfterReturnType != FormatStyle::RTBS_None) && -// Don't always break between a JavaScript `function` and the function -// name. -!Style.isJavaScript()) || - (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { + const auto WrapBeforeName = [&]() { HazardyKnusperkeks wrote: Okay as far as I can see the conditions are transformed correctly, thanks for that. But there is no addition from you, or am I missing something? Is the problem already fixed? https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme edited https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme updated https://github.com/llvm/llvm-project/pull/74943 >From b80f8579dbc745ddfaa3d60770dd0d3e79e6c641 Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 14:31:12 -0300 Subject: [PATCH 1/6] Fixes overload operator in BreakAfterAttributes --- clang/lib/Format/ContinuationIndenter.cpp | 3 ++- clang/unittests/Format/FormatTest.cpp | 14 ++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index 9e4e939503dfe..de3768d475e7b 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -593,7 +593,8 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { // name. !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { + Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && + (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { return true; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 24b2fd599dc39..a1f3beed475ff 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -26417,6 +26417,20 @@ TEST_F(FormatTest, BreakAfterAttributes) { "void g() {}", CtorDtorCode, Style); + Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; + constexpr StringRef OperatorOverloadCode( + "struct Foo {\n" + "[[maybe_unused]] void operator+();\n" + "};\n" + "[[nodiscard]] Foo& operator-(Foo&);"); + verifyFormat("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + OperatorOverloadCode, Style); + Style.BreakBeforeBraces = FormatStyle::BS_Linux; verifyFormat("struct Foo {\n" " [[deprecated]]\n" >From 67a018f8c27f547fdea3443100ec7255e7aa4f2e Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 16:05:12 -0300 Subject: [PATCH 2/6] Addresses 1, 2 and 4 comments --- clang/lib/Format/ContinuationIndenter.cpp | 2 +- clang/unittests/Format/FormatTest.cpp | 20 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index de3768d475e7b..d05a16f87038c 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -594,7 +594,7 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && - (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { + Current.Tok.isNot(tok::kw_operator)) { return true; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index a1f3beed475ff..bccc3162c3436 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -26418,18 +26418,14 @@ TEST_F(FormatTest, BreakAfterAttributes) { CtorDtorCode, Style); Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; - constexpr StringRef OperatorOverloadCode( - "struct Foo {\n" - "[[maybe_unused]] void operator+();\n" - "};\n" - "[[nodiscard]] Foo& operator-(Foo&);"); - verifyFormat("struct Foo {\n" - " [[maybe_unused]]\n" - " void operator+();\n" - "};\n" - "[[nodiscard]]\n" - "Foo& operator-(Foo&);", - OperatorOverloadCode, Style); + verifyNoChange("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + Style); + Style.ReferenceAlignment = getLLVMStyle().ReferenceAlignment; Style.BreakBeforeBraces = FormatStyle::BS_Linux; verifyFormat("struct Foo {\n" >From f9b8d8cee9cf1fd313497c72e7829114a5d4b083 Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 18:46:15 -0300 Subject: [PATCH 3/6] Addresses comment 3 --- clang/lib/Format/ContinuationIndenter.cpp | 25 +-- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index d05a16f87038c..a9ce3d2014298 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -584,20 +584,23 @@ bool ContinuationIndenter::mustBreak(const LineState &State
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme updated https://github.com/llvm/llvm-project/pull/74943 >From b80f8579dbc745ddfaa3d60770dd0d3e79e6c641 Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 14:31:12 -0300 Subject: [PATCH 1/5] Fixes overload operator in BreakAfterAttributes --- clang/lib/Format/ContinuationIndenter.cpp | 3 ++- clang/unittests/Format/FormatTest.cpp | 14 ++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index 9e4e939503dfe4..de3768d475e7b2 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -593,7 +593,8 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { // name. !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { + Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && + (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { return true; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 24b2fd599dc397..a1f3beed475ff3 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -26417,6 +26417,20 @@ TEST_F(FormatTest, BreakAfterAttributes) { "void g() {}", CtorDtorCode, Style); + Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; + constexpr StringRef OperatorOverloadCode( + "struct Foo {\n" + "[[maybe_unused]] void operator+();\n" + "};\n" + "[[nodiscard]] Foo& operator-(Foo&);"); + verifyFormat("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + OperatorOverloadCode, Style); + Style.BreakBeforeBraces = FormatStyle::BS_Linux; verifyFormat("struct Foo {\n" " [[deprecated]]\n" >From 67a018f8c27f547fdea3443100ec7255e7aa4f2e Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 16:05:12 -0300 Subject: [PATCH 2/5] Addresses 1, 2 and 4 comments --- clang/lib/Format/ContinuationIndenter.cpp | 2 +- clang/unittests/Format/FormatTest.cpp | 20 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index de3768d475e7b2..d05a16f87038ce 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -594,7 +594,7 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && - (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { + Current.Tok.isNot(tok::kw_operator)) { return true; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index a1f3beed475ff3..bccc3162c34367 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -26418,18 +26418,14 @@ TEST_F(FormatTest, BreakAfterAttributes) { CtorDtorCode, Style); Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; - constexpr StringRef OperatorOverloadCode( - "struct Foo {\n" - "[[maybe_unused]] void operator+();\n" - "};\n" - "[[nodiscard]] Foo& operator-(Foo&);"); - verifyFormat("struct Foo {\n" - " [[maybe_unused]]\n" - " void operator+();\n" - "};\n" - "[[nodiscard]]\n" - "Foo& operator-(Foo&);", - OperatorOverloadCode, Style); + verifyNoChange("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + Style); + Style.ReferenceAlignment = getLLVMStyle().ReferenceAlignment; Style.BreakBeforeBraces = FormatStyle::BS_Linux; verifyFormat("struct Foo {\n" >From f9b8d8cee9cf1fd313497c72e7829114a5d4b083 Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 18:46:15 -0300 Subject: [PATCH 3/5] Addresses comment 3 --- clang/lib/Format/ContinuationIndenter.cpp | 25 +-- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index d05a16f87038ce..a9ce3d20142984 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -584,20 +584,23 @@ bool ContinuationIndenter::mustBreak(const LineSta
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme edited https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -593,7 +593,8 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { // name. !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { + Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && XDeme wrote: I tried to simplify the checks. https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme edited https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -26417,6 +26417,20 @@ TEST_F(FormatTest, BreakAfterAttributes) { "void g() {}", CtorDtorCode, Style); + Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; XDeme wrote: Fixed, Moved test to the bottom https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme updated https://github.com/llvm/llvm-project/pull/74943 >From b80f8579dbc745ddfaa3d60770dd0d3e79e6c641 Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 14:31:12 -0300 Subject: [PATCH 1/4] Fixes overload operator in BreakAfterAttributes --- clang/lib/Format/ContinuationIndenter.cpp | 3 ++- clang/unittests/Format/FormatTest.cpp | 14 ++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index 9e4e939503dfe4..de3768d475e7b2 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -593,7 +593,8 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { // name. !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { + Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && + (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { return true; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 24b2fd599dc397..a1f3beed475ff3 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -26417,6 +26417,20 @@ TEST_F(FormatTest, BreakAfterAttributes) { "void g() {}", CtorDtorCode, Style); + Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; + constexpr StringRef OperatorOverloadCode( + "struct Foo {\n" + "[[maybe_unused]] void operator+();\n" + "};\n" + "[[nodiscard]] Foo& operator-(Foo&);"); + verifyFormat("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + OperatorOverloadCode, Style); + Style.BreakBeforeBraces = FormatStyle::BS_Linux; verifyFormat("struct Foo {\n" " [[deprecated]]\n" >From 67a018f8c27f547fdea3443100ec7255e7aa4f2e Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 16:05:12 -0300 Subject: [PATCH 2/4] Addresses 1, 2 and 4 comments --- clang/lib/Format/ContinuationIndenter.cpp | 2 +- clang/unittests/Format/FormatTest.cpp | 20 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index de3768d475e7b2..d05a16f87038ce 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -594,7 +594,7 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && - (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { + Current.Tok.isNot(tok::kw_operator)) { return true; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index a1f3beed475ff3..bccc3162c34367 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -26418,18 +26418,14 @@ TEST_F(FormatTest, BreakAfterAttributes) { CtorDtorCode, Style); Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; - constexpr StringRef OperatorOverloadCode( - "struct Foo {\n" - "[[maybe_unused]] void operator+();\n" - "};\n" - "[[nodiscard]] Foo& operator-(Foo&);"); - verifyFormat("struct Foo {\n" - " [[maybe_unused]]\n" - " void operator+();\n" - "};\n" - "[[nodiscard]]\n" - "Foo& operator-(Foo&);", - OperatorOverloadCode, Style); + verifyNoChange("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + Style); + Style.ReferenceAlignment = getLLVMStyle().ReferenceAlignment; Style.BreakBeforeBraces = FormatStyle::BS_Linux; verifyFormat("struct Foo {\n" >From f9b8d8cee9cf1fd313497c72e7829114a5d4b083 Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 18:46:15 -0300 Subject: [PATCH 3/4] Addresses comment 3 --- clang/lib/Format/ContinuationIndenter.cpp | 25 +-- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index d05a16f87038ce..a9ce3d20142984 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -584,20 +584,23 @@ bool ContinuationIndenter::mustBreak(const LineSta
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme deleted https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -26417,6 +26417,20 @@ TEST_F(FormatTest, BreakAfterAttributes) { "void g() {}", CtorDtorCode, Style); + Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; + constexpr StringRef OperatorOverloadCode( XDeme wrote: Fixed https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -593,7 +593,8 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { // name. !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { + Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && + (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { XDeme wrote: Fixed https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme deleted https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme updated https://github.com/llvm/llvm-project/pull/74943 >From b80f8579dbc745ddfaa3d60770dd0d3e79e6c641 Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 14:31:12 -0300 Subject: [PATCH 1/3] Fixes overload operator in BreakAfterAttributes --- clang/lib/Format/ContinuationIndenter.cpp | 3 ++- clang/unittests/Format/FormatTest.cpp | 14 ++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index 9e4e939503dfe4..de3768d475e7b2 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -593,7 +593,8 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { // name. !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { + Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && + (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { return true; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 24b2fd599dc397..a1f3beed475ff3 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -26417,6 +26417,20 @@ TEST_F(FormatTest, BreakAfterAttributes) { "void g() {}", CtorDtorCode, Style); + Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; + constexpr StringRef OperatorOverloadCode( + "struct Foo {\n" + "[[maybe_unused]] void operator+();\n" + "};\n" + "[[nodiscard]] Foo& operator-(Foo&);"); + verifyFormat("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + OperatorOverloadCode, Style); + Style.BreakBeforeBraces = FormatStyle::BS_Linux; verifyFormat("struct Foo {\n" " [[deprecated]]\n" >From 67a018f8c27f547fdea3443100ec7255e7aa4f2e Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 16:05:12 -0300 Subject: [PATCH 2/3] Addresses 1, 2 and 4 comments --- clang/lib/Format/ContinuationIndenter.cpp | 2 +- clang/unittests/Format/FormatTest.cpp | 20 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index de3768d475e7b2..d05a16f87038ce 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -594,7 +594,7 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && - (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { + Current.Tok.isNot(tok::kw_operator)) { return true; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index a1f3beed475ff3..bccc3162c34367 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -26418,18 +26418,14 @@ TEST_F(FormatTest, BreakAfterAttributes) { CtorDtorCode, Style); Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; - constexpr StringRef OperatorOverloadCode( - "struct Foo {\n" - "[[maybe_unused]] void operator+();\n" - "};\n" - "[[nodiscard]] Foo& operator-(Foo&);"); - verifyFormat("struct Foo {\n" - " [[maybe_unused]]\n" - " void operator+();\n" - "};\n" - "[[nodiscard]]\n" - "Foo& operator-(Foo&);", - OperatorOverloadCode, Style); + verifyNoChange("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + Style); + Style.ReferenceAlignment = getLLVMStyle().ReferenceAlignment; Style.BreakBeforeBraces = FormatStyle::BS_Linux; verifyFormat("struct Foo {\n" >From f9b8d8cee9cf1fd313497c72e7829114a5d4b083 Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 18:46:15 -0300 Subject: [PATCH 3/3] Addresses comment 3 --- clang/lib/Format/ContinuationIndenter.cpp | 25 +-- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index d05a16f87038ce..a9ce3d20142984 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -584,20 +584,23 @@ bool ContinuationIndenter::mustBreak(const LineSta
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme deleted https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -26417,6 +26417,20 @@ TEST_F(FormatTest, BreakAfterAttributes) { "void g() {}", CtorDtorCode, Style); + Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; XDeme wrote: Changed verifyFormat -> verifyNoChange, to place the expected output only. Restored value with `getLLVMStyle().ReferenceAlignment`, if this is not ok, I can substitute with `FormatStyle::ReferenceAlignmentStyle::RAS_Pointer` https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme updated https://github.com/llvm/llvm-project/pull/74943 >From b80f8579dbc745ddfaa3d60770dd0d3e79e6c641 Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 14:31:12 -0300 Subject: [PATCH 1/2] Fixes overload operator in BreakAfterAttributes --- clang/lib/Format/ContinuationIndenter.cpp | 3 ++- clang/unittests/Format/FormatTest.cpp | 14 ++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index 9e4e939503dfe4..de3768d475e7b2 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -593,7 +593,8 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { // name. !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { + Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && + (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { return true; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 24b2fd599dc397..a1f3beed475ff3 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -26417,6 +26417,20 @@ TEST_F(FormatTest, BreakAfterAttributes) { "void g() {}", CtorDtorCode, Style); + Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; + constexpr StringRef OperatorOverloadCode( + "struct Foo {\n" + "[[maybe_unused]] void operator+();\n" + "};\n" + "[[nodiscard]] Foo& operator-(Foo&);"); + verifyFormat("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + OperatorOverloadCode, Style); + Style.BreakBeforeBraces = FormatStyle::BS_Linux; verifyFormat("struct Foo {\n" " [[deprecated]]\n" >From 67a018f8c27f547fdea3443100ec7255e7aa4f2e Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 16:05:12 -0300 Subject: [PATCH 2/2] Addresses 1, 2 and 4 comments --- clang/lib/Format/ContinuationIndenter.cpp | 2 +- clang/unittests/Format/FormatTest.cpp | 20 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index de3768d475e7b2..d05a16f87038ce 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -594,7 +594,7 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && - (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { + Current.Tok.isNot(tok::kw_operator)) { return true; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index a1f3beed475ff3..bccc3162c34367 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -26418,18 +26418,14 @@ TEST_F(FormatTest, BreakAfterAttributes) { CtorDtorCode, Style); Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; - constexpr StringRef OperatorOverloadCode( - "struct Foo {\n" - "[[maybe_unused]] void operator+();\n" - "};\n" - "[[nodiscard]] Foo& operator-(Foo&);"); - verifyFormat("struct Foo {\n" - " [[maybe_unused]]\n" - " void operator+();\n" - "};\n" - "[[nodiscard]]\n" - "Foo& operator-(Foo&);", - OperatorOverloadCode, Style); + verifyNoChange("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + Style); + Style.ReferenceAlignment = getLLVMStyle().ReferenceAlignment; Style.BreakBeforeBraces = FormatStyle::BS_Linux; verifyFormat("struct Foo {\n" ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -26417,6 +26417,20 @@ TEST_F(FormatTest, BreakAfterAttributes) { "void g() {}", CtorDtorCode, Style); + Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; XDeme wrote: To restore the value, is it ok if I do it like this: `Style.ReferenceAlignment = getLLVMStyle().ReferenceAlignment;`? https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -593,7 +593,8 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { // name. !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { + Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && + (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { XDeme wrote: I am not sure if affects other languages, so put it there. I will remove it https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -593,7 +593,8 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { // name. !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { + Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && HazardyKnusperkeks wrote: Not your fault, but I'm not trying to read this condition. Can you make it more readable? We typically use a lambda and early `return false`. https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -26417,6 +26417,20 @@ TEST_F(FormatTest, BreakAfterAttributes) { "void g() {}", CtorDtorCode, Style); + Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; + constexpr StringRef OperatorOverloadCode( HazardyKnusperkeks wrote: Don't put the code into a variable, you are only using it once. https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -593,7 +593,8 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { // name. !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { + Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && + (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { HazardyKnusperkeks wrote: Two things, you don't need the parenthesis, you are already in a conjunction. Does it affect the other languages, that you now add a check for `isCpp()`? https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
@@ -26417,6 +26417,20 @@ TEST_F(FormatTest, BreakAfterAttributes) { "void g() {}", CtorDtorCode, Style); + Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; HazardyKnusperkeks wrote: You are changing the style for all following tests. (Although it may not have an effect on them.) I don't think you should do that. Put your test at the bottom, or restore the value. https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
llvmbot wrote: @llvm/pr-subscribers-clang-format Author: None (XDeme) Changes Fixes llvm/llvm-project#74901 --- Full diff: https://github.com/llvm/llvm-project/pull/74943.diff 2 Files Affected: - (modified) clang/lib/Format/ContinuationIndenter.cpp (+2-1) - (modified) clang/unittests/Format/FormatTest.cpp (+14) ``diff diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index 9e4e939503dfe4..de3768d475e7b2 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -593,7 +593,8 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { // name. !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { + Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && + (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { return true; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 24b2fd599dc397..a1f3beed475ff3 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -26417,6 +26417,20 @@ TEST_F(FormatTest, BreakAfterAttributes) { "void g() {}", CtorDtorCode, Style); + Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; + constexpr StringRef OperatorOverloadCode( + "struct Foo {\n" + "[[maybe_unused]] void operator+();\n" + "};\n" + "[[nodiscard]] Foo& operator-(Foo&);"); + verifyFormat("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + OperatorOverloadCode, Style); + Style.BreakBeforeBraces = FormatStyle::BS_Linux; verifyFormat("struct Foo {\n" " [[deprecated]]\n" `` https://github.com/llvm/llvm-project/pull/74943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-format] Fix operator overload inconsistency in `BreakAfterAttributes: Always` (PR #74943)
https://github.com/XDeme created https://github.com/llvm/llvm-project/pull/74943 Fixes llvm/llvm-project#74901 >From b80f8579dbc745ddfaa3d60770dd0d3e79e6c641 Mon Sep 17 00:00:00 2001 From: XDeme Date: Sat, 9 Dec 2023 14:31:12 -0300 Subject: [PATCH] Fixes overload operator in BreakAfterAttributes --- clang/lib/Format/ContinuationIndenter.cpp | 3 ++- clang/unittests/Format/FormatTest.cpp | 14 ++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index 9e4e939503dfe4..de3768d475e7b2 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -593,7 +593,8 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { // name. !Style.isJavaScript()) || (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { + Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter && + (Style.isCpp() && Current.Tok.isNot(tok::kw_operator))) { return true; } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 24b2fd599dc397..a1f3beed475ff3 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -26417,6 +26417,20 @@ TEST_F(FormatTest, BreakAfterAttributes) { "void g() {}", CtorDtorCode, Style); + Style.ReferenceAlignment = FormatStyle::ReferenceAlignmentStyle::RAS_Left; + constexpr StringRef OperatorOverloadCode( + "struct Foo {\n" + "[[maybe_unused]] void operator+();\n" + "};\n" + "[[nodiscard]] Foo& operator-(Foo&);"); + verifyFormat("struct Foo {\n" + " [[maybe_unused]]\n" + " void operator+();\n" + "};\n" + "[[nodiscard]]\n" + "Foo& operator-(Foo&);", + OperatorOverloadCode, Style); + Style.BreakBeforeBraces = FormatStyle::BS_Linux; verifyFormat("struct Foo {\n" " [[deprecated]]\n" ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits