summaryrefslogtreecommitdiffstats
path: root/clang/lib/Format/Format.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Format/Format.cpp')
-rw-r--r--clang/lib/Format/Format.cpp22
1 files changed, 18 insertions, 4 deletions
diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp
index 34ed8ea07c4..fb931490dc7 100644
--- a/clang/lib/Format/Format.cpp
+++ b/clang/lib/Format/Format.cpp
@@ -672,10 +672,24 @@ private:
State.Stack.back().LastSpace = State.Column;
else if (Previous.Type == TT_InheritanceColon)
State.Stack.back().Indent = State.Column;
- else if (Previous.opensScope() && !Current.FakeLParens.empty())
- // If this function has multiple parameters or a binary expression
- // parameter, indent nested calls from the start of the first parameter.
- State.Stack.back().LastSpace = State.Column;
+ else if (Previous.opensScope()) {
+ // If a function has multiple parameters (including a single parameter
+ // that is a binary expression) or a trailing call, indented all
+ // parameters from the opening parenthesis. This avoids confusing
+ // indents like:
+ // OuterFunction(InnerFunctionCall(
+ // ParameterToInnerFunction),
+ // SecondParameterToOuterFunction);
+ bool HasMultipleParameters = !Current.FakeLParens.empty();
+ bool HasTrailingCall = false;
+ if (Previous.MatchingParen) {
+ const FormatToken *Next = Previous.MatchingParen->getNextNonComment();
+ if (Next && Next->isOneOf(tok::period, tok::arrow))
+ HasTrailingCall = true;
+ }
+ if (HasMultipleParameters || HasTrailingCall)
+ State.Stack.back().LastSpace = State.Column;
+ }
}
return moveStateToNextToken(State, DryRun);
OpenPOWER on IntegriCloud