From d1224a05c44f41d1592a756141eedf172c083ed1 Mon Sep 17 00:00:00 2001 From: w0rp Date: Thu, 12 Apr 2018 20:31:33 +0100 Subject: [PATCH] #1497 Tolerate important ALE variables being undefined for some reason when viewing buffers like git commits --- autoload/ale.vim | 16 ++++++++++------ test/test_lint_error_delay.vader | 10 ++++++---- test/test_should_do_nothing_conditions.vader | 15 +++++++++++++-- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/autoload/ale.vim b/autoload/ale.vim index f6c06cf1..5c4a0f55 100644 --- a/autoload/ale.vim +++ b/autoload/ale.vim @@ -33,6 +33,10 @@ endfunction " Return 1 if a file is too large for ALE to handle. function! ale#FileTooLarge() abort + if !exists('g:ale_maximum_file_size') + return 0 + endif + let l:max = ale#Var(bufnr(''), 'maximum_file_size') return l:max > 0 ? (line2byte(line('$') + 1) > l:max) : 0 @@ -46,13 +50,18 @@ function! ale#ShouldDoNothing(buffer) abort " The checks are split into separate if statements to make it possible to " profile each check individually with Vim's profiling tools. + " Do nothing if ALE is disabled. + if !getbufvar(a:buffer, 'ale_enabled', get(g:, 'ale_enabled', 0)) + return 1 + endif + " Don't perform any checks when newer NeoVim versions are exiting. if get(v:, 'exiting', v:null) isnot v:null return 1 endif " Do nothing for blacklisted files - if index(g:ale_filetype_blacklist, getbufvar(a:buffer, '&filetype')) >= 0 + if index(get(g:, 'ale_filetype_blacklist', []), getbufvar(a:buffer, '&filetype')) >= 0 return 1 endif @@ -72,11 +81,6 @@ function! ale#ShouldDoNothing(buffer) abort return 1 endif - " Do nothing if ALE is disabled. - if !ale#Var(a:buffer, 'enabled') - return 1 - endif - " Do nothing if the file is too large. if ale#FileTooLarge() return 1 diff --git a/test/test_lint_error_delay.vader b/test/test_lint_error_delay.vader index 7f081794..05664899 100644 --- a/test/test_lint_error_delay.vader +++ b/test/test_lint_error_delay.vader @@ -1,11 +1,13 @@ Before: - Save g:ale_filetype_blacklist + runtime autoload/ale.vim - " Delete some variable which should be defined. - unlet! g:ale_filetype_blacklist + " Replace one of the key ALE functions and make it throw. + function! ale#FileTooLarge() abort + throw 'broken' + endfunction After: - Restore + runtime autoload/ale.vim call ale#ResetErrorDelays() diff --git a/test/test_should_do_nothing_conditions.vader b/test/test_should_do_nothing_conditions.vader index 23ebd92e..85874e53 100644 --- a/test/test_should_do_nothing_conditions.vader +++ b/test/test_should_do_nothing_conditions.vader @@ -1,4 +1,7 @@ Before: + Save g:ale_filetype_blacklist + Save g:ale_maximum_file_size + Save g:ale_enabled Save &l:statusline call ale#test#SetDirectory('/testplugin/test') @@ -12,6 +15,8 @@ Before: endif After: + Restore + call ale#test#RestoreDirectory() if b:funky_command_created @@ -21,8 +26,6 @@ After: unlet! b:funky_command_created - Restore - Execute(ALE shouldn't do much of anything for ctrlp-funky buffers): Assert !ale#ShouldDoNothing(bufnr('')), 'The preliminary check failed' @@ -39,3 +42,11 @@ Execute(ALE shouldn't try to check buffers with '.' as the filename): silent! noautocmd file . Assert ale#ShouldDoNothing(bufnr('')) + +Execute(The DoNothing check should work if the ALE globals aren't defined): + unlet! g:ale_filetype_blacklist + unlet! g:ale_maximum_file_size + unlet! g:ale_enabled + + " This shouldn't throw exceptions. + call ale#ShouldDoNothing(bufnr(''))