I broke up with neovim....vim is my best friend now
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
function! s:sort_item_by_text(lhs, rhs) abort
|
||||
if a:lhs['text'] <# a:rhs['text']
|
||||
return -1
|
||||
endif
|
||||
if a:lhs['text'] ># a:rhs['text']
|
||||
return 1
|
||||
endif
|
||||
return 0
|
||||
endfunction
|
||||
|
||||
function! s:add_end_pos(loc) abort
|
||||
let a:loc['end_lnum'] = 0
|
||||
let a:loc['end_col'] = 0
|
||||
return a:loc
|
||||
endfunction
|
||||
|
||||
Describe lsp#internal#diagnostics#document_diagnostics_command
|
||||
Before
|
||||
%bwipeout!
|
||||
let g:lsp_diagnostics_enabled = 1
|
||||
call lsp#internal#diagnostics#state#_disable()
|
||||
call lsp#internal#diagnostics#state#_enable()
|
||||
End
|
||||
|
||||
After all
|
||||
%bwipeout!
|
||||
let g:lsp_diagnostics_enabled = 0
|
||||
call lsp#internal#diagnostics#state#_disable()
|
||||
End
|
||||
|
||||
It should be able to show document diagnostics for a buffer
|
||||
normal! m'
|
||||
execute printf('keepalt keepjumps edit %s', lsp#test#projectdir('rust') . '/src/documentdiagnostics.rs')
|
||||
let l:uri = lsp#utils#get_buffer_uri()
|
||||
let l:uri2 = l:uri . '2'
|
||||
let l:bufnr = bufnr('%')
|
||||
|
||||
let l:server1_response1 = {'method': 'textDocument/publishDiagnostics', 'params': {'uri': l:uri, 'diagnostics': [
|
||||
\ {'severity': 1, 'message': 'm1', 'range': { 'start': { 'line': 1, 'character': 1, 'end': { 'line': 1, 'character': 1 } } }},
|
||||
\ {'severity': 1, 'message': 'm2', 'range': { 'start': { 'line': 1, 'character': 2, 'end': { 'line': 1, 'character': 3 } } }},
|
||||
\ ]}}
|
||||
|
||||
let l:server1_response2 = {'method': 'textDocument/publishDiagnostics', 'params': {'uri': l:uri2, 'diagnostics': [
|
||||
\ {'severity': 2, 'message': 'm3', 'range': { 'start': { 'line': 2, 'character': 1, 'end': { 'line': 1, 'character': 1 } } }},
|
||||
\ {'severity': 2, 'message': 'm4', 'range': { 'start': { 'line': 3, 'character': 2, 'end': { 'line': 1, 'character': 3 } } }},
|
||||
\ ]}}
|
||||
|
||||
call lsp#stream(1, { 'server': 'server1', 'response': l:server1_response1 })
|
||||
call lsp#stream(1, { 'server': 'server1', 'response': l:server1_response2 })
|
||||
|
||||
execute ':LspDocumentDiagnostics'
|
||||
let l:result = getloclist(0)
|
||||
|
||||
" NOTE Older version of Vim does not sort results, and does not include module.
|
||||
call sort(l:result, function('s:sort_item_by_text'))
|
||||
call map(l:result, {_, v -> extend(v, {'module': ''})})
|
||||
|
||||
let l:expected = [
|
||||
\ {'bufnr': l:bufnr, 'lnum': 2, 'col': 2, 'pattern': '', 'valid': 1, 'vcol': 0, 'nr': 0, 'type': 'E', 'module': '', 'text': 'Error:m1'},
|
||||
\ {'bufnr': l:bufnr, 'lnum': 2, 'col': 3, 'pattern': '', 'valid': 1, 'vcol': 0, 'nr': 0, 'type': 'E', 'module': '', 'text': 'Error:m2'},
|
||||
\ ]
|
||||
if has_key(l:result[0], 'end_lnum') " feature detection
|
||||
call map(l:expected, { _, v -> s:add_end_pos(v) })
|
||||
endif
|
||||
Assert Equals(l:result, l:expected)
|
||||
execute ':lclose'
|
||||
|
||||
execute ':LspDocumentDiagnostics --buffers=*'
|
||||
let l:result = getloclist(0)
|
||||
|
||||
" NOTE Older version of Vim does not sort results, and does not include module.
|
||||
call sort(l:result, function('s:sort_item_by_text'))
|
||||
call map(l:result, {_, v -> extend(v, {'module': ''})})
|
||||
|
||||
" +2 for bufnr because original bufnr + loclist + new unopened file
|
||||
let l:expected = [
|
||||
\ {'bufnr': l:bufnr, 'lnum': 2, 'col': 2, 'pattern': '', 'valid': 1, 'vcol': 0, 'nr': 0, 'type': 'E', 'module': '', 'text': 'Error:m1'},
|
||||
\ {'bufnr': l:bufnr, 'lnum': 2, 'col': 3, 'pattern': '', 'valid': 1, 'vcol': 0, 'nr': 0, 'type': 'E', 'module': '', 'text': 'Error:m2'},
|
||||
\ {'bufnr': l:bufnr + 2, 'lnum': 3, 'col': 2, 'pattern': '', 'valid': 1, 'vcol': 0, 'nr': 0, 'type': 'W', 'module': '', 'text': 'Warning:m3'},
|
||||
\ {'bufnr': l:bufnr + 2, 'lnum': 4, 'col': 3, 'pattern': '', 'valid': 1, 'vcol': 0, 'nr': 0, 'type': 'W', 'module': '', 'text': 'Warning:m4'},
|
||||
\ ]
|
||||
if has_key(l:result[0], 'end_lnum') " feature detection
|
||||
call map(l:expected, { _, v -> s:add_end_pos(v) })
|
||||
endif
|
||||
Assert Equals(l:result, l:expected)
|
||||
execute ':lclose'
|
||||
End
|
||||
End
|
||||
@@ -0,0 +1,70 @@
|
||||
Describe lsp#internal#diagnostics#state
|
||||
Before
|
||||
%bwipeout!
|
||||
let g:lsp_diagnostics_enabled = 1
|
||||
call lsp#internal#diagnostics#state#_disable()
|
||||
call lsp#internal#diagnostics#state#_enable()
|
||||
End
|
||||
|
||||
After all
|
||||
%bwipeout!
|
||||
let g:lsp_diagnostics_enabled = 0
|
||||
call lsp#internal#diagnostics#state#_disable()
|
||||
End
|
||||
|
||||
It should be able to subscribe to textDocument/publishDiagnostics stream and update state correctly
|
||||
let l:uri = 'file://some/uri'
|
||||
|
||||
let l:server1_response1 = {'method': 'textDocument/publishDiagnostics', 'params': {'uri': l:uri, 'diagnostics': [
|
||||
\ {'severity': 1, 'message': 'm1', 'range': { 'start': { 'line': 1, 'character': 1, 'end': { 'line': 1, 'character': 1 } } }},
|
||||
\ {'severity': 1, 'message': 'm2', 'range': { 'start': { 'line': 1, 'character': 2, 'end': { 'line': 1, 'character': 3 } } }},
|
||||
\ ]}}
|
||||
let l:server2_response1 = {'method': 'textDocument/publishDiagnostics', 'params': {'uri': l:uri, 'diagnostics': [
|
||||
\ {'severity': 1, 'message': 's2', 'range': { 'start': { 'line': 2, 'character': 3, 'end': { 'line': 4, 'character': 5 } } }},
|
||||
\ ]}}
|
||||
let l:server1_response2 = {'method': 'textDocument/publishDiagnostics', 'params': {'uri': l:uri, 'diagnostics': [
|
||||
\ {'severity': 1, 'message': 'm2', 'range': { 'start': { 'line': 1, 'character': 2, 'end': { 'line': 1, 'character': 3 } } }},
|
||||
\ ]}}
|
||||
|
||||
Assert Equals(lsp#internal#diagnostics#state#_get_all_diagnostics_grouped_by_server_for_uri(l:uri), {})
|
||||
|
||||
call lsp#stream(1, { 'server': 'server1', 'response': l:server1_response1 })
|
||||
Assert Equals(lsp#internal#diagnostics#state#_get_all_diagnostics_grouped_by_server_for_uri(l:uri), { 'server1': l:server1_response1 })
|
||||
let l:want = {}
|
||||
let l:want[l:uri] = { 'server1': l:server1_response1 }
|
||||
Assert Equals(lsp#internal#diagnostics#state#_get_all_diagnostics_grouped_by_uri_and_server(), l:want)
|
||||
|
||||
call lsp#stream(1, { 'server': 'server2', 'response': l:server2_response1 })
|
||||
Assert Equals(lsp#internal#diagnostics#state#_get_all_diagnostics_grouped_by_server_for_uri(l:uri), { 'server1': l:server1_response1, 'server2': l:server2_response1 })
|
||||
let l:want = {}
|
||||
let l:want[l:uri] = { 'server1': l:server1_response1, 'server2': l:server2_response1 }
|
||||
Assert Equals(lsp#internal#diagnostics#state#_get_all_diagnostics_grouped_by_uri_and_server(), l:want)
|
||||
|
||||
call lsp#stream(1, { 'server': 'server1', 'response': l:server1_response2 })
|
||||
Assert Equals(lsp#internal#diagnostics#state#_get_all_diagnostics_grouped_by_server_for_uri(l:uri), { 'server1': l:server1_response2, 'server2': l:server2_response1 })
|
||||
let l:want = {}
|
||||
let l:want[l:uri] = { 'server1': l:server1_response2, 'server2': l:server2_response1 }
|
||||
Assert Equals(lsp#internal#diagnostics#state#_get_all_diagnostics_grouped_by_uri_and_server(), l:want)
|
||||
|
||||
call lsp#stream(1, { 'server': '$vimlsp',
|
||||
\ 'response': { 'method': '$/vimlsp/lsp_server_exit', 'params': { 'server': 'server1' } } })
|
||||
let l:want = {}
|
||||
let l:want[l:uri] = { 'server2': l:server2_response1 }
|
||||
Assert Equals(lsp#internal#diagnostics#state#_get_all_diagnostics_grouped_by_uri_and_server(), l:want)
|
||||
End
|
||||
|
||||
|
||||
It should correctly return the state of buffer
|
||||
call lsp#internal#diagnostics#state#_disable()
|
||||
call lsp#internal#diagnostics#state#_enable()
|
||||
|
||||
let l:bufnr = bufnr('%')
|
||||
Assert True(lsp#internal#diagnostics#state#_is_enabled_for_buffer(l:bufnr))
|
||||
|
||||
call lsp#internal#diagnostics#state#_disable_for_buffer(l:bufnr)
|
||||
Assert False(lsp#internal#diagnostics#state#_is_enabled_for_buffer(l:bufnr))
|
||||
|
||||
call lsp#internal#diagnostics#state#_enable_for_buffer(l:bufnr)
|
||||
Assert True(lsp#internal#diagnostics#state#_is_enabled_for_buffer(l:bufnr))
|
||||
End
|
||||
End
|
||||
@@ -0,0 +1,92 @@
|
||||
let s:Error = 1
|
||||
let s:Warn = 2
|
||||
let s:Info = 3
|
||||
let s:Log = 4
|
||||
|
||||
function! s:response(type, message) abort
|
||||
return {
|
||||
\ 'server': 'server1',
|
||||
\ 'response': {
|
||||
\ 'method': 'window/showMessage',
|
||||
\ 'params': {
|
||||
\ 'type': a:type,
|
||||
\ 'message': a:message
|
||||
\ }
|
||||
\ }
|
||||
\ }
|
||||
endfunction
|
||||
|
||||
Describe lsp#internal#show_message
|
||||
Before
|
||||
%bwipeout!
|
||||
let g:lsp_show_message_log_level = 'warning'
|
||||
call lsp#internal#show_message#_disable()
|
||||
call lsp#internal#show_message#_enable()
|
||||
End
|
||||
|
||||
After all
|
||||
%bwipeout!
|
||||
let g:lsp_show_message_log_level = 'none'
|
||||
call lsp#internal#show_message#_disable()
|
||||
End
|
||||
|
||||
It should show all messages when 'log' is set to g:lsp_show_message_log_level
|
||||
let g:lsp_show_message_log_level = 'log'
|
||||
|
||||
redir => message_area
|
||||
call lsp#stream(1, s:response(s:Error, 'error message'))
|
||||
call lsp#stream(1, s:response(s:Warn, 'warn message'))
|
||||
call lsp#stream(1, s:response(s:Info, 'info message'))
|
||||
call lsp#stream(1, s:response(s:Log, 'log message'))
|
||||
call lsp#stream(1, s:response(s:Info, 'info message2'))
|
||||
call lsp#stream(1, s:response(s:Info, 'info message3'))
|
||||
redir END
|
||||
|
||||
Assert Match(message_area, 'server1: error: error message')
|
||||
Assert Match(message_area, 'server1: warning: warn message')
|
||||
Assert Match(message_area, 'server1: info: info message')
|
||||
Assert Match(message_area, 'server1: log: log message')
|
||||
Assert Match(message_area, 'server1: info: info message2')
|
||||
Assert Match(message_area, 'server1: info: info message3')
|
||||
End
|
||||
|
||||
It should filter shown messages by log level set to g:lsp_show_message_log_level
|
||||
let g:lsp_show_message_log_level = 'warning'
|
||||
|
||||
redir => message_area
|
||||
call lsp#stream(1, s:response(s:Error, 'error message'))
|
||||
call lsp#stream(1, s:response(s:Warn, 'warn message'))
|
||||
call lsp#stream(1, s:response(s:Info, 'info message'))
|
||||
call lsp#stream(1, s:response(s:Log, 'log message'))
|
||||
call lsp#stream(1, s:response(s:Info, 'info message2'))
|
||||
call lsp#stream(1, s:response(s:Info, 'info message3'))
|
||||
redir END
|
||||
|
||||
Assert Match(message_area, 'server1: error: error message')
|
||||
Assert Match(message_area, 'server1: warning: warn message')
|
||||
Assert NotMatch(message_area, 'server1: info: info message')
|
||||
Assert NotMatch(message_area, 'server1: log: log message')
|
||||
Assert NotMatch(message_area, 'server1: info: info message2')
|
||||
Assert NotMatch(message_area, 'server1: info: info message3')
|
||||
End
|
||||
|
||||
It should show no message when 'none' is set to g:lsp_show_message_log_level
|
||||
let g:lsp_show_message_log_level = 'none'
|
||||
|
||||
redir => message_area
|
||||
call lsp#stream(1, s:response(s:Error, 'error message'))
|
||||
call lsp#stream(1, s:response(s:Warn, 'warn message'))
|
||||
call lsp#stream(1, s:response(s:Info, 'info message'))
|
||||
call lsp#stream(1, s:response(s:Log, 'log message'))
|
||||
call lsp#stream(1, s:response(s:Info, 'info message2'))
|
||||
call lsp#stream(1, s:response(s:Info, 'info message3'))
|
||||
redir END
|
||||
|
||||
Assert NotMatch(message_area, 'server1: error: error message')
|
||||
Assert NotMatch(message_area, 'server1: warning: warn message')
|
||||
Assert NotMatch(message_area, 'server1: info: info message')
|
||||
Assert NotMatch(message_area, 'server1: log: log message')
|
||||
Assert NotMatch(message_area, 'server1: info: info message2')
|
||||
Assert NotMatch(message_area, 'server1: info: info message3')
|
||||
End
|
||||
End
|
||||
Reference in New Issue
Block a user