Skip to content

Commit 164c711

Browse files
committed
Fix #1404 - Do not show balloons when g:ale_set_balloons is 0. Add b:ale_set_balloons
1 parent 107516c commit 164c711

5 files changed

Lines changed: 107 additions & 17 deletions

File tree

autoload/ale/balloon.vim

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22
" Description: balloonexpr support for ALE.
33

44
function! ale#balloon#MessageForPos(bufnr, lnum, col) abort
5+
" Don't show balloons if they are disabled, or linting is disabled.
6+
if !ale#Var(a:bufnr, 'set_balloons')
7+
\|| !g:ale_enabled
8+
\|| !getbufvar(a:bufnr, 'ale_enabled', 1)
9+
return ''
10+
endif
11+
512
let l:loclist = get(g:ale_buffer_info, a:bufnr, {'loclist': []}).loclist
613
let l:index = ale#util#BinarySearch(l:loclist, a:bufnr, a:lnum, a:col)
714

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

1522
function! ale#balloon#Disable() abort
16-
set noballooneval
23+
set noballooneval balloonexpr=
1724
endfunction
1825

1926
function! ale#balloon#Enable() abort

autoload/ale/toggle.vim

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -84,21 +84,13 @@ function! s:EnablePreamble() abort
8484

8585
" Lint immediately, including running linters against the file.
8686
call ale#Queue(0, 'lint_file')
87-
88-
if g:ale_set_balloons
89-
call ale#balloon#Enable()
90-
endif
9187
endfunction
9288

9389
function! s:DisablePostamble() abort
9490
" Remove highlights for the current buffer now.
9591
if g:ale_set_highlights
9692
call ale#highlight#UpdateHighlights()
9793
endif
98-
99-
if g:ale_set_balloons
100-
call ale#balloon#Disable()
101-
endif
10294
endfunction
10395

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

122114
if g:ale_enabled
123115
call s:EnablePreamble()
116+
117+
if g:ale_set_balloons
118+
call ale#balloon#Enable()
119+
endif
124120
else
125121
call s:CleanupEveryBuffer()
126122
call s:DisablePostamble()
123+
124+
if has('balloon_eval')
125+
call ale#balloon#Disable()
126+
endif
127127
endif
128128

129129
call ale#toggle#InitAuGroups()

doc/ale.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1291,13 +1291,19 @@ g:ale_pattern_options_enabled *g:ale_pattern_options_enabled*
12911291

12921292

12931293
g:ale_set_balloons *g:ale_set_balloons*
1294+
*b:ale_set_balloons*
12941295

12951296
Type: |Number|
12961297
Default: `has('balloon_eval')`
12971298

12981299
When this option is set to `1`, balloon messages will be displayed for
12991300
problems. Problems nearest to the cursor on the line the cursor is over will
1300-
be displayed.
1301+
be displayed. Balloons will not be shown when either |g:ale_enabled| is `0`
1302+
or |b:ale_enabled| is `0`.
1303+
1304+
`b:ale_set_balloons` can be set to `0` to disable balloons for a buffer.
1305+
Balloons cannot be enabled for a specific buffer when not initially enabled
1306+
globally.
13011307

13021308

13031309
g:ale_set_highlights *g:ale_set_highlights*

test/test_ale_toggle.vader

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ Before:
55
Save g:ale_run_synchronously
66
Save g:ale_pattern_options
77
Save g:ale_pattern_options_enabled
8+
Save g:ale_set_balloons
89

910
let g:ale_set_signs = 1
1011
let g:ale_set_lists_synchronously = 1
1112
let g:ale_run_synchronously = 1
1213
let g:ale_pattern_options = {}
1314
let g:ale_pattern_options_enabled = 1
15+
let g:ale_set_balloons = has('balloon_eval')
1416

1517
unlet! b:ale_enabled
1618

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

