@@ -479,11 +479,13 @@ TEST_F(TokenAnnotatorTest, UnderstandsUsesOfPlusAndMinus) {
479479TEST_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
501504TEST_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
579603TEST_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
723751TEST_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