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.
1 function! s:sort_item_by_text(lhs, rhs) abort
2 if a:lhs['text'] <# a:rhs['text']
5 if a:lhs['text'] ># a:rhs['text']
11 function! s:add_end_pos(loc) abort
12 let a:loc['end_lnum'] = 0
13 let a:loc['end_col'] = 0
17 Describe lsp#internal#diagnostics#document_diagnostics_command
20 let g:lsp_diagnostics_enabled = 1
21 call lsp#internal#diagnostics#state#_disable()
22 call lsp#internal#diagnostics#state#_enable()
27 let g:lsp_diagnostics_enabled = 0
28 call lsp#internal#diagnostics#state#_disable()
31 It should be able to show document diagnostics for a buffer
33 execute printf('keepalt keepjumps edit %s', lsp#test#projectdir('rust') . '/src/documentdiagnostics.rs')
34 let l:uri = lsp#utils#get_buffer_uri()
35 let l:uri2 = l:uri . '2'
36 let l:bufnr = bufnr('%')
38 let l:server1_response1 = {'method': 'textDocument/publishDiagnostics', 'params': {'uri': l:uri, 'diagnostics': [
39 \ {'severity': 1, 'message': 'm1', 'range': { 'start': { 'line': 1, 'character': 1, 'end': { 'line': 1, 'character': 1 } } }},
40 \ {'severity': 1, 'message': 'm2', 'range': { 'start': { 'line': 1, 'character': 2, 'end': { 'line': 1, 'character': 3 } } }},
43 let l:server1_response2 = {'method': 'textDocument/publishDiagnostics', 'params': {'uri': l:uri2, 'diagnostics': [
44 \ {'severity': 2, 'message': 'm3', 'range': { 'start': { 'line': 2, 'character': 1, 'end': { 'line': 1, 'character': 1 } } }},
45 \ {'severity': 2, 'message': 'm4', 'range': { 'start': { 'line': 3, 'character': 2, 'end': { 'line': 1, 'character': 3 } } }},
48 call lsp#stream(1, { 'server': 'server1', 'response': l:server1_response1 })
49 call lsp#stream(1, { 'server': 'server1', 'response': l:server1_response2 })
51 execute ':LspDocumentDiagnostics'
52 let l:result = getloclist(0)
54 " NOTE Older version of Vim does not sort results, and does not include module.
55 call sort(l:result, function('s:sort_item_by_text'))
56 call map(l:result, {_, v -> extend(v, {'module': ''})})
59 \ {'bufnr': l:bufnr, 'lnum': 2, 'col': 2, 'pattern': '', 'valid': 1, 'vcol': 0, 'nr': 0, 'type': 'E', 'module': '', 'text': 'Error:m1'},
60 \ {'bufnr': l:bufnr, 'lnum': 2, 'col': 3, 'pattern': '', 'valid': 1, 'vcol': 0, 'nr': 0, 'type': 'E', 'module': '', 'text': 'Error:m2'},
62 if has_key(l:result[0], 'end_lnum') " feature detection
63 call map(l:expected, { _, v -> s:add_end_pos(v) })
65 Assert Equals(l:result, l:expected)
68 execute ':LspDocumentDiagnostics --buffers=*'
69 let l:result = getloclist(0)
71 " NOTE Older version of Vim does not sort results, and does not include module.
72 call sort(l:result, function('s:sort_item_by_text'))
73 call map(l:result, {_, v -> extend(v, {'module': ''})})
75 " +2 for bufnr because original bufnr + loclist + new unopened file
77 \ {'bufnr': l:bufnr, 'lnum': 2, 'col': 2, 'pattern': '', 'valid': 1, 'vcol': 0, 'nr': 0, 'type': 'E', 'module': '', 'text': 'Error:m1'},
78 \ {'bufnr': l:bufnr, 'lnum': 2, 'col': 3, 'pattern': '', 'valid': 1, 'vcol': 0, 'nr': 0, 'type': 'E', 'module': '', 'text': 'Error:m2'},
79 \ {'bufnr': l:bufnr + 2, 'lnum': 3, 'col': 2, 'pattern': '', 'valid': 1, 'vcol': 0, 'nr': 0, 'type': 'W', 'module': '', 'text': 'Warning:m3'},
80 \ {'bufnr': l:bufnr + 2, 'lnum': 4, 'col': 3, 'pattern': '', 'valid': 1, 'vcol': 0, 'nr': 0, 'type': 'W', 'module': '', 'text': 'Warning:m4'},
82 if has_key(l:result[0], 'end_lnum') " feature detection
83 call map(l:expected, { _, v -> s:add_end_pos(v) })
85 Assert Equals(l:result, l:expected)