Skip to content

Commit 6d3b034

Browse files
owencatstellar
authored andcommitted
[clang-format] Add ClassHeadName to help annotating StartOfName (#124891)
Fixes #124574. (cherry picked from commit 1a25bea)
1 parent 94b97d1 commit 6d3b034

File tree

4 files changed

+66
-6
lines changed

4 files changed

+66
-6
lines changed

clang/lib/Format/FormatToken.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ namespace format {
4444
TYPE(CaseLabelColon) \
4545
TYPE(CastRParen) \
4646
TYPE(ClassLBrace) \
47+
/* Name of class/struct/union/interface definition. */ \
48+
TYPE(ClassHeadName) \
4749
TYPE(ClassRBrace) \
4850
TYPE(CompoundRequirementLBrace) \
4951
/* ternary ?: expression */ \

clang/lib/Format/TokenAnnotator.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2583,7 +2583,7 @@ class AnnotatingParser {
25832583
if (Style.isVerilog())
25842584
return false;
25852585

2586-
if (Tok.isNot(tok::identifier) || !Tok.Previous)
2586+
if (!Tok.Previous || Tok.isNot(tok::identifier) || Tok.is(TT_ClassHeadName))
25872587
return false;
25882588

25892589
if ((Style.isJavaScript() || Style.Language == FormatStyle::LK_Java) &&

clang/lib/Format/UnwrappedLineParser.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4029,7 +4029,7 @@ void UnwrappedLineParser::parseRecord(bool ParseAsExpr) {
40294029
const FormatToken &InitialToken = *FormatTok;
40304030
nextToken();
40314031

4032-
const FormatToken *ClassName = nullptr;
4032+
FormatToken *ClassName = nullptr;
40334033
bool IsDerived = false;
40344034
auto IsNonMacroIdentifier = [](const FormatToken *Tok) {
40354035
return Tok->is(tok::identifier) && Tok->TokenText != Tok->TokenText.upper();
@@ -4059,7 +4059,7 @@ void UnwrappedLineParser::parseRecord(bool ParseAsExpr) {
40594059
}
40604060
if (FormatTok->is(tok::l_square) && handleCppAttributes())
40614061
continue;
4062-
const auto *Previous = FormatTok;
4062+
auto *Previous = FormatTok;
40634063
nextToken();
40644064
switch (FormatTok->Tok.getKind()) {
40654065
case tok::l_paren:
@@ -4074,9 +4074,12 @@ void UnwrappedLineParser::parseRecord(bool ParseAsExpr) {
40744074
case tok::hashhash:
40754075
break;
40764076
default:
4077-
if (!JSPastExtendsOrImplements && !ClassName &&
4078-
Previous->is(tok::identifier) && Previous->isNot(TT_AttributeMacro) &&
4079-
Previous->TokenText != Previous->TokenText.upper()) {
4077+
if (JSPastExtendsOrImplements || ClassName ||
4078+
Previous->isNot(tok::identifier) || Previous->is(TT_AttributeMacro)) {
4079+
break;
4080+
}
4081+
if (const auto Text = Previous->TokenText;
4082+
Text.size() == 1 || Text != Text.upper()) {
40804083
ClassName = Previous;
40814084
}
40824085
}
@@ -4160,6 +4163,8 @@ void UnwrappedLineParser::parseRecord(bool ParseAsExpr) {
41604163
if (FormatTok->is(tok::l_brace)) {
41614164
if (IsListInitialization())
41624165
return;
4166+
if (ClassName)
4167+
ClassName->setFinalizedType(TT_ClassHeadName);
41634168
auto [OpenBraceType, ClosingBraceType] = GetBraceTypes(InitialToken);
41644169
FormatTok->setFinalizedType(OpenBraceType);
41654170
if (ParseAsExpr) {

clang/unittests/Format/TokenAnnotatorTest.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,11 +479,13 @@ TEST_F(TokenAnnotatorTest, UnderstandsUsesOfPlusAndMinus) {
479479
TEST_F(TokenAnnotatorTest, UnderstandsClasses) {
480480
auto Tokens = annotate("class C {};");
481481
ASSERT_EQ(Tokens.size(), 6u) << Tokens;
482+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_ClassHeadName);
482483
EXPECT_TOKEN(Tokens[2], tok::l_brace, TT_ClassLBrace);
483484
EXPECT_TOKEN(Tokens[3], tok::r_brace, TT_ClassRBrace);
484485

485486
Tokens = annotate("const class C {} c;");
486487
ASSERT_EQ(Tokens.size(), 8u) << Tokens;
488+
EXPECT_TOKEN(Tokens[2], tok::identifier, TT_ClassHeadName);
487489
EXPECT_TOKEN(Tokens[3], tok::l_brace, TT_ClassLBrace);
488490
EXPECT_TOKEN(Tokens[4], tok::r_brace, TT_ClassRBrace);
489491

@@ -494,41 +496,48 @@ TEST_F(TokenAnnotatorTest, UnderstandsClasses) {
494496

495497
Tokens = annotate("class [[deprecated(\"\")]] C { int i; };");
496498
ASSERT_EQ(Tokens.size(), 17u) << Tokens;
499+
EXPECT_TOKEN(Tokens[9], tok::identifier, TT_ClassHeadName);
497500
EXPECT_TOKEN(Tokens[10], tok::l_brace, TT_ClassLBrace);
498501
EXPECT_TOKEN(Tokens[14], tok::r_brace, TT_ClassRBrace);
499502
}
500503

501504
TEST_F(TokenAnnotatorTest, UnderstandsStructs) {
502505
auto Tokens = annotate("struct S {};");
503506
ASSERT_EQ(Tokens.size(), 6u) << Tokens;
507+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_ClassHeadName);
504508
EXPECT_TOKEN(Tokens[2], tok::l_brace, TT_StructLBrace);
505509
EXPECT_TOKEN(Tokens[3], tok::r_brace, TT_StructRBrace);
506510

507511
Tokens = annotate("struct macro(a) S {};");
508512
ASSERT_EQ(Tokens.size(), 10u) << Tokens;
513+
EXPECT_TOKEN(Tokens[5], tok::identifier, TT_ClassHeadName);
509514
EXPECT_TOKEN(Tokens[6], tok::l_brace, TT_StructLBrace);
510515
EXPECT_TOKEN(Tokens[7], tok::r_brace, TT_StructRBrace);
511516

512517
Tokens = annotate("struct EXPORT_MACRO [[nodiscard]] C { int i; };");
513518
ASSERT_EQ(Tokens.size(), 15u) << Tokens;
519+
EXPECT_TOKEN(Tokens[7], tok::identifier, TT_ClassHeadName);
514520
EXPECT_TOKEN(Tokens[8], tok::l_brace, TT_StructLBrace);
515521
EXPECT_TOKEN(Tokens[12], tok::r_brace, TT_StructRBrace);
516522

517523
Tokens = annotate("struct [[deprecated]] [[nodiscard]] C { int i; };");
518524
ASSERT_EQ(Tokens.size(), 19u) << Tokens;
525+
EXPECT_TOKEN(Tokens[11], tok::identifier, TT_ClassHeadName);
519526
EXPECT_TOKEN(Tokens[12], tok::l_brace, TT_StructLBrace);
520527
EXPECT_TOKEN(Tokens[16], tok::r_brace, TT_StructRBrace);
521528

522529
Tokens = annotate("struct macro(a) S {\n"
523530
" void f(T &t);\n"
524531
"};");
525532
ASSERT_EQ(Tokens.size(), 18u) << Tokens;
533+
EXPECT_TOKEN(Tokens[5], tok::identifier, TT_ClassHeadName);
526534
EXPECT_TOKEN(Tokens[6], tok::l_brace, TT_StructLBrace);
527535
EXPECT_TOKEN(Tokens[11], tok::amp, TT_PointerOrReference);
528536
EXPECT_TOKEN(Tokens[15], tok::r_brace, TT_StructRBrace);
529537

530538
Tokens = annotate("template <typename T> struct S<const T[N]> {};");
531539
ASSERT_EQ(Tokens.size(), 18u) << Tokens;
540+
EXPECT_TOKEN(Tokens[6], tok::identifier, TT_ClassHeadName);
532541
EXPECT_TOKEN(Tokens[7], tok::less, TT_TemplateOpener);
533542
EXPECT_TOKEN(Tokens[10], tok::l_square, TT_ArraySubscriptLSquare);
534543
EXPECT_TOKEN(Tokens[13], tok::greater, TT_TemplateCloser);
@@ -537,6 +546,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsStructs) {
537546

538547
Tokens = annotate("template <typename T> struct S<T const[N]> {};");
539548
ASSERT_EQ(Tokens.size(), 18u) << Tokens;
549+
EXPECT_TOKEN(Tokens[6], tok::identifier, TT_ClassHeadName);
540550
EXPECT_TOKEN(Tokens[7], tok::less, TT_TemplateOpener);
541551
EXPECT_TOKEN(Tokens[10], tok::l_square, TT_ArraySubscriptLSquare);
542552
EXPECT_TOKEN(Tokens[13], tok::greater, TT_TemplateCloser);
@@ -547,6 +557,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsStructs) {
547557
" void f(T const (&a)[n]);\n"
548558
"};");
549559
ASSERT_EQ(Tokens.size(), 35u) << Tokens;
560+
EXPECT_TOKEN(Tokens[9], tok::identifier, TT_ClassHeadName);
550561
EXPECT_TOKEN(Tokens[10], tok::less, TT_TemplateOpener);
551562
EXPECT_TOKEN(Tokens[13], tok::l_square, TT_ArraySubscriptLSquare);
552563
EXPECT_TOKEN(Tokens[16], tok::greater, TT_TemplateCloser);
@@ -558,12 +569,24 @@ TEST_F(TokenAnnotatorTest, UnderstandsStructs) {
558569

559570
Tokens = annotate("template <typename T, enum E e> struct S {};");
560571
ASSERT_EQ(Tokens.size(), 15u) << Tokens;
572+
EXPECT_TOKEN(Tokens[10], tok::identifier, TT_ClassHeadName);
561573
EXPECT_TOKEN(Tokens[11], tok::l_brace, TT_StructLBrace);
562574

575+
Tokens = annotate(
576+
"template <> struct __declspec(foo) Op<Bar *> : OpImpl<Bar *> {};");
577+
ASSERT_EQ(Tokens.size(), 23u) << Tokens;
578+
EXPECT_TOKEN(Tokens[5], tok::l_paren, TT_AttributeLParen);
579+
EXPECT_TOKEN(Tokens[7], tok::r_paren, TT_AttributeRParen);
580+
EXPECT_TOKEN(Tokens[8], tok::identifier, TT_ClassHeadName);
581+
EXPECT_TOKEN(Tokens[13], tok::colon, TT_InheritanceColon);
582+
EXPECT_TOKEN(Tokens[19], tok::l_brace, TT_StructLBrace);
583+
EXPECT_TOKEN(Tokens[20], tok::r_brace, TT_StructRBrace);
584+
563585
constexpr StringRef Code{"struct EXPORT StructName {};"};
564586

565587
Tokens = annotate(Code);
566588
ASSERT_EQ(Tokens.size(), 7u) << Tokens;
589+
EXPECT_TOKEN(Tokens[2], tok::identifier, TT_ClassHeadName);
567590
EXPECT_TOKEN(Tokens[3], tok::l_brace, TT_StructLBrace);
568591
EXPECT_TOKEN(Tokens[4], tok::r_brace, TT_StructRBrace);
569592

@@ -572,18 +595,21 @@ TEST_F(TokenAnnotatorTest, UnderstandsStructs) {
572595
Tokens = annotate(Code, Style);
573596
ASSERT_EQ(Tokens.size(), 7u) << Tokens;
574597
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_AttributeMacro);
598+
EXPECT_TOKEN(Tokens[2], tok::identifier, TT_ClassHeadName);
575599
EXPECT_TOKEN(Tokens[3], tok::l_brace, TT_StructLBrace);
576600
EXPECT_TOKEN(Tokens[4], tok::r_brace, TT_StructRBrace);
577601
}
578602

579603
TEST_F(TokenAnnotatorTest, UnderstandsUnions) {
580604
auto Tokens = annotate("union U {};");
581605
ASSERT_EQ(Tokens.size(), 6u) << Tokens;
606+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_ClassHeadName);
582607
EXPECT_TOKEN(Tokens[2], tok::l_brace, TT_UnionLBrace);
583608
EXPECT_TOKEN(Tokens[3], tok::r_brace, TT_UnionRBrace);
584609

585610
Tokens = annotate("union U { void f() { return; } };");
586611
ASSERT_EQ(Tokens.size(), 14u) << Tokens;
612+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_ClassHeadName);
587613
EXPECT_TOKEN(Tokens[2], tok::l_brace, TT_UnionLBrace);
588614
EXPECT_TOKEN(Tokens[7], tok::l_brace, TT_FunctionLBrace);
589615
EXPECT_TOKEN(Tokens[11], tok::r_brace, TT_UnionRBrace);
@@ -716,8 +742,10 @@ TEST_F(TokenAnnotatorTest, UnderstandsTemplateTemplateParameters) {
716742
EXPECT_TOKEN(Tokens[11], tok::less, TT_TemplateOpener);
717743
EXPECT_TOKEN(Tokens[14], tok::greater, TT_TemplateCloser);
718744
EXPECT_FALSE(Tokens[14]->ClosesTemplateDeclaration);
745+
EXPECT_TOKEN(Tokens[16], tok::identifier, TT_Unknown);
719746
EXPECT_TOKEN(Tokens[21], tok::greater, TT_TemplateCloser);
720747
EXPECT_TRUE(Tokens[21]->ClosesTemplateDeclaration);
748+
EXPECT_TOKEN(Tokens[23], tok::identifier, TT_ClassHeadName);
721749
}
722750

723751
TEST_F(TokenAnnotatorTest, UnderstandsWhitespaceSensitiveMacros) {
@@ -800,6 +828,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsCasts) {
800828

801829
Tokens = annotate("return (struct foo){};");
802830
ASSERT_EQ(Tokens.size(), 9u) << Tokens;
831+
EXPECT_TOKEN(Tokens[3], tok::identifier, TT_Unknown);
803832
EXPECT_TOKEN(Tokens[4], tok::r_paren, TT_CastRParen);
804833

805834
Tokens = annotate("#define FOO(bar) foo((uint64_t)&bar)");
@@ -1169,6 +1198,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
11691198
EXPECT_EQ(Tokens[32]->FakeRParens, 1u);
11701199
EXPECT_TOKEN(Tokens[33], tok::r_paren, TT_Unknown);
11711200
EXPECT_TRUE(Tokens[33]->ClosesRequiresClause);
1201+
EXPECT_TOKEN(Tokens[35], tok::identifier, TT_Unknown);
11721202

11731203
Tokens = annotate("template <typename T>\n"
11741204
"void foo(T) noexcept requires Bar<T>;");
@@ -1250,6 +1280,8 @@ TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
12501280
"return number_zero_v<T>; }\n"
12511281
"};");
12521282
ASSERT_EQ(Tokens.size(), 44u) << Tokens;
1283+
EXPECT_TOKEN(Tokens[6], tok::identifier, TT_ClassHeadName);
1284+
EXPECT_TOKEN(Tokens[11], tok::identifier, TT_Unknown);
12531285
EXPECT_TOKEN(Tokens[13], tok::kw_requires, TT_RequiresClause);
12541286
EXPECT_TOKEN(Tokens[14], tok::kw_requires, TT_RequiresExpression);
12551287
EXPECT_TOKEN(Tokens[15], tok::l_brace, TT_RequiresExpressionLBrace);
@@ -1261,6 +1293,8 @@ TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
12611293
annotate("template <class A, class B> concept C ="
12621294
"std::same_as<std::iter_value_t<A>, std::iter_value_t<B>>;");
12631295
ASSERT_EQ(Tokens.size(), 31u) << Tokens;
1296+
EXPECT_TOKEN(Tokens[3], tok::identifier, TT_Unknown);
1297+
EXPECT_TOKEN(Tokens[6], tok::identifier, TT_Unknown);
12641298
EXPECT_TOKEN(Tokens[8], tok::kw_concept, TT_Unknown);
12651299
EXPECT_TOKEN(Tokens[14], tok::less, TT_TemplateOpener);
12661300
EXPECT_TOKEN(Tokens[18], tok::less, TT_TemplateOpener);
@@ -1877,6 +1911,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsLambdas) {
18771911
ASSERT_EQ(Tokens.size(), 12u) << Tokens;
18781912
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
18791913
EXPECT_TOKEN(Tokens[2], tok::arrow, TT_LambdaArrow);
1914+
EXPECT_TOKEN(Tokens[4], tok::identifier, TT_Unknown);
18801915
EXPECT_TOKEN(Tokens[5], tok::l_brace, TT_LambdaLBrace);
18811916

18821917
Tokens = annotate("foo([&](u32 bar) __attribute__((attr)) -> void {});");
@@ -2757,6 +2792,7 @@ TEST_F(TokenAnnotatorTest, UnderstandTableGenTokens) {
27572792

27582793
// Structured statements.
27592794
Tokens = Annotate("class Foo {}");
2795+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_StartOfName);
27602796
EXPECT_TOKEN(Tokens[2], tok::l_brace, TT_FunctionLBrace);
27612797
Tokens = Annotate("def Def: Foo {}");
27622798
EXPECT_TOKEN(Tokens[2], tok::colon, TT_InheritanceColon);
@@ -3222,6 +3258,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
32223258

32233259
Tokens = annotate("class Foo<int> f() {}");
32243260
ASSERT_EQ(Tokens.size(), 11u) << Tokens;
3261+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_Unknown);
32253262
EXPECT_TOKEN(Tokens[5], tok::identifier, TT_FunctionDeclarationName);
32263263
EXPECT_TOKEN(Tokens[6], tok::l_paren, TT_FunctionDeclarationLParen);
32273264
EXPECT_TOKEN(Tokens[8], tok::l_brace, TT_FunctionLBrace);
@@ -3230,6 +3267,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
32303267

32313268
Tokens = annotate("template <typename T> class Foo<T> f() {}");
32323269
ASSERT_EQ(Tokens.size(), 16u) << Tokens;
3270+
EXPECT_TOKEN(Tokens[6], tok::identifier, TT_Unknown);
32333271
EXPECT_TOKEN(Tokens[10], tok::identifier, TT_FunctionDeclarationName);
32343272
EXPECT_TOKEN(Tokens[11], tok::l_paren, TT_FunctionDeclarationLParen);
32353273
EXPECT_TOKEN(Tokens[13], tok::l_brace, TT_FunctionLBrace);
@@ -3340,36 +3378,45 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
33403378

33413379
Tokens = annotate("struct ::Foo {};");
33423380
ASSERT_EQ(Tokens.size(), 7u) << Tokens;
3381+
EXPECT_TOKEN(Tokens[2], tok::identifier, TT_ClassHeadName);
33433382
EXPECT_BRACE_KIND(Tokens[3], BK_Block);
33443383
EXPECT_BRACE_KIND(Tokens[4], BK_Block);
33453384

33463385
Tokens = annotate("struct NS::Foo {};");
33473386
ASSERT_EQ(Tokens.size(), 8u) << Tokens;
3387+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_Unknown);
3388+
EXPECT_TOKEN(Tokens[3], tok::identifier, TT_ClassHeadName);
33483389
EXPECT_BRACE_KIND(Tokens[4], BK_Block);
33493390
EXPECT_BRACE_KIND(Tokens[5], BK_Block);
33503391

33513392
Tokens = annotate("struct Foo<int> {};");
33523393
ASSERT_EQ(Tokens.size(), 9u) << Tokens;
3394+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_ClassHeadName);
33533395
EXPECT_BRACE_KIND(Tokens[5], BK_Block);
33543396
EXPECT_BRACE_KIND(Tokens[6], BK_Block);
33553397

33563398
Tokens = annotate("struct Foo<int>::Bar {};");
33573399
ASSERT_EQ(Tokens.size(), 11u) << Tokens;
3400+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_Unknown);
3401+
EXPECT_TOKEN(Tokens[6], tok::identifier, TT_ClassHeadName);
33583402
EXPECT_BRACE_KIND(Tokens[7], BK_Block);
33593403
EXPECT_BRACE_KIND(Tokens[8], BK_Block);
33603404

33613405
Tokens = annotate("struct Foo<int> : Base {};");
33623406
ASSERT_EQ(Tokens.size(), 11u) << Tokens;
3407+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_ClassHeadName);
33633408
EXPECT_BRACE_KIND(Tokens[7], BK_Block);
33643409
EXPECT_BRACE_KIND(Tokens[8], BK_Block);
33653410

33663411
Tokens = annotate("struct Foo final {};");
33673412
ASSERT_EQ(Tokens.size(), 7u) << Tokens;
3413+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_ClassHeadName);
33683414
EXPECT_BRACE_KIND(Tokens[3], BK_Block);
33693415
EXPECT_BRACE_KIND(Tokens[4], BK_Block);
33703416

33713417
Tokens = annotate("struct [[foo]] [[bar]] Foo final : Base1, Base2 {};");
33723418
ASSERT_EQ(Tokens.size(), 21u) << Tokens;
3419+
EXPECT_TOKEN(Tokens[11], tok::identifier, TT_ClassHeadName);
33733420
EXPECT_BRACE_KIND(Tokens[17], BK_Block);
33743421
EXPECT_BRACE_KIND(Tokens[18], BK_Block);
33753422

@@ -3405,6 +3452,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
34053452
"#endif\n"
34063453
"};");
34073454
ASSERT_EQ(Tokens.size(), 29u) << Tokens;
3455+
EXPECT_TOKEN(Tokens[8], tok::identifier, TT_ClassHeadName);
34083456
EXPECT_BRACE_KIND(Tokens[11], BK_Block);
34093457
EXPECT_BRACE_KIND(Tokens[17], BK_Block);
34103458
EXPECT_BRACE_KIND(Tokens[22], BK_Block);
@@ -3456,6 +3504,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
34563504
Tokens = annotate("a = class extends goog.a {};",
34573505
getGoogleStyle(FormatStyle::LK_JavaScript));
34583506
ASSERT_EQ(Tokens.size(), 11u) << Tokens;
3507+
EXPECT_TOKEN(Tokens[3], tok::identifier, TT_Unknown);
34593508
EXPECT_TOKEN(Tokens[7], tok::l_brace, TT_ClassLBrace);
34603509
EXPECT_BRACE_KIND(Tokens[7], BK_Block);
34613510
EXPECT_TOKEN(Tokens[8], tok::r_brace, TT_ClassRBrace);
@@ -3464,6 +3513,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
34643513
Tokens = annotate("a = class Foo extends goog.a {};",
34653514
getGoogleStyle(FormatStyle::LK_JavaScript));
34663515
ASSERT_EQ(Tokens.size(), 12u) << Tokens;
3516+
EXPECT_TOKEN(Tokens[3], tok::identifier, TT_ClassHeadName);
34673517
EXPECT_TOKEN(Tokens[4], tok::identifier, TT_Unknown); // Not TT_StartOfName
34683518
EXPECT_TOKEN(Tokens[8], tok::l_brace, TT_ClassLBrace);
34693519
EXPECT_BRACE_KIND(Tokens[8], BK_Block);
@@ -3473,6 +3523,8 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
34733523
Tokens = annotate("#define FOO(X) \\\n"
34743524
" struct X##_tag_ {};");
34753525
ASSERT_EQ(Tokens.size(), 14u) << Tokens;
3526+
EXPECT_TOKEN(Tokens[7], tok::identifier, TT_Unknown);
3527+
EXPECT_TOKEN(Tokens[9], tok::identifier, TT_ClassHeadName);
34763528
EXPECT_TOKEN(Tokens[10], tok::l_brace, TT_StructLBrace);
34773529
EXPECT_BRACE_KIND(Tokens[10], BK_Block);
34783530
EXPECT_TOKEN(Tokens[11], tok::r_brace, TT_StructRBrace);
@@ -3483,6 +3535,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
34833535
" void f() { return; } \\\n"
34843536
" };");
34853537
ASSERT_EQ(Tokens.size(), 20u) << Tokens;
3538+
EXPECT_TOKEN(Tokens[4], tok::identifier, TT_ClassHeadName);
34863539
EXPECT_TOKEN(Tokens[8], tok::l_brace, TT_StructLBrace);
34873540
EXPECT_BRACE_KIND(Tokens[8], BK_Block);
34883541
EXPECT_TOKEN(Tokens[10], tok::identifier, TT_FunctionDeclarationName);

0 commit comments

Comments
 (0)