clang-format: Improve braced init list detection:

Before:
  std::this_thread::sleep_for(std::chrono::nanoseconds{
    std::chrono::seconds { 1 }
  } /
                              5);

After:
  std::this_thread::sleep_for(
      std::chrono::nanoseconds{ std::chrono::seconds{ 1 } } / 5);

This fixes llvm.org/PR16554.

llvm-svn: 189451
This commit is contained in:
Daniel Jasper 2013-08-28 07:50:37 +00:00
parent d215b8bde2
commit 65b79829c3
2 changed files with 8 additions and 1 deletions

View File

@ -284,8 +284,12 @@ void UnwrappedLineParser::calculateBraceTypes() {
// Thus, if the parent is a braced init list, we consider all
// brace blocks inside it braced init list. That works good enough
// for now, but we will need to fix it to correctly handle lambdas.
//
// We exclude + and - as they can be ObjC visibility modifiers.
if (NextTok->isOneOf(tok::comma, tok::semi, tok::r_paren,
tok::l_brace, tok::colon)) {
tok::l_brace, tok::colon) ||
(NextTok->isBinaryOperator() &&
!NextTok->isOneOf(tok::plus, tok::minus))) {
Tok->BlockKind = BK_BracedInit;
LBraceStack.back()->BlockKind = BK_BracedInit;
} else {

View File

@ -4159,6 +4159,9 @@ TEST_F(FormatTest, LayoutCxx11ConstructorBraceInitializers) {
" // comment 2\n"
" param3, param4\n"
" });");
verifyFormat(
"std::this_thread::sleep_for(\n"
" std::chrono::nanoseconds{ std::chrono::seconds{ 1 } } / 5);");
FormatStyle NoSpaces = getLLVMStyle();
NoSpaces.Cpp11BracedListStyle = true;