summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorw0rp <w0rp@users.noreply.github.com>2019-09-01 10:47:28 +0100
committerGitHub <noreply@github.com>2019-09-01 10:47:28 +0100
commit7d7ddf22d327e6d5369c3331d30c76a35726ce41 (patch)
tree8589dc3f2c69c4903a0322c9c82bf4dd12c07507 /test
parent73812c3e41c1c7fcf1705811f35ac4c9ccec003e (diff)
parent6e6ad2e430e06820f2cb750644dda1f7e7487678 (diff)
downloadale-7d7ddf22d327e6d5369c3331d30c76a35726ce41.zip
Merge pull request #2638 from frangio/nvim-highlight
Use Neovim API for highlights when available
Diffstat (limited to 'test')
-rw-r--r--test/test_highlight_placement.vader54
1 files changed, 49 insertions, 5 deletions
diff --git a/test/test_highlight_placement.vader b/test/test_highlight_placement.vader
index 87ac6073..95f1c1e1 100644
--- a/test/test_highlight_placement.vader
+++ b/test/test_highlight_placement.vader
@@ -8,6 +8,8 @@ Before:
Save g:ale_set_quickfix
Save g:ale_set_signs
+ runtime autoload/ale/highlight.vim
+
let g:ale_run_synchronously = 1
unlet! g:ale_run_synchronously_callbacks
let g:ale_set_highlights = 1
@@ -42,16 +44,54 @@ Before:
\]
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.
" The IDs are generated.
function! GetMatchesWithoutIDs() abort
- let l:list = getmatches()
+ if g:has_nvim_highlight
+ return get(g:nvim_highlight_matches, bufnr(''), [])
+ else
+ let l:list = getmatches()
- for l:item in l:list
- call remove(l:item, 'id')
- endfor
+ for l:item in l:list
+ call remove(l:item, 'id')
+ endfor
- return l:list
+ return l:list
+ endif
endfunction
call ale#linter#Define('testft', {
@@ -68,6 +108,8 @@ After:
unlet! g:ale_run_synchronously_callbacks
unlet! g:items
unlet! b:ale_enabled
+ unlet! g:has_nvim_highlight
+ unlet! g:nvim_highlight_matches
delfunction GenerateResults
call ale#linter#Reset()
@@ -75,6 +117,8 @@ After:
sign unplace *
highlight clear SomeOtherGroup
+ runtime autoload/ale/highlight.vim
+
Given testft(A Javscript file with warnings/errors):
foo
bar