summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--autoload/ale/linter.vim18
-rw-r--r--doc/ale.txt16
-rw-r--r--test/test_linter_retrieval.vader24
3 files changed, 52 insertions, 6 deletions
diff --git a/autoload/ale/linter.vim b/autoload/ale/linter.vim
index 269b0929..00ab916a 100644
--- a/autoload/ale/linter.vim
+++ b/autoload/ale/linter.vim
@@ -289,11 +289,19 @@ function! ale#linter#ResolveFiletype(original_filetype) abort
endfunction
function! s:GetLinterNames(original_filetype) abort
- for l:dict in [
- \ get(b:, 'ale_linters', {}),
- \ g:ale_linters,
- \ s:default_ale_linters,
- \]
+ let l:buffer_ale_linters = get(b:, 'ale_linters', {})
+
+ " b:ale_linters can be set to 'all'
+ if l:buffer_ale_linters is# 'all'
+ return 'all'
+ endif
+
+ " b:ale_linters can be set to a List.
+ if type(l:buffer_ale_linters) is type([])
+ return l:buffer_ale_linters
+ endif
+
+ for l:dict in [l:buffer_ale_linters, g:ale_linters, s:default_ale_linters]
if has_key(l:dict, a:original_filetype)
return l:dict[a:original_filetype]
endif
diff --git a/doc/ale.txt b/doc/ale.txt
index cd6c336e..488c222a 100644
--- a/doc/ale.txt
+++ b/doc/ale.txt
@@ -944,6 +944,20 @@ g:ale_linters *g:ale_linters*
will first look for linters for filetypes in the `b:ale_linters` variable,
then `g:ale_linters`, and then a default Dictionary.
+ `b:ale_linters` can be set to a List, or the string `'all'`. When linters
+ for two different filetypes share the same name, the first linter loaded
+ will be used. Any ambiguity can be resolved by using a Dictionary specifying
+ which linter to run for which filetype instead. >
+
+ " Use ESLint for the buffer if the filetype includes 'javascript'.
+ let b:ale_linters = {'javascript': ['eslint'], 'html': ['tidy']}
+ " Use a List for the same setting. This will work in most cases.
+ let b:ale_linters = ['eslint', 'tidy']
+ " Disable all linters for the buffer.
+ let b:ale_linters = []
+ " Explicitly enable all available linters for the filetype.
+ let b:ale_linters = 'all'
+<
g:ale_max_buffer_history_size *g:ale_max_buffer_history_size*
@@ -1016,7 +1030,7 @@ g:ale_pattern_options *g:ale_pattern_options*
" Use just ESLint for linting and fixing files which end in '.foo.js'
let g:ale_pattern_options = {
\ '\.foo\.js$': {
- \ 'ale_linters': {'javascript': ['eslint']},
+ \ 'ale_linters': ['eslint'],
\ 'ale_fixers: ['eslint'],
\ },
\}
diff --git a/test/test_linter_retrieval.vader b/test/test_linter_retrieval.vader
index 1a1e2580..265738fb 100644
--- a/test/test_linter_retrieval.vader
+++ b/test/test_linter_retrieval.vader
@@ -42,6 +42,30 @@ Execute (You should be able to select linters with a buffer option):
AssertEqual [g:testlinter1], ale#linter#Get('testft')
+Execute (b:ale_linters should work when set to a List):
+ call ale#linter#Define('testft', g:testlinter1)
+ call ale#linter#Define('testft', g:testlinter2)
+ let g:ale_linters = {'testft': ['testlinter1', 'testlinter2']}
+ let b:ale_linters = ['testlinter1']
+
+ AssertEqual [g:testlinter1], ale#linter#Get('testft')
+
+Execute (b:ale_linters should disable all linters when set to an empty List):
+ call ale#linter#Define('testft', g:testlinter1)
+ call ale#linter#Define('testft', g:testlinter2)
+ let g:ale_linters = {'testft': ['testlinter1', 'testlinter2']}
+ let b:ale_linters = []
+
+ AssertEqual [], ale#linter#Get('testft')
+
+Execute (b:ale_linters should enable all available linters when set to 'all'):
+ call ale#linter#Define('testft', g:testlinter1)
+ call ale#linter#Define('testft', g:testlinter2)
+ let g:ale_linters = {'testft': ['testlinter1']}
+ let b:ale_linters = 'all'
+
+ AssertEqual [g:testlinter1, g:testlinter2], ale#linter#Get('testft')
+
Execute (Buffer settings shouldn't completely replace global settings):
call ale#linter#Define('testft', g:testlinter1)
call ale#linter#Define('testft', g:testlinter2)