145 lines
5.4 KiB
VimL
145 lines
5.4 KiB
VimL
" 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/simple-pre-release v1.0.0-rc',
|
|
\ '\tversion/simple-pre-release v1.0.0+meta',
|
|
\ '\tversion/simple-pre-release v1.0.0-rc+meta',
|
|
\ '\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/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
|
|
|
|
function! Test_numeric_literal_highlight() abort
|
|
syntax on
|
|
|
|
let tests = {
|
|
\ 'lone zero': {'group': 'goDecimalInt', 'value': '0'},
|
|
\ 'integer': {'group': 'goDecimalInt', 'value': '1234567890'},
|
|
\ 'hexadecimal': {'group': 'goHexadecimalInt', 'value': '0x0123456789abdef'},
|
|
\ 'hexadecimalErrorLeading': {'group': 'goHexadecimalError', 'value': '0xg0123456789abdef'},
|
|
\ 'hexadecimalErrorTrailing': {'group': 'goHexadecimalError', 'value': '0x0123456789abdefg'},
|
|
\ 'heXadecimal': {'group': 'goHexadecimalInt', 'value': '0X0123456789abdef'},
|
|
\ 'heXadecimalErrorLeading': {'group': 'goHexadecimalError', 'value': '0Xg0123456789abdef'},
|
|
\ 'heXadecimalErrorTrailing': {'group': 'goHexadecimalError', 'value': '0X0123456789abdefg'},
|
|
\ 'octal': {'group': 'goOctalInt', 'value': '01234567'},
|
|
\ 'octalErrorLeading': {'group': 'goOctalError', 'value': '081234567'},
|
|
\ 'octalErrorTrailing': {'group': 'goOctalError', 'value': '012345678'},
|
|
\ 'binaryInt': {'group': 'goBinaryInt', 'value': '0b0101'},
|
|
\ 'binaryErrorLeading': {'group': 'goBinaryError', 'value': '0b20101'},
|
|
\ 'binaryErrorTrailing': {'group': 'goBinaryError', 'value': '0b01012'},
|
|
\ 'BinaryInt': {'group': 'goBinaryInt', 'value': '0B0101'},
|
|
\ 'BinaryErrorLeading': {'group': 'goBinaryError', 'value': '0B20101'},
|
|
\ 'BinaryErrorTrailing': {'group': 'goBinaryError', 'value': '0B01012'},
|
|
\ }
|
|
|
|
for kv in items(tests)
|
|
let l:dir = gotest#write_file(printf('numeric/%s.go', kv[0]), [
|
|
\ 'package numeric',
|
|
\ '',
|
|
\ printf("var v = %s\x1f", kv[1].value),
|
|
\ ])
|
|
|
|
try
|
|
let l:pos = getcurpos()
|
|
let l:actual = synIDattr(synID(l:pos[1], l:pos[2], 1), 'name')
|
|
call assert_equal(kv[1].group, l:actual, kv[0])
|
|
finally
|
|
" call delete(l:dir, 'rf')
|
|
endtry
|
|
endfor
|
|
endfunction
|
|
|
|
" restore Vi compatibility settings
|
|
let &cpo = s:cpo_save
|
|
unlet s:cpo_save
|
|
|
|
" vim: sw=2 ts=2 et
|