summaryrefslogtreecommitdiff
path: root/test/test_ignoring_linters.vader
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_ignoring_linters.vader')
-rw-r--r--test/test_ignoring_linters.vader320
1 files changed, 265 insertions, 55 deletions
diff --git a/test/test_ignoring_linters.vader b/test/test_ignoring_linters.vader
index f97a0cf6..c84a8943 100644
--- a/test/test_ignoring_linters.vader
+++ b/test/test_ignoring_linters.vader
@@ -1,10 +1,60 @@
Before:
+ Save g:lspconfig
+ Save g:ale_linters_ignore
+ Save g:ale_buffer_info
Save g:ale_disable_lsp
+ let g:lspconfig = 0
+ let g:lspconfig_names = {}
+ let g:ale_disable_lsp = 0
+ let g:linters = []
+ let g:loclist = []
+ let g:run_linters_called = 0
+
+ runtime autoload/ale/engine.vim
+ runtime autoload/ale/engine/ignore.vim
+
+ " Mock the engine function so we can set it up.
+ function! ale#engine#RunLinters(buffer, linters, should_lint_file) abort
+ let g:linters = a:linters
+ let g:run_linters_called = 1
+ endfunction
+
+ function! ale#engine#HandleLoclist(linter_name, buffer, loclist, from_other_source) abort
+ let g:loclist = a:loclist
+ endfunction
+
+ function! ale#engine#ignore#GetLSPConfigNames() abort
+ return g:lspconfig_names
+ endfunction
+
+ call ale#linter#Define('foobar', {
+ \ 'name': 'testlinter',
+ \ 'callback': 'TestCallback',
+ \ 'executable': has('win32') ? 'cmd' : 'true',
+ \ 'command': has('win32') ? 'echo' : 'true',
+ \})
+ call ale#test#SetDirectory('/testplugin/test')
+
After:
+ unlet! b:ale_linted
+ unlet! b:ale_linters_ignore
+ unlet! b:ale_quitting
+ unlet! b:ale_save_event_fired
+ unlet! b:ale_disable_lsp
+ unlet! g:linters
+ unlet! g:loclist
+ unlet! g:lsp_message
+ unlet! g:lspconfig_names
+
Restore
- unlet! b:ale_disable_lsp
+ call ale#test#RestoreDirectory()
+ call ale#linter#Reset()
+ call ale#lsp_linter#ClearLSPData()
+
+ runtime autoload/ale/engine.vim
+ runtime autoload/ale/engine/ignore.vim
Execute(GetList should ignore some invalid values):
AssertEqual [], ale#engine#ignore#GetList('', 'foo')
@@ -105,7 +155,7 @@ Execute(Exclude should handle Dictionaries):
\ 0,
\ )
-Execute(Exclude should filter LSP linters when g:ale_disable_lsp is set to 1):
+Execute(Exclude should filter LSP linters when ale_disable_lsp is set to 1):
AssertEqual
\ [
\ {'name': 'linter1', 'aliases': [], 'lsp': ''},
@@ -122,70 +172,81 @@ Execute(Exclude should filter LSP linters when g:ale_disable_lsp is set to 1):
\ 1,
\ )
-Execute(Exclude should filter LSP linters when b:ale_disable_lsp is set to 1):
+Execute(Exclude should remove lspconfig linters with ale_disable_lsp = 'auto'):
+ let g:lspconfig = 1
+ " A map is used here so you can easily see what the ignore mapping should be
+ " remapping the nvim-lspconfig names to.
+ let g:lspconfig_names = keys({
+ \ 'als': 'adals',
+ \ 'ansiblels': 'ansible-language-server',
+ \ 'bicep': 'bicep_language_server',
+ \ 'cmake': 'cmake_language_server',
+ \ 'denols': 'deno',
+ \ 'erlangls': 'erlang_ls',
+ \ 'html': 'vscodehtml',
+ \ 'ocamlls': 'ocaml-language-server',
+ \ 'puppet': 'puppet_languageserver',
+ \ 'pyright': 'pyright',
+ \})
+
+ " We should keep bicep, as it's different tool.
AssertEqual
\ [
- \ {'name': 'linter1', 'aliases': [], 'lsp': ''},
- \ {'name': 'linter2', 'aliases': []},
+ \ {'name': 'bicep', 'aliases': []},
\ ],
\ ale#engine#ignore#Exclude(
\ 'foo',
\ [
- \ {'name': 'linter1', 'aliases': [], 'lsp': ''},
- \ {'name': 'linter2', 'aliases': []},
- \ {'name': 'linter3', 'aliases': [], 'lsp': 'stdio'},
+ \ {'name': 'adals', 'aliases': []},
+ \ {'name': 'language_server', 'aliases': ['ansible-language-server']},
+ \ {'name': 'cmake_language_server', 'aliases': []},
+ \ {'name': 'deno', 'aliases': []},
+ \ {'name': 'erlang_ls', 'aliases': []},
+ \ {'name': 'vscodehtml', 'aliases': []},
+ \ {'name': 'bicep', 'aliases': []},
+ \ {'name': 'ols', 'aliases': ['ocaml-language-server']},
+ \ {'name': 'languageserver', 'aliases': ['puppet_languageserver']},
+ \ {'name': 'pyright', 'aliases': []},
\ ],
\ [],
- \ 1,
+ \ 'auto',
\ )
-Before:
- Save g:ale_linters_ignore
- Save g:ale_buffer_info
- Save g:ale_disable_lsp
+Execute(Exclude should check that the nvim-lspconfig plugin is installed with ale_disable_lsp = 'auto'):
+ let g:lspconfig = 0
+ let g:lspconfig_names = ['pyright']
- let g:ale_disable_lsp = 0
-
- let g:linters = []
- let g:loclist = []
- let g:run_linters_called = 0
-
- runtime autoload/ale/engine.vim
-
- " Mock the engine function so we can set it up.
- function! ale#engine#RunLinters(buffer, linters, should_lint_file) abort
- let g:linters = a:linters
- let g:run_linters_called = 1
- endfunction
-
- function! ale#engine#HandleLoclist(linter_name, buffer, loclist, from_other_source) abort
- let g:loclist = a:loclist
- endfunction
-
- call ale#linter#Define('foobar', {
- \ 'name': 'testlinter',
- \ 'callback': 'TestCallback',
- \ 'executable': has('win32') ? 'cmd' : 'true',
- \ 'command': has('win32') ? 'echo' : 'true',
- \})
- call ale#test#SetDirectory('/testplugin/test')
-
-After:
- Restore
+ " We should keep pyright here, because g:lspconfig is 0.
+ AssertEqual
+ \ [
+ \ {'name': 'pyright', 'aliases': []},
+ \ ],
+ \ ale#engine#ignore#Exclude(
+ \ 'foo',
+ \ [
+ \ {'name': 'pyright', 'aliases': []},
+ \ ],
+ \ [],
+ \ 'auto',
+ \ )
- unlet! b:ale_linted
- unlet! b:ale_linters_ignore
- unlet! b:ale_quitting
- unlet! b:ale_save_event_fired
- unlet! b:ale_disable_lsp
- unlet! g:linters
- unlet! g:loclist
- unlet! g:lsp_message
+Execute(Exclude should handle the lspconfig result being a Dictionary):
+ let g:lspconfig = 1
+ let g:lspconfig_names = {}
- call ale#test#RestoreDirectory()
- call ale#linter#Reset()
- call ale#lsp_linter#ClearLSPData()
- runtime autoload/ale/engine.vim
+ " We should keep pyright here, because the configuration is empty.
+ AssertEqual
+ \ [
+ \ {'name': 'pyright', 'aliases': []},
+ \ ],
+ \ ale#engine#ignore#Exclude(
+ \ 'foo',
+ \ [
+ \ {'name': 'pyright', 'aliases': []},
+ \ ],
+ \ [],
+ \ 'auto',
+ \ )
Given foobar(An empty file):
Execute(Global ignore lists should be applied for linters):
@@ -265,7 +326,7 @@ Execute(Buffer ignore lists should be applied for tsserver):
Execute(Buffer ignore lists should be applied for LSP linters):
call ale#test#SetFilename('filename.py')
call ale#engine#InitBufferInfo(bufnr(''))
- call ale#lsp_linter#SetLSPLinterMap({'347': 'lsplinter'})
+ call ale#lsp_linter#SetLSPLinterMap({'347': {'name': 'lsplinter', 'aliases': [], 'lsp': 'stdio'}})
let g:lsp_message = {
\ 'jsonrpc': '2.0',
@@ -357,10 +418,63 @@ Execute(ale_disable_lsp should be applied for tsserver):
AssertEqual [], g:loclist
+Execute(ale_disable_lsp = 'auto' should be applied for tsserver):
+ let g:lspconfig = 1
+ let g:lspconfig_names = ['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': 14,
+ \ 'end_lnum': 2,
+ \ 'text': ''','' expected.',
+ \ },
+ \ ],
+ \ g:loclist
+
+ let g:loclist = []
+ let g:ale_disable_lsp = 'auto'
+ 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'})
+ call ale#lsp_linter#SetLSPLinterMap({'347': {'name': 'lsplinter', 'aliases': [], 'lsp': 'stdio'}})
let g:lsp_message = {
\ 'jsonrpc': '2.0',
@@ -401,3 +515,99 @@ Execute(ale_disable_lsp should be applied for LSP linters):
call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message)
AssertEqual [], g:loclist
+
+Execute(ale_disable_lsp = 'auto' should be applied for LSP linters):
+ let g:lspconfig = 1
+ let g:lspconfig_names = ['lsplinter']
+
+ call ale#test#SetFilename('filename.py')
+ call ale#engine#InitBufferInfo(bufnr(''))
+ call ale#lsp_linter#SetLSPLinterMap({'347': {'name': 'lsplinter', 'aliases': [], 'lsp': 'stdio'}})
+
+ let g:lsp_message = {
+ \ 'jsonrpc': '2.0',
+ \ 'method': 'textDocument/publishDiagnostics',
+ \ 'params': {
+ \ 'uri': ale#path#ToFileURI(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 g:ale_disable_lsp = 'auto'
+ let g:loclist = []
+
+ call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message)
+
+ AssertEqual [], g:loclist
+
+Execute(ale_disable_lsp = 'auto' should ignore LSP linters by alias too):
+ let g:lspconfig = 1
+ let g:lspconfig_names = ['lsplinter']
+
+ call ale#test#SetFilename('filename.py')
+ call ale#engine#InitBufferInfo(bufnr(''))
+ call ale#lsp_linter#SetLSPLinterMap({'347': {'name': 'notthis', 'aliases': ['lsplinter'], 'lsp': 'stdio'}})
+
+ let g:lsp_message = {
+ \ 'jsonrpc': '2.0',
+ \ 'method': 'textDocument/publishDiagnostics',
+ \ 'params': {
+ \ 'uri': ale#path#ToFileURI(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 g:ale_disable_lsp = 'auto'
+ let g:loclist = []
+
+ call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message)
+
+ AssertEqual [], g:loclist