Fix #1404 - Do not show balloons when g:ale_set_balloons is 0. Add b:ale_set_balloons

This commit is contained in:
w0rp 2018-03-25 12:57:08 +01:00
parent 107516c757
commit 164c711b3d
No known key found for this signature in database
GPG key ID: 0FC1ECAA8C81CD83
5 changed files with 107 additions and 17 deletions

View file

@ -2,6 +2,13 @@
" 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
" Don't show balloons if they are disabled, or linting is disabled.
if !ale#Var(a:bufnr, 'set_balloons')
\|| !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:loclist = get(g:ale_buffer_info, a:bufnr, {'loclist': []}).loclist
let l:index = ale#util#BinarySearch(l:loclist, a:bufnr, a:lnum, a:col) let l:index = ale#util#BinarySearch(l:loclist, a:bufnr, a:lnum, a:col)
@ -13,7 +20,7 @@ function! ale#balloon#Expr() abort
endfunction endfunction
function! ale#balloon#Disable() abort function! ale#balloon#Disable() abort
set noballooneval set noballooneval balloonexpr=
endfunction endfunction
function! ale#balloon#Enable() abort function! ale#balloon#Enable() abort

View file

@ -84,10 +84,6 @@ function! s:EnablePreamble() abort
" Lint immediately, including running linters against the file. " Lint immediately, including running linters against the file.
call ale#Queue(0, 'lint_file') call ale#Queue(0, 'lint_file')
if g:ale_set_balloons
call ale#balloon#Enable()
endif
endfunction endfunction
function! s:DisablePostamble() abort function! s:DisablePostamble() abort
@ -95,10 +91,6 @@ function! s:DisablePostamble() abort
if g:ale_set_highlights if g:ale_set_highlights
call ale#highlight#UpdateHighlights() call ale#highlight#UpdateHighlights()
endif endif
if g:ale_set_balloons
call ale#balloon#Disable()
endif
endfunction endfunction
function! s:CleanupEveryBuffer() abort function! s:CleanupEveryBuffer() abort
@ -121,9 +113,17 @@ function! ale#toggle#Toggle() abort
if g:ale_enabled if g:ale_enabled
call s:EnablePreamble() call s:EnablePreamble()
if g:ale_set_balloons
call ale#balloon#Enable()
endif
else else
call s:CleanupEveryBuffer() call s:CleanupEveryBuffer()
call s:DisablePostamble() call s:DisablePostamble()
if has('balloon_eval')
call ale#balloon#Disable()
endif
endif endif
call ale#toggle#InitAuGroups() call ale#toggle#InitAuGroups()

View file

@ -1291,13 +1291,19 @@ g:ale_pattern_options_enabled *g:ale_pattern_options_enabled*
g:ale_set_balloons *g:ale_set_balloons* g:ale_set_balloons *g:ale_set_balloons*
*b:ale_set_balloons*
Type: |Number| Type: |Number|
Default: `has('balloon_eval')` Default: `has('balloon_eval')`
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
problems. Problems nearest to the cursor on the line the cursor is over will problems. Problems nearest to the cursor on the line the cursor is over will
be displayed. be displayed. Balloons will not be shown when either |g:ale_enabled| is `0`
or |b:ale_enabled| is `0`.
`b:ale_set_balloons` can be set to `0` to disable balloons for a buffer.
Balloons cannot be enabled for a specific buffer when not initially enabled
globally.
g:ale_set_highlights *g:ale_set_highlights* g:ale_set_highlights *g:ale_set_highlights*

View file

@ -5,12 +5,14 @@ Before:
Save g:ale_run_synchronously Save g:ale_run_synchronously
Save g:ale_pattern_options Save g:ale_pattern_options
Save g:ale_pattern_options_enabled Save g:ale_pattern_options_enabled
Save g:ale_set_balloons
let g:ale_set_signs = 1 let g:ale_set_signs = 1
let g:ale_set_lists_synchronously = 1 let g:ale_set_lists_synchronously = 1
let g:ale_run_synchronously = 1 let g:ale_run_synchronously = 1
let g:ale_pattern_options = {} let g:ale_pattern_options = {}
let g:ale_pattern_options_enabled = 1 let g:ale_pattern_options_enabled = 1
let g:ale_set_balloons = has('balloon_eval')
unlet! b:ale_enabled unlet! b:ale_enabled
@ -344,3 +346,41 @@ Execute(ALEResetBuffer should reset everything for a buffer):
AssertEqual 1, g:ale_enabled AssertEqual 1, g:ale_enabled
AssertEqual 1, get(b:, 'ale_enabled', 1) AssertEqual 1, get(b:, 'ale_enabled', 1)
Execute(Disabling ALE should disable balloons):
" These tests won't run in the console, but we can run them manually in GVim.
if has('balloon_eval')
call ale#linter#Reset()
" Enable balloons, so we can check the expr value.
call ale#balloon#Enable()
AssertEqual 1, &ballooneval
AssertEqual 'ale#balloon#Expr()', &balloonexpr
" Toggle ALE off.
ALEToggle
" The balloon settings should be reset.
AssertEqual 0, &ballooneval
AssertEqual '', &balloonexpr
endif
Execute(Enabling ALE should enable balloons if the setting is on):
if has('balloon_eval')
call ale#linter#Reset()
call ale#balloon#Disable()
ALEDisable
let g:ale_set_balloons = 0
ALEEnable
AssertEqual 0, &ballooneval
AssertEqual '', &balloonexpr
ALEDisable
let g:ale_set_balloons = 1
ALEEnable
AssertEqual 1, &ballooneval
AssertEqual 'ale#balloon#Expr()', &balloonexpr
endif

