forked from github-mirrors/ale
Close #2727 - Add a hover-only setting for balloons
This commit is contained in:
parent
06e7f2195e
commit
a139599d39
|
@ -2,23 +2,39 @@
|
||||||
" Description: balloonexpr support for ALE.
|
" Description: balloonexpr support for ALE.
|
||||||
|
|
||||||
function! ale#balloon#MessageForPos(bufnr, lnum, col) abort
|
function! ale#balloon#MessageForPos(bufnr, lnum, col) abort
|
||||||
|
let l:set_balloons = ale#Var(a:bufnr, 'set_balloons')
|
||||||
|
let l:show_problems = 0
|
||||||
|
let l:show_hover = 0
|
||||||
|
|
||||||
|
if l:set_balloons is 1
|
||||||
|
let l:show_problems = 1
|
||||||
|
let l:show_hover = 1
|
||||||
|
elseif l:set_balloons is# 'hover'
|
||||||
|
let l:show_hover = 1
|
||||||
|
endif
|
||||||
|
|
||||||
" Don't show balloons if they are disabled, or linting is disabled.
|
" Don't show balloons if they are disabled, or linting is disabled.
|
||||||
if !ale#Var(a:bufnr, 'set_balloons')
|
if !(l:show_problems || l:show_hover)
|
||||||
\|| !g:ale_enabled
|
\|| !g:ale_enabled
|
||||||
\|| !getbufvar(a:bufnr, 'ale_enabled', 1)
|
\|| !getbufvar(a:bufnr, 'ale_enabled', 1)
|
||||||
return ''
|
return ''
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let l:loclist = get(g:ale_buffer_info, a:bufnr, {'loclist': []}).loclist
|
if l:show_problems
|
||||||
let l:index = ale#util#BinarySearch(l:loclist, a:bufnr, a:lnum, a:col)
|
let l:loclist = get(g:ale_buffer_info, a:bufnr, {'loclist': []}).loclist
|
||||||
|
let l:index = ale#util#BinarySearch(l:loclist, a:bufnr, a:lnum, a:col)
|
||||||
|
endif
|
||||||
|
|
||||||
" Show the diagnostics message if found, 'Hover' output otherwise
|
" Show the diagnostics message if found, 'Hover' output otherwise
|
||||||
if l:index >= 0
|
if l:show_problems && l:index >= 0
|
||||||
return l:loclist[l:index].text
|
return l:loclist[l:index].text
|
||||||
elseif exists('*balloon_show') || getbufvar(
|
elseif l:show_hover && (
|
||||||
\ a:bufnr,
|
\ exists('*balloon_show')
|
||||||
\ 'ale_set_balloons_legacy_echo',
|
\ || getbufvar(
|
||||||
\ get(g:, 'ale_set_balloons_legacy_echo', 0)
|
\ a:bufnr,
|
||||||
|
\ 'ale_set_balloons_legacy_echo',
|
||||||
|
\ get(g:, 'ale_set_balloons_legacy_echo', 0)
|
||||||
|
\ )
|
||||||
\)
|
\)
|
||||||
" Request LSP/tsserver hover information, but only if this version of
|
" Request LSP/tsserver hover information, but only if this version of
|
||||||
" Vim supports the balloon_show function, or if we turned a legacy
|
" Vim supports the balloon_show function, or if we turned a legacy
|
||||||
|
|
|
@ -24,6 +24,8 @@ function! ale#hover#HandleTSServerResponse(conn_id, response) abort
|
||||||
|
|
||||||
if get(a:response, 'success', v:false) is v:true
|
if get(a:response, 'success', v:false) is v:true
|
||||||
\&& get(a:response, 'body', v:null) isnot v:null
|
\&& get(a:response, 'body', v:null) isnot v:null
|
||||||
|
let l:set_balloons = ale#Var(l:options.buffer, 'set_balloons')
|
||||||
|
|
||||||
" If we pass the show_documentation flag, we should show the full
|
" If we pass the show_documentation flag, we should show the full
|
||||||
" documentation, and always in the preview window.
|
" documentation, and always in the preview window.
|
||||||
if get(l:options, 'show_documentation', 0)
|
if get(l:options, 'show_documentation', 0)
|
||||||
|
@ -40,7 +42,7 @@ function! ale#hover#HandleTSServerResponse(conn_id, response) abort
|
||||||
endif
|
endif
|
||||||
elseif get(l:options, 'hover_from_balloonexpr', 0)
|
elseif get(l:options, 'hover_from_balloonexpr', 0)
|
||||||
\&& exists('*balloon_show')
|
\&& exists('*balloon_show')
|
||||||
\&& ale#Var(l:options.buffer, 'set_balloons')
|
\&& (l:set_balloons is 1 || l:set_balloons is# 'hover')
|
||||||
call balloon_show(a:response.body.displayString)
|
call balloon_show(a:response.body.displayString)
|
||||||
elseif get(l:options, 'truncated_echo', 0)
|
elseif get(l:options, 'truncated_echo', 0)
|
||||||
call ale#cursor#TruncatedEcho(split(a:response.body.displayString, "\n")[0])
|
call ale#cursor#TruncatedEcho(split(a:response.body.displayString, "\n")[0])
|
||||||
|
@ -216,9 +218,11 @@ function! ale#hover#HandleLSPResponse(conn_id, response) abort
|
||||||
let [l:commands, l:lines] = ale#hover#ParseLSPResult(l:result.contents)
|
let [l:commands, l:lines] = ale#hover#ParseLSPResult(l:result.contents)
|
||||||
|
|
||||||
if !empty(l:lines)
|
if !empty(l:lines)
|
||||||
|
let l:set_balloons = ale#Var(l:options.buffer, 'set_balloons')
|
||||||
|
|
||||||
if get(l:options, 'hover_from_balloonexpr', 0)
|
if get(l:options, 'hover_from_balloonexpr', 0)
|
||||||
\&& exists('*balloon_show')
|
\&& exists('*balloon_show')
|
||||||
\&& ale#Var(l:options.buffer, 'set_balloons')
|
\&& (l:set_balloons is 1 || l:set_balloons is# 'hover')
|
||||||
call balloon_show(join(l:lines, "\n"))
|
call balloon_show(join(l:lines, "\n"))
|
||||||
elseif get(l:options, 'truncated_echo', 0)
|
elseif get(l:options, 'truncated_echo', 0)
|
||||||
call ale#cursor#TruncatedEcho(l:lines[0])
|
call ale#cursor#TruncatedEcho(l:lines[0])
|
||||||
|
|
|
@ -1840,7 +1840,7 @@ g:ale_rename_tsserver_find_in_strings *g:ale_rename_tsserver_find_in_strings*
|
||||||
g:ale_set_balloons *g:ale_set_balloons*
|
g:ale_set_balloons *g:ale_set_balloons*
|
||||||
*b:ale_set_balloons*
|
*b:ale_set_balloons*
|
||||||
|
|
||||||
Type: |Number|
|
Type: |Number| or |String|
|
||||||
Default: `has('balloon_eval') && has('gui_running')`
|
Default: `has('balloon_eval') && has('gui_running')`
|
||||||
|
|
||||||
When this option is set to `1`, balloon messages will be displayed for
|
When this option is set to `1`, balloon messages will be displayed for
|
||||||
|
@ -1851,6 +1851,13 @@ g:ale_set_balloons *g:ale_set_balloons*
|
||||||
supporting "Hover" information, per |ale-hover|, then brief information
|
supporting "Hover" information, per |ale-hover|, then brief information
|
||||||
about the symbol under the cursor will be displayed in a balloon.
|
about the symbol under the cursor will be displayed in a balloon.
|
||||||
|
|
||||||
|
This option can be set to `'hover'` to only enable balloons for hover
|
||||||
|
message, so diagnostics are never shown in balloons. You may wish to
|
||||||
|
configure use this setting only in GUI Vim like so: >
|
||||||
|
|
||||||
|
let g:ale_set_balloons = has('gui_running') ? 'hover' : 0
|
||||||
|
<
|
||||||
|
|
||||||
Balloons can be enabled for terminal versions of Vim that support balloons,
|
Balloons can be enabled for terminal versions of Vim that support balloons,
|
||||||
but some versions of Vim will produce strange mouse behavior when balloons
|
but some versions of Vim will produce strange mouse behavior when balloons
|
||||||
are enabled. To configure balloons for your terminal, you should first
|
are enabled. To configure balloons for your terminal, you should first
|
||||||
|
|
|
@ -161,7 +161,7 @@ let g:ale_go_go111module = get(g:, 'ale_go_go111module', '')
|
||||||
" If 1, enable a popup menu for commands.
|
" If 1, enable a popup menu for commands.
|
||||||
let g:ale_popup_menu_enabled = get(g:, 'ale_popup_menu_enabled', has('gui'))
|
let g:ale_popup_menu_enabled = get(g:, 'ale_popup_menu_enabled', has('gui'))
|
||||||
|
|
||||||
if g:ale_set_balloons
|
if g:ale_set_balloons is 1 || g:ale_set_balloons is# 'hover'
|
||||||
call ale#balloon#Enable()
|
call ale#balloon#Enable()
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -101,7 +101,7 @@ Execute(tsserver quickinfo responses will null missing bodies should be handled)
|
||||||
AssertEqual {}, ale#hover#GetMap()
|
AssertEqual {}, ale#hover#GetMap()
|
||||||
|
|
||||||
Execute(tsserver quickinfo displayString values should be displayed):
|
Execute(tsserver quickinfo displayString values should be displayed):
|
||||||
call ale#hover#SetMap({3: {}})
|
call ale#hover#SetMap({3: {'buffer': bufnr('')}})
|
||||||
call ale#hover#HandleTSServerResponse(
|
call ale#hover#HandleTSServerResponse(
|
||||||
\ 1,
|
\ 1,
|
||||||
\ {
|
\ {
|
||||||
|
@ -169,7 +169,7 @@ Execute(LSP hover response with lists of strings and marked strings should be ha
|
||||||
AssertEqual {}, ale#hover#GetMap()
|
AssertEqual {}, ale#hover#GetMap()
|
||||||
|
|
||||||
Execute(tsserver responses for documentation requests should be handled):
|
Execute(tsserver responses for documentation requests should be handled):
|
||||||
call ale#hover#SetMap({3: {'show_documentation': 1}})
|
call ale#hover#SetMap({3: {'show_documentation': 1, 'buffer': bufnr('')}})
|
||||||
|
|
||||||
call ale#hover#HandleTSServerResponse(
|
call ale#hover#HandleTSServerResponse(
|
||||||
\ 1,
|
\ 1,
|
||||||
|
|
Loading…
Reference in New Issue