345347
AssertEqual 1, g:ale_enabled
346348
AssertEqual 1, get(b:, 'ale_enabled', 1)
349+
350+
Execute(Disabling ALE should disable balloons):
351+
" These tests won't run in the console, but we can run them manually in GVim.
352+
if has('balloon_eval')
353+
call ale#linter#Reset()
354+
355+
" Enable balloons, so we can check the expr value.
356+
call ale#balloon#Enable()
357+
358+
AssertEqual 1, &ballooneval
359+
AssertEqual 'ale#balloon#Expr()', &balloonexpr
360+
361+
" Toggle ALE off.
362+
ALEToggle
363+
364+
" The balloon settings should be reset.
365+
AssertEqual 0, &ballooneval
366+
AssertEqual '', &balloonexpr
367+
endif
368+
369+
Execute(Enabling ALE should enable balloons if the setting is on):
370+
if has('balloon_eval')
371+
call ale#linter#Reset()
372+
call ale#balloon#Disable()
373+
ALEDisable
374+
let g:ale_set_balloons = 0
375+
ALEEnable
376+
377+
AssertEqual 0, &ballooneval
378+
AssertEqual '', &balloonexpr
379+
380+
ALEDisable
381+
let g:ale_set_balloons = 1
382+
ALEEnable
383+
384+
AssertEqual 1, &ballooneval
385+
AssertEqual 'ale#balloon#Expr()', &balloonexpr
386+
endif

test/test_balloon_messages.vader

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,25 @@
11
Before:
22
Save g:ale_buffer_info
3+
Save g:ale_enabled
4+
Save g:ale_set_balloons
35

4-
let g:ale_buffer_info[347] = {'loclist': [
6+
let g:ale_set_balloons = 1
7+
8+
let g:ale_buffer_info[bufnr('')] = {'loclist': [
59
\ {
6-
\ 'bufnr': 347,
10+
\ 'bufnr': bufnr(''),
711
\ 'lnum': 1,
812
\ 'col': 10,
913
\ 'text': 'Missing semicolon. (semi)',
1014
\ },
1115
\ {
12-
\ 'bufnr': 347,
16+
\ 'bufnr': bufnr(''),
1317
\ 'lnum': 2,
1418
\ 'col': 10,
1519
\ 'text': 'Infix operators must be spaced. (space-infix-ops)'
1620
\ },
1721
\ {
18-
\ 'bufnr': 347,
22+
\ 'bufnr': bufnr(''),
1923
\ 'lnum': 2,
2024
\ 'col': 15,
2125
\ 'text': 'Missing radix parameter (radix)'
@@ -25,17 +29,50 @@ Before:
2529
After:
2630
Restore
2731

32+
unlet! b:ale_enabled
33+
unlet! b:ale_set_balloons
34+
2835
Execute(Balloon messages should be shown for the correct lines):
2936
AssertEqual
3037
\ 'Missing semicolon. (semi)',
31-
\ ale#balloon#MessageForPos(347, 1, 1)
38+
\ ale#balloon#MessageForPos(bufnr(''), 1, 1)
3239

3340
Execute(Balloon messages should be shown for earlier columns):
3441
AssertEqual
3542
\ 'Infix operators must be spaced. (space-infix-ops)',
36-
\ ale#balloon#MessageForPos(347, 2, 1)
43+
\ ale#balloon#MessageForPos(bufnr(''), 2, 1)
3744

3845
Execute(Balloon messages should be shown for later columns):
3946
AssertEqual
4047
\ 'Missing radix parameter (radix)',
41-
\ ale#balloon#MessageForPos(347, 2, 16)
48+
\ ale#balloon#MessageForPos(bufnr(''), 2, 16)
49+
50+
Execute(Balloon messages should be disabled if ALE is disabled globally):
51+
let g:ale_enabled = 0
52+
" Enabling the buffer should not make a difference.
53+
let b:ale_enabled = 1
54+
55+
AssertEqual '', ale#balloon#MessageForPos(bufnr(''), 1, 1)
56+
57+
Execute(Balloon messages should be disabled if ALE is disabled for a buffer):
58+
let b:ale_enabled = 0
59+
60+
AssertEqual '', ale#balloon#MessageForPos(bufnr(''), 1, 1)
61+
62+
Execute(Balloon messages should be disabled if the global setting is off):
63+
let g:ale_set_balloons = 0
64+
65+
AssertEqual '', ale#balloon#MessageForPos(bufnr(''), 1, 1)
66+
67+
Execute(Balloon messages should be disabled if the buffer setting is off):
68+
let b:ale_set_balloons = 0
69+
70+
AssertEqual '', ale#balloon#MessageForPos(bufnr(''), 1, 1)
71+
72+
Execute(The balloon buffer setting should override the global one):
73+
let g:ale_set_balloons = 0
74+
let b:ale_set_balloons = 1
75+
76+
AssertEqual
77+
\ 'Missing semicolon. (semi)',
78+
\ ale#balloon#MessageForPos(bufnr(''), 1, 1)

0 commit comments

Comments
 (0)