From 9460e58c3b254d6716d607799fa9333f3d20d40f Mon Sep 17 00:00:00 2001 From: w0rp Date: Fri, 26 May 2017 16:20:17 +0100 Subject: [PATCH] Fix #371 Allow ALE to be disabled in different buffers --- autoload/ale.vim | 5 ++ autoload/ale/cursor.vim | 14 ++++++ doc/ale.txt | 11 +++++ test/test_disabling_ale.vader | 92 +++++++++++++++++++++++++++++++++++ 4 files changed, 122 insertions(+) create mode 100644 test/test_disabling_ale.vader diff --git a/autoload/ale.vim b/autoload/ale.vim index 066bfa0..62a8bf4 100644 --- a/autoload/ale.vim +++ b/autoload/ale.vim @@ -29,6 +29,11 @@ function! ale#Queue(delay, ...) abort throw "linting_flag must be either '' or 'lint_file'" endif + " Stop here if ALE is disabled. + if !ale#Var(bufnr(''), 'enabled') + return + endif + if ale#ShouldDoNothing() return endif diff --git a/autoload/ale/cursor.vim b/autoload/ale/cursor.vim index e5ce7fd..572880a 100644 --- a/autoload/ale/cursor.vim +++ b/autoload/ale/cursor.vim @@ -66,6 +66,15 @@ function! s:StopCursorTimer() abort endfunction function! ale#cursor#EchoCursorWarning(...) abort + " Stop here if ALE is disabled. + if !ale#Var(bufnr(''), 'enabled') + return + endif + + if ale#ShouldDoNothing() + return + endif + " Only echo the warnings in normal mode, otherwise we will get problems. if mode() !=# 'n' return @@ -89,6 +98,11 @@ let s:cursor_timer = -1 let s:last_pos = [0, 0, 0] function! ale#cursor#EchoCursorWarningWithDelay() abort + " Stop here if ALE is disabled. + if !ale#Var(bufnr(''), 'enabled') + return + endif + if ale#ShouldDoNothing() return endif diff --git a/doc/ale.txt b/doc/ale.txt index bc632e2..4868e17 100644 --- a/doc/ale.txt +++ b/doc/ale.txt @@ -277,6 +277,7 @@ g:ale_emit_conflict_warnings *g:ale_emit_conflict_warnings* g:ale_enabled *g:ale_enabled* + *b:ale_enabled* Type: |Number| Default: `1` @@ -285,6 +286,16 @@ g:ale_enabled *g:ale_enabled* error checking will be performed, etc. ALE can be toggled on and off with the |ALEToggle| command, which changes this option. + ALE can be disabled in each buffer by setting `let b:ale_enabled = 0` + Disabling ALE based on filename patterns can be accomplished by setting + a regular expression for |g:ale_pattern_options|. For example: > + + " Disable linting for all minified JS files. + let g:ale_pattern_options = {'\.min.js$': {'ale_enabled': 0}} +< + + See |g:ale_pattern_options| for more information on that option. + g:ale_fixers *g:ale_fixers* *b:ale_fixers* diff --git a/test/test_disabling_ale.vader b/test/test_disabling_ale.vader new file mode 100644 index 0000000..b08c5b1 --- /dev/null +++ b/test/test_disabling_ale.vader @@ -0,0 +1,92 @@ +Before: + Save g:ale_buffer_info, g:ale_enabled, b:ale_enabled + + function! TestCallback(buffer, output) + return [] + endfunction + + call ale#linter#Define('foobar', { + \ 'name': 'testlinter', + \ 'callback': 'TestCallback', + \ 'executable': 'echo', + \ 'command': 'true', + \}) + + function GetLastMessage() + redir => l:output + silent mess + redir END + + let l:lines = split(l:output, "\n") + + return empty(l:lines) ? '' : l:lines[-1] + endfunction + + echomsg '' + +After: + Restore + call ale#linter#Reset() + delfunction TestCallback + delfunction GetLastMessage + +Given foobar (Some imaginary filetype): + foo + bar + baz + +Execute(Linting shouldn't happen when ALE is disabled globally): + let g:ale_enabled = 0 + let g:ale_buffer_info = {} + + call ale#Queue(0) + + AssertEqual {}, g:ale_buffer_info + +Execute(Linting shouldn't happen when ALE is disabled locally): + let b:ale_enabled = 0 + let g:ale_buffer_info = {} + + call ale#Queue(0) + + AssertEqual {}, g:ale_buffer_info + +Execute(Cursor warnings shouldn't be echoed when ALE is disabled globally): + let g:ale_enabled = 0 + let g:ale_buffer_info = { + \ bufnr('%'): { + \ 'loclist': [ + \ { + \ 'lnum': 2, + \ 'col': 10, + \ 'linter_name': 'testlinter', + \ 'type': 'W', + \ 'text': 'X' + \ }, + \ ], + \ }, + \} + + call cursor(2, 16) + call ale#cursor#EchoCursorWarning() + AssertEqual '', GetLastMessage() + +Execute(Cursor warnings shouldn't be echoed when ALE is disabled locally): + let b:ale_enabled = 0 + let g:ale_buffer_info = { + \ bufnr('%'): { + \ 'loclist': [ + \ { + \ 'lnum': 2, + \ 'col': 10, + \ 'linter_name': 'testlinter', + \ 'type': 'W', + \ 'text': 'X' + \ }, + \ ], + \ }, + \} + + call cursor(2, 16) + call ale#cursor#EchoCursorWarning() + AssertEqual '', GetLastMessage()