diff options
Diffstat (limited to 'autoload')
-rw-r--r-- | autoload/ale/hover.vim | 18 | ||||
-rw-r--r-- | autoload/ale/linter.vim | 26 | ||||
-rw-r--r-- | autoload/ale/lsp/tsserver_message.vim | 8 |
3 files changed, 46 insertions, 6 deletions
diff --git a/autoload/ale/hover.vim b/autoload/ale/hover.vim index 2ccc4ff0..12af877d 100644 --- a/autoload/ale/hover.vim +++ b/autoload/ale/hover.vim @@ -18,6 +18,15 @@ function! ale#hover#ClearLSPData() abort endfunction function! ale#hover#HandleTSServerResponse(conn_id, response) abort + if get(a:response, 'command', '') is# 'quickinfo' + \&& has_key(s:hover_map, a:response.request_seq) + let l:options = remove(s:hover_map, a:response.request_seq) + + if get(a:response, 'success', v:false) is v:true + \&& get(a:response, 'body', v:null) isnot v:null + call ale#util#ShowMessage(a:response.body.displayString) + endif + endif endfunction function! ale#hover#HandleLSPResponse(conn_id, response) abort @@ -86,8 +95,11 @@ function! s:ShowDetails(linter) abort let l:root = l:lsp_details.project_root if a:linter.lsp is# 'tsserver' - " TODO: Implement this. - return + let l:message = ale#lsp#tsserver_message#Quickinfo( + \ l:buffer, + \ l:line, + \ l:column + \) else " Send a message saying the buffer has changed first, or the " hover position probably won't make sense. @@ -109,7 +121,7 @@ endfunction function! ale#hover#Show() abort for l:linter in ale#linter#Get(&filetype) - if !empty(l:linter.lsp) && l:linter.lsp isnot# 'tsserver' + if !empty(l:linter.lsp) call s:ShowDetails(l:linter) endif endfor diff --git a/autoload/ale/linter.vim b/autoload/ale/linter.vim index 8aec2598..1e0ec304 100644 --- a/autoload/ale/linter.vim +++ b/autoload/ale/linter.vim @@ -51,6 +51,10 @@ function! s:IsBoolean(value) abort return type(a:value) == type(0) && (a:value == 0 || a:value == 1) endfunction +function! s:LanguageGetter(buffer) dict abort + return l:self.language +endfunction + function! ale#linter#PreProcess(linter) abort if type(a:linter) != type({}) throw 'The linter object must be a Dictionary' @@ -185,10 +189,26 @@ function! ale#linter#PreProcess(linter) abort endif if l:needs_lsp_details - let l:obj.language_callback = get(a:linter, 'language_callback') + if has_key(a:linter, 'language') + if has_key(a:linter, 'language_callback') + throw 'Only one of `language` or `language_callback` ' + \ . 'should be set' + endif + + let l:obj.language = get(a:linter, 'language') - if !s:IsCallback(l:obj.language_callback) - throw '`language_callback` must be a callback for LSP linters' + if type(l:obj.language) != type('') + throw '`language` must be a string' + endif + + " Make 'language_callback' return the 'language' value. + let l:obj.language_callback = function('s:LanguageGetter') + else + let l:obj.language_callback = get(a:linter, 'language_callback') + + if !s:IsCallback(l:obj.language_callback) + throw '`language_callback` must be a callback for LSP linters' + endif endif let l:obj.project_root_callback = get(a:linter, 'project_root_callback') diff --git a/autoload/ale/lsp/tsserver_message.vim b/autoload/ale/lsp/tsserver_message.vim index 415fde95..d6919516 100644 --- a/autoload/ale/lsp/tsserver_message.vim +++ b/autoload/ale/lsp/tsserver_message.vim @@ -69,3 +69,11 @@ function! ale#lsp#tsserver_message#References(buffer, line, column) abort \ 'file': expand('#' . a:buffer . ':p'), \}] endfunction + +function! ale#lsp#tsserver_message#Quickinfo(buffer, line, column) abort + return [0, 'ts@quickinfo', { + \ 'line': a:line, + \ 'offset': a:column, + \ 'file': expand('#' . a:buffer . ':p'), + \}] +endfunction |