Close #2727 - Add a hover-only setting for balloons

This commit is contained in:
w0rp 2020-11-21 20:12:09 +00:00
parent 06e7f2195e
commit a139599d39
No known key found for this signature in database
GPG Key ID: 0FC1ECAA8C81CD83
5 changed files with 41 additions and 14 deletions

View File

@ -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

View File

@ -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])

View File

@ -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

View File

@ -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

View File

@ -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,