Add a lsp_config_callback linter option

This is the callback-based variant of the existing `lsp_config` linter
option. It serves the same purpose but can be used when more complicated
processing is needed.

`lsp_config` and `lsp_config_callback` are mutually exclusive options;
if both an given, a linter preprocessing error will be raised.

The runtime logic has been wrapped in `ale#lsp_linter#GetConfig` for
convenience, similar to `ale#lsp_linter#GetOptions`.

This also adds documentation and an `AssertLSPConfig` test function for
completeness.
This commit is contained in:
Jon Parise
2018-10-30 08:54:40 -07:00
parent 20e4e3f9db
commit b5a7593577
9 changed files with 85 additions and 7 deletions

View File

@@ -257,7 +257,17 @@ function! ale#linter#PreProcess(filetype, linter) abort
let l:obj.initialization_options = a:linter.initialization_options
endif
if has_key(a:linter, 'lsp_config')
if has_key(a:linter, 'lsp_config_callback')
if has_key(a:linter, 'lsp_config')
throw 'Only one of `lsp_config` or `lsp_config_callback` should be set'
endif
let l:obj.lsp_config_callback = a:linter.lsp_config_callback
if !s:IsCallback(l:obj.lsp_config_callback)
throw '`lsp_config_callback` must be a callback if defined'
endif
elseif has_key(a:linter, 'lsp_config')
if type(a:linter.lsp_config) isnot v:t_dict
throw '`lsp_config` must be a Dictionary'
endif