#2403 - Make ale_disable_lsp apply consistently, and document it better

This commit is contained in:
w0rp
2019-05-10 13:42:41 +01:00
parent f444abdfe6
commit 79e42fed14
6 changed files with 116 additions and 2 deletions

View File

@@ -97,7 +97,7 @@ function! s:Lint(buffer, should_lint_file, timer_id) abort
" Apply ignore lists for linters only if needed. " Apply ignore lists for linters only if needed.
let l:ignore_config = ale#Var(a:buffer, 'linters_ignore') let l:ignore_config = ale#Var(a:buffer, 'linters_ignore')
let l:disable_lsp = ale#Var(a:buffer, 'disable_lsp') let l:disable_lsp = ale#Var(a:buffer, 'disable_lsp')
let l:linters = !empty(l:ignore_config) let l:linters = !empty(l:ignore_config) || l:disable_lsp
\ ? ale#engine#ignore#Exclude(l:filetype, l:linters, l:ignore_config, l:disable_lsp) \ ? ale#engine#ignore#Exclude(l:filetype, l:linters, l:ignore_config, l:disable_lsp)
\ : l:linters \ : l:linters

View File

@@ -10,6 +10,11 @@ endif
" Check if diagnostics for a particular linter should be ignored. " Check if diagnostics for a particular linter should be ignored.
function! s:ShouldIgnore(buffer, linter_name) abort function! s:ShouldIgnore(buffer, linter_name) abort
" Ignore all diagnostics if LSP integration is disabled.
if ale#Var(a:buffer, 'disable_lsp')
return 1
endif
let l:config = ale#Var(a:buffer, 'linters_ignore') let l:config = ale#Var(a:buffer, 'linters_ignore')
" Don't load code for ignoring diagnostics if there's nothing to ignore. " Don't load code for ignoring diagnostics if there's nothing to ignore.

View File

@@ -142,6 +142,8 @@ ALE offers several options for controlling which linters are run.
* Selecting linters to run. - |g:ale_linters| * Selecting linters to run. - |g:ale_linters|
* Aliasing filetypes for linters - |g:ale_linter_aliases| * Aliasing filetypes for linters - |g:ale_linter_aliases|
* Only running linters you asked for. - |g:ale_linters_explicit| * Only running linters you asked for. - |g:ale_linters_explicit|
* Disabling only a subset of linters. - |g:ale_linters_ignore|
* Disabling LSP linters and `tsserver`. - |g:ale_disable_lsp|
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
@@ -321,6 +323,9 @@ servers. LSP linters can be used in combination with any other linter, and
will automatically connect to LSP servers when needed. ALE also supports will automatically connect to LSP servers when needed. ALE also supports
`tsserver` for TypeScript, which uses a different but very similar protocol. `tsserver` for TypeScript, which uses a different but very similar protocol.
If you want to use another plugin for LSP features and tsserver, you can use
the |g:ale_disable_lsp| setting to disable ALE's own LSP integrations, or
ignore particular linters with |g:ale_linters_ignore|.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
5.1 Completion *ale-completion* 5.1 Completion *ale-completion*
@@ -627,7 +632,9 @@ g:ale_disable_lsp *g:ale_disable_lsp*
Type: |Number| Type: |Number|
Default: `0` Default: `0`
When this option is set to `1`, ALE ignores all linters powered by LSP. When this option is set to `1`, ALE ignores all linters powered by LSP,
and also `tsserver`.
Please see also |ale-lsp|. Please see also |ale-lsp|.

View File

@@ -3,12 +3,15 @@ Before:
Save g:ale_enabled Save g:ale_enabled
Save g:ale_linters Save g:ale_linters
Save g:ale_run_synchronously Save g:ale_run_synchronously
Save g:ale_disable_lsp
call ale#test#SetDirectory('/testplugin/test/completion') call ale#test#SetDirectory('/testplugin/test/completion')
call ale#test#SetFilename('dummy.txt') call ale#test#SetFilename('dummy.txt')
runtime autoload/ale/lsp.vim runtime autoload/ale/lsp.vim
let g:ale_disable_lsp = 0
unlet! b:ale_disable_lsp
let g:ale_lint_on_save = 1 let g:ale_lint_on_save = 1
let b:ale_enabled = 1 let b:ale_enabled = 1
let g:ale_lsp_next_message_id = 1 let g:ale_lsp_next_message_id = 1

View File

@@ -300,3 +300,98 @@ Execute(Buffer ignore lists should be applied for LSP linters):
call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message) call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message)
AssertEqual [], g:loclist AssertEqual [], g:loclist
Execute(ale_disable_lsp should be applied for tsserver):
call ale#test#SetFilename('filename.ts')
call ale#engine#InitBufferInfo(bufnr(''))
let g:lsp_message = {
\ 'seq': 0,
\ 'type': 'event',
\ 'event': 'syntaxDiag',
\ 'body': {
\ 'file': g:dir . '/filename.ts',
\ 'diagnostics':[
\ {
\ 'start': {
\ 'line':2,
\ 'offset':14,
\ },
\ 'end': {
\ 'line':2,
\ 'offset':15,
\ },
\ 'text': ''','' expected.',
\ "code":1005
\ },
\ ],
\ },
\}
call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message)
AssertEqual
\ [
\ {
\ 'lnum': 2,
\ 'col': 14,
\ 'nr': 1005,
\ 'code': '1005',
\ 'type': 'E',
\ 'end_col': 15,
\ 'end_lnum': 2,
\ 'text': ''','' expected.',
\ },
\ ],
\ g:loclist
let g:loclist = []
let b:ale_disable_lsp = 1
call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message)
AssertEqual [], g:loclist
Execute(ale_disable_lsp should be applied for LSP linters):
call ale#test#SetFilename('filename.py')
call ale#engine#InitBufferInfo(bufnr(''))
call ale#lsp_linter#SetLSPLinterMap({'347': 'lsplinter'})
let g:lsp_message = {
\ 'jsonrpc': '2.0',
\ 'method': 'textDocument/publishDiagnostics',
\ 'params': {
\ 'uri': ale#path#ToURI(expand('%:p')),
\ 'diagnostics': [
\ {
\ 'severity': 1,
\ 'message': 'x',
\ 'range': {
\ 'start': {'line': 0, 'character': 9},
\ 'end': {'line': 0, 'character': 9},
\ },
\ }
\ ],
\ },
\}
call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message)
AssertEqual
\ [
\ {
\ 'lnum': 1,
\ 'col': 10,
\ 'type': 'E',
\ 'end_col': 9,
\ 'end_lnum': 1,
\ 'text': 'x',
\ }
\ ],
\ g:loclist
let b:ale_disable_lsp = 1
let g:loclist = []
call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message)
AssertEqual [], g:loclist

View File

@@ -1,5 +1,9 @@
Before: Before:
Save g:ale_buffer_info Save g:ale_buffer_info
Save g:ale_disable_lsp
let g:ale_disable_lsp = 0
unlet! b:ale_disable_lsp
function! CreateError(type, message) abort function! CreateError(type, message) abort
let l:diagnostics = [] let l:diagnostics = []