release/19.x: [clang-format] Correctly annotate braces in macro definitions (#123279) by llvmbot · Pull Request #123439 · llvm/llvm-project (original) (raw)
diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp index e3fb976ee1cc44..eb520870bb7708 100644 --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -505,14 +505,14 @@ void UnwrappedLineParser::calculateBraceTypes(bool ExpectClassBody) { auto *NextTok = Tokens->getNextNonComment();
if (!Line->InMacroBody && !Style.isTableGen()) {// Skip PPDirective lines and comments.
// Skip PPDirective lines (except macro definitions) and comments. while (NextTok->is(tok::hash)) { NextTok = Tokens->getNextToken();
if (NextTok->is(tok::pp_not_keyword))
if (NextTok->isOneOf(tok::pp_not_keyword, tok::pp_define)) break; do { NextTok = Tokens->getNextToken();
} while (!NextTok->HasUnescapedNewline && NextTok->isNot(tok::eof));
} while (NextTok->NewlinesBefore == 0 && NextTok->isNot(tok::eof)); while (NextTok->is(tok::comment)) NextTok = Tokens->getNextToken();
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 7b2947acea4a2e..e3daac5a23359f 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -5725,23 +5725,12 @@ TEST_F(FormatTest, HashInMacroDefinition) {
verifyFormat("#define A void # ## #", getLLVMStyleWithColumns(22));
-#if 0
- // FIXME: The correct format is: verifyFormat("{\n" " {\n" "#define GEN_ID(_x) char *_x{#_x}\n" " GEN_ID(one);\n" " }\n" "}");
-#endif
- verifyFormat("{\n"
" {\n""#define GEN_ID(_x) \\\n"" char *_x { #_x }\n"" GEN_ID(one);\n"" }\n""}",getGoogleStyle());
}
TEST_F(FormatTest, RespectWhitespaceInMacroDefinitions) { diff --git a/clang/unittests/Format/TokenAnnotatorTest.cpp b/clang/unittests/Format/TokenAnnotatorTest.cpp index 7d4ff3dfa32490..8f7f86d401edf0 100644 --- a/clang/unittests/Format/TokenAnnotatorTest.cpp +++ b/clang/unittests/Format/TokenAnnotatorTest.cpp @@ -3214,14 +3214,27 @@ TEST_F(TokenAnnotatorTest, BraceKind) { EXPECT_BRACE_KIND(Tokens[0], BK_Block); EXPECT_TOKEN(Tokens[1], tok::l_brace, TT_BlockLBrace); EXPECT_BRACE_KIND(Tokens[1], BK_Block); -#if 0
- // FIXME: EXPECT_BRACE_KIND(Tokens[11], BK_BracedInit); EXPECT_BRACE_KIND(Tokens[14], BK_BracedInit); -#endif EXPECT_BRACE_KIND(Tokens[20], BK_Block); EXPECT_BRACE_KIND(Tokens[21], BK_Block);
- Tokens = annotate("{\n"
"#define FOO \\\n"" { \\\n"" case bar: { \\\n"" break; \\\n"" } \\\n"" }\n""}");- ASSERT_EQ(Tokens.size(), 15u) << Tokens;
- EXPECT_TOKEN(Tokens[4], tok::l_brace, TT_BlockLBrace);
- EXPECT_BRACE_KIND(Tokens[4], BK_Block);
- EXPECT_TOKEN(Tokens[7], tok::colon, TT_CaseLabelColon);
- EXPECT_BRACE_KIND(Tokens[8], BK_Block);
- EXPECT_BRACE_KIND(Tokens[11], BK_Block);
- EXPECT_BRACE_KIND(Tokens[12], BK_Block);
- Tokens = annotate("a = class extends goog.a {};", getGoogleStyle(FormatStyle::LK_JavaScript)); ASSERT_EQ(Tokens.size(), 11u) << Tokens;