mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 13:50:04 +08:00
280 lines
8.7 KiB
Plaintext
280 lines
8.7 KiB
Plaintext
|
Include: ../include/setup.vader
|
||
|
|
||
|
Execute (Setup: monkeypatch autoload/neomake/highlights.vim):
|
||
|
" Monkeypatch to check setting of length.
|
||
|
runtime autoload/neomake/highlights.vim
|
||
|
Save g:neomake_tests_highlight_lengths
|
||
|
let g:neomake_tests_highlight_lengths = []
|
||
|
|
||
|
function! neomake#highlights#AddHighlight(entry, ...) abort
|
||
|
let bufnr = get(a:entry, 'bufnr', -1)
|
||
|
if !has_key(g:neomake_tests_highlight_lengths, bufnr)
|
||
|
let g:neomake_tests_highlight_lengths[bufnr] = []
|
||
|
endif
|
||
|
call add(g:neomake_tests_highlight_lengths[bufnr],
|
||
|
\ [get(a:entry, 'lnum', -1), get(a:entry, 'length', -1)])
|
||
|
endfunction
|
||
|
|
||
|
Execute (vimlint: length postprocessing):
|
||
|
let g:neomake_tests_highlight_lengths = {}
|
||
|
new
|
||
|
noautocmd edit tests/fixtures/vim/func-with-errors.vim
|
||
|
let maker = neomake#makers#ft#vim#vimlint()
|
||
|
let maker.exe = 'cat'
|
||
|
let maker.args = 'tests/fixtures/vim/func-with-errors.vim.output'
|
||
|
let maker.append_file = 0
|
||
|
|
||
|
CallNeomake 1, [maker]
|
||
|
|
||
|
let bufnr = bufnr('%')
|
||
|
AssertEqualQf getloclist(0), [{
|
||
|
\ 'lnum': 2,
|
||
|
\ 'bufnr': bufnr,
|
||
|
\ 'col': 6,
|
||
|
\ 'valid': 1,
|
||
|
\ 'vcol': 0,
|
||
|
\ 'nr': 101,
|
||
|
\ 'type': 'E',
|
||
|
\ 'pattern': '',
|
||
|
\ 'text': 'undefined variable `l:something`',
|
||
|
\ }, {
|
||
|
\ 'lnum': 5,
|
||
|
\ 'bufnr': bufnr,
|
||
|
\ 'col': 9,
|
||
|
\ 'valid': 1,
|
||
|
\ 'vcol': 0,
|
||
|
\ 'nr': 104,
|
||
|
\ 'type': 'E',
|
||
|
\ 'pattern': '',
|
||
|
\ 'text': 'variable may not be initialized on some execution path: `l:foo`',
|
||
|
\ }]
|
||
|
|
||
|
AssertEqual {string(bufnr): [[2, 11], [5, 3]]}, g:neomake_tests_highlight_lengths
|
||
|
bwipe
|
||
|
|
||
|
Execute (vint: highlights syntax error for command):
|
||
|
let g:neomake_tests_highlight_lengths = {}
|
||
|
new
|
||
|
file file1.vim
|
||
|
norm! iwhile 1
|
||
|
norm! oendfor
|
||
|
let vint_maker = neomake#makers#ft#vim#vint()
|
||
|
let vint_maker.exe = 'printf'
|
||
|
let vint_maker.args = ["file1.vim:2:1:error:E588: :endfor without :for (SyntaxError)"]
|
||
|
let vint_maker.append_file = 0
|
||
|
|
||
|
CallNeomake 1, [vint_maker]
|
||
|
let bufnr = bufnr('%')
|
||
|
AssertEqualQf getloclist(0), [{
|
||
|
\ 'lnum': 2,
|
||
|
\ 'bufnr': bufnr,
|
||
|
\ 'col': 1,
|
||
|
\ 'valid': 1,
|
||
|
\ 'vcol': 0,
|
||
|
\ 'nr': 588,
|
||
|
\ 'type': 'e',
|
||
|
\ 'pattern': '',
|
||
|
\ 'text': ':endfor without :for (SyntaxError)'}]
|
||
|
bwipe!
|
||
|
AssertEqual {string(bufnr): [[2, 6]]}, g:neomake_tests_highlight_lengths
|
||
|
|
||
|
Execute (get_list_entries: based on example from doc):
|
||
|
let g:neomake_tests_highlight_lengths = {}
|
||
|
new
|
||
|
call g:NeomakeSetupAutocmdWrappers()
|
||
|
let buf1 = bufnr('%')
|
||
|
file get_list_entries_buf1
|
||
|
|
||
|
let winnr = winnr()
|
||
|
|
||
|
let maker = {'name': 'My maker', 'my_orig_bufnr': buf1}
|
||
|
function! maker.get_list_entries(jobinfo) abort
|
||
|
" Change bufnr.
|
||
|
new
|
||
|
return [
|
||
|
\ {'text': 'Some error', 'lnum': 1, 'bufnr': a:jobinfo.bufnr},
|
||
|
\ {'text': 'Some warning without bufnr', 'type': 'W', 'lnum': 2,
|
||
|
\ 'col': 1, 'length': 5},
|
||
|
\ {'text': 'Some warning', 'type': 'W', 'lnum': 2, 'col': 1,
|
||
|
\ 'bufnr': a:jobinfo.maker.my_orig_bufnr, 'length': 2},
|
||
|
\ {'text': 'Some info', 'type': 'I', 'lnum': 3, 'col': 1,
|
||
|
\ 'filename': '/path/to/file'},
|
||
|
\ {'text': 'Some non-type', 'type': '', 'lnum': 4, 'col': 1, 'length': 23,
|
||
|
\ 'filename': 'get_list_entries_buf1'},
|
||
|
\ ]
|
||
|
endfunction
|
||
|
call neomake#Make(1, [maker])
|
||
|
AssertNeomakeMessage 'Queuing action ProcessEntries for BufEnter, WinEnter.'
|
||
|
AssertEqual {}, g:neomake_tests_highlight_lengths, 'No highlights have been added yet'
|
||
|
AssertEqual [], getloclist(0)
|
||
|
|
||
|
wincmd p
|
||
|
AssertEqual winnr, winnr()
|
||
|
|
||
|
let llist = getloclist(0)
|
||
|
|
||
|
" Check that unlisted buffer was created for filename.
|
||
|
let unlisted_bufnr = bufnr('/path/to/file')
|
||
|
Assert !empty(unlisted_bufnr), 'Unlisted buffer was created (1)'
|
||
|
Assert !buflisted(unlisted_bufnr), 'Unlisted buffer was created (2)'
|
||
|
|
||
|
AssertEqual {
|
||
|
\ string(buf1): [[1, -1], [2, 2], [4, 23]],
|
||
|
\ string(unlisted_bufnr): [[3, -1]]}, g:neomake_tests_highlight_lengths
|
||
|
|
||
|
" Check that existing buffer was used for filename.
|
||
|
AssertEqual llist[4].bufnr, buf1, 'get_list_entries_buf1 was picked up'
|
||
|
|
||
|
AssertNeomakeMessage "Entry 2 differs after adding: {'changed': {'valid': [1, 0]}}.", 3
|
||
|
AssertNeomakeMessage "Entry 4 differs after adding: {'changed': {'bufnr': [0, ".unlisted_bufnr."]}, 'removed': {'filename': '/path/to/file'}}.", 3
|
||
|
AssertNeomakeMessage "Entry 5 differs after adding: {'changed': {'bufnr': [0, ".buf1."]}, 'removed': {'filename': 'get_list_entries_buf1'}}.", 3
|
||
|
|
||
|
AssertEqualQf llist, [
|
||
|
\ {'lnum': 1, 'bufnr': buf1, 'col': 0, 'valid': 1, 'vcol': 0, 'nr': -1,
|
||
|
\ 'type': 'W', 'pattern': '', 'text': 'Some error'},
|
||
|
\ {'lnum': 2, 'bufnr': 0, 'col': 1, 'valid': 0, 'vcol': 0, 'nr': -1,
|
||
|
\ 'type': 'W', 'pattern': '', 'text': 'Some warning without bufnr'},
|
||
|
\ {'lnum': 2, 'bufnr': buf1, 'col': 1, 'valid': 1, 'vcol': 0, 'nr': -1,
|
||
|
\ 'type': 'W', 'pattern': '', 'text': 'Some warning'},
|
||
|
\ {'lnum': 3, 'bufnr': unlisted_bufnr, 'col': 1, 'valid': 1, 'vcol': 0, 'nr': -1,
|
||
|
\ 'type': 'I', 'pattern': '', 'text': 'Some info'},
|
||
|
\ {'lnum': 4, 'bufnr': buf1, 'col': 1, 'valid': 1, 'vcol': 0, 'nr': -1,
|
||
|
\ 'type': '', 'pattern': '', 'text': 'Some non-type'} ]
|
||
|
wincmd p
|
||
|
bwipe
|
||
|
bwipe
|
||
|
exe 'bwipe '.unlisted_bufnr
|
||
|
AssertEqual len(g:neomake_test_countschanged), 1
|
||
|
AssertEqual len(g:neomake_test_finished), 1
|
||
|
AssertEqual len(g:neomake_test_jobfinished), 1
|
||
|
|
||
|
Execute (cargo error message):
|
||
|
let g:neomake_tests_highlight_lengths = {}
|
||
|
new
|
||
|
file build/lib.rs
|
||
|
let cargo = NeomakeTestsGetMakerWithOutput(neomake#makers#ft#rust#cargo(),
|
||
|
\ '../tests/fixtures/rust/cargo_error.json')
|
||
|
|
||
|
call neomake#Make(1, [cargo])
|
||
|
NeomakeTestsWaitForFinishedJobs
|
||
|
|
||
|
let bufnr = bufnr('%')
|
||
|
AssertEqualQf getloclist(0), [{
|
||
|
\ 'type': 'E',
|
||
|
\ 'bufnr': bufnr,
|
||
|
\ 'nr': 308,
|
||
|
\ 'lnum': 19,
|
||
|
\ 'col': 46,
|
||
|
\ 'valid': 1,
|
||
|
\ 'vcol': 0,
|
||
|
\ 'pattern': '',
|
||
|
\ 'text': 'mismatched types: expected str, found struct `proc_macro::TokenStream`'
|
||
|
\ }, {
|
||
|
\ 'type': 'E',
|
||
|
\ 'bufnr': bufnr,
|
||
|
\ 'nr': 308,
|
||
|
\ 'lnum': 25,
|
||
|
\ 'col': 1,
|
||
|
\ 'valid': 1,
|
||
|
\ 'vcol': 0,
|
||
|
\ 'pattern': '',
|
||
|
\ 'text': 'mismatched types: expected str, found struct `proc_macro::TokenStream`'
|
||
|
\ }, {
|
||
|
\ 'type': 'I',
|
||
|
\ 'bufnr': bufnr,
|
||
|
\ 'nr': 308,
|
||
|
\ 'lnum': 25,
|
||
|
\ 'col': 1,
|
||
|
\ 'valid': 1,
|
||
|
\ 'vcol': 0,
|
||
|
\ 'pattern': '',
|
||
|
\ 'text': 'found type `&proc_macro::TokenStream`'
|
||
|
\ }]
|
||
|
|
||
|
" TODO: should not call it for the same highlight twice?!
|
||
|
AssertEqual {string(bufnr): [[19, 2], [25, 40], [25, 40]]}, g:neomake_tests_highlight_lengths
|
||
|
bwipe
|
||
|
|
||
|
Execute (cargo warning message):
|
||
|
let g:neomake_tests_highlight_lengths = {}
|
||
|
new
|
||
|
file build/add_assign_like.rs
|
||
|
let cargo = NeomakeTestsGetMakerWithOutput(neomake#makers#ft#rust#cargo(),
|
||
|
\ '../tests/fixtures/rust/cargo_warning.json')
|
||
|
|
||
|
call neomake#Make(1, [cargo])
|
||
|
NeomakeTestsWaitForFinishedJobs
|
||
|
|
||
|
let bufnr = bufnr('%')
|
||
|
AssertEqualQf getloclist(0), [{
|
||
|
\ 'type': 'W',
|
||
|
\ 'bufnr': bufnr,
|
||
|
\ 'nr': -1,
|
||
|
\ 'lnum': 2,
|
||
|
\ 'col': 24,
|
||
|
\ 'valid': 1,
|
||
|
\ 'vcol': 0,
|
||
|
\ 'pattern': '',
|
||
|
\ 'text': 'unused import: `Variant`, #[warn(unused_imports)] on by default'}]
|
||
|
AssertEqual {string(bufnr): [[2, 7]]}, g:neomake_tests_highlight_lengths
|
||
|
bwipe
|
||
|
|
||
|
Execute (cargo warning for file that is not open):
|
||
|
let g:neomake_tests_highlight_lengths = {}
|
||
|
new
|
||
|
file build/some_other_file.rs
|
||
|
|
||
|
" Uses build/add_assign_like.rs.
|
||
|
let cargo = NeomakeTestsGetMakerWithOutput(neomake#makers#ft#rust#cargo(),
|
||
|
\ '../tests/fixtures/rust/cargo_warning.json')
|
||
|
|
||
|
call neomake#Make(1, [cargo])
|
||
|
NeomakeTestsWaitForFinishedJobs
|
||
|
|
||
|
let unlisted_bufnr = bufnr('^build/add_assign_like.rs$')
|
||
|
AssertNotEqual -1, unlisted_bufnr
|
||
|
|
||
|
AssertEqualQf getloclist(0), [{
|
||
|
\ 'type': 'W',
|
||
|
\ 'bufnr': unlisted_bufnr,
|
||
|
\ 'nr': -1,
|
||
|
\ 'lnum': 2,
|
||
|
\ 'col': 24,
|
||
|
\ 'valid': 1,
|
||
|
\ 'vcol': 0,
|
||
|
\ 'pattern': '',
|
||
|
\ 'text': 'unused import: `Variant`, #[warn(unused_imports)] on by default'}]
|
||
|
AssertEqual {string(unlisted_bufnr): [[2, 7]]}, g:neomake_tests_highlight_lengths
|
||
|
bwipe
|
||
|
exe 'bwipe' unlisted_bufnr
|
||
|
|
||
|
Execute (cargo error message children):
|
||
|
let g:neomake_tests_highlight_lengths = {}
|
||
|
new
|
||
|
file tests/from.rs
|
||
|
let cargo = NeomakeTestsGetMakerWithOutput(neomake#makers#ft#rust#cargo(),
|
||
|
\ '../tests/fixtures/rust/cargo_error_children.json')
|
||
|
|
||
|
call neomake#Make(1, [cargo])
|
||
|
NeomakeTestsWaitForFinishedJobs
|
||
|
|
||
|
let bufnr = bufnr('%')
|
||
|
AssertEqualQf getloclist(0), [{
|
||
|
\ 'type': 'E',
|
||
|
\ 'bufnr': bufnr,
|
||
|
\ 'nr': -1,
|
||
|
\ 'lnum': 11,
|
||
|
\ 'col': 10,
|
||
|
\ 'valid': 1,
|
||
|
\ 'vcol': 0,
|
||
|
\ 'pattern': '',
|
||
|
\ 'text': 'custom derive attribute panicked. message: Only structs and enums can derive From'}]
|
||
|
AssertEqual {string(bufnr): [[11, 4]]}, g:neomake_tests_highlight_lengths
|
||
|
bwipe
|
||
|
|
||
|
Execute (Teardown: undo monkeypatching):
|
||
|
" Restore if not profiling.
|
||
|
if !v:profiling
|
||
|
runtime autoload/neomake/highlights.vim
|
||
|
endif
|