[PATCH] D33589: clang-format: consider not splitting tokens in optimization
Francois Ferrand via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 13 07:50:34 PDT 2017
Typz added inline comments.
================
Comment at: lib/Format/ContinuationIndenter.cpp:1339
+unsigned ContinuationIndenter::breakProtrudingToken(const FormatToken &Current,
+ LineState &State,
----------------
djasper wrote:
> Can you create a patch that doesn't move the code around so much? Seems unnecessary and hard to review.
Moving the code around is an unfortunate requirement for this patch: we must actually do the "reflowing" twice, to find out which solution (actually reflowing or not) gives the least penalty.
Therefore the function that reflowing must be moved out of `breakProtrudingToken()`...
All I can do is try moving the new function after `breakProtrudingToken()`, maybe Phabricator will better show the change.
================
Comment at: lib/Format/ContinuationIndenter.cpp:1446
+ // Do not count the penalty twice, it will be added afterwards
+ if (State.Column > getColumnLimit(State)) {
+ unsigned ExcessCharacters = State.Column - getColumnLimit(State);
----------------
djasper wrote:
> I believe that this is incorrect. reflowProtrudingToken counts the length of the unbreakable tail and here you just remove the penalty of the token itself. E.g. in:
>
> string s = f("aaa");
>
> the ");" is the unbreakable tail of the stringl
This behavior has not changed : before the commit, the last token was not included in the penalty [c.f. `if` at line 1338 in original code].
To make the comparison significative, the last token's penalty is included in the penalty returned by `reflowProtrudingToken()` (hence the removal of the test at line 1260); and it is removed before returning from this function, to keep the same behavior as before.
https://reviews.llvm.org/D33589
More information about the cfe-commits
mailing list