summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorw0rp <devw0rp@gmail.com>2018-10-29 11:29:12 +0000
committerw0rp <devw0rp@gmail.com>2018-10-29 11:29:21 +0000
commit2846e862178e9a16e078799c28aa9d9d4a2ea505 (patch)
tree280fdf12616e46090cd4be58930a8b395ebbb43b
parent9dbebf1cb3909c47a69c07397a84da1369cf98d0 (diff)
downloadale-2846e862178e9a16e078799c28aa9d9d4a2ea505.zip
#2017 Simplify lint cycles for supporting other sources later
-rw-r--r--autoload/ale.vim106
-rw-r--r--test/smoke_test.vader8
-rw-r--r--test/test_alelint_autocmd.vader8
-rw-r--r--test/test_command_chain.vader2
-rw-r--r--test/test_history_saving.vader6
-rw-r--r--test/test_ignoring_linters.vader6
-rw-r--r--test/test_lint_file_linters.vader1
-rw-r--r--test/test_linting_blacklist.vader2
-rw-r--r--test/test_sandbox_execution.vader1
-rw-r--r--test/test_temporary_file_management.vader4
-rw-r--r--test/test_verilog_verilator_options.vader2
11 files changed, 56 insertions, 90 deletions
diff --git a/autoload/ale.vim b/autoload/ale.vim
index 41d78753..dddb41db 100644
--- a/autoload/ale.vim
+++ b/autoload/ale.vim
@@ -10,8 +10,7 @@ let g:ale_echo_msg_warning_str = get(g:, 'ale_echo_msg_warning_str', 'Warning')
let g:ale_linters_ignore = get(g:, 'ale_linters_ignore', {})
let s:lint_timer = -1
-let s:queued_buffer_number = -1
-let s:should_lint_file_for_buffer = {}
+let s:getcmdwintype_exists = exists('*getcmdwintype')
" Return 1 if a file is too large for ALE to handle.
function! ale#FileTooLarge(buffer) abort
@@ -20,8 +19,6 @@ function! ale#FileTooLarge(buffer) abort
return l:max > 0 ? (line2byte(line('$') + 1) > l:max) : 0
endfunction
-let s:getcmdwintype_exists = exists('*getcmdwintype')
-
" 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(buffer) abort
@@ -86,18 +83,39 @@ function! ale#ShouldDoNothing(buffer) abort
return 0
endfunction
+function! s:Lint(buffer, should_lint_file, timer_id) abort
+ " Use the filetype from the buffer
+ let l:filetype = getbufvar(a:buffer, '&filetype')
+ let l:linters = ale#linter#Get(l:filetype)
+
+ " Apply ignore lists for linters only if needed.
+ let l:ignore_config = ale#Var(a:buffer, 'linters_ignore')
+ let l:linters = !empty(l:ignore_config)
+ \ ? ale#engine#ignore#Exclude(l:filetype, l:linters, l:ignore_config)
+ \ : l:linters
+
+ " Don't set up buffer data and so on if there are no linters to run.
+ if !has_key(g:ale_buffer_info, a:buffer) && empty(l:linters)
+ return
+ endif
+
+ " Clear lint_file linters, or only run them if the file exists.
+ let l:lint_file = empty(l:linters)
+ \ || (a:should_lint_file && filereadable(expand('#' . a:buffer . ':p')))
+
+ call ale#engine#RunLinters(a:buffer, l:linters, l:lint_file)
+endfunction
+
" (delay, [linting_flag, buffer_number])
function! ale#Queue(delay, ...) abort
if a:0 > 2
throw 'too many arguments!'
endif
- " Default linting_flag to ''
- let l:linting_flag = get(a:000, 0, '')
- let l:buffer = get(a:000, 1, bufnr(''))
+ let l:buffer = get(a:000, 1, v:null)
- if l:linting_flag isnot# '' && l:linting_flag isnot# 'lint_file'
- throw "linting_flag must be either '' or 'lint_file'"
+ if l:buffer is v:null
+ let l:buffer = bufnr('')
endif
if type(l:buffer) isnot v:t_number
@@ -108,78 +126,22 @@ function! ale#Queue(delay, ...) abort
return
endif
- " Remember that we want to check files for this buffer.
- " We will remember this until we finally run the linters, via any event.
- if l:linting_flag is# 'lint_file'
- let s:should_lint_file_for_buffer[l:buffer] = 1
- endif
+ " Default linting_flag to ''
+ let l:should_lint_file = get(a:000, 0) is# 'lint_file'
if s:lint_timer != -1
call timer_stop(s:lint_timer)
let s:lint_timer = -1
endif
- 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.
- if empty(l:linters)
- " If we have some previous buffer data, then stop any jobs currently
- " running and clear everything.
- if has_key(g:ale_buffer_info, l:buffer)
- call ale#engine#RunLinters(l:buffer, [], 1)
- endif
-
- return
- endif
-
if a:delay > 0
- let s:queued_buffer_number = l:buffer
- let s:lint_timer = timer_start(a:delay, function('ale#Lint'))
- else
- call ale#Lint(-1, l:buffer)
- endif
-endfunction
-
-function! ale#Lint(...) abort
- 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
+ let s:lint_timer = timer_start(
+ \ a:delay,
+ \ function('s:Lint', [l:buffer, l:should_lint_file])
+ \)
else
- " Use the current buffer number.
- let l:buffer = bufnr('')
- endif
-
- if ale#ShouldDoNothing(l:buffer)
- return
+ call s:Lint(l:buffer, l:should_lint_file, 0)
endif
-
- " Use the filetype from the buffer
- let l:filetype = getbufvar(l:buffer, '&filetype')
- let l:linters = ale#linter#Get(l:filetype)
- let l:should_lint_file = 0
-
- " Check if we previously requested checking the file.
- if has_key(s:should_lint_file_for_buffer, l:buffer)
- unlet s:should_lint_file_for_buffer[l:buffer]
- " Lint files if they exist.
- let l:should_lint_file = filereadable(expand('#' . l:buffer . ':p'))
- endif
-
- " Apply ignore lists for linters only if needed.
- let l:ignore_config = ale#Var(l:buffer, 'linters_ignore')
- let l:linters = !empty(l:ignore_config)
- \ ? ale#engine#ignore#Exclude(l:filetype, l:linters, l:ignore_config)
- \ : l:linters
-
- call ale#engine#RunLinters(l:buffer, l:linters, l:should_lint_file)
-endfunction
-
-" Reset flags indicating that files should be checked for all buffers.
-function! ale#ResetLintFileMarkers() abort
- let s:should_lint_file_for_buffer = {}
endfunction
let g:ale_has_override = get(g:, 'ale_has_override', {})
diff --git a/test/smoke_test.vader b/test/smoke_test.vader
index 2708c86f..c87f95b2 100644
--- a/test/smoke_test.vader
+++ b/test/smoke_test.vader
@@ -65,7 +65,7 @@ Execute(Linters should run with the default options):
" Try the test a few times over in NeoVim 0.3 or Windows,
" where tests fail randomly.
for g:i in range(has('nvim-0.3') || has('win32') ? 5 : 1)
- call ale#Lint()
+ call ale#Queue(0, '')
call ale#engine#WaitForJobs(2000)
let g:results = ale#test#GetLoclistWithoutModule()
@@ -109,7 +109,7 @@ Execute(Linters should run in PowerShell too):
\ 'command': 'echo foo && echo bar',
\})
- call ale#Lint()
+ call ale#Queue(0, '')
call ale#engine#WaitForJobs(4000)
AssertEqual [
@@ -139,7 +139,7 @@ Execute(Linters should run in PowerShell too):
endif
Execute(Previous errors should be removed when linters change):
- call ale#Lint()
+ call ale#Queue(0, '')
call ale#engine#WaitForJobs(2000)
call ale#linter#Reset()
@@ -166,7 +166,7 @@ Execute(Previous errors should be removed when linters change):
" Try the test a few times over in NeoVim 0.3 or Windows,
" where tests fail randomly.
for g:i in range(has('nvim-0.3') || has('win32') ? 5 : 1)
- call ale#Lint()
+ call ale#Queue(0, '')
call ale#engine#WaitForJobs(2000)
let g:results = ale#test#GetLoclistWithoutModule()
diff --git a/test/test_alelint_autocmd.vader b/test/test_alelint_autocmd.vader
index 5af1cd47..9a7a6a43 100644
--- a/test/test_alelint_autocmd.vader
+++ b/test/test_alelint_autocmd.vader
@@ -14,7 +14,7 @@ After:
catch
endtry
-Given foobar(An empty file):
+Given testft(An empty file):
Execute(Run a lint cycle, and check that a variable is set in the autocmd):
augroup VaderTest
autocmd!
@@ -22,7 +22,7 @@ Execute(Run a lint cycle, and check that a variable is set in the autocmd):
autocmd User ALELintPost let g:post_success = 1
augroup end
- call ale#Lint()
+ call ale#Queue(0)
AssertEqual g:pre_success, 1
AssertEqual g:post_success, 1
@@ -30,10 +30,10 @@ Execute(Run a lint cycle, and check that a variable is set in the autocmd):
Execute(b:ale_linted should be increased after each lint cycle):
AssertEqual get(b:, 'ale_linted'), 0
- call ale#Lint()
+ call ale#Queue(0)
AssertEqual get(b:, 'ale_linted'), 1
- call ale#Lint()
+ call ale#Queue(0)
AssertEqual get(b:, 'ale_linted'), 2
diff --git a/test/test_command_chain.vader b/test/test_command_chain.vader
index 9059d630..591f6f40 100644
--- a/test/test_command_chain.vader
+++ b/test/test_command_chain.vader
@@ -62,7 +62,7 @@ Given foobar (Some imaginary filetype):
Execute(Check the results of running the chain):
AssertEqual 'foobar', &filetype
- call ale#Lint()
+ call ale#Queue(0)
Assert g:first_echo_called, 'The first chain item was not called'
Assert g:second_echo_called, 'The second chain item was not called'
diff --git a/test/test_history_saving.vader b/test/test_history_saving.vader
index 375e96a1..d7a307b5 100644
--- a/test/test_history_saving.vader
+++ b/test/test_history_saving.vader
@@ -73,7 +73,7 @@ Execute(History should be set when commands are run):
" Retry this test until it works. This one can randomly fail.
for g:i in range(has('nvim-0.3') || has('win32') ? 5 : 1)
let b:ale_history = []
- call ale#Lint()
+ call ale#Queue(0)
call ale#engine#WaitForJobs(2000)
let g:history = filter(
@@ -106,7 +106,7 @@ Execute(History should be not set when disabled):
let g:ale_history_enabled = 0
- call ale#Lint()
+ call ale#Queue(0)
call ale#engine#WaitForJobs(2000)
AssertEqual [], ale#history#Get(bufnr(''))
@@ -120,7 +120,7 @@ Execute(History should include command output if logging is enabled):
" Retry this test until it works. This one can randomly fail.
for g:i in range(has('nvim-0.3') || has('win32') ? 5 : 1)
let b:ale_history = []
- call ale#Lint()
+ call ale#Queue(0)
call ale#engine#WaitForJobs(2000)
let g:history = ale#history#Get(bufnr(''))
diff --git a/test/test_ignoring_linters.vader b/test/test_ignoring_linters.vader
index 1ddd30e8..f47c5e81 100644
--- a/test/test_ignoring_linters.vader
+++ b/test/test_ignoring_linters.vader
@@ -138,6 +138,9 @@ After:
Given foobar(An empty file):
Execute(Global ignore lists should be applied for linters):
+ " We have to set up buffer info so RunLinters is called.
+ let g:ale_buffer_info = {bufnr(''): {}}
+
ALELint
Assert g:run_linters_called, "The mock callback wasn't called"
AssertEqual ['testlinter'], map(g:linters, 'v:val.name')
@@ -147,6 +150,9 @@ Execute(Global ignore lists should be applied for linters):
AssertEqual [], g:linters
Execute(buffer ignore lists should be applied for linters):
+ " We have to set up buffer info so RunLinters is called.
+ let g:ale_buffer_info = {bufnr(''): {}}
+
ALELint
Assert g:run_linters_called, "The mock callback wasn't called"
AssertEqual ['testlinter'], map(g:linters, 'v:val.name')
diff --git a/test/test_lint_file_linters.vader b/test/test_lint_file_linters.vader
index ca093aa8..f67fad44 100644
--- a/test/test_lint_file_linters.vader
+++ b/test/test_lint_file_linters.vader
@@ -10,7 +10,6 @@ Before:
let g:ale_run_synchronously = 1
let g:ale_set_lists_synchronously = 1
let b:ale_save_event_fired = 0
- call ale#ResetLintFileMarkers()
let g:buffer_result = [
\ {
diff --git a/test/test_linting_blacklist.vader b/test/test_linting_blacklist.vader
index 2d9ed585..73190b7f 100644
--- a/test/test_linting_blacklist.vader
+++ b/test/test_linting_blacklist.vader
@@ -10,7 +10,7 @@ Given unite (A Unite.vim file):
anything
Execute(Running ALE on a blacklisted file shouldn't change anything):
- call ale#Lint()
+ call ale#Queue(0)
call ale#engine#WaitForJobs(2000)
AssertEqual {}, g:ale_buffer_info
diff --git a/test/test_sandbox_execution.vader b/test/test_sandbox_execution.vader
index 4dbcb0db..5a4974ba 100644
--- a/test/test_sandbox_execution.vader
+++ b/test/test_sandbox_execution.vader
@@ -47,7 +47,6 @@ Execute(ALE shouldn't blow up when run from a sandbox):
sandbox call ale#Queue(0)
sandbox call ale#Queue(1)
- sandbox call ale#Lint()
Execute(ALE shouldn't blow up if file cleanup happens in a sandbox):
" Make a call to an engine function first, so the function will be defined
diff --git a/test/test_temporary_file_management.vader b/test/test_temporary_file_management.vader
index e248331c..4847706a 100644
--- a/test/test_temporary_file_management.vader
+++ b/test/test_temporary_file_management.vader
@@ -67,7 +67,7 @@ Given foobar (Some imaginary filetype):
Execute(ALE should delete managed files/directories appropriately after linting):
AssertEqual 'foobar', &filetype
- call ale#Lint()
+ call ale#Queue(0)
call ale#engine#WaitForJobs(2000)
Assert !filereadable(g:filename), 'The temporary file was not deleted'
@@ -79,7 +79,7 @@ Execute(ALE should delete managed files even if no command is run):
let g:command = ''
- call ale#Lint()
+ call ale#Queue(0)
call ale#engine#WaitForJobs(2000)
Assert !filereadable(g:filename), 'The temporary file was not deleted'
diff --git a/test/test_verilog_verilator_options.vader b/test/test_verilog_verilator_options.vader
index e53037b1..3ebabfcc 100644
--- a/test/test_verilog_verilator_options.vader
+++ b/test/test_verilog_verilator_options.vader
@@ -12,7 +12,7 @@ Execute(Set Verilog Verilator linter additional options to `-sv --default-langua
" Additional args for the linter
let g:ale_verilog_verilator_options = '-sv --default-language "1800-2012"'
- call ale#Lint()
+ call ale#Queue(0)
let g:run_cmd = ale_linters#verilog#verilator#GetCommand(bufnr(''))
let g:matched = match(g:run_cmd, '\s' . g:ale_verilog_verilator_options . '\s')