2018-01-19 16:40:55 +00:00
|
|
|
Before:
|
|
|
|
Save g:ale_lint_on_save
|
|
|
|
Save g:ale_enabled
|
|
|
|
Save g:ale_linters
|
|
|
|
Save g:ale_run_synchronously
|
|
|
|
|
|
|
|
call ale#test#SetDirectory('/testplugin/test/completion')
|
|
|
|
call ale#test#SetFilename('dummy.txt')
|
|
|
|
|
|
|
|
runtime autoload/ale/lsp.vim
|
|
|
|
|
|
|
|
let g:ale_lint_on_save = 1
|
|
|
|
let b:ale_enabled = 1
|
|
|
|
let g:ale_lsp_next_message_id = 1
|
|
|
|
let g:ale_run_synchronously = 1
|
|
|
|
let g:message_list = []
|
|
|
|
let g:Callback = ''
|
|
|
|
|
2018-01-19 16:50:04 +00:00
|
|
|
function! LanguageCallback() abort
|
|
|
|
return 'foobar'
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
function! ProjectRootCallback() abort
|
|
|
|
return expand('.')
|
|
|
|
endfunction
|
|
|
|
|
2018-01-19 16:40:55 +00:00
|
|
|
call ale#linter#Define('foobar', {
|
|
|
|
\ 'name': 'dummy_linter',
|
|
|
|
\ 'lsp': 'stdio',
|
|
|
|
\ 'command': 'cat - > /dev/null',
|
|
|
|
\ 'executable': has('win32') ? 'cmd' : 'echo',
|
2018-01-19 16:50:04 +00:00
|
|
|
\ 'language_callback': 'LanguageCallback',
|
|
|
|
\ 'project_root_callback': 'ProjectRootCallback',
|
2018-01-19 16:40:55 +00:00
|
|
|
\ })
|
|
|
|
let g:ale_linters = {'foobar': ['dummy_linter']}
|
|
|
|
|
2018-06-15 08:53:13 +00:00
|
|
|
function! ale#lsp_linter#StartLSP(buffer, linter, callback) abort
|
2018-01-19 16:40:55 +00:00
|
|
|
let g:Callback = a:callback
|
|
|
|
|
2018-06-15 08:53:13 +00:00
|
|
|
let l:conn = ale#lsp#NewConnection({})
|
|
|
|
let l:conn.id = 347
|
|
|
|
let l:conn.open_documents = {a:buffer : -1}
|
|
|
|
|
2018-01-19 16:40:55 +00:00
|
|
|
return {
|
2018-06-15 08:53:13 +00:00
|
|
|
\ 'buffer': a:buffer,
|
2018-01-19 16:40:55 +00:00
|
|
|
\ 'connection_id': 347,
|
|
|
|
\ 'project_root': '/foo/bar',
|
2018-06-15 08:53:13 +00:00
|
|
|
\ 'language_id': 'foobar',
|
2018-01-19 16:40:55 +00:00
|
|
|
\}
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
" Replace the Send function for LSP, so we can monitor calls to it.
|
|
|
|
function! ale#lsp#Send(conn_id, message, ...) abort
|
|
|
|
call add(g:message_list, a:message)
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
After:
|
|
|
|
Restore
|
|
|
|
|
|
|
|
unlet! b:ale_enabled
|
|
|
|
unlet! b:ale_linters
|
|
|
|
unlet! g:Callback
|
|
|
|
unlet! g:message_list
|
|
|
|
|
2018-01-19 16:50:04 +00:00
|
|
|
delfunction LanguageCallback
|
|
|
|
delfunction ProjectRootCallback
|
|
|
|
|
2018-06-15 08:53:13 +00:00
|
|
|
call ale#lsp#RemoveConnectionWithID(347)
|
2018-01-19 16:40:55 +00:00
|
|
|
call ale#test#RestoreDirectory()
|
|
|
|
call ale#linter#Reset()
|
|
|
|
|
|
|
|
" Stop any timers we left behind.
|
|
|
|
" This stops the tests from failing randomly.
|
|
|
|
call ale#completion#StopTimer()
|
|
|
|
|
|
|
|
runtime autoload/ale/completion.vim
|
|
|
|
runtime autoload/ale/lsp.vim
|
2018-07-06 00:00:30 +00:00
|
|
|
runtime autoload/ale/lsp_linter.vim
|
2018-01-19 16:40:55 +00:00
|
|
|
|
|
|
|
Given foobar (Some imaginary filetype):
|
|
|
|
<contents>
|
|
|
|
|
|
|
|
Execute(Server should be notified on save):
|
|
|
|
call ale#events#SaveEvent(bufnr(''))
|
|
|
|
|
|
|
|
AssertEqual
|
|
|
|
\ [
|
|
|
|
\ [1, 'textDocument/didChange', {
|
|
|
|
\ 'textDocument': {
|
|
|
|
\ 'uri': ale#path#ToURI(expand('%:p')),
|
|
|
|
\ 'version': g:ale_lsp_next_version_id - 1,
|
|
|
|
\ },
|
|
|
|
\ 'contentChanges': [{'text': join(getline(1, '$'), "\n") . "\n"}],
|
|
|
|
\ }],
|
|
|
|
\ [1, 'textDocument/didSave', {
|
|
|
|
\ 'textDocument': {
|
|
|
|
\ 'uri': ale#path#ToURI(expand('%:p')),
|
|
|
|
\ },
|
|
|
|
\ }],
|
|
|
|
\ ],
|
|
|
|
\ g:message_list
|
|
|
|
|
|
|
|
Execute(Server should be notified on change):
|
|
|
|
call ale#events#FileChangedEvent(bufnr(''))
|
|
|
|
|
|
|
|
AssertEqual
|
|
|
|
\ [
|
|
|
|
\ [1, 'textDocument/didChange', {
|
|
|
|
\ 'textDocument': {
|
|
|
|
\ 'uri': ale#path#ToURI(expand('%:p')),
|
|
|
|
\ 'version': g:ale_lsp_next_version_id - 1,
|
|
|
|
\ },
|
|
|
|
\ 'contentChanges': [{'text': join(getline(1, '$'), "\n") . "\n"}],
|
|
|
|
\ }],
|
|
|
|
\ ],
|
|
|
|
\ g:message_list
|