@@ -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)" );
@@ -1169,6 +1198,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
1169
1198
EXPECT_EQ (Tokens[32 ]->FakeRParens , 1u );
1170
1199
EXPECT_TOKEN (Tokens[33 ], tok::r_paren, TT_Unknown);
1171
1200
EXPECT_TRUE (Tokens[33 ]->ClosesRequiresClause );
1201
+ EXPECT_TOKEN (Tokens[35 ], tok::identifier, TT_Unknown);
1172
1202
1173
1203
Tokens = annotate (" template <typename T>\n "
1174
1204
" void foo(T) noexcept requires Bar<T>;" );
@@ -1250,6 +1280,8 @@ TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
1250
1280
" return number_zero_v<T>; }\n "
1251
1281
" };" );
1252
1282
ASSERT_EQ (Tokens.size (), 44u ) << Tokens;
1283
+ EXPECT_TOKEN (Tokens[6 ], tok::identifier, TT_ClassHeadName);
1284
+ EXPECT_TOKEN (Tokens[11 ], tok::identifier, TT_Unknown);
1253
1285
EXPECT_TOKEN (Tokens[13 ], tok::kw_requires, TT_RequiresClause);
1254
1286
EXPECT_TOKEN (Tokens[14 ], tok::kw_requires, TT_RequiresExpression);
1255
1287
EXPECT_TOKEN (Tokens[15 ], tok::l_brace, TT_RequiresExpressionLBrace);
@@ -1261,6 +1293,8 @@ TEST_F(TokenAnnotatorTest, UnderstandsRequiresClausesAndConcepts) {
1261
1293
annotate (" template <class A, class B> concept C ="
1262
1294
" std::same_as<std::iter_value_t<A>, std::iter_value_t<B>>;" );
1263
1295
ASSERT_EQ (Tokens.size (), 31u ) << Tokens;
1296
+ EXPECT_TOKEN (Tokens[3 ], tok::identifier, TT_Unknown);
1297
+ EXPECT_TOKEN (Tokens[6 ], tok::identifier, TT_Unknown);
1264
1298
EXPECT_TOKEN (Tokens[8 ], tok::kw_concept, TT_Unknown);
1265
1299
EXPECT_TOKEN (Tokens[14 ], tok::less, TT_TemplateOpener);
1266
1300
EXPECT_TOKEN (Tokens[18 ], tok::less, TT_TemplateOpener);
@@ -1877,6 +1911,7 @@ TEST_F(TokenAnnotatorTest, UnderstandsLambdas) {
1877
1911
ASSERT_EQ (Tokens.size (), 12u ) << Tokens;
1878
1912
EXPECT_TOKEN (Tokens[0 ], tok::l_square, TT_LambdaLSquare);
1879
1913
EXPECT_TOKEN (Tokens[2 ], tok::arrow, TT_LambdaArrow);
1914
+ EXPECT_TOKEN (Tokens[4 ], tok::identifier, TT_Unknown);
1880
1915
EXPECT_TOKEN (Tokens[5 ], tok::l_brace, TT_LambdaLBrace);
1881
1916
1882
1917
Tokens = annotate (" foo([&](u32 bar) __attribute__((attr)) -> void {});" );
@@ -2757,6 +2792,7 @@ TEST_F(TokenAnnotatorTest, UnderstandTableGenTokens) {
2757
2792
2758
2793
// Structured statements.
2759
2794
Tokens = Annotate (" class Foo {}" );
2795
+ EXPECT_TOKEN (Tokens[1 ], tok::identifier, TT_StartOfName);
2760
2796
EXPECT_TOKEN (Tokens[2 ], tok::l_brace, TT_FunctionLBrace);
2761
2797
Tokens = Annotate (" def Def: Foo {}" );
2762
2798
EXPECT_TOKEN (Tokens[2 ], tok::colon, TT_InheritanceColon);
@@ -3222,6 +3258,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
3222
3258
3223
3259
Tokens = annotate (" class Foo<int> f() {}" );
3224
3260
ASSERT_EQ (Tokens.size (), 11u ) << Tokens;
3261
+ EXPECT_TOKEN (Tokens[1 ], tok::identifier, TT_Unknown);
3225
3262
EXPECT_TOKEN (Tokens[5 ], tok::identifier, TT_FunctionDeclarationName);
3226
3263
EXPECT_TOKEN (Tokens[6 ], tok::l_paren, TT_FunctionDeclarationLParen);
3227
3264
EXPECT_TOKEN (Tokens[8 ], tok::l_brace, TT_FunctionLBrace);
@@ -3230,6 +3267,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
3230
3267
3231
3268
Tokens = annotate (" template <typename T> class Foo<T> f() {}" );
3232
3269
ASSERT_EQ (Tokens.size (), 16u ) << Tokens;
3270
+ EXPECT_TOKEN (Tokens[6 ], tok::identifier, TT_Unknown);
3233
3271
EXPECT_TOKEN (Tokens[10 ], tok::identifier, TT_FunctionDeclarationName);
3234
3272
EXPECT_TOKEN (Tokens[11 ], tok::l_paren, TT_FunctionDeclarationLParen);
3235
3273
EXPECT_TOKEN (Tokens[13 ], tok::l_brace, TT_FunctionLBrace);
@@ -3340,36 +3378,45 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
3340
3378
3341
3379
Tokens = annotate (" struct ::Foo {};" );
3342
3380
ASSERT_EQ (Tokens.size (), 7u ) << Tokens;
3381
+ EXPECT_TOKEN (Tokens[2 ], tok::identifier, TT_ClassHeadName);
3343
3382
EXPECT_BRACE_KIND (Tokens[3 ], BK_Block);
3344
3383
EXPECT_BRACE_KIND (Tokens[4 ], BK_Block);
3345
3384
3346
3385
Tokens = annotate (" struct NS::Foo {};" );
3347
3386
ASSERT_EQ (Tokens.size (), 8u ) << Tokens;
3387
+ EXPECT_TOKEN (Tokens[1 ], tok::identifier, TT_Unknown);
3388
+ EXPECT_TOKEN (Tokens[3 ], tok::identifier, TT_ClassHeadName);
3348
3389
EXPECT_BRACE_KIND (Tokens[4 ], BK_Block);
3349
3390
EXPECT_BRACE_KIND (Tokens[5 ], BK_Block);
3350
3391
3351
3392
Tokens = annotate (" struct Foo<int> {};" );
3352
3393
ASSERT_EQ (Tokens.size (), 9u ) << Tokens;
3394
+ EXPECT_TOKEN (Tokens[1 ], tok::identifier, TT_ClassHeadName);
3353
3395
EXPECT_BRACE_KIND (Tokens[5 ], BK_Block);
3354
3396
EXPECT_BRACE_KIND (Tokens[6 ], BK_Block);
3355
3397
3356
3398
Tokens = annotate (" struct Foo<int>::Bar {};" );
3357
3399
ASSERT_EQ (Tokens.size (), 11u ) << Tokens;
3400
+ EXPECT_TOKEN (Tokens[1 ], tok::identifier, TT_Unknown);
3401
+ EXPECT_TOKEN (Tokens[6 ], tok::identifier, TT_ClassHeadName);
3358
3402
EXPECT_BRACE_KIND (Tokens[7 ], BK_Block);
3359
3403
EXPECT_BRACE_KIND (Tokens[8 ], BK_Block);
3360
3404
3361
3405
Tokens = annotate (" struct Foo<int> : Base {};" );
3362
3406
ASSERT_EQ (Tokens.size (), 11u ) << Tokens;
3407
+ EXPECT_TOKEN (Tokens[1 ], tok::identifier, TT_ClassHeadName);
3363
3408
EXPECT_BRACE_KIND (Tokens[7 ], BK_Block);
3364
3409
EXPECT_BRACE_KIND (Tokens[8 ], BK_Block);
3365
3410
3366
3411
Tokens = annotate (" struct Foo final {};" );
3367
3412
ASSERT_EQ (Tokens.size (), 7u ) << Tokens;
3413
+ EXPECT_TOKEN (Tokens[1 ], tok::identifier, TT_ClassHeadName);
3368
3414
EXPECT_BRACE_KIND (Tokens[3 ], BK_Block);
3369
3415
EXPECT_BRACE_KIND (Tokens[4 ], BK_Block);
3370
3416
3371
3417
Tokens = annotate (" struct [[foo]] [[bar]] Foo final : Base1, Base2 {};" );
3372
3418
ASSERT_EQ (Tokens.size (), 21u ) << Tokens;
3419
+ EXPECT_TOKEN (Tokens[11 ], tok::identifier, TT_ClassHeadName);
3373
3420
EXPECT_BRACE_KIND (Tokens[17 ], BK_Block);
3374
3421
EXPECT_BRACE_KIND (Tokens[18 ], BK_Block);
3375
3422
@@ -3405,6 +3452,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
3405
3452
" #endif\n "
3406
3453
" };" );
3407
3454
ASSERT_EQ (Tokens.size (), 29u ) << Tokens;
3455
+ EXPECT_TOKEN (Tokens[8 ], tok::identifier, TT_ClassHeadName);
3408
3456
EXPECT_BRACE_KIND (Tokens[11 ], BK_Block);
3409
3457
EXPECT_BRACE_KIND (Tokens[17 ], BK_Block);
3410
3458
EXPECT_BRACE_KIND (Tokens[22 ], BK_Block);
@@ -3456,6 +3504,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
3456
3504
Tokens = annotate (" a = class extends goog.a {};" ,
3457
3505
getGoogleStyle (FormatStyle::LK_JavaScript));
3458
3506
ASSERT_EQ (Tokens.size (), 11u ) << Tokens;
3507
+ EXPECT_TOKEN (Tokens[3 ], tok::identifier, TT_Unknown);
3459
3508
EXPECT_TOKEN (Tokens[7 ], tok::l_brace, TT_ClassLBrace);
3460
3509
EXPECT_BRACE_KIND (Tokens[7 ], BK_Block);
3461
3510
EXPECT_TOKEN (Tokens[8 ], tok::r_brace, TT_ClassRBrace);
@@ -3464,6 +3513,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
3464
3513
Tokens = annotate (" a = class Foo extends goog.a {};" ,
3465
3514
getGoogleStyle (FormatStyle::LK_JavaScript));
3466
3515
ASSERT_EQ (Tokens.size (), 12u ) << Tokens;
3516
+ EXPECT_TOKEN (Tokens[3 ], tok::identifier, TT_ClassHeadName);
3467
3517
EXPECT_TOKEN (Tokens[4 ], tok::identifier, TT_Unknown); // Not TT_StartOfName
3468
3518
EXPECT_TOKEN (Tokens[8 ], tok::l_brace, TT_ClassLBrace);
3469
3519
EXPECT_BRACE_KIND (Tokens[8 ], BK_Block);
@@ -3473,6 +3523,8 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
3473
3523
Tokens = annotate (" #define FOO(X) \\\n "
3474
3524
" struct X##_tag_ {};" );
3475
3525
ASSERT_EQ (Tokens.size (), 14u ) << Tokens;
3526
+ EXPECT_TOKEN (Tokens[7 ], tok::identifier, TT_Unknown);
3527
+ EXPECT_TOKEN (Tokens[9 ], tok::identifier, TT_ClassHeadName);
3476
3528
EXPECT_TOKEN (Tokens[10 ], tok::l_brace, TT_StructLBrace);
3477
3529
EXPECT_BRACE_KIND (Tokens[10 ], BK_Block);
3478
3530
EXPECT_TOKEN (Tokens[11 ], tok::r_brace, TT_StructRBrace);
@@ -3483,6 +3535,7 @@ TEST_F(TokenAnnotatorTest, BraceKind) {
3483
3535
" void f() { return; } \\\n "
3484
3536
" };" );
3485
3537
ASSERT_EQ (Tokens.size (), 20u ) << Tokens;
3538
+ EXPECT_TOKEN (Tokens[4 ], tok::identifier, TT_ClassHeadName);
3486
3539
EXPECT_TOKEN (Tokens[8 ], tok::l_brace, TT_StructLBrace);
3487
3540
EXPECT_BRACE_KIND (Tokens[8 ], BK_Block);
3488
3541
EXPECT_TOKEN (Tokens[10 ], tok::identifier, TT_FunctionDeclarationName);
0 commit comments