diff options
| author | Daniel Jasper <djasper@google.com> | 2015-12-07 19:50:48 +0000 |
|---|---|---|
| committer | Daniel Jasper <djasper@google.com> | 2015-12-07 19:50:48 +0000 |
| commit | f901a57cdab931ba73ea392db3f44eee8adf2d64 (patch) | |
| tree | 1856d63255b63b55b2b7302b573ed8c1dd887a85 /clang/lib/Format | |
| parent | 5d47be186dcdbc9730bea049511d2ed82f46676d (diff) | |
| download | bcm5719-llvm-f901a57cdab931ba73ea392db3f44eee8adf2d64.tar.gz bcm5719-llvm-f901a57cdab931ba73ea392db3f44eee8adf2d64.zip | |
clang-format: Make wrapping after "./->" cheaper, even if the element
before it is not a closing parenthesis.
Otherwise, this frequently leads to "hanging" indents that users
perceive as "weird".
Before:
return !soooooooooooooome_map.insert(
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)
.second;
After:
return !soooooooooooooome_map
.insert(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)
.second;
llvm-svn: 254933
Diffstat (limited to 'clang/lib/Format')
| -rw-r--r-- | clang/lib/Format/TokenAnnotator.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index b5e7b9a0e65..b8487e10359 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -1743,10 +1743,20 @@ unsigned TokenAnnotator::splitPenalty(const AnnotatedLine &Line, return 2; if (Right.isMemberAccess()) { - if (Left.is(tok::r_paren) && Left.MatchingParen && - Left.MatchingParen->ParameterCount > 0) - return 20; // Should be smaller than breaking at a nested comma. - return 150; + // Breaking before the "./->" of a chained call/member access is reasonably + // cheap, as formatting those with one call per line is generally + // desirable. In particular, it should be cheaper to break before the call + // than it is to break inside a call's parameters, which could lead to weird + // "hanging" indents. The exception is the very last "./->" to support this + // frequent pattern: + // + // aaaaaaaa.aaaaaaaa.bbbbbbb().ccccccccccccccccccccc( + // dddddddd); + // + // which might otherwise be blown up onto many lines. Here, clang-format + // won't produce "hanging" indents anyway as there is no other trailing + // call. + return Right.LastOperator ? 150 : 40; } if (Right.is(TT_TrailingAnnotation) && |

