[clang] [clang-format] Don't apply severe penalty if no possible column formats (PR #76675)

2024-01-10 Thread Owen Pan via cfe-commits

https://github.com/owenca closed https://github.com/llvm/llvm-project/pull/76675
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang-format] Don't apply severe penalty if no possible column formats (PR #76675)

2024-01-09 Thread Owen Pan via cfe-commits

https://github.com/owenca approved this pull request.


https://github.com/llvm/llvm-project/pull/76675
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang-format] Don't apply severe penalty if no possible column formats (PR #76675)

2024-01-02 Thread Björn Schäpers via cfe-commits

https://github.com/HazardyKnusperkeks approved this pull request.

As far as I'm concerned it looks good. But I need a second opinion. 
@mydeveloperday @owenca @rymiel 

https://github.com/llvm/llvm-project/pull/76675
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang-format] Don't apply severe penalty if no possible column formats (PR #76675)

2024-01-02 Thread Björn Schäpers via cfe-commits

HazardyKnusperkeks wrote:

> > I think that's not the right way to fix the issue.
> > Why are the 2 lines formatted differently? It seems to me that this fixes 
> > the symptom, not the cause.
> 
> Because for the line where brackets are used it meets the condition in the 
> next `if` statement down:
> 
> https://github.com/llvm/llvm-project/blob/7e405eb722e40c79b7726201d0f76b5dab34ba0f/clang/lib/Format/FormatToken.cpp#L122-L125
> 
> ... and a penalty of zero is returned. Similar exclusion exists for 
> precomputing the column formats:
> 
> https://github.com/llvm/llvm-project/blob/7e405eb722e40c79b7726201d0f76b5dab34ba0f/clang/lib/Format/FormatToken.cpp#L189-L192
> 
> But this ultimately ends up simply as a performance optimization as they're 
> never considered later in any case.
> 
> Whereas if the braces are used instead of brackets it does not meet the _not 
> a left brace_ condition, and gets to the severe penalty return:
> 
> https://github.com/llvm/llvm-project/blob/7e405eb722e40c79b7726201d0f76b5dab34ba0f/clang/lib/Format/FormatToken.cpp#L136-L140
> 
> This is because suitable column formats are not found, as there was less than 
> 5 commas found in the list (there's other conditions dependent on style 
> configuration further up) when precomputing the column formats, and so none 
> are generated:
> 
> https://github.com/llvm/llvm-project/blob/7e405eb722e40c79b7726201d0f76b5dab34ba0f/clang/lib/Format/FormatToken.cpp#L271-L274
> 
> Seems a little odd to return severe penalty if no column formats are 
> available as opposed to having them, but none fit right now.
> 
> But I'm thinking maybe better to somehow add a condition that if the left 
> brace appears within a short lambda body that'll end up on a single line then 
> a penalty of zero is also returned. More/better targeted change.
> 
> Ultimately I believe comes down to finding a good justification to return 
> zero penalty when the braces are used inside lambda bodies. Maybe affects 
> other _short_ functions too like inlines - need to check.

Only now I see the difference between the two lines...

https://github.com/llvm/llvm-project/pull/76675
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang-format] Don't apply severe penalty if no possible column formats (PR #76675)

2024-01-01 Thread James Grant via cfe-commits

jamesg-nz wrote:

> I think that's not the right way to fix the issue.
> 
> Why are the 2 lines formatted differently? It seems to me that this fixes the 
> symptom, not the cause.

Because for the line where brackets are used it meets the condition in the next 
`if` statement down: 
https://github.com/llvm/llvm-project/blob/7e405eb722e40c79b7726201d0f76b5dab34ba0f/clang/lib/Format/FormatToken.cpp#L122

... and a penalty of zero is returned. Similar exclusion exists for 
precomputing the column formats: 
https://github.com/llvm/llvm-project/blob/7e405eb722e40c79b7726201d0f76b5dab34ba0f/clang/lib/Format/FormatToken.cpp#L191

But this ultimately ends up simply as performance optimization as they're never 
considered later in any case.

Whereas if the braces are used instead of brackets it does not meet the _not a 
left brace_ condition, and gets to the severe penalty return: 
https://github.com/llvm/llvm-project/blob/7e405eb722e40c79b7726201d0f76b5dab34ba0f/clang/lib/Format/FormatToken.cpp#L140
 . This is because suitable column formats are not found, as there was less 
than 5 commas found in the list when precomputing the column formats, and so 
none are generated: 
https://github.com/llvm/llvm-project/blob/7e405eb722e40c79b7726201d0f76b5dab34ba0f/clang/lib/Format/FormatToken.cpp#L273

Seems a little odd to return severe penalty if no column formats are available 
as opposed to having them, but none fit right now.

