Skip to content

Commit

Permalink
Fix #1404 - Do not show balloons when g:ale_set_balloons is 0. Add b:…
Browse files Browse the repository at this point in the history
…ale_set_balloons
  • Loading branch information
w0rp committed Mar 25, 2018
1 parent 107516c commit 164c711
Show file tree
Hide file tree
Showing 5 changed files with 107 additions and 17 deletions.
9 changes: 8 additions & 1 deletion autoload/ale/balloon.vim
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@
" Description: balloonexpr support for ALE.

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:index = ale#util#BinarySearch(l:loclist, a:bufnr, a:lnum, a:col)

Expand All @@ -13,7 +20,7 @@ function! ale#balloon#Expr() abort
endfunction

function! ale#balloon#Disable() abort
set noballooneval
set noballooneval balloonexpr=
endfunction

function! ale#balloon#Enable() abort
Expand Down
16 changes: 8 additions & 8 deletions autoload/ale/toggle.vim
Original file line number Diff line number Diff line change
Expand Up @@ -84,21 +84,13 @@ function! s:EnablePreamble() abort

" Lint immediately, including running linters against the file.
call ale#Queue(0, 'lint_file')

if g:ale_set_balloons
call ale#balloon#Enable()
endif
endfunction

function! s:DisablePostamble() abort
" Remove highlights for the current buffer now.
if g:ale_set_highlights
call ale#highlight#UpdateHighlights()
endif

if g:ale_set_balloons
call ale#balloon#Disable()
endif
endfunction

function! s:CleanupEveryBuffer() abort
Expand All @@ -121,9 +113,17 @@ function! ale#toggle#Toggle() abort

if g:ale_enabled
call s:EnablePreamble()

if g:ale_set_balloons
call ale#balloon#Enable()
endif
else
call s:CleanupEveryBuffer()
call s:DisablePostamble()

if has('balloon_eval')
call ale#balloon#Disable()
endif
endif

call ale#toggle#InitAuGroups()
Expand Down
8 changes: 7 additions & 1 deletion doc/ale.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1291,13 +1291,19 @@ g:ale_pattern_options_enabled *g:ale_pattern_options_enabled*


g:ale_set_balloons *g:ale_set_balloons*
*b:ale_set_balloons*

Type: |Number|
Default: `has('balloon_eval')`

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
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*
Expand Down
40 changes: 40 additions & 0 deletions test/test_ale_toggle.vader
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@ Before:
Save g:ale_run_synchronously
Save g:ale_pattern_options
Save g:ale_pattern_options_enabled
Save g:ale_set_balloons

let g:ale_set_signs = 1
let g:ale_set_lists_synchronously = 1
let g:ale_run_synchronously = 1
let g:ale_pattern_options = {}
let g:ale_pattern_options_enabled = 1
let g:ale_set_balloons = has('balloon_eval')

unlet! b:ale_enabled

Expand Down Expand Up @@ -344,3 +346,41 @@ Execute(ALEResetBuffer should reset everything for a buffer):

AssertEqual 1, g:ale_enabled
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
51 changes: 44 additions & 7 deletions test/test_balloon_messages.vader
Original file line number Diff line number Diff line change
@@ -1,21 +1,25 @@
Before:
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,
\ 'col': 10,
\ 'text': 'Missing semicolon. (semi)',
\ },
\ {
\ 'bufnr': 347,
\ 'bufnr': bufnr(''),
\ 'lnum': 2,
\ 'col': 10,
\ 'text': 'Infix operators must be spaced. (space-infix-ops)'
\ },
\ {
\ 'bufnr': 347,
\ 'bufnr': bufnr(''),
\ 'lnum': 2,
\ 'col': 15,
\ 'text': 'Missing radix parameter (radix)'
Expand All @@ -25,17 +29,50 @@ Before:
After:
Restore

unlet! b:ale_enabled
unlet! b:ale_set_balloons

Execute(Balloon messages should be shown for the correct lines):
AssertEqual
\ 'Missing semicolon. (semi)',
\ ale#balloon#MessageForPos(347, 1, 1)
\ ale#balloon#MessageForPos(bufnr(''), 1, 1)

Execute(Balloon messages should be shown for earlier columns):
AssertEqual
\ '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):
AssertEqual
\ '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)

0 comments on commit 164c711

Please sign in to comment.