@@ -164,10 +164,8 @@ resource "vault_auth_backend" "blah" {
164
164
},
165
165
},
166
166
{ // source
167
- Type : lang .TokenAttrName ,
168
- Modifiers : []lang.SemanticTokenModifier {
169
- lang .TokenModifierDeprecated ,
170
- },
167
+ Type : lang .TokenAttrName ,
168
+ Modifiers : []lang.SemanticTokenModifier {},
171
169
Range : hcl.Range {
172
170
Filename : "test.tf" ,
173
171
Start : hcl.Pos {
@@ -537,3 +535,285 @@ resource "aws_instance" "beta" {
537
535
t .Fatalf ("unexpected tokens: %s" , diff )
538
536
}
539
537
}
538
+
539
+ func TestDecoder_SemanticTokensInFile_customModifiers (t * testing.T ) {
540
+ bodySchema := & schema.BodySchema {
541
+ Blocks : map [string ]* schema.BlockSchema {
542
+ "module" : {
543
+ SemanticTokenModifier : lang .SemanticTokenModifier ("module" ),
544
+ Labels : []* schema.LabelSchema {
545
+ {
546
+ Name : "name" ,
547
+ SemanticTokenModifier : lang .SemanticTokenModifier ("name" ),
548
+ },
549
+ },
550
+ Body : & schema.BodySchema {
551
+ Attributes : map [string ]* schema.AttributeSchema {
552
+ "count" : {
553
+ Expr : schema .LiteralTypeOnly (cty .Number ),
554
+ },
555
+ "source" : {
556
+ Expr : schema .LiteralTypeOnly (cty .String ),
557
+ IsDeprecated : true ,
558
+ },
559
+ },
560
+ },
561
+ },
562
+ "resource" : {
563
+ SemanticTokenModifier : lang .SemanticTokenModifier ("resource" ),
564
+ Labels : []* schema.LabelSchema {
565
+ {
566
+ Name : "type" ,
567
+ IsDepKey : true ,
568
+ SemanticTokenModifier : lang .SemanticTokenModifier ("type" ),
569
+ },
570
+ {
571
+ Name : "name" ,
572
+ SemanticTokenModifier : lang .SemanticTokenModifier ("name" ),
573
+ },
574
+ },
575
+ Body : & schema.BodySchema {
576
+ Blocks : map [string ]* schema.BlockSchema {
577
+ "provisioner" : {
578
+ SemanticTokenModifier : lang .SemanticTokenModifier ("provisioner" ),
579
+ Labels : []* schema.LabelSchema {
580
+ {
581
+ Name : "type" ,
582
+ SemanticTokenModifier : lang .SemanticTokenModifier ("type" ),
583
+ },
584
+ },
585
+ },
586
+ },
587
+ },
588
+ },
589
+ },
590
+ }
591
+
592
+ testCfg := []byte (`module "ref" {
593
+ source = "./sub"
594
+ count = 1
595
+ }
596
+ resource "vault_auth_backend" "blah" {
597
+ provisioner "inner" {
598
+ test = 42
599
+ }
600
+ }
601
+ ` )
602
+
603
+ f , pDiags := hclsyntax .ParseConfig (testCfg , "test.tf" , hcl .InitialPos )
604
+ if len (pDiags ) > 0 {
605
+ t .Fatal (pDiags )
606
+ }
607
+
608
+ d := testPathDecoder (t , & PathContext {
609
+ Schema : bodySchema ,
610
+ Files : map [string ]* hcl.File {
611
+ "test.tf" : f ,
612
+ },
613
+ })
614
+
615
+ tokens , err := d .SemanticTokensInFile ("test.tf" )
616
+ if err != nil {
617
+ t .Fatal (err )
618
+ }
619
+
620
+ expectedTokens := []lang.SemanticToken {
621
+ { // module
622
+ Type : lang .TokenBlockType ,
623
+ Modifiers : []lang.SemanticTokenModifier {
624
+ lang .SemanticTokenModifier ("module" ),
625
+ },
626
+ Range : hcl.Range {
627
+ Filename : "test.tf" ,
628
+ Start : hcl.Pos {
629
+ Line : 1 ,
630
+ Column : 1 ,
631
+ Byte : 0 ,
632
+ },
633
+ End : hcl.Pos {
634
+ Line : 1 ,
635
+ Column : 7 ,
636
+ Byte : 6 ,
637
+ },
638
+ },
639
+ },
640
+ { // "ref"
641
+ Type : lang .TokenBlockLabel ,
642
+ Modifiers : []lang.SemanticTokenModifier {
643
+ lang .SemanticTokenModifier ("module" ),
644
+ lang .SemanticTokenModifier ("name" ),
645
+ },
646
+ Range : hcl.Range {
647
+ Filename : "test.tf" ,
648
+ Start : hcl.Pos {
649
+ Line : 1 ,
650
+ Column : 8 ,
651
+ Byte : 7 ,
652
+ },
653
+ End : hcl.Pos {
654
+ Line : 1 ,
655
+ Column : 13 ,
656
+ Byte : 12 ,
657
+ },
658
+ },
659
+ },
660
+ { // source
661
+ Type : lang .TokenAttrName ,
662
+ Modifiers : []lang.SemanticTokenModifier {},
663
+ Range : hcl.Range {
664
+ Filename : "test.tf" ,
665
+ Start : hcl.Pos {
666
+ Line : 2 ,
667
+ Column : 3 ,
668
+ Byte : 17 ,
669
+ },
670
+ End : hcl.Pos {
671
+ Line : 2 ,
672
+ Column : 9 ,
673
+ Byte : 23 ,
674
+ },
675
+ },
676
+ },
677
+ { // "./sub"
678
+ Type : lang .TokenString ,
679
+ Modifiers : []lang.SemanticTokenModifier {},
680
+ Range : hcl.Range {
681
+ Filename : "test.tf" ,
682
+ Start : hcl.Pos {
683
+ Line : 2 ,
684
+ Column : 12 ,
685
+ Byte : 26 ,
686
+ },
687
+ End : hcl.Pos {
688
+ Line : 2 ,
689
+ Column : 19 ,
690
+ Byte : 33 ,
691
+ },
692
+ },
693
+ },
694
+ { // count
695
+ Type : lang .TokenAttrName ,
696
+ Modifiers : []lang.SemanticTokenModifier {},
697
+ Range : hcl.Range {
698
+ Filename : "test.tf" ,
699
+ Start : hcl.Pos {
700
+ Line : 3 ,
701
+ Column : 3 ,
702
+ Byte : 36 ,
703
+ },
704
+ End : hcl.Pos {
705
+ Line : 3 ,
706
+ Column : 8 ,
707
+ Byte : 41 ,
708
+ },
709
+ },
710
+ },
711
+ { // 1
712
+ Type : lang .TokenNumber ,
713
+ Modifiers : []lang.SemanticTokenModifier {},
714
+ Range : hcl.Range {
715
+ Filename : "test.tf" ,
716
+ Start : hcl.Pos {
717
+ Line : 3 ,
718
+ Column : 12 ,
719
+ Byte : 45 ,
720
+ },
721
+ End : hcl.Pos {
722
+ Line : 3 ,
723
+ Column : 13 ,
724
+ Byte : 46 ,
725
+ },
726
+ },
727
+ },
728
+ { // resource
729
+ Type : lang .TokenBlockType ,
730
+ Modifiers : []lang.SemanticTokenModifier {
731
+ lang .SemanticTokenModifier ("resource" ),
732
+ },
733
+ Range : hcl.Range {
734
+ Filename : "test.tf" ,
735
+ Start : hcl.Pos {
736
+ Line : 5 ,
737
+ Column : 1 ,
738
+ Byte : 49 ,
739
+ },
740
+ End : hcl.Pos {
741
+ Line : 5 ,
742
+ Column : 9 ,
743
+ Byte : 57 ,
744
+ },
745
+ },
746
+ },
747
+ { // vault_auth_backend
748
+ Type : lang .TokenBlockLabel ,
749
+ Modifiers : []lang.SemanticTokenModifier {
750
+ lang .TokenModifierDependent ,
751
+ lang .SemanticTokenModifier ("resource" ),
752
+ lang .SemanticTokenModifier ("type" ),
753
+ },
754
+ Range : hcl.Range {
755
+ Filename : "test.tf" ,
756
+ Start : hcl.Pos {
757
+ Line : 5 ,
758
+ Column : 10 ,
759
+ Byte : 58 ,
760
+ },
761
+ End : hcl.Pos {
762
+ Line : 5 ,
763
+ Column : 30 ,
764
+ Byte : 78 ,
765
+ },
766
+ },
767
+ },
768
+ { // blah
769
+ Type : lang .TokenBlockLabel ,
770
+ Modifiers : []lang.SemanticTokenModifier {
771
+ lang .SemanticTokenModifier ("resource" ),
772
+ lang .SemanticTokenModifier ("name" ),
773
+ },
774
+ Range : hcl.Range {
775
+ Filename : "test.tf" ,
776
+ Start : hcl.Pos {
777
+ Line : 5 ,
778
+ Column : 31 ,
779
+ Byte : 79 ,
780
+ },
781
+ End : hcl.Pos {
782
+ Line : 5 ,
783
+ Column : 37 ,
784
+ Byte : 85 ,
785
+ },
786
+ },
787
+ },
788
+ { // provisioner
789
+ Type : lang .TokenBlockType ,
790
+ Modifiers : []lang.SemanticTokenModifier {
791
+ lang .SemanticTokenModifier ("resource" ),
792
+ lang .SemanticTokenModifier ("provisioner" ),
793
+ },
794
+ Range : hcl.Range {
795
+ Filename : "test.tf" ,
796
+ Start : hcl.Pos {Line : 6 , Column : 3 , Byte : 90 },
797
+ End : hcl.Pos {Line : 6 , Column : 14 , Byte : 101 },
798
+ },
799
+ },
800
+ { // "inner"
801
+ Type : lang .TokenBlockLabel ,
802
+ Modifiers : []lang.SemanticTokenModifier {
803
+ lang .SemanticTokenModifier ("resource" ),
804
+ lang .SemanticTokenModifier ("provisioner" ),
805
+ lang .SemanticTokenModifier ("type" ),
806
+ },
807
+ Range : hcl.Range {
808
+ Filename : "test.tf" ,
809
+ Start : hcl.Pos {Line : 6 , Column : 15 , Byte : 102 },
810
+ End : hcl.Pos {Line : 6 , Column : 22 , Byte : 109 },
811
+ },
812
+ },
813
+ }
814
+
815
+ diff := cmp .Diff (expectedTokens , tokens )
816
+ if diff != "" {
817
+ t .Fatalf ("unexpected tokens: %s" , diff )
818
+ }
819
+ }
0 commit comments