Skip to content

Commit 04fd965

Browse files
committed
[clang-format] Add ClassHeadName to help annotating StartOfName
Fixes #124574.
1 parent b28e879 commit 04fd965

File tree

4 files changed

+70
-6
lines changed

4 files changed

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

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

25862586
if (const auto *NextNonComment = Tok.getNextNonComment();

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: 57 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)");
@@ -1146,6 +1175,8 @@ TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
11461175
EXPECT_TOKEN(Tokens[31], tok::greater, TT_TemplateCloser);
11471176
EXPECT_EQ(Tokens[31]->FakeRParens, 1u);
11481177
EXPECT_TRUE(Tokens[31]->ClosesRequiresClause);
1178+
// FIXME:
1179+
// EXPECT_TOKEN(Tokens[33], tok::identifier, TT_Unknown); // Not ClassHeadName
11491180

11501181
Tokens =
11511182
annotate("template<typename T>\n"
@@ -1163,6 +1194,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
11631194
EXPECT_EQ(Tokens[32]->FakeRParens, 1u);
11641195
EXPECT_TOKEN(Tokens[33], tok::r_paren, TT_Unknown);
11651196
EXPECT_TRUE(Tokens[33]->ClosesRequiresClause);
1197+
EXPECT_TOKEN(Tokens[35], tok::identifier, TT_Unknown);
11661198

11671199
Tokens = annotate("template <typename T>\n"
11681200
"void foo(T) noexcept requires Bar<T>;");
@@ -1244,6 +1276,8 @@ TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
12441276
"return number_zero_v<T>; }\n"
12451277
"};");
12461278
ASSERT_EQ(Tokens.size(), 44u) << Tokens;
1279+
EXPECT_TOKEN(Tokens[6], tok::identifier, TT_ClassHeadName);
1280+
EXPECT_TOKEN(Tokens[11], tok::identifier, TT_Unknown);
12471281
EXPECT_TOKEN(Tokens[13], tok::kw_requires, TT_RequiresClause);
12481282
EXPECT_TOKEN(Tokens[14], tok::kw_requires, TT_RequiresExpression);
12491283
EXPECT_TOKEN(Tokens[15], tok::l_brace, TT_RequiresExpressionLBrace);
@@ -1255,6 +1289,8 @@ TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
12551289
annotate("template <class A, class B> concept C ="
12561290
"std::same_as<std::iter_value_t<A>, std::iter_value_t<B>>;");
12571291
ASSERT_EQ(Tokens.size(), 31u) << Tokens;
1292+
EXPECT_TOKEN(Tokens[3], tok::identifier, TT_Unknown);
1293+
EXPECT_TOKEN(Tokens[6], tok::identifier, TT_Unknown);
12581294
EXPECT_TOKEN(Tokens[8], tok::kw_concept, TT_Unknown);
12591295
EXPECT_TOKEN(Tokens[14], tok::less, TT_TemplateOpener);
12601296
EXPECT_TOKEN(Tokens[18], tok::less, TT_TemplateOpener);
@@ -1871,6 +1907,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsLambdas) {
18711907
ASSERT_EQ(Tokens.size(), 12u) << Tokens;
18721908
EXPECT_TOKEN(Tokens[0], tok::l_square, TT_LambdaLSquare);
18731909
EXPECT_TOKEN(Tokens[2], tok::arrow, TT_LambdaArrow);
1910+
EXPECT_TOKEN(Tokens[4], tok::identifier, TT_Unknown);
18741911
EXPECT_TOKEN(Tokens[5], tok::l_brace, TT_LambdaLBrace);
18751912

18761913
Tokens = annotate("foo([&](u32 bar) __attribute__((attr)) -> void {});");
@@ -2751,6 +2788,7 @@ TEST_F(TokenAnnotatorTest, UnderstandTableGenTokens) {
27512788

27522789
// Structured statements.
27532790
Tokens = Annotate("class Foo {}");
2791+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_StartOfName);
27542792
EXPECT_TOKEN(Tokens[2], tok::l_brace, TT_FunctionLBrace);
27552793
Tokens = Annotate("def Def: Foo {}");
27562794
EXPECT_TOKEN(Tokens[2], tok::colon, TT_InheritanceColon);
@@ -3216,6 +3254,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
32163254

32173255
Tokens = annotate("class Foo<int> f() {}");
32183256
ASSERT_EQ(Tokens.size(), 11u) << Tokens;
3257+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_Unknown);
32193258
EXPECT_TOKEN(Tokens[5], tok::identifier, TT_FunctionDeclarationName);
32203259
EXPECT_TOKEN(Tokens[6], tok::l_paren, TT_FunctionDeclarationLParen);
32213260
EXPECT_TOKEN(Tokens[8], tok::l_brace, TT_FunctionLBrace);
@@ -3224,6 +3263,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
32243263

