From 82317587cddbe61e00172d9fc9f9fc2cc0f5975b Mon Sep 17 00:00:00 2001 From: Daniel Jasper Date: Thu, 22 May 2014 12:46:38 +0000 Subject: [PATCH] clang-format: Fix braced list detection. Before: static_assert(std::is_integral {} + 0, ""); int a = std::is_integral {} + 0; After: static_assert(std::is_integral{} + 0, ""); int a = std::is_integral{} + 0; git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@209431 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Format/UnwrappedLineParser.cpp | 8 ++++++-- unittests/Format/FormatTest.cpp | 14 ++++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/Format/UnwrappedLineParser.cpp b/lib/Format/UnwrappedLineParser.cpp index e0106d94cf..d0750af1b0 100644 --- a/lib/Format/UnwrappedLineParser.cpp +++ b/lib/Format/UnwrappedLineParser.cpp @@ -338,6 +338,11 @@ void UnwrappedLineParser::calculateBraceTypes() { if (Style.Language == FormatStyle::LK_Proto) { ProbablyBracedList = NextTok->isOneOf(tok::comma, tok::r_square); } else { + // Using OriginalColumn to distinguish between ObjC methods and + // binary operators is a bit hacky. + bool NextIsObjCMethod = NextTok->isOneOf(tok::plus, tok::minus) && + NextTok->OriginalColumn == 0; + // If there is a comma, semicolon or right paren after the closing // brace, we assume this is a braced initializer list. Note that // regardless how we mark inner braces here, we will overwrite the @@ -350,8 +355,7 @@ void UnwrappedLineParser::calculateBraceTypes() { NextTok->isOneOf(tok::comma, tok::semi, tok::period, tok::colon, tok::r_paren, tok::r_square, tok::l_brace, tok::l_paren) || - (NextTok->isBinaryOperator() && - !NextTok->isOneOf(tok::plus, tok::minus)); + (NextTok->isBinaryOperator() && !NextIsObjCMethod); } if (ProbablyBracedList) { Tok->BlockKind = BK_BracedInit; diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index f9016f4bf1..729eeaf439 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -5262,6 +5262,8 @@ TEST_F(FormatTest, LayoutCxx11BraceInitializers) { " T member = {arg1, arg2};\n" "};"); verifyFormat("vector foo = {::SomeGlobalFunction()};"); + verifyFormat("static_assert(std::is_integral{} + 0, \"\");"); + verifyFormat("int a = std::is_integral{} + 0;"); verifyFormat("int foo(int i) { return fo1{}(i); }"); verifyFormat("int foo(int i) { return fo1{}(i); }"); @@ -6088,10 +6090,14 @@ TEST_F(FormatTest, FormatObjCImplementation) { "@implementation Bar\n" "@end"); - verifyFormat("@implementation Foo : Bar\n" - "+ (id)init {\n}\n" - "- (void)foo {\n}\n" - "@end"); + EXPECT_EQ("@implementation Foo : Bar\n" + "+ (id)init {\n}\n" + "- (void)foo {\n}\n" + "@end", + format("@implementation Foo : Bar\n" + "+(id)init{}\n" + "-(void)foo{}\n" + "@end")); verifyFormat("@implementation Foo {\n" " int _i;\n" -- 2.40.0