diff options
author | w0rp <devw0rp@gmail.com> | 2018-05-28 15:16:15 +0100 |
---|---|---|
committer | w0rp <devw0rp@gmail.com> | 2018-05-28 15:16:15 +0100 |
commit | 3c55cb087d4f48b16e05c6f60e70a12442003a12 (patch) | |
tree | f8a0ce4d11e4e508e710ede0d702104b88614dd6 /autoload | |
parent | ef1ec5341f9360085bede74bba25cf8bc5190a5f (diff) | |
download | ale-3c55cb087d4f48b16e05c6f60e70a12442003a12.zip |
Close #1553 - Support some tsserver completion for strings
Diffstat (limited to 'autoload')
-rw-r--r-- | autoload/ale/completion.vim | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/autoload/ale/completion.vim b/autoload/ale/completion.vim index c3139da5..a338ce76 100644 --- a/autoload/ale/completion.vim +++ b/autoload/ale/completion.vim @@ -30,6 +30,7 @@ let s:LSP_COMPLETION_REFERENCE_KIND = 18 " the insert cursor is. If one of these matches, we'll check for completions. let s:should_complete_map = { \ '<default>': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$', +\ 'typescript': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|''$|"$', \ 'rust': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|::$', \} @@ -41,6 +42,7 @@ let s:omni_start_map = { " A map of exact characters for triggering LSP completions. let s:trigger_character_map = { \ '<default>': ['.'], +\ 'typescript': ['.', '''', '"'], \ 'rust': ['.', '::'], \} @@ -198,7 +200,9 @@ function! ale#completion#ParseTSServerCompletions(response) abort endfunction function! ale#completion#ParseTSServerCompletionEntryDetails(response) abort + let l:buffer = bufnr('') let l:results = [] + let l:names_with_details = [] for l:suggestion in a:response.body let l:displayParts = [] @@ -232,6 +236,26 @@ function! ale#completion#ParseTSServerCompletionEntryDetails(response) abort \}) endfor + let l:names = getbufvar(l:buffer, 'ale_tsserver_completion_names', []) + + if !empty(l:names) && len(l:names) != len(l:results) + let l:names_with_details = map(copy(l:results), 'v:val.word') + let l:missing_names = filter( + \ copy(l:names), + \ 'index(l:names_with_details, v:val) < 0', + \) + + for l:name in l:missing_names + call add(l:results, { + \ 'word': l:name, + \ 'kind': 'v', + \ 'icase': 1, + \ 'menu': '', + \ 'info': '', + \}) + endfor + endif + return l:results endfunction @@ -322,6 +346,10 @@ function! ale#completion#HandleTSServerResponse(conn_id, response) abort \ b:ale_completion_info.prefix, \)[: g:ale_completion_max_suggestions - 1] + " We need to remember some names for tsserver, as it doesn't send + " details back for everything we send. + call setbufvar(l:buffer, 'ale_tsserver_completion_names', l:names) + if !empty(l:names) let b:ale_completion_info.request_id = ale#lsp#Send( \ b:ale_completion_info.conn_id, |