All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
2 Save g:ale_set_lists_synchronously
4 Save g:ale_lsp_error_messages
7 Save g:ale_set_quickfix
8 Save g:ale_set_highlights
10 Save g:ale_disable_lsp
11 Save g:ale_history_enabled
12 Save g:ale_history_log_output
14 let g:ale_disable_lsp = 0
15 let g:ale_set_lists_synchronously = 1
16 let g:ale_buffer_info = {}
17 let g:ale_set_loclist = 1
18 " Disable features we don't need for these tests.
19 let g:ale_set_signs = 0
20 let g:ale_set_quickfix = 0
21 let g:ale_set_highlights = 0
22 let g:ale_echo_cursor = 0
23 let g:ale_history_enabled = 1
24 let g:ale_history_log_output = 1
26 unlet! g:ale_lsp_error_messages
28 unlet! b:ale_disable_lsp
30 call ale#linter#Reset()
31 call ale#test#SetDirectory('/testplugin/test')
32 call setloclist(0, [])
39 call setloclist(0, [])
40 call ale#test#RestoreDirectory()
41 call ale#linter#Reset()
42 call ale#lsp_linter#ClearLSPData()
44 Given foobar(An empty file):
45 Execute(tsserver syntax error responses should be handled correctly):
46 runtime ale_linters/typescript/tsserver.vim
49 call ale#test#SetFilename('filename,[]^$.ts')
51 call ale#test#SetFilename('filename*?,{}[]^$.ts')
54 call ale#engine#InitBufferInfo(bufnr(''))
57 AssertEqual 'filename,[]^$.ts', expand('%:p:t')
59 AssertEqual 'filename*?,{}[]^$.ts', expand('%:p:t')
62 " When we get syntax errors and no semantic errors, we should keep the
64 call ale#lsp_linter#HandleLSPResponse(1, {
67 \ 'event': 'syntaxDiag',
69 \ 'file': expand('%:p'),
80 \ 'text': ''','' expected.',
86 call ale#lsp_linter#HandleLSPResponse(1, {
89 \ 'event': 'semanticDiag',
91 \ 'file': expand('%:p'),
101 \ 'bufnr': bufnr(''),
106 \ 'text': '1005: '','' expected.',
111 \ ale#test#GetLoclistWithoutNewerKeys()
113 " After we get empty syntax errors, we should clear them.
114 call ale#lsp_linter#HandleLSPResponse(1, {
117 \ 'event': 'syntaxDiag',
119 \ 'file': expand('%:p'),
128 \ ale#test#GetLoclistWithoutNewerKeys()
130 " Syntax errors on the project root should not populate the LocList.
131 call ale#lsp_linter#HandleLSPResponse(1, {
134 \ 'event': 'syntaxDiag',
147 \ 'text': ''','' expected.',
157 \ ale#test#GetLoclistWithoutNewerKeys()
159 Execute(tsserver semantic error responses should be handled correctly):
160 runtime ale_linters/typescript/tsserver.vim
163 call ale#test#SetFilename('filename,[]^$.ts')
165 call ale#test#SetFilename('filename*?,{}[]^$.ts')
168 call ale#engine#InitBufferInfo(bufnr(''))
171 AssertEqual 'filename,[]^$.ts', expand('%:p:t')
173 AssertEqual 'filename*?,{}[]^$.ts', expand('%:p:t')
176 " When we get syntax errors and no semantic errors, we should keep the
178 call ale#lsp_linter#HandleLSPResponse(1, {
181 \ 'event': 'syntaxDiag',
183 \ 'file': expand('%:p'),
188 call ale#lsp_linter#HandleLSPResponse(1, {
191 \ 'event': 'semanticDiag',
193 \ 'file': expand('%:p'),
204 \ 'text': 'Some semantic error',
215 \ 'bufnr': bufnr(''),
220 \ 'text': '1005: Some semantic error',
225 \ ale#test#GetLoclistWithoutNewerKeys()
227 " After we get empty syntax errors, we should clear them.
228 call ale#lsp_linter#HandleLSPResponse(1, {
231 \ 'event': 'semanticDiag',
233 \ 'file': expand('%:p'),
242 \ ale#test#GetLoclistWithoutNewerKeys()
244 " Semantic errors on the project root should not populate the LocList.
245 call ale#lsp_linter#HandleLSPResponse(1, {
248 \ 'event': 'semanticDiag',
261 \ 'text': 'Some semantic error',
271 \ ale#test#GetLoclistWithoutNewerKeys()
273 Execute(tsserver errors should mark tsserver no longer active):
274 let b:ale_linters = ['tsserver']
275 runtime ale_linters/typescript/tsserver.vim
276 call ale#test#SetFilename('filename.ts')
277 call ale#engine#InitBufferInfo(bufnr(''))
279 let g:ale_buffer_info[bufnr('')].active_linter_list = ale#linter#Get('typescript')
280 Assert !empty(g:ale_buffer_info[bufnr('')].active_linter_list)
282 call ale#lsp_linter#HandleLSPResponse(1, {
285 \ 'event': 'semanticDiag',
287 \ 'file': g:dir . '/filename.ts',
292 AssertEqual [], g:ale_buffer_info[bufnr('')].active_linter_list
294 Execute(LSP diagnostics responses should be handled correctly):
295 let b:ale_linters = ['eclipselsp']
296 runtime ale_linters/java/eclipselsp.vim
299 call ale#test#SetFilename('filename,[]^$.ts')
301 call ale#test#SetFilename('filename*?,{}[]^$.java')
304 call ale#engine#InitBufferInfo(bufnr(''))
305 call ale#lsp_linter#SetLSPLinterMap({'1': {'name': 'eclipselsp', 'aliases': [], 'lsp': 'stdio'}})
308 AssertEqual 'filename,[]^$.ts', expand('%:p:t')
310 AssertEqual 'filename*?,{}[]^$.java', expand('%:p:t')
313 call ale#lsp_linter#HandleLSPResponse(1, {
315 \ 'method':'textDocument/publishDiagnostics',
317 \ 'uri': ale#path#ToFileURI(expand('%:p')),
333 \ 'message': 'Missing JRE 1-8'
343 \ 'bufnr': bufnr(''),
350 \ 'text': 'Missing JRE 1-8'
353 \ ale#test#GetLoclistWithoutNewerKeys()
355 Execute(LSP diagnostics responses on project root should not populate loclist):
356 let b:ale_linters = ['eclipselsp']
357 runtime ale_linters/java/eclipselsp.vim
358 call ale#test#SetFilename('filename.java')
359 call ale#engine#InitBufferInfo(bufnr(''))
360 call ale#lsp_linter#SetLSPLinterMap({'1': {'name': 'eclipselsp', 'aliases': [], 'lsp': 'stdio'}})
362 call ale#lsp_linter#HandleLSPResponse(1, {
364 \ 'method':'textDocument/publishDiagnostics',
366 \ 'uri':'file://' . g:dir,
382 \ 'message': 'Missing JRE 1-8'
391 \ ale#test#GetLoclistWithoutNewerKeys()
393 Execute(LSP errors should mark linters no longer active):
394 let b:ale_linters = ['pylsp']
395 runtime ale_linters/python/pylsp.vim
396 call ale#test#SetFilename('filename.py')
397 call ale#engine#InitBufferInfo(bufnr(''))
398 call ale#lsp_linter#SetLSPLinterMap({'1': {'name': 'pylsp', 'aliases': [], 'lsp': 'stdio'}})
400 let g:ale_buffer_info[bufnr('')].active_linter_list = ale#linter#Get('python')
401 Assert !empty(g:ale_buffer_info[bufnr('')].active_linter_list)
403 call ale#lsp_linter#HandleLSPResponse(1, {
404 \ 'method': 'textDocument/publishDiagnostics',
406 \ 'uri': ale#path#ToFileURI(g:dir . '/filename.py'),
411 AssertEqual [], g:ale_buffer_info[bufnr('')].active_linter_list
413 Execute(LSP pull model diagnostic responses should be handled):
414 let b:ale_linters = ['eclipselsp']
415 runtime ale_linters/java/eclipselsp.vim
418 call ale#test#SetFilename('filename,[]^$.ts')
420 call ale#test#SetFilename('filename*?,{}[]^$.java')
423 call ale#engine#InitBufferInfo(bufnr(''))
424 let g:ale_buffer_info[bufnr('')].active_linter_list = ale#linter#Get('eclipselsp')
425 call ale#lsp_linter#SetLSPLinterMap({'1': {'name': 'eclipselsp', 'aliases': [], 'lsp': 'stdio'}})
426 call ale#lsp_linter#SetDiagnosticURIMap({'347': ale#util#ToURI(expand('%:p'))})
429 AssertEqual 'filename,[]^$.ts', expand('%:p:t')
431 AssertEqual 'filename*?,{}[]^$.java', expand('%:p:t')
434 call ale#lsp_linter#HandleLSPResponse(1, {
454 \ 'message': 'Missing JRE 1-8'
464 \ 'bufnr': bufnr(''),
471 \ 'text': 'Missing JRE 1-8'
474 \ ale#test#GetLoclistWithoutNewerKeys()
475 AssertEqual [], g:ale_buffer_info[bufnr('')].active_linter_list
477 Execute(LSP pull model diagnostic responses that are 'unchanged' should be handled):
478 let b:ale_linters = ['eclipselsp']
479 runtime ale_linters/java/eclipselsp.vim
482 call ale#test#SetFilename('filename,[]^$.ts')
484 call ale#test#SetFilename('filename*?,{}[]^$.java')
487 call ale#engine#InitBufferInfo(bufnr(''))
488 let g:ale_buffer_info[bufnr('')].active_linter_list = ale#linter#Get('eclipselsp')
489 let g:ale_buffer_info[bufnr('')].loclist = [
492 \ 'bufnr': bufnr(''),
499 \ 'text': 'Missing JRE 1-8'
503 call ale#lsp_linter#SetLSPLinterMap({'1': {'name': 'eclipselsp', 'aliases': [], 'lsp': 'stdio'}})
504 call ale#lsp_linter#SetDiagnosticURIMap({'347': ale#util#ToURI(expand('%:p'))})
507 AssertEqual 'filename,[]^$.ts', expand('%:p:t')
509 AssertEqual 'filename*?,{}[]^$.java', expand('%:p:t')
512 call ale#lsp_linter#HandleLSPResponse(1, {
516 \ 'kind': 'unchanged',
524 \ 'bufnr': bufnr(''),
531 \ 'text': 'Missing JRE 1-8'
534 \ g:ale_buffer_info[bufnr('')].loclist
535 AssertEqual [], g:ale_buffer_info[bufnr('')].active_linter_list
537 Execute(LSP errors should be logged in the history):
538 call ale#lsp_linter#SetLSPLinterMap({'347': {'name': 'foobar', 'aliases': [], 'lsp': 'stdio'}})
539 call ale#lsp_linter#HandleLSPResponse(347, {
545 \ 'traceback': ['123', '456'],
551 \ {'foobar': ["xyz\n123\n456"]},
552 \ get(g:, 'ale_lsp_error_messages', {})