View file

@ -1,21 +1,25 @@
Before: Before:
Save g:ale_buffer_info Save g:ale_buffer_info
Save g:ale_enabled
Save g:ale_set_balloons
let g:ale_buffer_info[347] = {'loclist': [ let g:ale_set_balloons = 1
let g:ale_buffer_info[bufnr('')] = {'loclist': [
\ { \ {
\ 'bufnr': 347, \ 'bufnr': bufnr(''),
\ 'lnum': 1, \ 'lnum': 1,
\ 'col': 10, \ 'col': 10,
\ 'text': 'Missing semicolon. (semi)', \ 'text': 'Missing semicolon. (semi)',
\ }, \ },
\ { \ {
\ 'bufnr': 347, \ 'bufnr': bufnr(''),
\ 'lnum': 2, \ 'lnum': 2,
\ 'col': 10, \ 'col': 10,
\ 'text': 'Infix operators must be spaced. (space-infix-ops)' \ 'text': 'Infix operators must be spaced. (space-infix-ops)'
\ }, \ },
\ { \ {
\ 'bufnr': 347, \ 'bufnr': bufnr(''),
\ 'lnum': 2, \ 'lnum': 2,
\ 'col': 15, \ 'col': 15,
\ 'text': 'Missing radix parameter (radix)' \ 'text': 'Missing radix parameter (radix)'
@ -25,17 +29,50 @@ Before:
After: After:
Restore Restore
unlet! b:ale_enabled
unlet! b:ale_set_balloons
Execute(Balloon messages should be shown for the correct lines): Execute(Balloon messages should be shown for the correct lines):
AssertEqual AssertEqual
\ 'Missing semicolon. (semi)', \ 'Missing semicolon. (semi)',
\ ale#balloon#MessageForPos(347, 1, 1) \ ale#balloon#MessageForPos(bufnr(''), 1, 1)
Execute(Balloon messages should be shown for earlier columns): Execute(Balloon messages should be shown for earlier columns):
AssertEqual AssertEqual
\ 'Infix operators must be spaced. (space-infix-ops)', \ 'Infix operators must be spaced. (space-infix-ops)',
\ ale#balloon#MessageForPos(347, 2, 1) \ ale#balloon#MessageForPos(bufnr(''), 2, 1)
Execute(Balloon messages should be shown for later columns): Execute(Balloon messages should be shown for later columns):
AssertEqual AssertEqual
\ 'Missing radix parameter (radix)', \ 'Missing radix parameter (radix)',
\ ale#balloon#MessageForPos(347, 2, 16) \ ale#balloon#MessageForPos(bufnr(''), 2, 16)
Execute(Balloon messages should be disabled if ALE is disabled globally):
let g:ale_enabled = 0
" Enabling the buffer should not make a difference.
let b:ale_enabled = 1
AssertEqual '', ale#balloon#MessageForPos(bufnr(''), 1, 1)
Execute(Balloon messages should be disabled if ALE is disabled for a buffer):
let b:ale_enabled = 0
AssertEqual '', ale#balloon#MessageForPos(bufnr(''), 1, 1)
Execute(Balloon messages should be disabled if the global setting is off):
let g:ale_set_balloons = 0
AssertEqual '', ale#balloon#MessageForPos(bufnr(''), 1, 1)
Execute(Balloon messages should be disabled if the buffer setting is off):
let b:ale_set_balloons = 0
AssertEqual '', ale#balloon#MessageForPos(bufnr(''), 1, 1)
Execute(The balloon buffer setting should override the global one):
let g:ale_set_balloons = 0
let b:ale_set_balloons = 1
AssertEqual
\ 'Missing semicolon. (semi)',
\ ale#balloon#MessageForPos(bufnr(''), 1, 1)