But I'm thinking maybe better to somehow add a condition that if the left brace 
appears within a short lambda body that'll end up on a single line then a 
penalty of zero is also returned. More/better targeted change.

Ultimately I believe comes down to finding a good justification to return zero 
penalty when the braces are used inside lambda bodies. Maybe affects other 
_short_ functions too like inlines - need to check.

https://github.com/llvm/llvm-project/pull/76675
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang-format] Don't apply severe penalty if no possible column formats (PR #76675)

2024-01-01 Thread Björn Schäpers via cfe-commits

HazardyKnusperkeks wrote:

I think that's not the right way to fix the issue.

Why are the 2 lines formatted differently? It seems to me that this fixes the 
symptom, not the cause.

https://github.com/llvm/llvm-project/pull/76675
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang-format] Don't apply severe penalty if no possible column formats (PR #76675)

2024-01-01 Thread James Grant via cfe-commits

jamesg-nz wrote:

Running debug build clang-format with `-debug` parameter against code provided 
in #56350 (and its duplicate #58469) you see `Penalty for line: 1`. So 
pretty obvious the [severe 
penalty](https://github.com/llvm/llvm-project/blob/703e83611cd8bb7174ae76ba2e301f5a5e88b905/clang/lib/Format/FormatToken.cpp#L140)
 is responsible. 

Thoughts on this change? Is the removal of the severe penalty being applied too 
broadly? ... or is it correct/OK?

https://github.com/llvm/llvm-project/pull/76675
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang-format] Don't apply severe penalty if no possible column formats (PR #76675)

2024-01-01 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang-format

Author: James Grant (jamesg-nz)


Changes

If there are possible column formats, but they weren't selected because they 
don't fit within remaining characters for the current path then applying severe 
penalty to induce column layout by selection of a different path seems fair.

But if due to style configuration or what the input code is, there are no 
possible column formats, different paths aren't going to have column layouts. 
Seems wrong to apply the severe penalty to induce column layouts if there are 
none available.

It just causes selection of sub-optimal paths, e.g. get bad formatting when 
brace initializers are used inside lambda bodies.

Fixes #56350

---
Full diff: https://github.com/llvm/llvm-project/pull/76675.diff


2 Files Affected:

- (modified) clang/lib/Format/FormatToken.cpp (+2-2) 
- (modified) clang/unittests/Format/FormatTest.cpp (+15) 


``diff
diff --git a/clang/lib/Format/FormatToken.cpp b/clang/lib/Format/FormatToken.cpp
index 7a2df8c53952f9..b791c5a26bbe3a 100644
--- a/clang/lib/Format/FormatToken.cpp
+++ b/clang/lib/Format/FormatToken.cpp
@@ -113,8 +113,8 @@ unsigned CommaSeparatedList::formatAfterToken(LineState 
,
   if (!State.NextToken || !State.NextToken->Previous)
 return 0;
 
-  if (Formats.size() == 1)
-return 0; // Handled by formatFromToken
+  if (Formats.size() <= 1)
+return 0; // Handled by formatFromToken (1) or avoid severe penalty (0).
 
   // Ensure that we start on the opening brace.
   const FormatToken *LBrace =
diff --git a/clang/unittests/Format/FormatTest.cpp 
b/clang/unittests/Format/FormatTest.cpp
index 881993ede17c3d..b7350b2fe66d9b 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -13875,6 +13875,21 @@ TEST_F(FormatTest, FormatsBracedListsInColumnLayout) {
getLLVMStyleWithColumns(35));
   verifyFormat("aa(aaa, {},\n"
"   aaa);");
+
+  // No possible column formats, don't want the optimal paths penalized.
+  verifyFormat(
+  "waarudo::unit desk = {\n"
+  ".s = \"desk\", .p = p, .b = [] { return w::r{3, 10} * w::m; }};");
+  verifyFormat("SomeType something1([](const Input ) -> Output { return "
+   "Output{1, 2}; },\n"
+   "[](const Input ) -> Output { return "
+   "Output{1, 2}; });");
+  FormatStyle NoBinPacking = getLLVMStyle();
+  NoBinPacking.BinPackParameters = false;
+  verifyFormat("waarudo::unit desk = {\n"
+   ".s = \"desk\", .p = p, .b = [] { return w::r{3, 10, 1, 1, "
+   "1, 1} * w::m; }};",
+   NoBinPacking);
 }
 
 TEST_F(FormatTest, PullTrivialFunctionDefinitionsIntoSingleLine) {

``




https://github.com/llvm/llvm-project/pull/76675
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang-format] Don't apply severe penalty if no possible column formats (PR #76675)

2024-01-01 Thread via cfe-commits

github-actions[bot] wrote:

