summaryrefslogtreecommitdiff
path: root/autoload
diff options
context:
space:
mode:
Diffstat (limited to 'autoload')
-rw-r--r--autoload/ale/hover.vim18
-rw-r--r--autoload/ale/linter.vim26
-rw-r--r--autoload/ale/lsp/tsserver_message.vim8
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