You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
4.0 KiB
137 lines
4.0 KiB
" Remove keys we're not interested in
|
|
function! PreprocessItem(item) abort
|
|
let l:item = a:item
|
|
|
|
if has_key(l:item, 'user_data')
|
|
let l:user_data = json_decode(l:item['user_data'])
|
|
unlet l:user_data['vim-lsp/insertStart']
|
|
let l:item['user_data'] = json_encode(l:user_data)
|
|
endif
|
|
|
|
if l:item['user_data'] == '{}'
|
|
unlet l:item['user_data']
|
|
endif
|
|
|
|
return l:item
|
|
endfunction
|
|
|
|
Describe lsp#omni
|
|
Describe lsp#omni#get_vim_completion_item
|
|
It should return item with proper kind
|
|
let item = {
|
|
\ 'label': 'my-label',
|
|
\ 'documentation': 'my documentation.',
|
|
\ 'detail': 'my-detail',
|
|
\ 'kind': '3'
|
|
\}
|
|
|
|
let want = {
|
|
\ 'word': 'my-label',
|
|
\ 'abbr': 'my-label',
|
|
\ 'info': 'my documentation.',
|
|
\ 'icase': 1,
|
|
\ 'dup': 1,
|
|
\ 'empty': 1,
|
|
\ 'kind': 'function',
|
|
\ 'menu': 'my-detail'
|
|
\}
|
|
let got = lsp#omni#get_vim_completion_item(item)
|
|
|
|
Assert Equals(PreprocessItem(got), want)
|
|
End
|
|
|
|
It should return result contained user_data['vim-lsp/textEdit'], if exist textEdit in item
|
|
if !has('patch-8.0.1493')
|
|
Skip This test requires 'patch-8.0.1493'
|
|
endif
|
|
|
|
let l:text_edit = {
|
|
\ 'range': {
|
|
\ 'start': {'line': 5, 'character': 0},
|
|
\ 'end': {'line': 5, 'character': 5}
|
|
\ },
|
|
\ 'newText': 'yyy'
|
|
\ }
|
|
|
|
let item = {
|
|
\ 'label': 'my-label',
|
|
\ 'documentation': 'my documentation.',
|
|
\ 'detail': 'my-detail',
|
|
\ 'kind': '3',
|
|
\ 'textEdit': l:text_edit
|
|
\}
|
|
|
|
let l:want_user_data = {
|
|
\ 'vim-lsp/textEdit': l:text_edit
|
|
\}
|
|
|
|
let l:want_user_data_string = json_encode(l:want_user_data)
|
|
|
|
let want = {
|
|
\ 'word': 'my-label',
|
|
\ 'abbr': 'my-label',
|
|
\ 'info': 'my documentation.',
|
|
\ 'icase': 1,
|
|
\ 'dup': 1,
|
|
\ 'empty': 1,
|
|
\ 'kind': 'function',
|
|
\ 'menu': 'my-detail',
|
|
\ 'user_data': l:want_user_data_string
|
|
\}
|
|
let got = lsp#omni#get_vim_completion_item(item)
|
|
|
|
Assert Equals(PreprocessItem(got), want)
|
|
End
|
|
|
|
It should not add user_data, if provide textEdit property and textEdit value is null
|
|
if !has('patch-8.0.1493')
|
|
Skip This test requires 'patch-8.0.1493'
|
|
endif
|
|
|
|
let item = {
|
|
\ 'label': 'my-label',
|
|
\ 'documentation': 'my documentation.',
|
|
\ 'detail': 'my-detail',
|
|
\ 'kind': '3',
|
|
\ 'textEdit': v:null
|
|
\}
|
|
|
|
let want = {
|
|
\ 'word': 'my-label',
|
|
\ 'abbr': 'my-label',
|
|
\ 'info': 'my documentation.',
|
|
\ 'icase': 1,
|
|
\ 'dup': 1,
|
|
\ 'empty': 1,
|
|
\ 'kind': 'function',
|
|
\ 'menu': 'my-detail',
|
|
\}
|
|
let got = lsp#omni#get_vim_completion_item(item)
|
|
|
|
Assert Equals(PreprocessItem(got), want)
|
|
End
|
|
|
|
It should return item with newlines in 'menu' replaced
|
|
let item = {
|
|
\ 'label': 'my-label',
|
|
\ 'documentation': 'my documentation.',
|
|
\ 'detail': "my-detail\nmore-detail",
|
|
\ 'kind': '3'
|
|
\}
|
|
|
|
let want = {
|
|
\ 'word': 'my-label',
|
|
\ 'abbr': 'my-label',
|
|
\ 'info': 'my documentation.',
|
|
\ 'icase': 1,
|
|
\ 'dup': 1,
|
|
\ 'empty': 1,
|
|
\ 'kind': 'function',
|
|
\ 'menu': 'my-detail more-detail'
|
|
\}
|
|
let got = lsp#omni#get_vim_completion_item(item)
|
|
|
|
Assert Equals(PreprocessItem(got), want)
|
|
End
|
|
End
|
|
End
|
|
|