I broke up with neovim....vim is my best friend now

This commit is contained in:
LinlyBoi
2023-04-30 08:14:07 +03:00
parent 0d185449c5
commit 4a4a6b1e81
5245 changed files with 468325 additions and 25 deletions

View File

@@ -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

View File

@@ -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