32253264
Tokens = annotate("template <typename T> class Foo<T> f() {}");
32263265
ASSERT_EQ(Tokens.size(), 16u) << Tokens;
3266+
EXPECT_TOKEN(Tokens[6], tok::identifier, TT_Unknown);
32273267
EXPECT_TOKEN(Tokens[10], tok::identifier, TT_FunctionDeclarationName);
32283268
EXPECT_TOKEN(Tokens[11], tok::l_paren, TT_FunctionDeclarationLParen);
32293269
EXPECT_TOKEN(Tokens[13], tok::l_brace, TT_FunctionLBrace);
@@ -3334,36 +3374,45 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
33343374

33353375
Tokens = annotate("struct ::Foo {};");
33363376
ASSERT_EQ(Tokens.size(), 7u) << Tokens;
3377+
EXPECT_TOKEN(Tokens[2], tok::identifier, TT_ClassHeadName);
33373378
EXPECT_BRACE_KIND(Tokens[3], BK_Block);
33383379
EXPECT_BRACE_KIND(Tokens[4], BK_Block);
33393380

33403381
Tokens = annotate("struct NS::Foo {};");
33413382
ASSERT_EQ(Tokens.size(), 8u) << Tokens;
3383+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_Unknown);
3384+
EXPECT_TOKEN(Tokens[3], tok::identifier, TT_ClassHeadName);
33423385
EXPECT_BRACE_KIND(Tokens[4], BK_Block);
33433386
EXPECT_BRACE_KIND(Tokens[5], BK_Block);
33443387

33453388
Tokens = annotate("struct Foo<int> {};");
33463389
ASSERT_EQ(Tokens.size(), 9u) << Tokens;
3390+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_ClassHeadName);
33473391
EXPECT_BRACE_KIND(Tokens[5], BK_Block);
33483392
EXPECT_BRACE_KIND(Tokens[6], BK_Block);
33493393

33503394
Tokens = annotate("struct Foo<int>::Bar {};");
33513395
ASSERT_EQ(Tokens.size(), 11u) << Tokens;
3396+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_Unknown);
3397+
EXPECT_TOKEN(Tokens[6], tok::identifier, TT_ClassHeadName);
33523398
EXPECT_BRACE_KIND(Tokens[7], BK_Block);
33533399
EXPECT_BRACE_KIND(Tokens[8], BK_Block);
33543400

33553401
Tokens = annotate("struct Foo<int> : Base {};");
33563402
ASSERT_EQ(Tokens.size(), 11u) << Tokens;
3403+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_ClassHeadName);
33573404
EXPECT_BRACE_KIND(Tokens[7], BK_Block);
33583405
EXPECT_BRACE_KIND(Tokens[8], BK_Block);
33593406

33603407
Tokens = annotate("struct Foo final {};");
33613408
ASSERT_EQ(Tokens.size(), 7u) << Tokens;
3409+
EXPECT_TOKEN(Tokens[1], tok::identifier, TT_ClassHeadName);
33623410
EXPECT_BRACE_KIND(Tokens[3], BK_Block);
33633411
EXPECT_BRACE_KIND(Tokens[4], BK_Block);
33643412