Thank you for submitting a Pull Request (PR) to the LLVM Project!

This PR will be automatically labeled and the relevant teams will be
notified.

If you wish to, you can add reviewers by using the "Reviewers" section on this 
page.

If this is not working for you, it is probably because you do not have write
permissions for the repository. In which case you can instead tag reviewers by
name in a comment by using `@` followed by their GitHub username.

If you have received no comments on your PR for a week, you can request a review
by "ping"ing the PR by adding a comment “Ping”. The common courtesy "ping" rate
is once a week. Please remember that you are asking for valuable time from 
other developers.

If you have further questions, they may be answered by the [LLVM GitHub User 
Guide](https://llvm.org/docs/GitHub.html).

You can also ask questions in a comment on this PR, on the [LLVM 
Discord](https://discord.com/invite/xS7Z362) or on the 
[forums](https://discourse.llvm.org/).

https://github.com/llvm/llvm-project/pull/76675
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang-format] Don't apply severe penalty if no possible column formats (PR #76675)

2024-01-01 Thread James Grant via cfe-commits

https://github.com/jamesg-nz created 
https://github.com/llvm/llvm-project/pull/76675

If there are possible column formats, but they weren't selected because they 
don't fit within remaining characters for the current path then applying severe 
penalty to induce column layout by selection of a different path seems fair.

But if due to style configuration or what the input code is, there are no 
possible column formats, different paths aren't going to have column layouts. 
Seems wrong to apply the severe penalty to induce column layouts if there are 
none available.

It just causes selection of sub-optimal paths, e.g. get bad formatting when 
brace initializers are used inside lambda bodies.

Fixes #56350

>From 68f7dee10e20b4ceeaba67f1ebe6b1153647e6ff Mon Sep 17 00:00:00 2001
From: James Grant <42079499+jamesg...@users.noreply.github.com>
Date: Mon, 1 Jan 2024 21:35:11 +1300
Subject: [PATCH] [clang-format] Don't apply severe penalty if no possible
 column formats

If there are possible column formats, but they weren't selected because
they don't fit within remaining characters for the current path then
applying severe penalty to induce column layout by selection of a
different path seems fair.

But if due to style configuration or what the input code is, there are
no possible column formats, different paths aren't going to have column
layouts. Seems wrong to apply the severe penalty to induce column
layouts if there are none available.

It just causes selection of sub-optimal paths, e.g. get bad formatting
when brace initializers are used inside lambda bodies.

Fixes #56350
---
 clang/lib/Format/FormatToken.cpp  |  4 ++--
 clang/unittests/Format/FormatTest.cpp | 15 +++
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/clang/lib/Format/FormatToken.cpp b/clang/lib/Format/FormatToken.cpp
index 7a2df8c53952f9..b791c5a26bbe3a 100644
--- a/clang/lib/Format/FormatToken.cpp
+++ b/clang/lib/Format/FormatToken.cpp
@@ -113,8 +113,8 @@ unsigned CommaSeparatedList::formatAfterToken(LineState 
,
   if (!State.NextToken || !State.NextToken->Previous)
 return 0;
 
-  if (Formats.size() == 1)
-return 0; // Handled by formatFromToken
+  if (Formats.size() <= 1)
+return 0; // Handled by formatFromToken (1) or avoid severe penalty (0).
 
   // Ensure that we start on the opening brace.
   const FormatToken *LBrace =
diff --git a/clang/unittests/Format/FormatTest.cpp 
b/clang/unittests/Format/FormatTest.cpp
index 881993ede17c3d..b7350b2fe66d9b 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -13875,6 +13875,21 @@ TEST_F(FormatTest, FormatsBracedListsInColumnLayout) {
getLLVMStyleWithColumns(35));
   verifyFormat("aa(aaa, {},\n"
"   aaa);");
+
+  // No possible column formats, don't want the optimal paths penalized.
+  verifyFormat(
+  "waarudo::unit desk = {\n"
+  ".s = \"desk\", .p = p, .b = [] { return w::r{3, 10} * w::m; }};");
+  verifyFormat("SomeType something1([](const Input ) -> Output { return "
+   "Output{1, 2}; },\n"
+   "[](const Input ) -> Output { return "
+   "Output{1, 2}; });");
+  FormatStyle NoBinPacking = getLLVMStyle();
+  NoBinPacking.BinPackParameters = false;
+  verifyFormat("waarudo::unit desk = {\n"
+   ".s = \"desk\", .p = p, .b = [] { return w::r{3, 10, 1, 1, "
+   "1, 1} * w::m; }};",
+   NoBinPacking);
 }
 
 TEST_F(FormatTest, PullTrivialFunctionDefinitionsIntoSingleLine) {

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits