Skip to content

Commit 1a25bea

Browse files
authored
[clang-format] Add ClassHeadName to help annotating StartOfName (#124891)
Fixes #124574.
1 parent 45f538e commit 1a25bea

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
@@ -2581,7 +2581,7 @@ class AnnotatingParser {
25812581
if (Style.isVerilog())
25822582
return false;
25832583

2584-
if (Tok.isNot(tok::identifier) || !Tok.Previous)
2584+
if (!Tok.Previous || Tok.isNot(tok::identifier) || Tok.is(TT_ClassHeadName))
25852585
return false;
25862586

25872587
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)");
@@ -1167,6 +1196,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
11671196
EXPECT_EQ(Tokens[32]->FakeRParens, 1u);
11681197
EXPECT_TOKEN(Tokens[33], tok::r_paren, TT_Unknown);
11691198
EXPECT_TRUE(Tokens[33]->ClosesRequiresClause);
1199+
EXPECT_TOKEN(Tokens[35], tok::identifier, TT_Unknown);
11701200

11711201
Tokens = annotate("template <typename T>\n"
11721202
"void foo(T) noexcept requires Bar<T>;");
@@ -1248,6 +1278,8 @@ TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
12481278
"return number_zero_v<T>; }\n"
12491279
"};");
12501280
ASSERT_EQ(Tokens.size(), 44u) << Tokens;
1281+
EXPECT_TOKEN(Tokens[6], tok::identifier, TT_ClassHeadName);
1282+
EXPECT_TOKEN(Tokens[11], tok::identifier, TT_Unknown);
12511283
EXPECT_TOKEN(Tokens[13], tok::kw_requires, TT_RequiresClause);
12521284
EXPECT_TOKEN(Tokens[14], tok::kw_requires, TT_RequiresExpression);
12531285
EXPECT_TOKEN(Tokens[15], tok::l_brace, TT_RequiresExpressionLBrace);
@@ -1259,6 +1291,8 @@ TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
12591291
annotate("template <class A, class B> concept C ="
12601292
"std::same_as<std::iter_value_t<A>, std::iter_value_t<B>>;");
12611293
ASSERT_EQ(Tokens.size(), 31u) << Tokens;
1294+
EXPECT_TOKEN(Tokens[3], tok::identifier, TT_Unknown);
1295+
EXPECT_TOKEN(Tokens[6], tok::identifier, TT_Unknown);
12621296
EXPECT_TOKEN(Tokens[8], tok::kw_concept, TT_Unknown);
12631297
EXPECT_TOKEN(Tokens[14], tok::less, TT_TemplateOpener);
12641298
EXPECT_TOKEN(Tokens[18], tok::less, TT_TemplateOpener);
@@ -1875,6 +1909,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsLambdas) {
18751909
ASSERT_EQ(Tokens.size(), 12u) << Tokens;
18761910
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
18771911
EXPECT_TOKEN(Tokens[2], tok::arrow, TT_LambdaArrow);
1912+
EXPECT_TOKEN(Tokens[4], tok::identifier, TT_Unknown);
18781913
EXPECT_TOKEN(Tokens[5], tok::l_brace, TT_LambdaLBrace);
18791914

18801915
Tokens = annotate("foo([&](u32 bar) __attribute__((attr)) -> void {});");
@@ -2755,6 +2790,7 @@ TEST_F(TokenAnnotatorTest, UnderstandTableGenTokens) {
27552790

27562791
// Structured statements.
27572792
Tokens = Annotate("class Foo {}");
2793+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_StartOfName);
27582794
EXPECT_TOKEN(Tokens[2], tok::l_brace, TT_FunctionLBrace);
27592795
Tokens = Annotate("def Def: Foo {}");
27602796
EXPECT_TOKEN(Tokens[2], tok::colon, TT_InheritanceColon);
@@ -3220,6 +3256,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
32203256

32213257
Tokens = annotate("class Foo<int> f() {}");
32223258
ASSERT_EQ(Tokens.size(), 11u) << Tokens;
3259+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_Unknown);
32233260
EXPECT_TOKEN(Tokens[5], tok::identifier, TT_FunctionDeclarationName);
32243261
EXPECT_TOKEN(Tokens[6], tok::l_paren, TT_FunctionDeclarationLParen);
32253262
EXPECT_TOKEN(Tokens[8], tok::l_brace, TT_FunctionLBrace);
@@ -3228,6 +3265,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
32283265

32293266
Tokens = annotate("template <typename T> class Foo<T> f() {}");
32303267
ASSERT_EQ(Tokens.size(), 16u) << Tokens;
3268+
EXPECT_TOKEN(Tokens[6], tok::identifier, TT_Unknown);
32313269
EXPECT_TOKEN(Tokens[10], tok::identifier, TT_FunctionDeclarationName);
32323270
EXPECT_TOKEN(Tokens[11], tok::l_paren, TT_FunctionDeclarationLParen);
32333271
EXPECT_TOKEN(Tokens[13], tok::l_brace, TT_FunctionLBrace);
@@ -3338,36 +3376,45 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
33383376

33393377
Tokens = annotate("struct ::Foo {};");
33403378
ASSERT_EQ(Tokens.size(), 7u) << Tokens;
3379+
EXPECT_TOKEN(Tokens[2], tok::identifier, TT_ClassHeadName);
33413380
EXPECT_BRACE_KIND(Tokens[3], BK_Block);
33423381
EXPECT_BRACE_KIND(Tokens[4], BK_Block);
33433382

33443383
Tokens = annotate("struct NS::Foo {};");
33453384
ASSERT_EQ(Tokens.size(), 8u) << Tokens;
3385+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_Unknown);
3386+
EXPECT_TOKEN(Tokens[3], tok::identifier, TT_ClassHeadName);
33463387
EXPECT_BRACE_KIND(Tokens[4], BK_Block);
33473388
EXPECT_BRACE_KIND(Tokens[5], BK_Block);
33483389

33493390
Tokens = annotate("struct Foo<int> {};");
33503391
ASSERT_EQ(Tokens.size(), 9u) << Tokens;
3392+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_ClassHeadName);
33513393
EXPECT_BRACE_KIND(Tokens[5], BK_Block);
33523394
EXPECT_BRACE_KIND(Tokens[6], BK_Block);
33533395

33543396
Tokens = annotate("struct Foo<int>::Bar {};");
33553397
ASSERT_EQ(Tokens.size(), 11u) << Tokens;
3398+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_Unknown);
3399+
EXPECT_TOKEN(Tokens[6], tok::identifier, TT_ClassHeadName);
33563400
EXPECT_BRACE_KIND(Tokens[7], BK_Block);
33573401
EXPECT_BRACE_KIND(Tokens[8], BK_Block);
33583402

33593403
Tokens = annotate("struct Foo<int> : Base {};");
33603404
ASSERT_EQ(Tokens.size(), 11u) << Tokens;
3405+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_ClassHeadName);
33613406
EXPECT_BRACE_KIND(Tokens[7], BK_Block);
33623407
EXPECT_BRACE_KIND(Tokens[8], BK_Block);
33633408

33643409
Tokens = annotate("struct Foo final {};");
33653410
ASSERT_EQ(Tokens.size(), 7u) << Tokens;
3411+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_ClassHeadName);
33663412
EXPECT_BRACE_KIND(Tokens[3], BK_Block);
33673413
EXPECT_BRACE_KIND(Tokens[4], BK_Block);
33683414

33693415
Tokens = annotate("struct [[foo]] [[bar]] Foo final : Base1, Base2 {};");
33703416
ASSERT_EQ(Tokens.size(), 21u) << Tokens;
3417+
EXPECT_TOKEN(Tokens[11], tok::identifier, TT_ClassHeadName);
33713418
EXPECT_BRACE_KIND(Tokens[17], BK_Block);
33723419
EXPECT_BRACE_KIND(Tokens[18], BK_Block);
33733420

@@ -3403,6 +3450,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
34033450
"#endif\n"
34043451
"};");
34053452
ASSERT_EQ(Tokens.size(), 29u) << Tokens;
3453+
EXPECT_TOKEN(Tokens[8], tok::identifier, TT_ClassHeadName);
34063454
EXPECT_BRACE_KIND(Tokens[11], BK_Block);
34073455
EXPECT_BRACE_KIND(Tokens[17], BK_Block);
34083456
EXPECT_BRACE_KIND(Tokens[22], BK_Block);
@@ -3454,6 +3502,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
34543502
Tokens = annotate("a = class extends goog.a {};",
34553503
getGoogleStyle(FormatStyle::LK_JavaScript));
34563504
ASSERT_EQ(Tokens.size(), 11u) << Tokens;
3505+
EXPECT_TOKEN(Tokens[3], tok::identifier, TT_Unknown);
34573506
EXPECT_TOKEN(Tokens[7], tok::l_brace, TT_ClassLBrace);
34583507
EXPECT_BRACE_KIND(Tokens[7], BK_Block);
34593508
EXPECT_TOKEN(Tokens[8], tok::r_brace, TT_ClassRBrace);
@@ -3462,6 +3511,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
34623511
Tokens = annotate("a = class Foo extends goog.a {};",
34633512
getGoogleStyle(FormatStyle::LK_JavaScript));
34643513
ASSERT_EQ(Tokens.size(), 12u) << Tokens;
3514+
EXPECT_TOKEN(Tokens[3], tok::identifier, TT_ClassHeadName);
34653515
EXPECT_TOKEN(Tokens[4], tok::identifier, TT_Unknown); // Not TT_StartOfName
34663516
EXPECT_TOKEN(Tokens[8], tok::l_brace, TT_ClassLBrace);
34673517
EXPECT_BRACE_KIND(Tokens[8], BK_Block);
@@ -3471,6 +3521,8 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
34713521
Tokens = annotate("#define FOO(X) \\\n"
34723522
" struct X##_tag_ {};");
34733523
ASSERT_EQ(Tokens.size(), 14u) << Tokens;
3524+
EXPECT_TOKEN(Tokens[7], tok::identifier, TT_Unknown);
3525+
EXPECT_TOKEN(Tokens[9], tok::identifier, TT_ClassHeadName);
34743526
EXPECT_TOKEN(Tokens[10], tok::l_brace, TT_StructLBrace);
34753527
EXPECT_BRACE_KIND(Tokens[10], BK_Block);
34763528
EXPECT_TOKEN(Tokens[11], tok::r_brace, TT_StructRBrace);
@@ -3481,6 +3533,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
34813533
" void f() { return; } \\\n"
34823534
" };");
34833535
ASSERT_EQ(Tokens.size(), 20u) << Tokens;
3536+
EXPECT_TOKEN(Tokens[4], tok::identifier, TT_ClassHeadName);
34843537
EXPECT_TOKEN(Tokens[8], tok::l_brace, TT_StructLBrace);
34853538
EXPECT_BRACE_KIND(Tokens[8], BK_Block);
34863539
EXPECT_TOKEN(Tokens[10], tok::identifier, TT_FunctionDeclarationName);

0 commit comments

Comments
 (0)