summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorw0rp <devw0rp@gmail.com>2017-11-11 23:04:08 +0000
committerw0rp <devw0rp@gmail.com>2017-11-12 10:56:53 +0000
commit099df0af522fddda09b50fd9ffe1f66cab310607 (patch)
treedee4315e2c8ce97856c8a65d8b292de545822dee
parent365d023d0e5094b474b91d2ad72244ec5a13a08c (diff)
downloadale-099df0af522fddda09b50fd9ffe1f66cab310607.zip
#1108 Support selecting fixers with Lists
-rw-r--r--autoload/ale/fix.vim27
-rw-r--r--doc/ale.txt19
-rw-r--r--test/test_ale_fix.vader9
3 files changed, 43 insertions, 12 deletions
diff --git a/autoload/ale/fix.vim b/autoload/ale/fix.vim
index a57ad195..5a42b74f 100644
--- a/autoload/ale/fix.vim
+++ b/autoload/ale/fix.vim
@@ -332,18 +332,25 @@ function! s:RunFixer(options) abort
endfunction
function! s:GetCallbacks() abort
- let l:fixers = ale#Var(bufnr(''), 'fixers')
- let l:callback_list = []
+ if type(get(b:, 'ale_fixers')) is type([])
+ " Lists can be used for buffer-local variables only
+ let l:callback_list = b:ale_fixers
+ else
+ " buffer and global options can use dictionaries mapping filetypes to
+ " callbacks to run.
+ let l:fixers = ale#Var(bufnr(''), 'fixers')
+ let l:callback_list = []
- for l:sub_type in split(&filetype, '\.')
- let l:sub_type_callacks = get(l:fixers, l:sub_type, [])
+ for l:sub_type in split(&filetype, '\.')
+ let l:sub_type_callacks = get(l:fixers, l:sub_type, [])
- if type(l:sub_type_callacks) == type('')
- call add(l:callback_list, l:sub_type_callacks)
- else
- call extend(l:callback_list, l:sub_type_callacks)
- endif
- endfor
+ if type(l:sub_type_callacks) == type('')
+ call add(l:callback_list, l:sub_type_callacks)
+ else
+ call extend(l:callback_list, l:sub_type_callacks)
+ endif
+ endfor
+ endif
if empty(l:callback_list)
return []
diff --git a/doc/ale.txt b/doc/ale.txt
index 83a724f7..b070414a 100644
--- a/doc/ale.txt
+++ b/doc/ale.txt
@@ -492,6 +492,18 @@ upon some lines immediately, then run `eslint` from the ALE registry, and
then call a lambda function which will remove every single line comment
from the file.
+For buffer-local settings, such as in |g:ale_pattern_options| or in ftplugin
+files, a |List| may be used for configuring the fixers instead.
+>
+ " Same as the above, only a List can be used instead of a Dictionary.
+ let b:ale_fixers = [
+ \ 'DoSomething',
+ \ 'eslint',
+ \ {buffer, lines -> filter(lines, 'v:val !=~ ''^\s*//''')},
+ \]
+
+ ALEFix
+<
For convenience, a plug mapping is defined for |ALEFix|, so you can set up a
keybind easily for fixing files. >
@@ -696,6 +708,8 @@ g:ale_fixers *g:ale_fixers*
See |ale-fix| for more information.
This variable can be overridden with variables in each buffer.
+ `b:ale_fixers` can be set to a |List| of callbacks instead, which can be
+ more convenient.
g:ale_fix_on_save *g:ale_fix_on_save*
@@ -1001,14 +1015,15 @@ g:ale_pattern_options *g:ale_pattern_options*
buffer variables. This option can be set to automatically configure
different settings for different files. For example: >
+ " 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_fixers: ['eslint'],
\ },
\}
<
- The above example will match any filename ending in `.foo.js`, and use
- only `eslint` for checking those files by setting `b:ale_linters`.
+ See |b:ale_linters| and |b:ale_fixers| for information for those options.
Filenames are matched with |match()|, and patterns depend on the |magic|
setting, unless prefixed with the special escape sequences like `'\v'`,
diff --git a/test/test_ale_fix.vader b/test/test_ale_fix.vader
index ffe3d93b..ac6427ab 100644
--- a/test/test_ale_fix.vader
+++ b/test/test_ale_fix.vader
@@ -330,6 +330,15 @@ Expect(There should be only two lines):
a
b
+Execute(ALEFix should allow Lists to be used for buffer-local fixer settings):
+ let g:ale_fixers.testft = ['AddCarets', 'AddDollars']
+ let b:ale_fixers = ['RemoveLastLine']
+ ALEFix
+
+Expect(There should be only two lines):
+ a
+ b
+
Given testft (A file with three lines):
a
b