mirror of
https://github.com/dense-analysis/ale.git
synced 2026-01-27 13:22:17 +08:00
Close #2727 - Add a hover-only setting for balloons
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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])
|
||||
|
||||
Reference in New Issue
Block a user