clang-format: Fix bad corner case in formatting of function types.

Before:
  std::function<
      LoooooooooooongTemplatedType<SomeType>*(
          LooooooooooooooooooooongType
              type)>
      function;

After:
  std::function<
      LoooooooooooongTemplatedType<
          SomeType>*(
          LooooooooooooooooongType type)>
      function;

clang-format generally avoids having lines like "SomeType>*(" as they
lead to parameter lists that don't belong together to be aligned. However, in
case it is better than the alternative, which can even be violating the column
limit.

llvm-svn: 301182
This commit is contained in:
Daniel Jasper 2017-04-24 14:28:49 +00:00
parent 9111cd950d
commit cab4617132
2 changed files with 8 additions and 1 deletions

View File

@ -792,7 +792,8 @@ unsigned ContinuationIndenter::moveStateToNextToken(LineState &State,
if (Previous && Previous->is(tok::question))
State.Stack.back().QuestionColumn = State.Column;
}
if (!Current.opensScope() && !Current.closesScope())
if (!Current.opensScope() && !Current.closesScope() &&
!Current.is(TT_PointerOrReference))
State.LowestLevelOnLine =
std::min(State.LowestLevelOnLine, Current.NestingLevel);
if (Current.isMemberAccess())

View File

@ -5221,6 +5221,12 @@ TEST_F(FormatTest, FormatsFunctionTypes) {
verifyFormat("void f() { function(*some_pointer_var)[0] = 10; }");
verifyFormat("int x = f(&h)();");
verifyFormat("returnsFunction(&param1, &param2)(param);");
verifyFormat("std::function<\n"
" LooooooooooongTemplatedType<\n"
" SomeType>*(\n"
" LooooooooooooooooongType type)>\n"
" function;",
getGoogleStyleWithColumns(40));
}
TEST_F(FormatTest, FormatsPointersToArrayTypes) {