LSP configuration via didChangeConfiguration (#1852)
* adding LSP configuration via workspace/didChangeConfiguration
This commit is contained in:
parent
f57ad883f2
commit
2000436dfd
@ -255,6 +255,14 @@ function! ale#linter#PreProcess(filetype, linter) abort
|
|||||||
elseif has_key(a:linter, 'initialization_options')
|
elseif has_key(a:linter, 'initialization_options')
|
||||||
let l:obj.initialization_options = a:linter.initialization_options
|
let l:obj.initialization_options = a:linter.initialization_options
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if has_key(a:linter, 'lsp_config')
|
||||||
|
if type(a:linter.lsp_config) isnot v:t_dict
|
||||||
|
throw '`lsp_config` must be a Dictionary'
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:obj.lsp_config = a:linter.lsp_config
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let l:obj.output_stream = get(a:linter, 'output_stream', 'stdout')
|
let l:obj.output_stream = get(a:linter, 'output_stream', 'stdout')
|
||||||
|
@ -138,3 +138,9 @@ function! ale#lsp#message#Hover(buffer, line, column) abort
|
|||||||
\ 'position': {'line': a:line - 1, 'character': a:column},
|
\ 'position': {'line': a:line - 1, 'character': a:column},
|
||||||
\}]
|
\}]
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! ale#lsp#message#DidChangeConfiguration(buffer, config) abort
|
||||||
|
return [0, 'workspace/didChangeConfiguration', {
|
||||||
|
\ 'settings': a:config,
|
||||||
|
\}]
|
||||||
|
endfunction
|
||||||
|
@ -190,6 +190,12 @@ function! ale#lsp_linter#StartLSP(buffer, linter) abort
|
|||||||
|
|
||||||
let l:language_id = ale#util#GetFunction(a:linter.language_callback)(a:buffer)
|
let l:language_id = ale#util#GetFunction(a:linter.language_callback)(a:buffer)
|
||||||
|
|
||||||
|
if !empty(get(a:linter, 'lsp_config'))
|
||||||
|
" set LSP configuration options (workspace/didChangeConfiguration)
|
||||||
|
let l:config_message = ale#lsp#message#DidChangeConfiguration(a:buffer, a:linter.lsp_config)
|
||||||
|
call ale#lsp#Send(l:conn_id, l:config_message)
|
||||||
|
endif
|
||||||
|
|
||||||
let l:details = {
|
let l:details = {
|
||||||
\ 'buffer': a:buffer,
|
\ 'buffer': a:buffer,
|
||||||
\ 'connection_id': l:conn_id,
|
\ 'connection_id': l:conn_id,
|
||||||
|
@ -175,6 +175,22 @@ Execute(ale#lsp#message#Hover() should return correct messages):
|
|||||||
\ ],
|
\ ],
|
||||||
\ ale#lsp#message#Hover(bufnr(''), 12, 34)
|
\ ale#lsp#message#Hover(bufnr(''), 12, 34)
|
||||||
|
|
||||||
|
Execute(ale#lsp#message#DidChangeConfiguration() should return correct messages):
|
||||||
|
let g:ale_lsp_configuration = {
|
||||||
|
\ 'foo': 'bar'
|
||||||
|
\ }
|
||||||
|
AssertEqual
|
||||||
|
\ [
|
||||||
|
\ 0,
|
||||||
|
\ 'workspace/didChangeConfiguration',
|
||||||
|
\ {
|
||||||
|
\ 'settings': {
|
||||||
|
\ 'foo': 'bar',
|
||||||
|
\ }
|
||||||
|
\ }
|
||||||
|
\ ],
|
||||||
|
\ ale#lsp#message#DidChangeConfiguration(bufnr(''), g:ale_lsp_configuration)
|
||||||
|
|
||||||
Execute(ale#lsp#tsserver_message#Open() should return correct messages):
|
Execute(ale#lsp#tsserver_message#Open() should return correct messages):
|
||||||
AssertEqual
|
AssertEqual
|
||||||
\ [
|
\ [
|
||||||
|
@ -490,7 +490,7 @@ Execute(PreProcess should complain about using initialization_options and initia
|
|||||||
AssertThrows call ale#linter#PreProcess('testft', g:linter)
|
AssertThrows call ale#linter#PreProcess('testft', g:linter)
|
||||||
AssertEqual 'Only one of `initialization_options` or `initialization_options_callback` should be set', g:vader_exception
|
AssertEqual 'Only one of `initialization_options` or `initialization_options_callback` should be set', g:vader_exception
|
||||||
|
|
||||||
Execute (PreProcess should throw when initialization_options_callback is not a callback):
|
Execute(PreProcess should throw when initialization_options_callback is not a callback):
|
||||||
AssertThrows call ale#linter#PreProcess('testft', {
|
AssertThrows call ale#linter#PreProcess('testft', {
|
||||||
\ 'name': 'foo',
|
\ 'name': 'foo',
|
||||||
\ 'lsp': 'socket',
|
\ 'lsp': 'socket',
|
||||||
@ -500,3 +500,32 @@ Execute (PreProcess should throw when initialization_options_callback is not a c
|
|||||||
\ 'initialization_options_callback': {},
|
\ 'initialization_options_callback': {},
|
||||||
\})
|
\})
|
||||||
AssertEqual '`initialization_options_callback` must be a callback if defined', g:vader_exception
|
AssertEqual '`initialization_options_callback` must be a callback if defined', g:vader_exception
|
||||||
|
|
||||||
|
Execute(PreProcess should accept LSP configuration options via lsp_config):
|
||||||
|
let g:ale_lsp_configuration = {
|
||||||
|
\ 'foo': 'bar'
|
||||||
|
\}
|
||||||
|
|
||||||
|
let g:linter = {
|
||||||
|
\ 'name': 'x',
|
||||||
|
\ 'lsp': 'socket',
|
||||||
|
\ 'address_callback': 'X',
|
||||||
|
\ 'language_callback': 'x',
|
||||||
|
\ 'project_root_callback': 'x',
|
||||||
|
\ 'lsp_config': g:ale_lsp_configuration,
|
||||||
|
\}
|
||||||
|
|
||||||
|
AssertEqual {'foo': 'bar'}, ale#linter#PreProcess('testft', g:linter).lsp_config
|
||||||
|
|
||||||
|
|
||||||
|
Execute(PreProcess should throw when lsp_config is not a Dictionary):
|
||||||
|
AssertThrows call ale#linter#PreProcess('testft', {
|
||||||
|
\ 'name': 'foo',
|
||||||
|
\ 'lsp': 'socket',
|
||||||
|
\ 'address_callback': 'X',
|
||||||
|
\ 'language': 'x',
|
||||||
|
\ 'project_root_callback': 'x',
|
||||||
|
\ 'lsp_config': 'x',
|
||||||
|
\})
|
||||||
|
AssertEqual '`lsp_config` must be a Dictionary', g:vader_exception
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user