mirror of
https://github.com/dense-analysis/ale.git
synced 2025-12-07 05:04:28 +08:00
Try to mock nvim api functions
This commit is contained in:
@@ -32,6 +32,15 @@ if s:has_nvim_highlight
|
|||||||
let s:ns_id = nvim_create_namespace('ale_highlight')
|
let s:ns_id = nvim_create_namespace('ale_highlight')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Wrappers are necessary to test this functionality by faking the calls in tests.
|
||||||
|
function! ale#highlight#nvim_buf_add_highlight(buffer, ns_id, hl_group, line, col_start, col_end) abort
|
||||||
|
call nvim_buf_add_highlight(a:buffer, a:ns_id, a:hl_group, a:line, a:col_start, a:col_end)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale#highlight#nvim_buf_clear_namespace(buffer, ns_id, line_start, line_end) abort
|
||||||
|
call nvim_buf_clear_namespace(a:buffer, a:ns_id, a:line_start, a:line_end)
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! ale#highlight#CreatePositions(line, col, end_line, end_col) abort
|
function! ale#highlight#CreatePositions(line, col, end_line, end_col) abort
|
||||||
if a:line >= a:end_line
|
if a:line >= a:end_line
|
||||||
" For single lines, just return the one position.
|
" For single lines, just return the one position.
|
||||||
@@ -58,7 +67,7 @@ endfunction
|
|||||||
|
|
||||||
function! ale#highlight#RemoveHighlights() abort
|
function! ale#highlight#RemoveHighlights() abort
|
||||||
if s:has_nvim_highlight
|
if s:has_nvim_highlight
|
||||||
call nvim_buf_clear_namespace(bufnr(''), s:ns_id, 0, -1)
|
call ale#highlight#nvim_buf_clear_namespace(bufnr(''), s:ns_id, 0, -1)
|
||||||
else
|
else
|
||||||
for l:match in getmatches()
|
for l:match in getmatches()
|
||||||
if l:match.group =~? '\v^ALE(Style)?(Error|Warning|Info)(Line)?$'
|
if l:match.group =~? '\v^ALE(Style)?(Error|Warning|Info)(Line)?$'
|
||||||
@@ -82,13 +91,13 @@ function! s:matchaddpos(group, pos_list) abort
|
|||||||
|
|
||||||
if type(l:pos) == v:t_number || len(l:pos) == 1
|
if type(l:pos) == v:t_number || len(l:pos) == 1
|
||||||
let l:col_start = 0
|
let l:col_start = 0
|
||||||
let l:col_end = -1
|
let l:col_end = s:MAX_COL_SIZE
|
||||||
else
|
else
|
||||||
let l:col_start = l:pos[1] - 1
|
let l:col_start = l:pos[1] - 1
|
||||||
let l:col_end = l:col_start + get(l:pos, 2, 1)
|
let l:col_end = l:col_start + get(l:pos, 2, 1)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call nvim_buf_add_highlight(
|
call ale#highlight#nvim_buf_add_highlight(
|
||||||
\ bufnr(''),
|
\ bufnr(''),
|
||||||
\ s:ns_id,
|
\ s:ns_id,
|
||||||
\ a:group,
|
\ a:group,
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ Before:
|
|||||||
Save g:ale_set_quickfix
|
Save g:ale_set_quickfix
|
||||||
Save g:ale_set_signs
|
Save g:ale_set_signs
|
||||||
|
|
||||||
|
runtime autoload/ale/highlight.vim
|
||||||
|
|
||||||
let g:ale_run_synchronously = 1
|
let g:ale_run_synchronously = 1
|
||||||
unlet! g:ale_run_synchronously_callbacks
|
unlet! g:ale_run_synchronously_callbacks
|
||||||
let g:ale_set_highlights = 1
|
let g:ale_set_highlights = 1
|
||||||
@@ -42,9 +44,46 @@ Before:
|
|||||||
\]
|
\]
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
let g:has_nvim_highlight = exists('*nvim_buf_add_highlight') && exists('*nvim_buf_clear_namespace')
|
||||||
|
let g:nvim_highlight_matches = {}
|
||||||
|
|
||||||
|
function! ale#highlight#nvim_buf_clear_namespace(buffer, ns_id, line_start, line_end) abort
|
||||||
|
if a:line_end != -1
|
||||||
|
throw 'nvim api behavior not supported'
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:matches = get(g:nvim_highlight_matches, a:buffer, [])
|
||||||
|
call filter(
|
||||||
|
\ l:matches,
|
||||||
|
\ {_, val -> val.pos1[0] < (a:line_start + 1) },
|
||||||
|
\)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale#highlight#nvim_buf_add_highlight(buffer, ns_id, hl_group, line, col_start, col_end) abort
|
||||||
|
if a:col_end == -1
|
||||||
|
throw 'nvim api behavior not supported'
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:matches = get(g:nvim_highlight_matches, a:buffer, [])
|
||||||
|
let g:nvim_highlight_matches[a:buffer] = l:matches
|
||||||
|
|
||||||
|
let l:new_match = {
|
||||||
|
\ 'group': a:hl_group,
|
||||||
|
\ 'priority': 10,
|
||||||
|
\ 'pos1': [a:line + 1, a:col_start + 1, a:col_end - a:col_start],
|
||||||
|
\}
|
||||||
|
|
||||||
|
call add(l:matches, l:new_match)
|
||||||
|
" sort by line number to emulate getmatches faithfully
|
||||||
|
call sort(l:matches, {m1, m2 -> m1.pos1[0] - m2.pos1[0]})
|
||||||
|
endfunction
|
||||||
|
|
||||||
" We don't care what the IDs are, just that we have some matches.
|
" We don't care what the IDs are, just that we have some matches.
|
||||||
" The IDs are generated.
|
" The IDs are generated.
|
||||||
function! GetMatchesWithoutIDs() abort
|
function! GetMatchesWithoutIDs() abort
|
||||||
|
if g:has_nvim_highlight
|
||||||
|
return get(g:nvim_highlight_matches, bufnr(''), [])
|
||||||
|
else
|
||||||
let l:list = getmatches()
|
let l:list = getmatches()
|
||||||
|
|
||||||
for l:item in l:list
|
for l:item in l:list
|
||||||
@@ -52,6 +91,7 @@ Before:
|
|||||||
endfor
|
endfor
|
||||||
|
|
||||||
return l:list
|
return l:list
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call ale#linter#Define('testft', {
|
call ale#linter#Define('testft', {
|
||||||
@@ -68,6 +108,8 @@ After:
|
|||||||
unlet! g:ale_run_synchronously_callbacks
|
unlet! g:ale_run_synchronously_callbacks
|
||||||
unlet! g:items
|
unlet! g:items
|
||||||
unlet! b:ale_enabled
|
unlet! b:ale_enabled
|
||||||
|
unlet! g:has_nvim_highlight
|
||||||
|
unlet! g:nvim_highlight_matches
|
||||||
|
|
||||||
delfunction GenerateResults
|
delfunction GenerateResults
|
||||||
call ale#linter#Reset()
|
call ale#linter#Reset()
|
||||||
@@ -75,6 +117,8 @@ After:
|
|||||||
sign unplace *
|
sign unplace *
|
||||||
highlight clear SomeOtherGroup
|
highlight clear SomeOtherGroup
|
||||||
|
|
||||||
|
runtime autoload/ale/highlight.vim
|
||||||
|
|
||||||
Given testft(A Javscript file with warnings/errors):
|
Given testft(A Javscript file with warnings/errors):
|
||||||
foo
|
foo
|
||||||
bar
|
bar
|
||||||
|
|||||||
Reference in New Issue
Block a user