Fix #87 - Allow linter filetypes to be aliased
This commit is contained in:
parent
6911696616
commit
78bcf96e34
@ -55,10 +55,3 @@ call ale#linter#Define('javascript', {
|
|||||||
\ 'command': g:ale_javascript_eslint_executable . ' -f unix --stdin --stdin-filename %s',
|
\ 'command': g:ale_javascript_eslint_executable . ' -f unix --stdin --stdin-filename %s',
|
||||||
\ 'callback': 'ale_linters#javascript#eslint#Handle',
|
\ 'callback': 'ale_linters#javascript#eslint#Handle',
|
||||||
\})
|
\})
|
||||||
|
|
||||||
call ale#linter#Define('javascript.jsx', {
|
|
||||||
\ 'name': 'eslint',
|
|
||||||
\ 'executable': g:ale_javascript_eslint_executable,
|
|
||||||
\ 'command': g:ale_javascript_eslint_executable . ' -f unix --stdin --stdin-filename %s',
|
|
||||||
\ 'callback': 'ale_linters#javascript#eslint#Handle',
|
|
||||||
\})
|
|
||||||
|
@ -13,10 +13,3 @@ call ale#linter#Define('javascript', {
|
|||||||
\ 'command': 'jscs -r unix -n -',
|
\ 'command': 'jscs -r unix -n -',
|
||||||
\ 'callback': 'ale#handlers#HandleUnixFormatAsError',
|
\ 'callback': 'ale#handlers#HandleUnixFormatAsError',
|
||||||
\})
|
\})
|
||||||
|
|
||||||
call ale#linter#Define('javascript.jsx', {
|
|
||||||
\ 'name': 'jscs',
|
|
||||||
\ 'executable': 'jscs',
|
|
||||||
\ 'command': 'jscs -r unix -n -',
|
|
||||||
\ 'callback': 'ale#handlers#HandleUnixFormatAsError',
|
|
||||||
\})
|
|
||||||
|
@ -37,10 +37,3 @@ call ale#linter#Define('javascript', {
|
|||||||
\ 'command_callback': 'ale_linters#javascript#jshint#GetCommand',
|
\ 'command_callback': 'ale_linters#javascript#jshint#GetCommand',
|
||||||
\ 'callback': 'ale#handlers#HandleUnixFormatAsError',
|
\ 'callback': 'ale#handlers#HandleUnixFormatAsError',
|
||||||
\})
|
\})
|
||||||
|
|
||||||
call ale#linter#Define('javascript.jsx', {
|
|
||||||
\ 'name': 'jshint',
|
|
||||||
\ 'executable': g:ale_javascript_jshint_executable,
|
|
||||||
\ 'command_callback': 'ale_linters#javascript#jshint#GetCommand',
|
|
||||||
\ 'callback': 'ale#handlers#HandleUnixFormatAsError',
|
|
||||||
\})
|
|
||||||
|
@ -4,6 +4,21 @@
|
|||||||
|
|
||||||
let s:linters = {}
|
let s:linters = {}
|
||||||
|
|
||||||
|
" Default filetype aliaes.
|
||||||
|
" The user defined aliases will be merged with this Dictionary.
|
||||||
|
let s:default_ale_linter_aliases = {
|
||||||
|
\ 'javscript.jsx': 'javascript',
|
||||||
|
\ 'zsh': 'sh',
|
||||||
|
\ 'csh': 'sh',
|
||||||
|
\}
|
||||||
|
|
||||||
|
" Default linters to run for particular filetypes.
|
||||||
|
" The user defined linter selections will be merged with this Dictionary.
|
||||||
|
let s:default_ale_linters = {
|
||||||
|
\ 'zsh': ['shell'],
|
||||||
|
\ 'csh': ['shell'],
|
||||||
|
\}
|
||||||
|
|
||||||
function! ale#linter#Define(filetype, linter) abort
|
function! ale#linter#Define(filetype, linter) abort
|
||||||
if !has_key(s:linters, a:filetype)
|
if !has_key(s:linters, a:filetype)
|
||||||
let s:linters[a:filetype] = []
|
let s:linters[a:filetype] = []
|
||||||
@ -37,25 +52,19 @@ function! ale#linter#Define(filetype, linter) abort
|
|||||||
call add(s:linters[a:filetype], l:new_linter)
|
call add(s:linters[a:filetype], l:new_linter)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale#linter#Get(filetype) abort
|
function! s:LoadLinters(filetype) abort
|
||||||
if a:filetype ==# ''
|
if a:filetype ==# ''
|
||||||
" Empty filetype? Nothing to be done about that.
|
" Empty filetype? Nothing to be done about that.
|
||||||
return []
|
return []
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if has_key(s:linters, a:filetype)
|
if has_key(s:linters, a:filetype)
|
||||||
" We already loaded a linter, great!
|
" We already loaded the linter files for this filetype, so stop here.
|
||||||
return s:linters[a:filetype]
|
return s:linters[a:filetype]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if has_key(g:ale_linters, a:filetype)
|
" Load all linters for a given filetype.
|
||||||
" Filter loaded linters according to list of linters specified in option.
|
execute 'runtime! ale_linters/' . a:filetype . '/*.vim'
|
||||||
for l:linter in g:ale_linters[a:filetype]
|
|
||||||
execute 'runtime! ale_linters/' . a:filetype . '/' . l:linter . '.vim'
|
|
||||||
endfor
|
|
||||||
else
|
|
||||||
execute 'runtime! ale_linters/' . a:filetype . '/*.vim'
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !has_key(s:linters, a:filetype)
|
if !has_key(s:linters, a:filetype)
|
||||||
" If we couldn't load any linters, let everyone know.
|
" If we couldn't load any linters, let everyone know.
|
||||||
@ -64,3 +73,46 @@ function! ale#linter#Get(filetype) abort
|
|||||||
|
|
||||||
return s:linters[a:filetype]
|
return s:linters[a:filetype]
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! ale#linter#Get(original_filetype) abort
|
||||||
|
" Try and get an aliased file type either from the user's Dictionary, or
|
||||||
|
" our default Dictionary, otherwise use the filetype as-is.
|
||||||
|
let l:filetype = get(
|
||||||
|
\ g:ale_linter_aliases,
|
||||||
|
\ a:original_filetype,
|
||||||
|
\ get(
|
||||||
|
\ s:default_ale_linter_aliases,
|
||||||
|
\ a:original_filetype,
|
||||||
|
\ a:original_filetype
|
||||||
|
\ )
|
||||||
|
\)
|
||||||
|
|
||||||
|
" Try and get a list of linters to run, using the original file type,
|
||||||
|
" not the aliased filetype. We have some linters to limit by default,
|
||||||
|
" and users may define their own list of linters to run.
|
||||||
|
let l:linter_names = get(
|
||||||
|
\ g:ale_linters,
|
||||||
|
\ a:original_filetype,
|
||||||
|
\ get(
|
||||||
|
\ s:default_ale_linters,
|
||||||
|
\ a:original_filetype,
|
||||||
|
\ 'all'
|
||||||
|
\ )
|
||||||
|
\)
|
||||||
|
|
||||||
|
let l:all_linters = s:LoadLinters(l:filetype)
|
||||||
|
let l:combined_linters = []
|
||||||
|
|
||||||
|
if type(l:linter_names) == type('') && l:linter_names ==# 'all'
|
||||||
|
let l:combined_linters = l:all_linters
|
||||||
|
elseif type(l:linter_names) == type([])
|
||||||
|
" Select only the linters we or the user has specified.
|
||||||
|
for l:linter in l:all_linters
|
||||||
|
if index(l:linter_names, l:linter.name)
|
||||||
|
call add(l:combined_linters, l:linter)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
|
return l:combined_linters
|
||||||
|
endfunction
|
||||||
|
56
doc/ale.txt
56
doc/ale.txt
@ -80,22 +80,65 @@ The following languages and tools are supported.
|
|||||||
g:ale_linters *g:ale_linters*
|
g:ale_linters *g:ale_linters*
|
||||||
|
|
||||||
Type: |Dictionary|
|
Type: |Dictionary|
|
||||||
Default: unset
|
Default: `{}`
|
||||||
|
|
||||||
The |g:ale_linters| option sets a |Dictionary| mapping a filetype
|
The |g:ale_linters| option sets a |Dictionary| mapping a filetype
|
||||||
to a |List| of linter programs to be run when checking particular filetypes.
|
to a |List| of linter programs to be run when checking particular filetypes.
|
||||||
By default, this dictionary will not be set at all, and all possible
|
Only the filetypes specified in the dictionary will be limited in terms
|
||||||
linter programs will be run for a given filetype, if the linter programs
|
of which linters will be run.
|
||||||
are found to be |executable|.
|
|
||||||
|
|
||||||
|
This |Dictionary| will be merged with a default dictionary containing the
|
||||||
|
following values: >
|
||||||
|
|
||||||
|
{
|
||||||
|
\ 'zsh': ['shell'],
|
||||||
|
\ 'csh': ['shell'],
|
||||||
|
\}
|
||||||
|
<
|
||||||
This option can be used to enable only a particular set of linters for a
|
This option can be used to enable only a particular set of linters for a
|
||||||
file. For example, you can enable only 'eslint' for JavaScript files: >
|
file. For example, you can enable only 'eslint' for JavaScript files: >
|
||||||
let g:ale_linters = {'javascript': ['eslint']}
|
|
||||||
|
let g:ale_linters = {'javascript': ['eslint']}
|
||||||
<
|
<
|
||||||
If you want to disable all linters for a particular filetype, you can pass
|
If you want to disable all linters for a particular filetype, you can pass
|
||||||
an empty list of linters as the value: >
|
an empty list of linters as the value: >
|
||||||
let g:ale_linters = {'javascript': []}
|
|
||||||
|
let g:ale_linters = {'javascript': []}
|
||||||
<
|
<
|
||||||
|
All linters available for a given filetype can be enabled by using the
|
||||||
|
string `'all'`: >
|
||||||
|
|
||||||
|
let g:ale_linters = {'c': 'all'}
|
||||||
|
<
|
||||||
|
|
||||||
|
g:ale_linter_aliases *g:ale_linter_aliases*
|
||||||
|
|
||||||
|
Type: |Dictionary|
|
||||||
|
Default: `{}`
|
||||||
|
|
||||||
|
The |g:ale_linter_aliases| option can be used to set aliases from one
|
||||||
|
filetype to another. A given filetype can be mapped to use the linters
|
||||||
|
run for another given filetype.
|
||||||
|
|
||||||
|
This |Dictionary| will be merged with a default dictionary containing the
|
||||||
|
following values: >
|
||||||
|
|
||||||
|
{
|
||||||
|
\ 'javscript.jsx': 'javascript',
|
||||||
|
\ 'zsh': 'sh',
|
||||||
|
\ 'csh': 'sh',
|
||||||
|
\}
|
||||||
|
<
|
||||||
|
For example, if you wish to map a new filetype `'foobar'` to run the `'php'`
|
||||||
|
linters, you could set the following: >
|
||||||
|
|
||||||
|
let g:ale_linter_aliases = {'foobar': 'php'}
|
||||||
|
<
|
||||||
|
When combined with the |g:ale_linters| option, the original filetype
|
||||||
|
(`'foobar'`) will be used for determining which linters to run,
|
||||||
|
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.
|
||||||
|
|
||||||
|
|
||||||
g:ale_buffer_loclist_map *g:ale_buffer_loclist_map*
|
g:ale_buffer_loclist_map *g:ale_buffer_loclist_map*
|
||||||
|
|
||||||
@ -556,6 +599,7 @@ g:ale#util#stdin_wrapper *g:ale#util#stdin_wrapper*
|
|||||||
This variable names a wrapper script for sending stdin input to programs
|
This variable names a wrapper script for sending stdin input to programs
|
||||||
which cannot accept input via stdin. See |ale#linter#Define()| for more.
|
which cannot accept input via stdin. See |ale#linter#Define()| for more.
|
||||||
|
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
6. Special Thanks *ale-special-thanks*
|
6. Special Thanks *ale-special-thanks*
|
||||||
|
|
||||||
|
@ -30,9 +30,12 @@ let g:ale_buffer_sign_dummy_map = {}
|
|||||||
|
|
||||||
" User Configuration
|
" User Configuration
|
||||||
|
|
||||||
" This list configures which linters are enabled for which languages.
|
" This Dictionary configures which linters are enabled for which languages.
|
||||||
let g:ale_linters = get(g:, 'ale_linters', {})
|
let g:ale_linters = get(g:, 'ale_linters', {})
|
||||||
|
|
||||||
|
" This Dictionary allows users to set up filetype aliases for new filetypes.
|
||||||
|
let g:ale_linter_aliases = get(g:, 'ale_linter_aliases', {})
|
||||||
|
|
||||||
" This flag can be set with a number of milliseconds for delaying the
|
" This flag can be set with a number of milliseconds for delaying the
|
||||||
" execution of a linter when text is changed. The timeout will be set and
|
" execution of a linter when text is changed. The timeout will be set and
|
||||||
" cleared each time text is changed, so repeated edits won't trigger the
|
" cleared each time text is changed, so repeated edits won't trigger the
|
||||||
|
Loading…
Reference in New Issue
Block a user