summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorw0rp <w0rp@users.noreply.github.com>2017-04-13 00:02:18 +0100
committerGitHub <noreply@github.com>2017-04-13 00:02:18 +0100
commite2287a42bce9080ed42b46cc9e8d544838236ec1 (patch)
tree8ff7245de52cf308c7012fae95dda354fa5c3aad
parent8afd914c6da19da217a5fb871f14d05e7b9d1a00 (diff)
parent475dd2e76a0fe84d6c804ee00ea5b04a1fbdcdd2 (diff)
downloadale-e2287a42bce9080ed42b46cc9e8d544838236ec1.zip
Merge pull request #463 from valtermro/multi-ft-aliases
Add support for multiple filetypes in filetype aliasing
-rw-r--r--autoload/ale/linter.vim35
-rw-r--r--doc/ale.txt8
-rw-r--r--test/test_linter_retrieval.vader14
3 files changed, 41 insertions, 16 deletions
diff --git a/autoload/ale/linter.vim b/autoload/ale/linter.vim
index 9a838ffa..eec9cf15 100644
--- a/autoload/ale/linter.vim
+++ b/autoload/ale/linter.vim
@@ -174,26 +174,25 @@ function! ale#linter#Define(filetype, linter) abort
call add(s:linters[a:filetype], l:new_linter)
endfunction
-function! ale#linter#GetAll(filetype) abort
- if a:filetype ==# ''
- " Empty filetype? Nothing to be done about that.
- return []
- endif
+function! ale#linter#GetAll(filetypes) abort
+ let l:combined_linters = []
- if has_key(s:linters, a:filetype)
- " We already loaded the linter files for this filetype, so stop here.
- return s:linters[a:filetype]
- endif
+ for l:filetype in a:filetypes
+ " Haven't we loaded the linter files for this filetype yet?
+ if !has_key(s:linters, l:filetype)
+ " So load it
+ execute 'silent! runtime! ale_linters/' . l:filetype . '/*.vim'
- " Load all linters for a given filetype.
- execute 'silent! runtime! ale_linters/' . a:filetype . '/*.vim'
+ " Still don't have the linter files? There must be occured an error
+ if !has_key(s:linters, l:filetype)
+ let s:linters[l:filetype] = []
+ endif
+ endif
- if !has_key(s:linters, a:filetype)
- " If we couldn't load any linters, let everyone know.
- let s:linters[a:filetype] = []
- endif
+ call extend(l:combined_linters, get(s:linters, l:filetype, []))
+ endfor
- return s:linters[a:filetype]
+ return l:combined_linters
endfunction
function! ale#linter#ResolveFiletype(original_filetype) abort
@@ -209,6 +208,10 @@ function! ale#linter#ResolveFiletype(original_filetype) abort
\ )
\)
+ if type(l:filetype) != type([])
+ return [l:filetype]
+ endif
+
return l:filetype
endfunction
diff --git a/doc/ale.txt b/doc/ale.txt
index 04d5c344..85409fc2 100644
--- a/doc/ale.txt
+++ b/doc/ale.txt
@@ -380,6 +380,14 @@ g:ale_linter_aliases *g:ale_linter_aliases*
not the aliased type (`'php'`). This allows an aliased type to run a
different set of linters from the type it is being mapped to.
+ Passing a list of filetypes is also supported. Say you want to lint
+ javascript and css embedded in HTML (using linters that support that).
+ You could alias `html` like so:
+
+ `let g:ale_linter_aliases = {'html': ['html', 'javascript', 'css']}`
+
+ Note that `html` itself was included as an alias. That is because aliases
+ will override the original linters for the aliased filetepe.
g:ale_linters *g:ale_linters*
diff --git a/test/test_linter_retrieval.vader b/test/test_linter_retrieval.vader
index e0d6c284..3f405a52 100644
--- a/test/test_linter_retrieval.vader
+++ b/test/test_linter_retrieval.vader
@@ -39,5 +39,19 @@ Execute (Define multiple linters for different filetypes):
Then (Linters for dot-seperated filetypes should be properly handled):
AssertEqual [g:testlinter1, g:testlinter2], ale#linter#Get('testft1.testft2')
+Execute (Define multiple aliases for a filetype):
+ call ale#linter#Define('testft1', g:testlinter1)
+ call ale#linter#Define('testft2', g:testlinter2)
+ let ale_linter_aliases = {'testft3': ['testft1', 'testft2']}
+Then (Linters should be transparently aliased):
+ AssertEqual [g:testlinter1, g:testlinter2], ale#linter#Get('testft3')
+
+Execute (Alias a filetype to itself plus another one):
+ call ale#linter#Define('testft1', g:testlinter1)
+ call ale#linter#Define('testft2', g:testlinter2)
+ let ale_linter_aliases = {'testft1': ['testft1', 'testft2']}
+Then (The original linters should still be there):
+ AssertEqual [g:testlinter1, g:testlinter2], ale#linter#Get('testft1')
+
Execute (Try to load a linter from disk):
AssertEqual [{'name': 'testlinter', 'output_stream': 'stdout', 'executable': 'testlinter', 'command': 'testlinter', 'callback': 'testCB', 'read_buffer': 1, 'lint_file': 0}], ale#linter#Get('testft')