33653413
Tokens = annotate("struct [[foo]] [[bar]] Foo final : Base1, Base2 {};");
33663414
ASSERT_EQ(Tokens.size(), 21u) << Tokens;
3415+
EXPECT_TOKEN(Tokens[11], tok::identifier, TT_ClassHeadName);
33673416
EXPECT_BRACE_KIND(Tokens[17], BK_Block);
33683417
EXPECT_BRACE_KIND(Tokens[18], BK_Block);
33693418

@@ -3399,6 +3448,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
33993448
"#endif\n"
34003449
"};");
34013450
ASSERT_EQ(Tokens.size(), 29u) << Tokens;
3451+
EXPECT_TOKEN(Tokens[8], tok::identifier, TT_ClassHeadName);
34023452
EXPECT_BRACE_KIND(Tokens[11], BK_Block);
34033453
EXPECT_BRACE_KIND(Tokens[17], BK_Block);
34043454
EXPECT_BRACE_KIND(Tokens[22], BK_Block);
@@ -3450,6 +3500,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
34503500
Tokens = annotate("a = class extends goog.a {};",
34513501
getGoogleStyle(FormatStyle::LK_JavaScript));
34523502
ASSERT_EQ(Tokens.size(), 11u) << Tokens;
3503+
EXPECT_TOKEN(Tokens[3], tok::identifier, TT_Unknown);
34533504
EXPECT_TOKEN(Tokens[7], tok::l_brace, TT_ClassLBrace);
34543505
EXPECT_BRACE_KIND(Tokens[7], BK_Block);
34553506
EXPECT_TOKEN(Tokens[8], tok::r_brace, TT_ClassRBrace);
@@ -3458,6 +3509,9 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
34583509
Tokens = annotate("a = class Foo extends goog.a {};",
34593510
getGoogleStyle(FormatStyle::LK_JavaScript));
34603511
ASSERT_EQ(Tokens.size(), 12u) << Tokens;
3512+
EXPECT_TOKEN(Tokens[3], tok::identifier, TT_ClassHeadName);
3513+
// FIXME:
3514+
// EXPECT_TOKEN(Tokens[4], tok::identifier, TT_Unknown); // Not StartOfName
34613515
EXPECT_TOKEN(Tokens[8], tok::l_brace, TT_ClassLBrace);
34623516
EXPECT_BRACE_KIND(Tokens[8], BK_Block);
34633517
EXPECT_TOKEN(Tokens[9], tok::r_brace, TT_ClassRBrace);
@@ -3466,6 +3520,8 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
34663520
Tokens = annotate("#define FOO(X) \\\n"
34673521
" struct X##_tag_ {};");
34683522
ASSERT_EQ(Tokens.size(), 14u) << Tokens;
3523+
EXPECT_TOKEN(Tokens[7], tok::identifier, TT_Unknown);
3524+
EXPECT_TOKEN(Tokens[9], tok::identifier, TT_ClassHeadName);
34693525
EXPECT_TOKEN(Tokens[10], tok::l_brace, TT_StructLBrace);
34703526
EXPECT_BRACE_KIND(Tokens[10], BK_Block);
34713527
EXPECT_TOKEN(Tokens[11], tok::r_brace, TT_StructRBrace);
@@ -3476,6 +3532,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
34763532
" void f() { return; } \\\n"
34773533
" };");
34783534
ASSERT_EQ(Tokens.size(), 20u) << Tokens;
3535+
EXPECT_TOKEN(Tokens[4], tok::identifier, TT_ClassHeadName);
34793536
EXPECT_TOKEN(Tokens[8], tok::l_brace, TT_StructLBrace);
34803537
EXPECT_BRACE_KIND(Tokens[8], BK_Block);
34813538
EXPECT_TOKEN(Tokens[10], tok::identifier, TT_FunctionDeclarationName);

0 commit comments

Comments
 (0)