[PATCH] D42376: [clang-format] Ignore UnbreakableTailLength sometimes during breaking

Daniel Jasper via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 23 02:58:35 PST 2018


djasper added inline comments.


================
Comment at: lib/Format/ContinuationIndenter.cpp:1579
         (Text.startswith(Prefix = "_T(\"") && Text.endswith(Postfix = "\")"))) {
+      unsigned UnbreakableTailLength = (State.NextToken && canBreak(State))
+                                           ? 0
----------------
krasimir wrote:
> djasper wrote:
> > I think a comment might help here. Specifically, it should mention that this is required for the special case where there is an unbreakable tail only if certain other formatting decisions have been taken. The UnbreakableTailLength is an overapproximation in that case and we need to be correct here.
> > 
> > Thinking about this some more, there might actually be cases where this is still not correct as the unbreakable tail is neither 0 nor the precomputed value.
> > 
> > E.g. can we construct a case where there is a trailing comma in a braced list? Maybe this:
> > 
> > vector<string> x = {"aaaaaa",};
> > 
> > In this case, I think the comma will always be part of the string literal, but the "};" only get part of the tail if we don't wrap after the "{".
> In the `vector<string> x = {"aaaaa",};` only the comma is part of the `UnbreakableTailLength` of the string:
> ```
> M=1 C=1 T=Unknown S=0 B=0 BK=0 P=59 Name=string_literal L=100 PPK=2 FakeLParens=1/ FakeRParens=0 Text='"aaaaa"'
> M=0 C=0 T=Unknown S=0 B=0 BK=0 P=41 Name=comma L=101 PPK=2 FakeLParens= FakeRParens=1 Text=','
> M=1 C=1 T=Unknown S=1 B=0 BK=0 P=41 Name=r_brace L=181 PPK=2 FakeLParens= FakeRParens=1 Text='}'
> M=0 C=0 T=Unknown S=0 B=0 BK=0 P=23 Name=semi L=182 PPK=2 FakeLParens= FakeRParens=0 Text=';'
> 
> breakProtrudingToken: CanBreak=0, UnbreakableTailLength=1
> ```
> 
Ok. The comma works around this by forcing a break before the "}". But what about:

  vector<string> x = {"abc" /*comment*/};

The comment should be an unbreakable tail.


Repository:
  rC Clang

https://reviews.llvm.org/D42376





More information about the cfe-commits mailing list