Skip to content

Commit

Permalink
[Format] Dont treat LBrace after extends/implements as initializer list
Browse files Browse the repository at this point in the history
This extends the fix in llvm#106242
for other derived class types.
  • Loading branch information
kadircet committed Sep 16, 2024
1 parent cf2122c commit e63f2ac
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 2 deletions.
2 changes: 1 addition & 1 deletion clang/lib/Format/UnwrappedLineParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4042,7 +4042,7 @@ void UnwrappedLineParser::parseRecord(bool ParseAsExpr) {
}

auto IsListInitialization = [&] {
if (!ClassName || IsDerived)
if (!ClassName || IsDerived || JSPastExtendsOrImplements)
return false;
assert(FormatTok->is(tok::l_brace));
const auto *Prev = FormatTok->getPreviousNonComment();
Expand Down
7 changes: 6 additions & 1 deletion clang/unittests/Format/FormatTestJS.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -579,12 +579,17 @@ TEST_F(FormatTestJS, GoogScopes) {
"});");
}

TEST_F(FormatTestJS, GoogAnonymousClass) {
TEST_F(FormatTestJS, ClassExtends) {
verifyFormat("a = class extends goog.structs.a {\n"
" a() {\n"
" return 0;\n"
" }\n"
"};");
verifyFormat("a = class Foo extends goog.structs.a {\n"
" a() {\n"
" return 0;\n"
" }\n"
"};");
}

TEST_F(FormatTestJS, IIFEs) {
Expand Down
8 changes: 8 additions & 0 deletions clang/unittests/Format/TokenAnnotatorTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3277,6 +3277,14 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
EXPECT_TOKEN(Tokens[8], tok::r_brace, TT_ClassRBrace);
EXPECT_BRACE_KIND(Tokens[8], BK_Block);

Tokens = annotate("a = class Foo extends goog.a {};",
getGoogleStyle(FormatStyle::LK_JavaScript));
ASSERT_EQ(Tokens.size(), 12u) << Tokens;
EXPECT_TOKEN(Tokens[8], tok::l_brace, TT_ClassLBrace);
EXPECT_BRACE_KIND(Tokens[8], BK_Block);
EXPECT_TOKEN(Tokens[9], tok::r_brace, TT_ClassRBrace);
EXPECT_BRACE_KIND(Tokens[9], BK_Block);

Tokens = annotate("#define FOO(X) \\\n"
" struct X##_tag_ {};");
ASSERT_EQ(Tokens.size(), 14u) << Tokens;
Expand Down

0 comments on commit e63f2ac

Please sign in to comment.