" don't spam the user when Vim is started in Vi compatibility mode let s:cpo_save = &cpo set cpo&vim function! Test_gomodVersion_highlight() abort try syntax on let l:dir= gotest#write_file('gomodtest/go.mod', [ \ 'module github.com/fatih/vim-go', \ '', \ '\x1frequire (', \ '\tversion/simple v1.0.0', \ '\tversion/pseudo/premajor v1.0.0-20060102150405-0123456789abcdef', \ '\tversion/pseudo/prerelease v1.0.0-prerelease.0.20060102150405-0123456789abcdef', \ '\tversion/pseudo/prepatch v1.0.1-0.20060102150405-0123456789abcdef', \ '\tversion/simple/incompatible v2.0.0+incompatible', \ '\tversion/pseudo/premajor/incompatible v2.0.0-20060102150405-0123456789abcdef+incompatible', \ '\tversion/pseudo/prerelease/incompatible v2.0.0-prerelease.0.20060102150405-0123456789abcdef+incompatible', \ '\tversion/pseudo/prepatch/incompatible v2.0.1-0.20060102150405-0123456789abcdef+incompatible', \ ')']) let l:lineno = 4 let l:lineclose = line('$') while l:lineno < l:lineclose let l:line = getline(l:lineno) let l:col = col([l:lineno, '$']) - 1 let l:idx = len(l:line) - 1 let l:from = stridx(l:line, ' ') + 1 while l:idx >= l:from call cursor(l:lineno, l:col) let l:synname = synIDattr(synID(l:lineno, l:col, 1), 'name') let l:errlen = len(v:errors) call assert_equal('gomodVersion', l:synname, 'version on line ' . l:lineno) " continue at the next line if there was an error at this column; " there's no need to test each column once an error is detected. if l:errlen < len(v:errors) break endif let l:col -= 1 let l:idx -= 1 endwhile let l:lineno += 1 endwhile finally call delete(l:dir, 'rf') endtry endfunc function! Test_gomodVersion_incompatible_highlight() abort try syntax on let l:dir= gotest#write_file('gomodtest/go.mod', [ \ 'module github.com/fatih/vim-go', \ '', \ '\x1frequire (', \ '\tversion/invalid/incompatible v1.0.0+incompatible', \ '\tversion/invalid/premajor/incompatible v1.0.0-20060102150405-0123456789abcdef+incompatible', \ '\tversion/invalid/prerelease/incompatible v1.0.0-prerelease.0.20060102150405-0123456789abcdef+incompatible', \ '\tversion/invalid/prepatch/incompatible v1.0.1-0.20060102150405-0123456789abcdef+incompatible', \ ')']) let l:lineno = 4 let l:lineclose = line('$') while l:lineno < l:lineclose let l:line = getline(l:lineno) let l:col = col([l:lineno, '$']) - 1 let l:idx = len(l:line) - 1 let l:from = stridx(l:line, '+') while l:idx >= l:from call cursor(l:lineno, l:col) let l:synname = synIDattr(synID(l:lineno, l:col, 1), 'name') let l:errlen = len(v:errors) call assert_notequal('gomodVersion', l:synname, 'version on line ' . l:lineno) " continue at the next line if there was an error at this column; " there's no need to test each column once an error is detected. if l:errlen < len(v:errors) break endif let l:col -= 1 let l:idx -= 1 endwhile let l:lineno += 1 endwhile finally call delete(l:dir, 'rf') endtry endfunc " restore Vi compatibility settings let &cpo = s:cpo_save unlet s:cpo_save " vim: sw=2 ts=2 et