summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--autoload/ale/hover.vim3
-rw-r--r--test/test_hover.vader7
2 files changed, 9 insertions, 1 deletions
diff --git a/autoload/ale/hover.vim b/autoload/ale/hover.vim
index 95bb115b..a6462227 100644
--- a/autoload/ale/hover.vim
+++ b/autoload/ale/hover.vim
@@ -91,11 +91,12 @@ function! ale#hover#HandleLSPResponse(conn_id, response) abort
if type(l:result) is v:t_dict
" If the result is an object, then it's markup content.
- let l:result = [l:result.value]
+ let l:result = has_key(l:result, 'value') ? [l:result.value] : []
endif
if type(l:result) is v:t_list
" Replace objects with text values.
+ call filter(l:result, '!(type(v:val) is v:t_dict && !has_key(v:val, ''value''))')
call map(l:result, 'type(v:val) is v:t_string ? v:val : v:val.value')
let l:str = join(l:result, "\n")
let l:str = substitute(l:str, '^\s*\(.\{-}\)\s*$', '\1', '')
diff --git a/test/test_hover.vader b/test/test_hover.vader
index 917694a2..8b4cf7bd 100644
--- a/test/test_hover.vader
+++ b/test/test_hover.vader
@@ -133,6 +133,12 @@ Execute(LSP hover responses with markup content should be handled):
AssertEqual ['markup'], g:echo_list
AssertEqual {}, ale#hover#GetMap()
+Execute(LSP hover responses with markup content missing values should be handled):
+ call HandleValidLSPResult({'contents': {'kind': 'something'}})
+
+ AssertEqual [], g:echo_list
+ AssertEqual {}, ale#hover#GetMap()
+
Execute(LSP hover response with lists of strings should be handled):
call HandleValidLSPResult({'contents': [
\ "foo\n",
@@ -145,6 +151,7 @@ Execute(LSP hover response with lists of strings should be handled):
Execute(LSP hover response with lists of strings and marked strings should be handled):
call HandleValidLSPResult({'contents': [
\ {'language': 'rust', 'value': 'foo'},
+ \ {'language': 'foobar'},
\ "bar\n",
\]})