mirror of
https://github.com/dense-analysis/ale
synced 2024-12-22 22:23:43 +00:00
3e8c8d3ccb
This commit adds support for renaming symbols in tsserver and with LSP tools, and for organising imports with tsserver. Completion results for symbols that can be imported are now suggested if enabled for tsserver completion done via ALE.
213 lines
7.3 KiB
Plaintext
213 lines
7.3 KiB
Plaintext
Before:
|
|
function! CheckAutocmd(group)
|
|
call ale#events#Init()
|
|
|
|
redir => l:output
|
|
execute 'silent! autocmd ' . a:group
|
|
redir END
|
|
|
|
let l:matches = []
|
|
let l:header = ''
|
|
" Some event names have aliases, and NeoVim and Vim produce
|
|
" different output. The names are remapped to fix this.
|
|
let l:event_name_corrections = {
|
|
\ 'BufWrite': 'BufWritePre',
|
|
\ 'BufRead': 'BufReadPost',
|
|
\}
|
|
|
|
" autocmd commands are split across two lines in output, so we
|
|
" must merge the lines back into one simple line.
|
|
for l:line in split(l:output, "\n")
|
|
if l:line =~# '^ALE' && split(l:line)[0] ==# a:group
|
|
let l:header = split(l:line)[1]
|
|
let l:header = get(l:event_name_corrections, l:header, l:header)
|
|
elseif !empty(l:header)
|
|
" There's an extra line for buffer events, and we should only look
|
|
" for the one matching the current buffer.
|
|
if l:line =~# '<buffer=' . bufnr('') . '>'
|
|
let l:header .= ' <buffer>'
|
|
elseif l:line[:0] is# ' '
|
|
call add(l:matches, join(split(l:header . l:line)))
|
|
else
|
|
let l:header = ''
|
|
endif
|
|
endif
|
|
endfor
|
|
|
|
call sort(l:matches)
|
|
|
|
return l:matches
|
|
endfunction
|
|
|
|
Save g:ale_completion_enabled
|
|
Save g:ale_echo_cursor
|
|
Save g:ale_enabled
|
|
Save g:ale_fix_on_save
|
|
Save g:ale_lint_on_enter
|
|
Save g:ale_lint_on_filetype_changed
|
|
Save g:ale_lint_on_insert_leave
|
|
Save g:ale_lint_on_save
|
|
Save g:ale_lint_on_text_changed
|
|
Save g:ale_pattern_options_enabled
|
|
|
|
" Turn everything on by defaul for these tests.
|
|
let g:ale_completion_enabled = 1
|
|
let g:ale_echo_cursor = 1
|
|
let g:ale_enabled = 1
|
|
let g:ale_fix_on_save = 1
|
|
let g:ale_lint_on_enter = 1
|
|
let g:ale_lint_on_filetype_changed = 1
|
|
let g:ale_lint_on_insert_leave = 1
|
|
let g:ale_lint_on_save = 1
|
|
let g:ale_lint_on_text_changed = 1
|
|
let g:ale_pattern_options_enabled = 1
|
|
|
|
After:
|
|
delfunction CheckAutocmd
|
|
Restore
|
|
|
|
if g:ale_completion_enabled
|
|
call ale#completion#Enable()
|
|
else
|
|
call ale#completion#Disable()
|
|
endif
|
|
|
|
call ale#events#Init()
|
|
|
|
Execute (All events should be set up when everything is on):
|
|
let g:ale_echo_cursor = 1
|
|
|
|
AssertEqual
|
|
\ [
|
|
\ 'BufEnter * call ale#events#ReadOrEnterEvent(str2nr(expand(''<abuf>'')))',
|
|
\ 'BufReadPost * call ale#events#ReadOrEnterEvent(str2nr(expand(''<abuf>'')))',
|
|
\ 'BufWinEnter * call ale#events#LintOnEnter(str2nr(expand(''<abuf>'')))',
|
|
\ 'BufWritePost * call ale#events#SaveEvent(str2nr(expand(''<abuf>'')))',
|
|
\ 'CursorHold * if exists(''*ale#engine#Cleanup'') | call ale#cursor#EchoCursorWarningWithDelay() | endif',
|
|
\ 'CursorMoved * if exists(''*ale#engine#Cleanup'') | call ale#cursor#EchoCursorWarningWithDelay() | endif',
|
|
\ 'FileChangedShellPost * call ale#events#FileChangedEvent(str2nr(expand(''<abuf>'')))',
|
|
\ 'FileType * call ale#events#FileTypeEvent( str2nr(expand(''<abuf>'')), expand(''<amatch>''))',
|
|
\ 'InsertLeave * if ale#Var(str2nr(expand(''<abuf>'')), ''lint_on_insert_leave'') | call ale#Queue(0) | endif',
|
|
\ 'InsertLeave if exists(''*ale#engine#Cleanup'') | call ale#cursor#EchoCursorWarning() | endif',
|
|
\ 'TextChanged * call ale#Queue(g:ale_lint_delay)',
|
|
\ 'TextChangedI * call ale#Queue(g:ale_lint_delay)',
|
|
\ ],
|
|
\ CheckAutocmd('ALEEvents')
|
|
|
|
Execute (Only the required events should be bound even if various settings are off):
|
|
let g:ale_completion_enabled = 0
|
|
let g:ale_echo_cursor = 0
|
|
let g:ale_enabled = 0
|
|
let g:ale_fix_on_save = 0
|
|
let g:ale_lint_on_enter = 0
|
|
let g:ale_lint_on_filetype_changed = 0
|
|
let g:ale_lint_on_insert_leave = 0
|
|
let g:ale_lint_on_save = 0
|
|
let g:ale_lint_on_text_changed = 0
|
|
let g:ale_pattern_options_enabled = 0
|
|
|
|
AssertEqual
|
|
\ [
|
|
\ 'BufEnter * call ale#events#ReadOrEnterEvent(str2nr(expand(''<abuf>'')))',
|
|
\ 'BufReadPost * call ale#events#ReadOrEnterEvent(str2nr(expand(''<abuf>'')))',
|
|
\ 'BufWritePost * call ale#events#SaveEvent(str2nr(expand(''<abuf>'')))',
|
|
\ ],
|
|
\ CheckAutocmd('ALEEvents')
|
|
|
|
Execute (g:ale_lint_on_text_changed = 1 bind both events):
|
|
let g:ale_lint_on_text_changed = 1
|
|
|
|
AssertEqual
|
|
\ [
|
|
\ 'TextChanged * call ale#Queue(g:ale_lint_delay)',
|
|
\ 'TextChangedI * call ale#Queue(g:ale_lint_delay)',
|
|
\ ],
|
|
\ filter(CheckAutocmd('ALEEvents'), 'v:val =~ ''^TextChanged''')
|
|
|
|
Execute (g:ale_lint_on_text_changed = 'always' should bind both events):
|
|
let g:ale_lint_on_text_changed = 'always'
|
|
|
|
AssertEqual
|
|
\ [
|
|
\ 'TextChanged * call ale#Queue(g:ale_lint_delay)',
|
|
\ 'TextChangedI * call ale#Queue(g:ale_lint_delay)',
|
|
\ ],
|
|
\ filter(CheckAutocmd('ALEEvents'), 'v:val =~ ''^TextChanged''')
|
|
|
|
Execute (g:ale_lint_on_text_changed = 'normal' should bind only TextChanged):
|
|
let g:ale_lint_on_text_changed = 'normal'
|
|
|
|
AssertEqual
|
|
\ [
|
|
\ 'TextChanged * call ale#Queue(g:ale_lint_delay)',
|
|
\ ],
|
|
\ filter(CheckAutocmd('ALEEvents'), 'v:val =~ ''^TextChanged''')
|
|
|
|
Execute (g:ale_lint_on_text_changed = 'insert' should bind only TextChangedI):
|
|
let g:ale_lint_on_text_changed = 'insert'
|
|
|
|
AssertEqual
|
|
\ [
|
|
\ 'TextChangedI * call ale#Queue(g:ale_lint_delay)',
|
|
\ ],
|
|
\ filter(CheckAutocmd('ALEEvents'), 'v:val =~ ''^TextChanged''')
|
|
|
|
Execute (g:ale_lint_on_insert_leave = 1 should bind InsertLeave):
|
|
let g:ale_lint_on_insert_leave = 1
|
|
let g:ale_echo_cursor = 0
|
|
|
|
AssertEqual
|
|
\ [
|
|
\ 'InsertLeave * if ale#Var(str2nr(expand(''<abuf>'')), ''lint_on_insert_leave'') | call ale#Queue(0) | endif',
|
|
\ ],
|
|
\ filter(CheckAutocmd('ALEEvents'), 'v:val =~ ''^InsertLeave''')
|
|
|
|
Execute (g:ale_lint_on_filetype_changed = 1 should bind the FileType event):
|
|
let g:ale_lint_on_filetype_changed = 1
|
|
|
|
AssertEqual
|
|
\ [
|
|
\ 'FileType * call ale#events#FileTypeEvent( '
|
|
\ . 'str2nr(expand(''<abuf>'')), '
|
|
\ . 'expand(''<amatch>'')'
|
|
\ . ')',
|
|
\ ],
|
|
\ filter(CheckAutocmd('ALEEvents'), 'v:val =~ ''\v^FileType''')
|
|
|
|
Execute (ALECleanupGroup should include the right commands):
|
|
if exists('##VimSuspend')
|
|
AssertEqual [
|
|
\ 'BufDelete * if exists(''*ale#engine#Cleanup'') | call ale#engine#Cleanup(str2nr(expand(''<abuf>''))) | endif',
|
|
\ 'QuitPre * call ale#events#QuitEvent(str2nr(expand(''<abuf>'')))',
|
|
\ 'VimSuspend * if exists(''*ale#engine#CleanupEveryBuffer'') | call ale#engine#CleanupEveryBuffer() | endif',
|
|
\], CheckAutocmd('ALECleanupGroup')
|
|
else
|
|
AssertEqual [
|
|
\ 'BufDelete * if exists(''*ale#engine#Cleanup'') | call ale#engine#Cleanup(str2nr(expand(''<abuf>''))) | endif',
|
|
\ 'QuitPre * call ale#events#QuitEvent(str2nr(expand(''<abuf>'')))',
|
|
\], CheckAutocmd('ALECleanupGroup')
|
|
endif
|
|
|
|
Execute(ALECompletionActions should always be set up):
|
|
AssertEqual [
|
|
\ 'CompleteDone * call ale#completion#HandleUserData(v:completed_item)',
|
|
\], CheckAutocmd('ALECompletionActions')
|
|
|
|
Execute(Enabling completion should set up autocmd events correctly):
|
|
let g:ale_completion_enabled = 0
|
|
call ale#completion#Enable()
|
|
|
|
AssertEqual [
|
|
\ 'CompleteDone * call ale#completion#Done()',
|
|
\ 'TextChangedI * call ale#completion#Queue()',
|
|
\], CheckAutocmd('ALECompletionGroup')
|
|
AssertEqual 1, g:ale_completion_enabled
|
|
|
|
Execute(Disabling completion should remove autocmd events correctly):
|
|
let g:ale_completion_enabled = 1
|
|
call ale#completion#Enable()
|
|
call ale#completion#Disable()
|
|
|
|
AssertEqual [], CheckAutocmd('ALECompletionGroup')
|
|
AssertEqual 0, g:ale_completion_enabled
|