@@ -479,11 +479,13 @@ TEST_F(TokenAnnotatorTest, UnderstandsUsesOfPlusAndMinus) {
479
479
TEST_F (TokenAnnotatorTest, UnderstandsClasses) {
480
480
auto Tokens = annotate (" class C {};" );
481
481
ASSERT_EQ (Tokens.size (), 6u ) << Tokens;
482
+ EXPECT_TOKEN (Tokens[1 ], tok::identifier, TT_ClassHeadName);
482
483
EXPECT_TOKEN (Tokens[2 ], tok::l_brace, TT_ClassLBrace);
483
484
EXPECT_TOKEN (Tokens[3 ], tok::r_brace, TT_ClassRBrace);
484
485
485
486
Tokens = annotate (" const class C {} c;" );
486
487
ASSERT_EQ (Tokens.size (), 8u ) << Tokens;
488
+ EXPECT_TOKEN (Tokens[2 ], tok::identifier, TT_ClassHeadName);
487
489
EXPECT_TOKEN (Tokens[3 ], tok::l_brace, TT_ClassLBrace);
488
490
EXPECT_TOKEN (Tokens[4 ], tok::r_brace, TT_ClassRBrace);
489
491
@@ -494,41 +496,48 @@ TEST_F(TokenAnnotatorTest, UnderstandsClasses) {
494
496
495
497
Tokens = annotate (" class [[deprecated(\"\" )]] C { int i; };" );
496
498
ASSERT_EQ (Tokens.size (), 17u ) << Tokens;
499
+ EXPECT_TOKEN (Tokens[9 ], tok::identifier, TT_ClassHeadName);
497
500
EXPECT_TOKEN (Tokens[10 ], tok::l_brace, TT_ClassLBrace);
498
501
EXPECT_TOKEN (Tokens[14 ], tok::r_brace, TT_ClassRBrace);
499
502
}
500
503
501
504
TEST_F (TokenAnnotatorTest, UnderstandsStructs) {
502
505
auto Tokens = annotate (" struct S {};" );
503
506
ASSERT_EQ (Tokens.size (), 6u ) << Tokens;
507
+ EXPECT_TOKEN (Tokens[1 ], tok::identifier, TT_ClassHeadName);
504
508
EXPECT_TOKEN (Tokens[2 ], tok::l_brace, TT_StructLBrace);
505
509
EXPECT_TOKEN (Tokens[3 ], tok::r_brace, TT_StructRBrace);
506
510
507
511
Tokens = annotate (" struct macro(a) S {};" );
508
512
ASSERT_EQ (Tokens.size (), 10u ) << Tokens;
513
+ EXPECT_TOKEN (Tokens[5 ], tok::identifier, TT_ClassHeadName);
509
514
EXPECT_TOKEN (Tokens[6 ], tok::l_brace, TT_StructLBrace);
510
515
EXPECT_TOKEN (Tokens[7 ], tok::r_brace, TT_StructRBrace);
511
516
512
517
Tokens = annotate (" struct EXPORT_MACRO [[nodiscard]] C { int i; };" );
513
518
ASSERT_EQ (Tokens.size (), 15u ) << Tokens;
519
+ EXPECT_TOKEN (Tokens[7 ], tok::identifier, TT_ClassHeadName);
514
520
EXPECT_TOKEN (Tokens[8 ], tok::l_brace, TT_StructLBrace);
515
521
EXPECT_TOKEN (Tokens[12 ], tok::r_brace, TT_StructRBrace);
516
522
517
523
Tokens = annotate (" struct [[deprecated]] [[nodiscard]] C { int i; };" );
518
524
ASSERT_EQ (Tokens.size (), 19u ) << Tokens;
525
+ EXPECT_TOKEN (Tokens[11 ], tok::identifier, TT_ClassHeadName);
519
526
EXPECT_TOKEN (Tokens[12 ], tok::l_brace, TT_StructLBrace);
520
527
EXPECT_TOKEN (Tokens[16 ], tok::r_brace, TT_StructRBrace);
521
528
522
529
Tokens = annotate (" struct macro(a) S {\n "
523
530
" void f(T &t);\n "
524
531
" };" );
525
532
ASSERT_EQ (Tokens.size (), 18u ) << Tokens;
533
+ EXPECT_TOKEN (Tokens[5 ], tok::identifier, TT_ClassHeadName);
526
534
EXPECT_TOKEN (Tokens[6 ], tok::l_brace, TT_StructLBrace);
527
535
EXPECT_TOKEN (Tokens[11 ], tok::amp, TT_PointerOrReference);
528
536
EXPECT_TOKEN (Tokens[15 ], tok::r_brace, TT_StructRBrace);
529
537
530
538
Tokens = annotate (" template <typename T> struct S<const T[N]> {};" );
531
539
ASSERT_EQ (Tokens.size (), 18u ) << Tokens;
540
+ EXPECT_TOKEN (Tokens[6 ], tok::identifier, TT_ClassHeadName);
532
541
EXPECT_TOKEN (Tokens[7 ], tok::less, TT_TemplateOpener);
533
542
EXPECT_TOKEN (Tokens[10 ], tok::l_square, TT_ArraySubscriptLSquare);
534
543
EXPECT_TOKEN (Tokens[13 ], tok::greater, TT_TemplateCloser);
@@ -537,6 +546,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsStructs) {
537
546
538
547
Tokens = annotate (" template <typename T> struct S<T const[N]> {};" );
539
548
ASSERT_EQ (Tokens.size (), 18u ) << Tokens;
549
+ EXPECT_TOKEN (Tokens[6 ], tok::identifier, TT_ClassHeadName);
540
550
EXPECT_TOKEN (Tokens[7 ], tok::less, TT_TemplateOpener);
541
551
EXPECT_TOKEN (Tokens[10 ], tok::l_square, TT_ArraySubscriptLSquare);
542
552
EXPECT_TOKEN (Tokens[13 ], tok::greater, TT_TemplateCloser);
@@ -547,6 +557,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsStructs) {
547
557
" void f(T const (&a)[n]);\n "
548
558
" };" );
549
559
ASSERT_EQ (Tokens.size (), 35u ) << Tokens;
560
+ EXPECT_TOKEN (Tokens[9 ], tok::identifier, TT_ClassHeadName);
550
561
EXPECT_TOKEN (Tokens[10 ], tok::less, TT_TemplateOpener);
551
562
EXPECT_TOKEN (Tokens[13 ], tok::l_square, TT_ArraySubscriptLSquare);
552
563
EXPECT_TOKEN (Tokens[16 ], tok::greater, TT_TemplateCloser);
@@ -558,12 +569,24 @@ TEST_F(TokenAnnotatorTest, UnderstandsStructs) {
558
569
559
570
Tokens = annotate (" template <typename T, enum E e> struct S {};" );
560
571
ASSERT_EQ (Tokens.size (), 15u ) << Tokens;
572
+ EXPECT_TOKEN (Tokens[10 ], tok::identifier, TT_ClassHeadName);
561
573
EXPECT_TOKEN (Tokens[11 ], tok::l_brace, TT_StructLBrace);
562
574
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
+
563
585
constexpr StringRef Code{" struct EXPORT StructName {};" };
564
586
565
587
Tokens = annotate (Code);
566
588
ASSERT_EQ (Tokens.size (), 7u ) << Tokens;
589
+ EXPECT_TOKEN (Tokens[2 ], tok::identifier, TT_ClassHeadName);
567
590
EXPECT_TOKEN (Tokens[3 ], tok::l_brace, TT_StructLBrace);
568
591
EXPECT_TOKEN (Tokens[4 ], tok::r_brace, TT_StructRBrace);
569
592
@@ -572,18 +595,21 @@ TEST_F(TokenAnnotatorTest, UnderstandsStructs) {
572
595
Tokens = annotate (Code, Style );
573
596
ASSERT_EQ (Tokens.size (), 7u ) << Tokens;
574
597
EXPECT_TOKEN (Tokens[1 ], tok::identifier, TT_AttributeMacro);
598
+ EXPECT_TOKEN (Tokens[2 ], tok::identifier, TT_ClassHeadName);
575
599
EXPECT_TOKEN (Tokens[3 ], tok::l_brace, TT_StructLBrace);
576
600
EXPECT_TOKEN (Tokens[4 ], tok::r_brace, TT_StructRBrace);
577
601
}
578
602
579
603
TEST_F (TokenAnnotatorTest, UnderstandsUnions) {
580
604
auto Tokens = annotate (" union U {};" );
581
605
ASSERT_EQ (Tokens.size (), 6u ) << Tokens;
606
+ EXPECT_TOKEN (Tokens[1 ], tok::identifier, TT_ClassHeadName);
582
607
EXPECT_TOKEN (Tokens[2 ], tok::l_brace, TT_UnionLBrace);
583
608
EXPECT_TOKEN (Tokens[3 ], tok::r_brace, TT_UnionRBrace);
584
609
585
610
Tokens = annotate (" union U { void f() { return; } };" );
586
611
ASSERT_EQ (Tokens.size (), 14u ) << Tokens;
612
+ EXPECT_TOKEN (Tokens[1 ], tok::identifier, TT_ClassHeadName);
587
613
EXPECT_TOKEN (Tokens[2 ], tok::l_brace, TT_UnionLBrace);
588
614
EXPECT_TOKEN (Tokens[7 ], tok::l_brace, TT_FunctionLBrace);
589
615
EXPECT_TOKEN (Tokens[11 ], tok::r_brace, TT_UnionRBrace);
@@ -716,8 +742,10 @@ TEST_F(TokenAnnotatorTest, UnderstandsTemplateTemplateParameters) {
716
742
EXPECT_TOKEN (Tokens[11 ], tok::less, TT_TemplateOpener);
717
743
EXPECT_TOKEN (Tokens[14 ], tok::greater, TT_TemplateCloser);
718
744
EXPECT_FALSE (Tokens[14 ]->ClosesTemplateDeclaration );
745
+ EXPECT_TOKEN (Tokens[16 ], tok::identifier, TT_Unknown);
719
746
EXPECT_TOKEN (Tokens[21 ], tok::greater, TT_TemplateCloser);
720
747
EXPECT_TRUE (Tokens[21 ]->ClosesTemplateDeclaration );
748
+ EXPECT_TOKEN (Tokens[23 ], tok::identifier, TT_ClassHeadName);
721
749
}
722
750
723
751
TEST_F (TokenAnnotatorTest, UnderstandsWhitespaceSensitiveMacros) {
@@ -800,6 +828,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsCasts) {
800
828
801
829
Tokens = annotate (" return (struct foo){};" );
802
830
ASSERT_EQ (Tokens.size (), 9u ) << Tokens;
831
+ EXPECT_TOKEN (Tokens[3 ], tok::identifier, TT_Unknown);
803
832
EXPECT_TOKEN (Tokens[4 ], tok::r_paren, TT_CastRParen);
804
833
805
834
Tokens = annotate (" #define FOO(bar) foo((uint64_t)&bar)" );
@@ -1167,6 +1196,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
1167
1196
EXPECT_EQ (Tokens[32 ]->FakeRParens , 1u );
1168
1197
EXPECT_TOKEN (Tokens[33 ], tok::r_paren, TT_Unknown);
1169
1198
EXPECT_TRUE (Tokens[33 ]->ClosesRequiresClause );
1199
+ EXPECT_TOKEN (Tokens[35 ], tok::identifier, TT_Unknown);
1170
1200
1171
1201
Tokens = annotate (" template <typename T>\n "
1172
1202
" void foo(T) noexcept requires Bar<T>;" );
@@ -1248,6 +1278,8 @@ TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
1248
1278
" return number_zero_v<T>; }\n "
1249
1279
" };" );
1250
1280
ASSERT_EQ (Tokens.size (), 44u ) << Tokens;
1281
+ EXPECT_TOKEN (Tokens[6 ], tok::identifier, TT_ClassHeadName);
1282
+ EXPECT_TOKEN (Tokens[11 ], tok::identifier, TT_Unknown);
1251
1283
EXPECT_TOKEN (Tokens[13 ], tok::kw_requires, TT_RequiresClause);
1252
1284
EXPECT_TOKEN (Tokens[14 ], tok::kw_requires, TT_RequiresExpression);
1253
1285
EXPECT_TOKEN (Tokens[15 ], tok::l_brace, TT_RequiresExpressionLBrace);
@@ -1259,6 +1291,8 @@ TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
1259
1291
annotate (" template <class A, class B> concept C ="
1260
1292
" std::same_as<std::iter_value_t<A>, std::iter_value_t<B>>;" );
1261
1293
ASSERT_EQ (Tokens.size (), 31u ) << Tokens;
1294
+ EXPECT_TOKEN (Tokens[3 ], tok::identifier, TT_Unknown);
1295
+ EXPECT_TOKEN (Tokens[6 ], tok::identifier, TT_Unknown);
1262
1296
EXPECT_TOKEN (Tokens[8 ], tok::kw_concept, TT_Unknown);
1263
1297
EXPECT_TOKEN (Tokens[14 ], tok::less, TT_TemplateOpener);
1264
1298
EXPECT_TOKEN (Tokens[18 ], tok::less, TT_TemplateOpener);
@@ -1875,6 +1909,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsLambdas) {
1875
1909
ASSERT_EQ (Tokens.size (), 12u ) << Tokens;
1876
1910
EXPECT_TOKEN (Tokens[0 ], tok::l_square, TT_LambdaLSquare);
1877
1911
EXPECT_TOKEN (Tokens[2 ], tok::arrow, TT_LambdaArrow);
1912
+ EXPECT_TOKEN (Tokens[4 ], tok::identifier, TT_Unknown);
1878
1913
EXPECT_TOKEN (Tokens[5 ], tok::l_brace, TT_LambdaLBrace);
1879
1914
1880
1915
Tokens = annotate (" foo([&](u32 bar) __attribute__((attr)) -> void {});" );
@@ -2755,6 +2790,7 @@ TEST_F(TokenAnnotatorTest, UnderstandTableGenTokens) {
2755
2790
2756
2791
// Structured statements.
2757
2792
Tokens = Annotate (" class Foo {}" );
2793
+ EXPECT_TOKEN (Tokens[1 ], tok::identifier, TT_StartOfName);
2758
2794
EXPECT_TOKEN (Tokens[2 ], tok::l_brace, TT_FunctionLBrace);
2759
2795
Tokens = Annotate (" def Def: Foo {}" );
2760
2796
EXPECT_TOKEN (Tokens[2 ], tok::colon, TT_InheritanceColon);
@@ -3220,6 +3256,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
3220
3256
3221
3257
Tokens = annotate (" class Foo<int> f() {}" );
3222
3258
ASSERT_EQ (Tokens.size (), 11u ) << Tokens;
3259
+ EXPECT_TOKEN (Tokens[1 ], tok::identifier, TT_Unknown);
3223
3260
EXPECT_TOKEN (Tokens[5 ], tok::identifier, TT_FunctionDeclarationName);
3224
3261
EXPECT_TOKEN (Tokens[6 ], tok::l_paren, TT_FunctionDeclarationLParen);
3225
3262
EXPECT_TOKEN (Tokens[8 ], tok::l_brace, TT_FunctionLBrace);
@@ -3228,6 +3265,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
3228
3265
3229
3266
Tokens = annotate (" template <typename T> class Foo<T> f() {}" );
3230
3267
ASSERT_EQ (Tokens.size (), 16u ) << Tokens;
3268
+ EXPECT_TOKEN (Tokens[6 ], tok::identifier, TT_Unknown);
3231
3269
EXPECT_TOKEN (Tokens[10 ], tok::identifier, TT_FunctionDeclarationName);
3232
3270
EXPECT_TOKEN (Tokens[11 ], tok::l_paren, TT_FunctionDeclarationLParen);
3233
3271
EXPECT_TOKEN (Tokens[13 ], tok::l_brace, TT_FunctionLBrace);
@@ -3338,36 +3376,45 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
3338
3376
3339
3377
Tokens = annotate (" struct ::Foo {};" );
3340
3378
ASSERT_EQ (Tokens.size (), 7u ) << Tokens;
3379
+ EXPECT_TOKEN (Tokens[2 ], tok::identifier, TT_ClassHeadName);
3341
3380
EXPECT_BRACE_KIND (Tokens[3 ], BK_Block);
3342
3381
EXPECT_BRACE_KIND (Tokens[4 ], BK_Block);
3343
3382
3344
3383
Tokens = annotate (" struct NS::Foo {};" );
3345
3384
ASSERT_EQ (Tokens.size (), 8u ) << Tokens;
3385
+ EXPECT_TOKEN (Tokens[1 ], tok::identifier, TT_Unknown);
3386
+ EXPECT_TOKEN (Tokens[3 ], tok::identifier, TT_ClassHeadName);
3346
3387
EXPECT_BRACE_KIND (Tokens[4 ], BK_Block);
3347
3388
EXPECT_BRACE_KIND (Tokens[5 ], BK_Block);
3348
3389
3349
3390
Tokens = annotate (" struct Foo<int> {};" );
3350
3391
ASSERT_EQ (Tokens.size (), 9u ) << Tokens;
3392
+ EXPECT_TOKEN (Tokens[1 ], tok::identifier, TT_ClassHeadName);
3351
3393
EXPECT_BRACE_KIND (Tokens[5 ], BK_Block);
3352
3394
EXPECT_BRACE_KIND (Tokens[6 ], BK_Block);
3353
3395
3354
3396
Tokens = annotate (" struct Foo<int>::Bar {};" );
3355
3397
ASSERT_EQ (Tokens.size (), 11u ) << Tokens;
3398
+ EXPECT_TOKEN (Tokens[1 ], tok::identifier, TT_Unknown);
3399
+ EXPECT_TOKEN (Tokens[6 ], tok::identifier, TT_ClassHeadName);
3356
3400
EXPECT_BRACE_KIND (Tokens[7 ], BK_Block);
3357
3401
EXPECT_BRACE_KIND (Tokens[8 ], BK_Block);
3358
3402
3359
3403
Tokens = annotate (" struct Foo<int> : Base {};" );
3360
3404
ASSERT_EQ (Tokens.size (), 11u ) << Tokens;
3405
+ EXPECT_TOKEN (Tokens[1 ], tok::identifier, TT_ClassHeadName);
3361
3406
EXPECT_BRACE_KIND (Tokens[7 ], BK_Block);
3362
3407
EXPECT_BRACE_KIND (Tokens[8 ], BK_Block);
3363
3408
3364
3409
Tokens = annotate (" struct Foo final {};" );
3365
3410
ASSERT_EQ (Tokens.size (), 7u ) << Tokens;
3411
+ EXPECT_TOKEN (Tokens[1 ], tok::identifier, TT_ClassHeadName);
3366
3412
EXPECT_BRACE_KIND (Tokens[3 ], BK_Block);
3367
3413
EXPECT_BRACE_KIND (Tokens[4 ], BK_Block);
3368
3414
3369
3415
Tokens = annotate (" struct [[foo]] [[bar]] Foo final : Base1, Base2 {};" );
3370
3416
ASSERT_EQ (Tokens.size (), 21u ) << Tokens;
3417
+ EXPECT_TOKEN (Tokens[11 ], tok::identifier, TT_ClassHeadName);
3371
3418
EXPECT_BRACE_KIND (Tokens[17 ], BK_Block);
3372
3419
EXPECT_BRACE_KIND (Tokens[18 ], BK_Block);
3373
3420
@@ -3403,6 +3450,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
3403
3450
" #endif\n "
3404
3451
" };" );
3405
3452
ASSERT_EQ (Tokens.size (), 29u ) << Tokens;
3453
+ EXPECT_TOKEN (Tokens[8 ], tok::identifier, TT_ClassHeadName);
3406
3454
EXPECT_BRACE_KIND (Tokens[11 ], BK_Block);
3407
3455
EXPECT_BRACE_KIND (Tokens[17 ], BK_Block);
3408
3456
EXPECT_BRACE_KIND (Tokens[22 ], BK_Block);
@@ -3454,6 +3502,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
3454
3502
Tokens = annotate (" a = class extends goog.a {};" ,
3455
3503
getGoogleStyle (FormatStyle::LK_JavaScript));
3456
3504
ASSERT_EQ (Tokens.size (), 11u ) << Tokens;
3505
+ EXPECT_TOKEN (Tokens[3 ], tok::identifier, TT_Unknown);
3457
3506
EXPECT_TOKEN (Tokens[7 ], tok::l_brace, TT_ClassLBrace);
3458
3507
EXPECT_BRACE_KIND (Tokens[7 ], BK_Block);
3459
3508
EXPECT_TOKEN (Tokens[8 ], tok::r_brace, TT_ClassRBrace);
@@ -3462,6 +3511,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
3462
3511
Tokens = annotate (" a = class Foo extends goog.a {};" ,
3463
3512
getGoogleStyle (FormatStyle::LK_JavaScript));
3464
3513
ASSERT_EQ (Tokens.size (), 12u ) << Tokens;
3514
+ EXPECT_TOKEN (Tokens[3 ], tok::identifier, TT_ClassHeadName);
3465
3515
EXPECT_TOKEN (Tokens[4 ], tok::identifier, TT_Unknown); // Not TT_StartOfName
3466
3516
EXPECT_TOKEN (Tokens[8 ], tok::l_brace, TT_ClassLBrace);
3467
3517
EXPECT_BRACE_KIND (Tokens[8 ], BK_Block);
@@ -3471,6 +3521,8 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
3471
3521
Tokens = annotate (" #define FOO(X) \\\n "
3472
3522
" struct X##_tag_ {};" );
3473
3523
ASSERT_EQ (Tokens.size (), 14u ) << Tokens;
3524
+ EXPECT_TOKEN (Tokens[7 ], tok::identifier, TT_Unknown);
3525
+ EXPECT_TOKEN (Tokens[9 ], tok::identifier, TT_ClassHeadName);
3474
3526
EXPECT_TOKEN (Tokens[10 ], tok::l_brace, TT_StructLBrace);
3475
3527
EXPECT_BRACE_KIND (Tokens[10 ], BK_Block);
3476
3528
EXPECT_TOKEN (Tokens[11 ], tok::r_brace, TT_StructRBrace);
@@ -3481,6 +3533,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
3481
3533
" void f() { return; } \\\n "
3482
3534
" };" );
3483
3535
ASSERT_EQ (Tokens.size (), 20u ) << Tokens;
3536
+ EXPECT_TOKEN (Tokens[4 ], tok::identifier, TT_ClassHeadName);
3484
3537
EXPECT_TOKEN (Tokens[8 ], tok::l_brace, TT_StructLBrace);
3485
3538
EXPECT_BRACE_KIND (Tokens[8 ], BK_Block);
3486
3539
EXPECT_TOKEN (Tokens[10 ], tok::identifier, TT_FunctionDeclarationName);
0 commit comments