2017-02-12 19:18:51 -05:00
|
|
|
Before:
|
2018-07-01 06:52:02 -04:00
|
|
|
Save g:ale_buffer_info
|
|
|
|
Save g:ale_echo_cursor
|
2017-10-28 14:36:16 -04:00
|
|
|
Save g:ale_enabled
|
2018-07-01 06:52:02 -04:00
|
|
|
Save g:ale_run_synchronously
|
|
|
|
Save g:ale_set_highlights
|
|
|
|
Save g:ale_set_loclist
|
|
|
|
Save g:ale_set_quickfix
|
2017-11-17 09:29:51 -05:00
|
|
|
Save g:ale_set_signs
|
2017-10-28 14:36:16 -04:00
|
|
|
|
2018-07-01 06:52:02 -04:00
|
|
|
let g:ale_run_synchronously = 1
|
2019-02-06 17:00:11 -05:00
|
|
|
unlet! g:ale_run_synchronously_callbacks
|
2018-07-01 06:52:02 -04:00
|
|
|
let g:ale_set_highlights = 1
|
|
|
|
let g:ale_set_signs = 1
|
|
|
|
let g:ale_buffer_info = {}
|
|
|
|
|
|
|
|
" Disable features we don't need for these tests.
|
|
|
|
let g:ale_set_quickfix = 0
|
|
|
|
let g:ale_set_loclist = 0
|
|
|
|
let g:ale_echo_cursor = 0
|
|
|
|
|
2017-02-12 19:18:51 -05:00
|
|
|
function! GenerateResults(buffer, output)
|
|
|
|
return [
|
|
|
|
\ {
|
|
|
|
\ 'lnum': 1,
|
|
|
|
\ 'col': 1,
|
|
|
|
\ 'type': 'E',
|
|
|
|
\ 'text': 'foo',
|
|
|
|
\ },
|
|
|
|
\ {
|
|
|
|
\ 'lnum': 2,
|
|
|
|
\ 'col': 1,
|
|
|
|
\ 'type': 'W',
|
|
|
|
\ 'text': 'bar',
|
|
|
|
\ },
|
|
|
|
\ {
|
|
|
|
\ 'lnum': 3,
|
|
|
|
\ 'col': 5,
|
|
|
|
\ 'type': 'E',
|
|
|
|
\ 'text': 'wat',
|
|
|
|
\ },
|
|
|
|
\]
|
|
|
|
endfunction
|
|
|
|
|
2017-07-07 18:47:41 -04:00
|
|
|
" 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()
|
|
|
|
|
|
|
|
for l:item in l:list
|
|
|
|
call remove(l:item, 'id')
|
|
|
|
endfor
|
|
|
|
|
|
|
|
return l:list
|
|
|
|
endfunction
|
|
|
|
|
2017-02-12 19:18:51 -05:00
|
|
|
call ale#linter#Define('testft', {
|
|
|
|
\ 'name': 'x',
|
2017-10-22 20:26:31 -04:00
|
|
|
\ 'executable': has('win32') ? 'cmd': 'echo',
|
2017-10-24 20:05:48 -04:00
|
|
|
\ 'command': has('win32') ? 'echo' : '/bin/sh -c ''echo''',
|
2017-02-12 19:18:51 -05:00
|
|
|
\ 'callback': 'GenerateResults',
|
|
|
|
\})
|
2017-05-06 11:20:39 -04:00
|
|
|
highlight link SomeOtherGroup SpellBad
|
2017-02-12 19:18:51 -05:00
|
|
|
|
|
|
|
After:
|
2017-10-28 14:36:16 -04:00
|
|
|
Restore
|
|
|
|
|
2019-02-06 17:00:11 -05:00
|
|
|
unlet! g:ale_run_synchronously_callbacks
|
2017-05-31 08:14:39 -04:00
|
|
|
unlet! g:items
|
2017-10-28 14:36:16 -04:00
|
|
|
unlet! b:ale_enabled
|
2017-05-31 08:14:39 -04:00
|
|
|
|
2017-02-12 19:18:51 -05:00
|
|
|
delfunction GenerateResults
|
|
|
|
call ale#linter#Reset()
|
2017-03-14 16:26:44 -04:00
|
|
|
call clearmatches()
|
2018-07-01 06:52:02 -04:00
|
|
|
sign unplace *
|
2017-05-06 11:20:39 -04:00
|
|
|
highlight clear SomeOtherGroup
|
2017-02-12 19:18:51 -05:00
|
|
|
|
|
|
|
Given testft(A Javscript file with warnings/errors):
|
|
|
|
foo
|
|
|
|
bar
|
|
|
|
baz wat
|
2017-03-14 16:26:44 -04:00
|
|
|
line four
|
2017-02-12 19:18:51 -05:00
|
|
|
|
|
|
|
Execute(Highlights should be set when a linter runs):
|
2018-07-01 06:52:02 -04:00
|
|
|
ALELint
|
2019-02-06 17:00:11 -05:00
|
|
|
call ale#test#FlushJobs()
|
2017-02-12 19:18:51 -05:00
|
|
|
|
|
|
|
AssertEqual
|
|
|
|
\ [
|
2017-07-07 18:47:41 -04:00
|
|
|
\ {'group': 'ALEError', 'priority': 10, 'pos1': [1, 1, 1]},
|
|
|
|
\ {'group': 'ALEWarning', 'priority': 10, 'pos1': [2, 1, 1]},
|
|
|
|
\ {'group': 'ALEError', 'priority': 10, 'pos1': [3, 5, 1]}
|
2017-03-14 16:26:44 -04:00
|
|
|
\ ],
|
2017-07-07 18:47:41 -04:00
|
|
|
\ GetMatchesWithoutIDs()
|
2017-04-19 17:55:06 -04:00
|
|
|
|
|
|
|
" This test is important for preventing ALE from showing highlights for
|
|
|
|
" the wrong files.
|
|
|
|
Execute(Highlights set by ALE should be removed when buffer cleanup is done):
|
|
|
|
call ale#engine#InitBufferInfo(bufnr('%'))
|
|
|
|
|
|
|
|
call ale#highlight#SetHighlights(bufnr('%'), [
|
|
|
|
\ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 3, 'col': 2},
|
|
|
|
\])
|
|
|
|
|
|
|
|
AssertEqual
|
2017-07-07 18:47:41 -04:00
|
|
|
\ [{'group': 'ALEError', 'priority': 10, 'pos1': [3, 2, 1]}],
|
|
|
|
\ GetMatchesWithoutIDs()
|
2017-04-19 17:55:06 -04:00
|
|
|
|
2017-07-07 18:47:41 -04:00
|
|
|
call ale#engine#Cleanup(bufnr('%'))
|
2017-04-19 17:55:06 -04:00
|
|
|
|
2017-07-07 18:47:41 -04:00
|
|
|
AssertEqual [], GetMatchesWithoutIDs()
|
2017-05-03 18:27:42 -04:00
|
|
|
|
|
|
|
Execute(Highlights should be cleared when buffers are hidden):
|
|
|
|
call ale#engine#InitBufferInfo(bufnr('%'))
|
2017-06-02 14:02:48 -04:00
|
|
|
" The second item should be ignored, as it has no column infomration.
|
2017-05-07 14:30:19 -04:00
|
|
|
let g:ale_buffer_info[bufnr('%')].loclist = [
|
2017-05-03 18:27:42 -04:00
|
|
|
\ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 3, 'col': 2},
|
2017-06-02 14:02:48 -04:00
|
|
|
\ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 4, 'col': 0},
|
2017-05-07 14:30:19 -04:00
|
|
|
\]
|
|
|
|
call ale#highlight#SetHighlights(
|
|
|
|
\ bufnr('%'),
|
|
|
|
\ g:ale_buffer_info[bufnr('%')].loclist
|
|
|
|
\)
|
2017-05-03 18:27:42 -04:00
|
|
|
|
2017-07-07 18:47:41 -04:00
|
|
|
AssertEqual 1, len(GetMatchesWithoutIDs()), 'The highlights weren''t initially set!'
|
2017-05-03 18:27:42 -04:00
|
|
|
|
|
|
|
call ale#highlight#BufferHidden(bufnr('%'))
|
|
|
|
|
2017-07-07 18:47:41 -04:00
|
|
|
AssertEqual 0, len(GetMatchesWithoutIDs()), 'The highlights weren''t cleared!'
|
2017-05-03 18:27:42 -04:00
|
|
|
|
|
|
|
call ale#highlight#UpdateHighlights()
|
|
|
|
|
2017-07-07 18:47:41 -04:00
|
|
|
AssertEqual 1, len(GetMatchesWithoutIDs()), 'The highlights weren''t set again!'
|
2017-05-06 11:20:39 -04:00
|
|
|
|
|
|
|
Execute(Only ALE highlights should be restored when buffers are restored):
|
|
|
|
call ale#engine#InitBufferInfo(bufnr('%'))
|
2017-05-07 14:30:19 -04:00
|
|
|
let g:ale_buffer_info[bufnr('%')].loclist = [
|
2017-05-06 11:20:39 -04:00
|
|
|
\ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 3, 'col': 2},
|
2017-05-07 14:30:19 -04:00
|
|
|
\]
|
|
|
|
call ale#highlight#SetHighlights(
|
|
|
|
\ bufnr('%'),
|
|
|
|
\ g:ale_buffer_info[bufnr('%')].loclist
|
|
|
|
\)
|
2017-05-06 11:20:39 -04:00
|
|
|
|
|
|
|
call matchaddpos('SomeOtherGroup', [[1, 1, 1]])
|
|
|
|
|
2017-07-09 19:02:49 -04:00
|
|
|
" We should have both highlights.
|
|
|
|
AssertEqual
|
|
|
|
\ [
|
|
|
|
\ {'group': 'ALEError', 'priority': 10, 'pos1': [3, 2, 1]},
|
|
|
|
\ {'group': 'SomeOtherGroup', 'priority': 10, 'pos1': [1, 1, 1]},
|
|
|
|
\ ],
|
|
|
|
\ GetMatchesWithoutIDs()
|
2017-05-06 11:20:39 -04:00
|
|
|
|
|
|
|
call ale#highlight#BufferHidden(bufnr('%'))
|
|
|
|
|
2017-07-09 19:02:49 -04:00
|
|
|
" We should remove our highlight, but not the other one.
|
|
|
|
AssertEqual
|
|
|
|
\ [
|
|
|
|
\ {'group': 'SomeOtherGroup', 'priority': 10, 'pos1': [1, 1, 1]}
|
|
|
|
\ ],
|
|
|
|
\ GetMatchesWithoutIDs()
|
2017-05-06 11:20:39 -04:00
|
|
|
|
|
|
|
call ale#highlight#UpdateHighlights()
|
|
|
|
|
2017-07-09 19:02:49 -04:00
|
|
|
" Our highlight should apper again.
|
|
|
|
AssertEqual
|
|
|
|
\ [
|
|
|
|
\ {'group': 'SomeOtherGroup', 'priority': 10, 'pos1': [1, 1, 1]},
|
|
|
|
\ {'group': 'ALEError', 'priority': 10, 'pos1': [3, 2, 1]},
|
|
|
|
\ ],
|
|
|
|
\ GetMatchesWithoutIDs()
|
2017-05-16 13:12:49 -04:00
|
|
|
|
|
|
|
Execute(Higlight end columns should set an appropriate size):
|
|
|
|
call ale#highlight#SetHighlights(bufnr('%'), [
|
|
|
|
\ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 3, 'col': 2, 'end_col': 5},
|
|
|
|
\ {'bufnr': bufnr('%'), 'type': 'W', 'lnum': 4, 'col': 1, 'end_col': 5},
|
|
|
|
\])
|
|
|
|
|
|
|
|
AssertEqual
|
|
|
|
\ [
|
2017-07-07 18:47:41 -04:00
|
|
|
\ {'group': 'ALEError', 'priority': 10, 'pos1': [3, 2, 4]},
|
|
|
|
\ {'group': 'ALEWarning', 'priority': 10, 'pos1': [4, 1, 5]},
|
2017-05-16 13:12:49 -04:00
|
|
|
\ ],
|
2017-07-07 18:47:41 -04:00
|
|
|
\ GetMatchesWithoutIDs()
|
2017-05-21 14:22:48 -04:00
|
|
|
|
|
|
|
Execute(Higlight end columns should set an appropriate size):
|
|
|
|
call ale#highlight#SetHighlights(bufnr('%'), [
|
2017-08-13 11:04:09 -04:00
|
|
|
\ {'bufnr': bufnr('%') - 1, 'type': 'E', 'lnum': 1, 'col': 1},
|
2017-05-21 14:22:48 -04:00
|
|
|
\ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 1, 'col': 1},
|
|
|
|
\ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 2, 'col': 1},
|
|
|
|
\ {'bufnr': bufnr('%'), 'type': 'E', 'sub_type': 'style', 'lnum': 3, 'col': 1},
|
|
|
|
\ {'bufnr': bufnr('%'), 'type': 'W', 'lnum': 4, 'col': 1},
|
|
|
|
\ {'bufnr': bufnr('%'), 'type': 'W', 'lnum': 5, 'col': 1},
|
|
|
|
\ {'bufnr': bufnr('%'), 'type': 'W', 'sub_type': 'style', 'lnum': 6, 'col': 1},
|
|
|
|
\ {'bufnr': bufnr('%'), 'type': 'I', 'lnum': 7, 'col': 1},
|
2017-08-13 11:04:09 -04:00
|
|
|
\ {'bufnr': bufnr('%') + 1, 'type': 'E', 'lnum': 1, 'col': 1},
|
2017-05-21 14:22:48 -04:00
|
|
|
\])
|
|
|
|
|
|
|
|
AssertEqual
|
|
|
|
\ [
|
2017-07-07 18:47:41 -04:00
|
|
|
\ {'group': 'ALEError', 'priority': 10, 'pos1': [1, 1, 1]},
|
|
|
|
\ {'group': 'ALEError', 'priority': 10, 'pos1': [2, 1, 1]},
|
|
|
|
\ {'group': 'ALEStyleError', 'priority': 10, 'pos1': [3, 1, 1]},
|
|
|
|
\ {'group': 'ALEWarning', 'priority': 10, 'pos1': [4, 1, 1]},
|
|
|
|
\ {'group': 'ALEWarning', 'priority': 10, 'pos1': [5, 1, 1]},
|
|
|
|
\ {'group': 'ALEStyleWarning', 'priority': 10, 'pos1': [6, 1, 1]},
|
|
|
|
\ {'group': 'ALEInfo', 'priority': 10, 'pos1': [7, 1, 1]},
|
2017-05-21 14:22:48 -04:00
|
|
|
\ ],
|
2017-07-07 18:47:41 -04:00
|
|
|
\ GetMatchesWithoutIDs()
|
2017-05-31 08:14:39 -04:00
|
|
|
|
|
|
|
Execute(Highlighting should support errors spanning many lines):
|
|
|
|
let g:items = [
|
|
|
|
\ {'bufnr': bufnr(''), 'type': 'E', 'lnum': 1, 'col': 1, 'end_lnum': 10, 'end_col': 3},
|
|
|
|
\]
|
|
|
|
|
|
|
|
call ale#highlight#SetHighlights(bufnr(''), g:items)
|
|
|
|
|
|
|
|
" We should set 2 highlights for the item, as we can only add 8 at a time.
|
|
|
|
AssertEqual
|
|
|
|
\ [
|
|
|
|
\ {
|
2017-07-07 18:47:41 -04:00
|
|
|
\ 'group': 'ALEError', 'priority': 10, 'pos1': [1, 1, 1073741824],
|
2017-05-31 08:14:39 -04:00
|
|
|
\ 'pos2': [2], 'pos3': [3], 'pos4': [4], 'pos5': [5], 'pos6': [6],
|
|
|
|
\ 'pos7': [7], 'pos8': [8],
|
|
|
|
\ },
|
|
|
|
\ {
|
2017-07-07 18:47:41 -04:00
|
|
|
\ 'group': 'ALEError', 'priority': 10,
|
2017-05-31 08:14:39 -04:00
|
|
|
\ 'pos1': [9], 'pos2': [10, 1, 3]
|
|
|
|
\ },
|
|
|
|
\ ],
|
2017-07-07 18:47:41 -04:00
|
|
|
\ GetMatchesWithoutIDs()
|
2017-10-28 14:36:16 -04:00
|
|
|
|
2017-07-13 18:27:02 -04:00
|
|
|
Execute(Highlights should always be cleared when the buffer highlight list is empty):
|
|
|
|
" Add our highlights and something else.
|
|
|
|
call matchaddpos('ALEError', [[1, 1, 1]])
|
|
|
|
call matchaddpos('SomeOtherGroup', [[1, 1, 1]])
|
|
|
|
|
|
|
|
AssertEqual
|
|
|
|
\ [
|
|
|
|
\ {'group': 'ALEError', 'priority': 10, 'pos1': [1, 1, 1]},
|
|
|
|
\ {'group': 'SomeOtherGroup', 'priority': 10, 'pos1': [1, 1, 1]},
|
|
|
|
\ ],
|
|
|
|
\ GetMatchesWithoutIDs()
|
|
|
|
|
|
|
|
" Set the List we use for holding highlights for buffers.
|
|
|
|
let b:ale_highlight_items = []
|
|
|
|
|
|
|
|
" Call the function for updating the highlights called when buffers
|
|
|
|
" are entered, or when problems are presented.
|
|
|
|
call ale#highlight#UpdateHighlights()
|
|
|
|
|
|
|
|
" Check that we remove our highlights.
|
|
|
|
AssertEqual
|
|
|
|
\ [
|
|
|
|
\ {'group': 'SomeOtherGroup', 'priority': 10, 'pos1': [1, 1, 1]},
|
|
|
|
\ ],
|
|
|
|
\ GetMatchesWithoutIDs()
|
2017-10-28 14:36:16 -04:00
|
|
|
|
|
|
|
Execute(Highlights should be cleared when ALE is disabled):
|
|
|
|
let g:ale_enabled = 1
|
|
|
|
call ale#highlight#SetHighlights(bufnr(''), [
|
|
|
|
\ {'bufnr': bufnr(''), 'type': 'E', 'lnum': 1, 'col': 1, 'end_lnum': 10, 'end_col': 3},
|
|
|
|
\])
|
|
|
|
|
|
|
|
let g:ale_enabled = 0
|
|
|
|
call ale#highlight#UpdateHighlights()
|
|
|
|
|
|
|
|
AssertEqual [], GetMatchesWithoutIDs()
|
|
|
|
|
|
|
|
let g:ale_enabled = 1
|
|
|
|
call ale#highlight#SetHighlights(bufnr(''), [
|
|
|
|
\ {'bufnr': bufnr(''), 'type': 'E', 'lnum': 1, 'col': 1, 'end_lnum': 10, 'end_col': 3},
|
|
|
|
\])
|
|
|
|
|
|
|
|
let b:ale_enabled = 0
|
|
|
|
call ale#highlight#UpdateHighlights()
|
|
|
|
|
|
|
|
AssertEqual [], GetMatchesWithoutIDs()
|
2017-11-17 09:29:51 -05:00
|
|
|
|
|
|
|
Execute(Line highlights should be set when signs are disabled):
|
2019-06-03 15:16:49 -04:00
|
|
|
" This will mess with your settings, but it needs to be tested.
|
|
|
|
" We need to match highlights case-insenstive when removing them.
|
|
|
|
hi link aleerrorline spellbad
|
|
|
|
|
2017-11-17 09:29:51 -05:00
|
|
|
let g:ale_set_signs = 0
|
|
|
|
|
|
|
|
call ale#highlight#SetHighlights(bufnr(''), [
|
|
|
|
\ {'bufnr': bufnr(''), 'type': 'E', 'lnum': 1, 'col': 1},
|
|
|
|
\ {'bufnr': bufnr(''), 'type': 'W', 'lnum': 2, 'col': 1},
|
|
|
|
\ {'bufnr': bufnr(''), 'type': 'I', 'lnum': 3, 'col': 1},
|
|
|
|
\])
|
|
|
|
|
|
|
|
AssertEqual
|
|
|
|
\ [
|
|
|
|
\ {'group': 'ALEError', 'priority': 10, 'pos1': [1, 1, 1]},
|
|
|
|
\ {'group': 'ALEWarning', 'priority': 10, 'pos1': [2, 1, 1]},
|
|
|
|
\ {'group': 'ALEInfo', 'priority': 10, 'pos1': [3, 1, 1]},
|
2019-06-03 15:16:49 -04:00
|
|
|
\ {'group': 'aleerrorline', 'priority': 10, 'pos1': [1]},
|
2017-11-17 09:29:51 -05:00
|
|
|
\ {'group': 'ALEWarningLine', 'priority': 10, 'pos1': [2]},
|
|
|
|
\ {'group': 'ALEInfoLine', 'priority': 10, 'pos1': [3]},
|
|
|
|
\ ],
|
|
|
|
\ GetMatchesWithoutIDs()
|
2019-06-03 15:16:49 -04:00
|
|
|
|
|
|
|
" All of the highlights should be removed.
|
|
|
|
call ale#highlight#RemoveHighlights()
|
|
|
|
AssertEqual [], GetMatchesWithoutIDs()
|