@@ -671,6 +671,120 @@ function! s:functionCallHighlightGroup(testname, value)
671
671
endtry
672
672
endfunc
673
673
674
+ function ! Test_gomodToolchainVersion_highlight () abort
675
+ try
676
+ syntax on
677
+
678
+ let g: go_gopls_enabled = 0
679
+ let l: wd = getcwd ()
680
+ let l: dir = gotest#write_file (' gomodtest/go.mod' , [
681
+ \ ' module github.com/fatih/vim-go' ,
682
+ \ ' ' ,
683
+ \ ' toolchain default' ,
684
+ \ ' toolchain go1' ,
685
+ \ ' toolchain go1' ,
686
+ \ ' toolchain go1.21' ,
687
+ \ ' toolchain go1.21rc3' ,
688
+ \ ' toolchain go1.21.3-somesuffix' ,
689
+ \ ' toolchain go1.21rc2-somesuffix' ,
690
+ \ ' toolchain go1.21 some-suffix' ,
691
+ \ ' ' ])
692
+
693
+ let l: lineno = 3
694
+ let l: lineclose = line (' $' )
695
+ while l: lineno < l: lineclose
696
+ let l: line = getline (l: lineno )
697
+ let l: split_idx = stridx (l: line , ' ' )
698
+ let l: idx = 0
699
+ let l: col = 1
700
+
701
+ while l: idx < len (l: line ) - 1
702
+ call cursor (l: lineno , l: col )
703
+ let l: synname = synIDattr (synID (l: lineno , l: col , 1 ), ' name' )
704
+ let l: errlen = len (v: errors )
705
+
706
+ if l: idx < l: split_idx
707
+ call assert_equal (' gomodToolchain' , l: synname , ' toolchain on line ' . l: lineno . ' and col ' . l: col )
708
+ elseif l: idx > l: split_idx
709
+ call assert_equal (' gomodToolchainVersion' , l: synname , ' version on line ' . l: lineno . ' and col ' . l: col )
710
+ endif
711
+
712
+ if l: errlen < len (v: errors )
713
+ break
714
+ endif
715
+
716
+ let l: col += 1
717
+ let l: idx += 1
718
+ endwhile
719
+ let l: lineno += 1
720
+ endwhile
721
+
722
+ finally
723
+ call go#util#Chdir (l: wd )
724
+ call delete (l: dir , ' rf' )
725
+ endtry
726
+ endfunc
727
+
728
+ function ! Test_gomodToolchainVersion_invalid_highlight () abort
729
+ try
730
+ syntax on
731
+ let g: go_gopls_enabled = 0
732
+ let l: wd = getcwd ()
733
+
734
+ " 1. No release candidate for patch versions
735
+ " 2+3. Release version can only be followed by 'rcN' or a valid suffix
736
+ " 4+5. toolchain version must start with 'go'
737
+ let l: dir = gotest#write_file (' gomodtest/go.mod' , [
738
+ \ ' module github.com/fatih/vim-go' ,
739
+ \ ' ' ,
740
+ \ ' toolchain go2' ,
741
+ \ ' toolchain go1.21.1.4' ,
742
+ \ ' toolchain go1.21.1blah' ,
743
+ \ ' toolchain go1.21!some-suffix' ,
744
+ \ ' toolchain something-else' ,
745
+ \ ' ' ])
746
+
747
+ let l: lineno = 3
748
+ let l: lineclose = line (' $' )
749
+ while l: lineno < l: lineclose
750
+ let l: line = getline (l: lineno )
751
+ let l: col = col ([l: lineno , ' $' ]) - 1
752
+ let l: idx = len (l: line ) - 1
753
+ " e.g. go1.21.1rc2 is valid until 'rc2'
754
+ " each 'go*' test above has last version number '1'
755
+ let l: valid_version_start_idx = strridx (l: line , ' 1' )
756
+
757
+ if l: valid_version_start_idx != -1
758
+ let l: end_idx = l: valid_version_start_idx
759
+ else
760
+ " the whole version is invalid
761
+ let l: end_idx = stridx (l: line , ' ' ) + 1
762
+ endif
763
+
764
+ while l: idx > l: end_idx
765
+ call cursor (l: lineno , l: col )
766
+ let l: synname = synIDattr (synID (l: lineno , l: col , 1 ), ' name' )
767
+ let l: errlen = len (v: errors )
768
+
769
+ call assert_notequal (' gomodToolchainVersion' , l: synname , ' version on line ' . l: lineno . ' and col ' . l: col )
770
+
771
+ if l: errlen < len (v: errors )
772
+ break
773
+ endif
774
+
775
+ let l: col -= 1
776
+ let l: idx -= 1
777
+ endwhile
778
+ let l: lineno += 1
779
+ endwhile
780
+
781
+ finally
782
+ call go#util#Chdir (l: wd )
783
+ call delete (l: dir , ' rf' )
784
+ endtry
785
+ endfunc
786
+
787
+
674
788
" restore Vi compatibility settings
675
789
let &cpo = s: cpo_save
676
790
unlet s: cpo_save
0 commit comments