diff options
-rw-r--r-- | autoload/ale/hover.vim | 3 | ||||
-rw-r--r-- | test/test_hover.vader | 7 |
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", \]}) |