diff options
author | Ben Hamilton <benhamilton@google.com> | 2018-04-12 15:11:48 +0000 |
---|---|---|
committer | Ben Hamilton <benhamilton@google.com> | 2018-04-12 15:11:48 +0000 |
commit | 416348ef8323ceebfae40886ec355fb55f381e2c (patch) | |
tree | 1abd16199e48760d982ba3266b81cb436c533601 /clang/lib/Format | |
parent | 6c2f868bbd489d06b1e22bd8d1ce1e234018dbe5 (diff) | |
download | bcm5719-llvm-416348ef8323ceebfae40886ec355fb55f381e2c.tar.gz bcm5719-llvm-416348ef8323ceebfae40886ec355fb55f381e2c.zip |
[clang-format] Always indent wrapped Objective-C selector names
Summary:
Currently, indentation of Objective-C method names which are wrapped
onto the next line due to a long return type is controlled by the
style option `IndentWrappedFunctionNames`.
This diff changes the behavior so we always indent wrapped Objective-C
selector names.
NOTE: I partially reverted https://github.com/llvm-mirror/clang/commit/6159c0fbd1876c7f5f984b4830c664cc78f16e2e / rL242484, as it was causing wrapped selectors to be double-indented. Its tests in FormatTestObjC.cpp still pass.
Test Plan: Tests updated. Ran tests with:
% make -j12 FormatTests && ./tools/clang/unittests/Format/FormatTests
Reviewers: djasper, jolesiak, stephanemoore, thakis
Reviewed By: djasper
Subscribers: stephanemoore, klimek, cfe-commits
Differential Revision: https://reviews.llvm.org/D45004
llvm-svn: 329916
Diffstat (limited to 'clang/lib/Format')
-rw-r--r-- | clang/lib/Format/ContinuationIndenter.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index 167b8822a0d..75b13270325 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -26,6 +26,13 @@ namespace clang { namespace format { +// Returns true if a TT_SelectorName should be indented when wrapped, +// false otherwise. +static bool shouldIndentWrappedSelectorName(const FormatStyle &Style, + LineType LineType) { + return Style.IndentWrappedFunctionNames || LineType == LT_ObjCMethodDecl; +} + // Returns the length of everything up to the first possible line break after // the ), ], } or > matching \c Tok. static unsigned getLengthToMatchingParen(const FormatToken &Tok) { @@ -698,7 +705,7 @@ unsigned ContinuationIndenter::addTokenOnNewLine(LineState &State, State.Stack.back().AlignColons = false; } else { State.Stack.back().ColonPos = - (Style.IndentWrappedFunctionNames + (shouldIndentWrappedSelectorName(Style, State.Line->Type) ? std::max(State.Stack.back().Indent, State.FirstIndent + Style.ContinuationIndentWidth) : State.Stack.back().Indent) + @@ -897,7 +904,7 @@ unsigned ContinuationIndenter::getNewLineColumn(const LineState &State) { if (NextNonComment->is(TT_SelectorName)) { if (!State.Stack.back().ObjCSelectorNameFound) { unsigned MinIndent = State.Stack.back().Indent; - if (Style.IndentWrappedFunctionNames) + if (shouldIndentWrappedSelectorName(Style, State.Line->Type)) MinIndent = std::max(MinIndent, State.FirstIndent + Style.ContinuationIndentWidth); // If LongestObjCSelectorName is 0, we are indenting the first @@ -1000,13 +1007,8 @@ unsigned ContinuationIndenter::moveStateToNextToken(LineState &State, if (Current.isMemberAccess()) State.Stack.back().StartOfFunctionCall = !Current.NextOperator ? 0 : State.Column; - if (Current.is(TT_SelectorName)) { + if (Current.is(TT_SelectorName)) State.Stack.back().ObjCSelectorNameFound = true; - if (Style.IndentWrappedFunctionNames) { - State.Stack.back().Indent = - State.FirstIndent + Style.ContinuationIndentWidth; - } - } if (Current.is(TT_CtorInitializerColon) && Style.BreakConstructorInitializers != FormatStyle::BCIS_AfterColon) { // Indent 2 from the column, so: |