summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--autoload/ale.vim38
-rw-r--r--autoload/ale/cursor.vim6
-rw-r--r--autoload/ale/engine.vim2
-rw-r--r--autoload/ale/events.vim20
-rw-r--r--plugin/ale.vim6
-rw-r--r--test/test_ale_fix.vader6
-rw-r--r--test/test_ale_init_au_groups.vader12
-rw-r--r--test/test_lint_on_enter_when_file_changed.vader2
8 files changed, 52 insertions, 40 deletions
diff --git a/autoload/ale.vim b/autoload/ale.vim
index 5efe15ab..aba3fda1 100644
--- a/autoload/ale.vim
+++ b/autoload/ale.vim
@@ -15,19 +15,19 @@ endfunction
" A function for checking various conditions whereby ALE just shouldn't
" attempt to do anything, say if particular buffer types are open in Vim.
-function! ale#ShouldDoNothing() abort
+function! ale#ShouldDoNothing(buffer) abort
" Do nothing for blacklisted files
" OR if ALE is running in the sandbox
return index(g:ale_filetype_blacklist, &filetype) >= 0
\ || (exists('*getcmdwintype') && !empty(getcmdwintype()))
\ || ale#util#InSandbox()
- \ || !ale#Var(bufnr(''), 'enabled')
+ \ || !ale#Var(a:buffer, 'enabled')
\ || ale#FileTooLarge()
endfunction
-" (delay, [linting_flag])
+" (delay, [linting_flag, buffer_number])
function! ale#Queue(delay, ...) abort
- if len(a:0) > 1
+ if a:0 > 2
throw 'too many arguments!'
endif
@@ -38,7 +38,13 @@ function! ale#Queue(delay, ...) abort
throw "linting_flag must be either '' or 'lint_file'"
endif
- if ale#ShouldDoNothing()
+ let l:buffer = get(a:000, 1, bufnr(''))
+
+ if type(l:buffer) != type(0)
+ throw 'buffer_number must be a Number'
+ endif
+
+ if ale#ShouldDoNothing(l:buffer)
return
endif
@@ -53,7 +59,6 @@ function! ale#Queue(delay, ...) abort
let s:lint_timer = -1
endif
- let l:buffer = bufnr('')
let l:linters = ale#linter#Get(getbufvar(l:buffer, '&filetype'))
" Don't set up buffer data and so on if there are no linters to run.
@@ -68,21 +73,26 @@ function! ale#Queue(delay, ...) abort
endif
if a:delay > 0
- let s:queued_buffer_number = bufnr('%')
+ let s:queued_buffer_number = l:buffer
let s:lint_timer = timer_start(a:delay, function('ale#Lint'))
else
- call ale#Lint()
+ call ale#Lint(-1, l:buffer)
endif
endfunction
function! ale#Lint(...) abort
- " Get the buffer number linting was queued for.
- " or else take the current one.
- let l:buffer = len(a:0) > 1 && a:1 == s:lint_timer
- \ ? s:queued_buffer_number
- \ : bufnr('%')
+ if a:0 > 1
+ " Use the buffer number given as the optional second argument.
+ let l:buffer = a:2
+ elseif a:0 > 0 && a:1 == s:lint_timer
+ " Use the buffer number for the buffer linting was queued for.
+ let l:buffer = s:queued_buffer_number
+ else
+ " Use the current buffer number.
+ let l:buffer = bufnr('')
+ endif
- if ale#ShouldDoNothing()
+ if ale#ShouldDoNothing(l:buffer)
return
endif
diff --git a/autoload/ale/cursor.vim b/autoload/ale/cursor.vim
index 3e19b6fc..0c6a8634 100644
--- a/autoload/ale/cursor.vim
+++ b/autoload/ale/cursor.vim
@@ -66,7 +66,7 @@ function! s:StopCursorTimer() abort
endfunction
function! ale#cursor#EchoCursorWarning(...) abort
- if ale#ShouldDoNothing()
+ if ale#ShouldDoNothing(bufnr(''))
return
endif
@@ -93,7 +93,7 @@ let s:cursor_timer = -1
let s:last_pos = [0, 0, 0]
function! ale#cursor#EchoCursorWarningWithDelay() abort
- if ale#ShouldDoNothing()
+ if ale#ShouldDoNothing(bufnr(''))
return
endif
@@ -112,7 +112,7 @@ function! ale#cursor#EchoCursorWarningWithDelay() abort
endfunction
function! ale#cursor#ShowCursorDetail() abort
- if ale#ShouldDoNothing()
+ if ale#ShouldDoNothing(bufnr(''))
return
endif
diff --git a/autoload/ale/engine.vim b/autoload/ale/engine.vim
index 76c529fb..52acfe7f 100644
--- a/autoload/ale/engine.vim
+++ b/autoload/ale/engine.vim
@@ -139,7 +139,7 @@ function! s:HandleLoclist(linter_name, buffer, loclist) abort
" for efficient lookup of the messages in the cursor handler.
call sort(g:ale_buffer_info[a:buffer].loclist, 'ale#util#LocItemCompare')
- if ale#ShouldDoNothing()
+ if ale#ShouldDoNothing(a:buffer)
return
endif
diff --git a/autoload/ale/events.vim b/autoload/ale/events.vim
index f740fdaa..4722afa9 100644
--- a/autoload/ale/events.vim
+++ b/autoload/ale/events.vim
@@ -1,7 +1,7 @@
" Author: w0rp <devw0rp@gmail.com>
-function! ale#events#SaveEvent() abort
- let l:should_lint = g:ale_enabled && g:ale_lint_on_save
+function! ale#events#SaveEvent(buffer) abort
+ let l:should_lint = ale#Var(a:buffer, 'enabled') && g:ale_lint_on_save
if g:ale_fix_on_save
let l:will_fix = ale#fix#Fix('save_file')
@@ -9,25 +9,27 @@ function! ale#events#SaveEvent() abort
endif
if l:should_lint
- call ale#Queue(0, 'lint_file')
+ call ale#Queue(0, 'lint_file', a:buffer)
endif
endfunction
-function! s:LintOnEnter() abort
- if g:ale_enabled && g:ale_lint_on_enter && has_key(b:, 'ale_file_changed')
+function! s:LintOnEnter(buffer) abort
+ if ale#Var(a:buffer, 'enabled')
+ \&& g:ale_lint_on_enter
+ \&& has_key(b:, 'ale_file_changed')
call remove(b:, 'ale_file_changed')
- call ale#Queue(0, 'lint_file')
+ call ale#Queue(0, 'lint_file', a:buffer)
endif
endfunction
-function! ale#events#EnterEvent() abort
- call s:LintOnEnter()
+function! ale#events#EnterEvent(buffer) abort
+ call s:LintOnEnter(a:buffer)
endfunction
function! ale#events#FileChangedEvent(buffer) abort
call setbufvar(a:buffer, 'ale_file_changed', 1)
if bufnr('') == a:buffer
- call s:LintOnEnter()
+ call s:LintOnEnter(a:buffer)
endif
endfunction
diff --git a/plugin/ale.vim b/plugin/ale.vim
index dc9b93ee..79e6836b 100644
--- a/plugin/ale.vim
+++ b/plugin/ale.vim
@@ -219,11 +219,11 @@ function! ALEInitAuGroups() abort
augroup ALERunOnEnterGroup
autocmd!
if g:ale_enabled && g:ale_lint_on_enter
- autocmd BufWinEnter,BufRead * call ale#Queue(300, 'lint_file')
+ autocmd BufWinEnter,BufRead * call ale#Queue(0, 'lint_file', str2nr(expand('<abuf>')))
" Track when the file is changed outside of Vim.
autocmd FileChangedShellPost * call ale#events#FileChangedEvent(str2nr(expand('<abuf>')))
" If the file has been changed, then check it again on enter.
- autocmd BufEnter * call ale#events#EnterEvent()
+ autocmd BufEnter * call ale#events#EnterEvent(str2nr(expand('<abuf>')))
endif
augroup END
@@ -245,7 +245,7 @@ function! ALEInitAuGroups() abort
augroup ALERunOnSaveGroup
autocmd!
if (g:ale_enabled && g:ale_lint_on_save) || g:ale_fix_on_save
- autocmd BufWritePost * call ale#events#SaveEvent()
+ autocmd BufWritePost * call ale#events#SaveEvent(str2nr(expand('<abuf>')))
endif
augroup END
diff --git a/test/test_ale_fix.vader b/test/test_ale_fix.vader
index d7c3fb35..bafeee2b 100644
--- a/test/test_ale_fix.vader
+++ b/test/test_ale_fix.vader
@@ -246,7 +246,7 @@ Execute(ALEFix should save files on the save event):
let g:ale_fixers.testft = ['AddDollars']
call SetUpLinters()
- call ale#events#SaveEvent()
+ call ale#events#SaveEvent(bufnr(''))
" We should save the file.
AssertEqual ['$a', '$b', '$c'], readfile('fix_test_file')
@@ -285,7 +285,7 @@ Execute(ALEFix should still lint with no linters to be applied):
let g:ale_fixers.testft = []
call SetUpLinters()
- call ale#events#SaveEvent()
+ call ale#events#SaveEvent(bufnr(''))
Assert !filereadable('fix_test_file'), 'The file should not have been saved'
@@ -317,7 +317,7 @@ Execute(ALEFix should still lint when nothing was fixed on save):
let g:ale_fixers.testft = ['DoNothing']
call SetUpLinters()
- call ale#events#SaveEvent()
+ call ale#events#SaveEvent(bufnr(''))
Assert !filereadable('fix_test_file'), 'The file should not have been saved'
diff --git a/test/test_ale_init_au_groups.vader b/test/test_ale_init_au_groups.vader
index c20f4f97..e036343b 100644
--- a/test/test_ale_init_au_groups.vader
+++ b/test/test_ale_init_au_groups.vader
@@ -116,9 +116,9 @@ Execute (g:ale_lint_on_enter = 1 should bind the required events):
let g:ale_lint_on_enter = 1
AssertEqual [
- \ 'BufEnter * call ale#events#EnterEvent()',
- \ 'BufReadPost * call ale#Queue(300, ''lint_file'')',
- \ 'BufWinEnter * call ale#Queue(300, ''lint_file'')',
+ \ 'BufEnter * call ale#events#EnterEvent(str2nr(expand(''<abuf>'')))',
+ \ 'BufReadPost * call ale#Queue(0, ''lint_file'', str2nr(expand(''<abuf>'')))',
+ \ 'BufWinEnter * call ale#Queue(0, ''lint_file'', str2nr(expand(''<abuf>'')))',
\ 'FileChangedShellPost * call ale#events#FileChangedEvent(str2nr(expand(''<abuf>'')))',
\], CheckAutocmd('ALERunOnEnterGroup')
@@ -151,7 +151,7 @@ Execute (g:ale_lint_on_save = 1 should bind no events):
let g:ale_fix_on_save = 0
AssertEqual [
- \ 'BufWritePost * call ale#events#SaveEvent()',
+ \ 'BufWritePost * call ale#events#SaveEvent(str2nr(expand(''<abuf>'')))',
\], CheckAutocmd('ALERunOnSaveGroup')
Execute (g:ale_lint_on_save = 0 and g:ale_fix_on_save = 1 should bind events):
@@ -159,7 +159,7 @@ Execute (g:ale_lint_on_save = 0 and g:ale_fix_on_save = 1 should bind events):
let g:ale_fix_on_save = 1
AssertEqual [
- \ 'BufWritePost * call ale#events#SaveEvent()',
+ \ 'BufWritePost * call ale#events#SaveEvent(str2nr(expand(''<abuf>'')))',
\], CheckAutocmd('ALERunOnSaveGroup')
Execute (g:ale_fix_on_save = 1 should bind events even when ALE is disabled):
@@ -168,7 +168,7 @@ Execute (g:ale_fix_on_save = 1 should bind events even when ALE is disabled):
let g:ale_fix_on_save = 1
AssertEqual [
- \ 'BufWritePost * call ale#events#SaveEvent()',
+ \ 'BufWritePost * call ale#events#SaveEvent(str2nr(expand(''<abuf>'')))',
\], CheckAutocmd('ALERunOnSaveGroup')
Execute (g:ale_echo_cursor = 0 should bind no events):
diff --git a/test/test_lint_on_enter_when_file_changed.vader b/test/test_lint_on_enter_when_file_changed.vader
index cfa53878..4d4f19cc 100644
--- a/test/test_lint_on_enter_when_file_changed.vader
+++ b/test/test_lint_on_enter_when_file_changed.vader
@@ -64,7 +64,7 @@ Execute(The buffer should be checked after entering it after the file has change
let b:ale_file_changed = 1
set filetype=foobar
- call ale#events#EnterEvent()
+ call ale#events#EnterEvent(bufnr(''))
AssertEqual [{
\ 'bufnr': bufnr(''),