r185930 - Avoid confusing indentations for chained function calls.
Daniel Jasper
djasper at google.com
Tue Jul 9 04:57:27 PDT 2013
Author: djasper
Date: Tue Jul 9 06:57:27 2013
New Revision: 185930
URL: http://llvm.org/viewvc/llvm-project?rev=185930&view=rev
Log:
Avoid confusing indentations for chained function calls.
Basically treat a function with a trailing call similar to a function
with multiple parameters.
Before:
aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(
aaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaa))
.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa();
After:
aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(
aaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaa))
.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa();
Also fix typo.
Modified:
cfe/trunk/lib/Format/Format.cpp
cfe/trunk/unittests/Format/FormatTest.cpp
Modified: cfe/trunk/lib/Format/Format.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=185930&r1=185929&r2=185930&view=diff
==============================================================================
--- cfe/trunk/lib/Format/Format.cpp (original)
+++ cfe/trunk/lib/Format/Format.cpp Tue Jul 9 06:57:27 2013
@@ -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);
Modified: cfe/trunk/unittests/Format/FormatTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=185930&r1=185929&r2=185930&view=diff
==============================================================================
--- cfe/trunk/unittests/Format/FormatTest.cpp (original)
+++ cfe/trunk/unittests/Format/FormatTest.cpp Tue Jul 9 06:57:27 2013
@@ -3051,6 +3051,15 @@ TEST_F(FormatTest, WrapsAtFunctionCallsI
" aaaaaaaaaaaaaaaaaaa,\n"
" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);",
NoBinPacking);
+
+ // If there is a subsequent call, change to hanging indentation.
+ verifyFormat(
+ "aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
+ " aaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaa))\n"
+ " .aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa();");
+ verifyFormat(
+ "aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
+ " aaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaa));");
}
TEST_F(FormatTest, WrapsTemplateDeclarations) {
@@ -3787,7 +3796,7 @@ TEST_F(FormatTest, LayoutCxx11Constructo
verifyFormat("DoSomethingWithVector({ {} /* No data */ }, { { 1, 2 } });");
verifyFormat(
"someFunction(OtherParam, BracedList{\n"
- " // comment 1 (Forcing intersting break)\n"
+ " // comment 1 (Forcing interesting break)\n"
" param1, param2,\n"
" // comment 2\n"
" param3, param4\n"
More information about the cfe-commits
mailing list