[PATCH] D135918: [clang-format] Fix lambda formatting in conditional

Owen Pan via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Oct 17 02:59:36 PDT 2022


owenpan added a comment.

In D135918#3857711 <https://reviews.llvm.org/D135918#3857711>, @HazardyKnusperkeks wrote:

> Fun fact, there is one instance of such a case within the clang-format code. I can't remember where (I stumbled upon this in January, and tried to fix it ever since), should that be reformatted with this patch, or with a follow up?

Perhaps with a follow-up in which we can reformat the entire directory.



================
Comment at: clang/lib/Format/ContinuationIndenter.cpp:333
     return false;
 
   return !CurrentState.NoLineBreak;
----------------
Return true if `Current` is a conditional colon preceded by a lambda `r_brace` that is followed by a pair of (possibly empty) parentheses.


================
Comment at: clang/lib/Format/ContinuationIndenter.cpp:1412-1417
   // Add special behavior to support a format commonly used for JavaScript
   // closures:
   //   SomeFunction(function() {
   //     foo();
   //     bar();
   //   }, a, b, c);
----------------
HazardyKnusperkeks wrote:
> Someone put that in on purpose, but is that only intended for java script, then we could add the language check.
> As one can see I also had to disable it for requires clauses. Because I think it is a very hard thing to disable line breaks for all the scopes.
> Someone put that in on purpose, but is that only intended for java script, then we could add the language check.

It started as a JavaScript-only behavior but was later extended to cover all languages.


================
Comment at: clang/lib/Format/ContinuationIndenter.cpp:1423
+    if (State.Stack[State.Stack.size() - 2].NestedBlockInlined && Newline &&
+        // Do not forbid line breaks for directly invoced lambdas.
+        (!Current.MatchingParen ||
----------------
HazardyKnusperkeks wrote:
> Or should we limit that to lambdas in a conditional? That would be even messier to detect.
> Or should we limit that to lambdas in a conditional?

IMO we should, and it might not be too bad if you override `NoLineBreak` in `canBreak()` instead. See line 333 above.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135918/new/

https://reviews.llvm.org/D135918



More information about the cfe-commits mailing list