summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorw0rp <devw0rp@gmail.com>2020-11-21 20:12:09 +0000
committerw0rp <devw0rp@gmail.com>2020-11-21 20:12:09 +0000
commita139599d3938b2f4fa5c8a97d3280b5f4f859321 (patch)
tree2a530375428d4ee05da7cceaae11885be6d2d32b
parent06e7f2195ef6375be32a63f98b5e46070708a315 (diff)
downloadale-a139599d3938b2f4fa5c8a97d3280b5f4f859321.zip
Close #2727 - Add a hover-only setting for balloons
-rw-r--r--autoload/ale/balloon.vim32
-rw-r--r--autoload/ale/hover.vim8
-rw-r--r--doc/ale.txt9
-rw-r--r--plugin/ale.vim2
-rw-r--r--test/test_hover.vader4
5 files changed, 41 insertions, 14 deletions
diff --git a/autoload/ale/balloon.vim b/autoload/ale/balloon.vim
index 72f6b91c..8678376f 100644
--- a/autoload/ale/balloon.vim
+++ b/autoload/ale/balloon.vim
@@ -2,23 +2,39 @@
" Description: balloonexpr support for ALE.
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.
- if !ale#Var(a:bufnr, 'set_balloons')
+ if !(l:show_problems || l:show_hover)
\|| !g:ale_enabled
\|| !getbufvar(a:bufnr, 'ale_enabled', 1)
return ''
endif
- 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)
+ if l:show_problems
+ 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
- if l:index >= 0
+ if l:show_problems && l:index >= 0
return l:loclist[l:index].text
- elseif exists('*balloon_show') || getbufvar(
- \ a:bufnr,
- \ 'ale_set_balloons_legacy_echo',
- \ get(g:, 'ale_set_balloons_legacy_echo', 0)
+ elseif l:show_hover && (
+ \ exists('*balloon_show')
+ \ || getbufvar(
+ \ 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
" Vim supports the balloon_show function, or if we turned a legacy
diff --git a/autoload/ale/hover.vim b/autoload/ale/hover.vim
index 38b4b866..1d38f3b9 100644
--- a/autoload/ale/hover.vim
+++ b/autoload/ale/hover.vim
@@ -24,6 +24,8 @@ function! ale#hover#HandleTSServerResponse(conn_id, response) abort
if get(a:response, 'success', v:false) is v:true
\&& 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
" documentation, and always in the preview window.
if get(l:options, 'show_documentation', 0)
@@ -40,7 +42,7 @@ function! ale#hover#HandleTSServerResponse(conn_id, response) abort
endif
elseif get(l:options, 'hover_from_balloonexpr', 0)
\&& 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)
elseif get(l:options, 'truncated_echo', 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)
if !empty(l:lines)
+ let l:set_balloons = ale#Var(l:options.buffer, 'set_balloons')
+
if get(l:options, 'hover_from_balloonexpr', 0)
\&& 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"))
elseif get(l:options, 'truncated_echo', 0)
call ale#cursor#TruncatedEcho(l:lines[0])
diff --git a/doc/ale.txt b/doc/ale.txt
index a64f86f0..195e6f13 100644
--- a/doc/ale.txt
+++ b/doc/ale.txt
@@ -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*
*b:ale_set_balloons*
- Type: |Number|
+ Type: |Number| or |String|
Default: `has('balloon_eval') && has('gui_running')`
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
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,
but some versions of Vim will produce strange mouse behavior when balloons
are enabled. To configure balloons for your terminal, you should first
diff --git a/plugin/ale.vim b/plugin/ale.vim
index 1fde9df1..b1abb10a 100644
--- a/plugin/ale.vim
+++ b/plugin/ale.vim
@@ -161,7 +161,7 @@ let g:ale_go_go111module = get(g:, 'ale_go_go111module', '')
" If 1, enable a popup menu for commands.
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()
endif
diff --git a/test/test_hover.vader b/test/test_hover.vader
index 9689cda2..ed756396 100644
--- a/test/test_hover.vader
+++ b/test/test_hover.vader
@@ -101,7 +101,7 @@ Execute(tsserver quickinfo responses will null missing bodies should be handled)
AssertEqual {}, ale#hover#GetMap()
Execute(tsserver quickinfo displayString values should be displayed):
- call ale#hover#SetMap({3: {}})
+ call ale#hover#SetMap({3: {'buffer': bufnr('')}})
call ale#hover#HandleTSServerResponse(
\ 1,
\ {
@@ -169,7 +169,7 @@ Execute(LSP hover response with lists of strings and marked strings should be ha
AssertEqual {}, ale#hover#GetMap()
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(
\ 1,