@@ -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)" );
@@ -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