Fix #1930 - Finish ale_fix_on_save_ignore
* Implementation had a bug * Documentation added * Tests added
This commit is contained in:
parent
24d277384c
commit
59f8c35a2f
@ -270,14 +270,14 @@ endfunction
|
|||||||
function! s:IgnoreFixers(callback_list, filetype, config) abort
|
function! s:IgnoreFixers(callback_list, filetype, config) abort
|
||||||
if type(a:config) is v:t_list
|
if type(a:config) is v:t_list
|
||||||
let l:ignore_list = a:config
|
let l:ignore_list = a:config
|
||||||
|
else
|
||||||
|
let l:ignore_list = []
|
||||||
|
|
||||||
|
for l:part in split(a:filetype , '\.')
|
||||||
|
call extend(l:ignore_list, get(a:config, l:part, []))
|
||||||
|
endfor
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let l:ignore_list = []
|
|
||||||
|
|
||||||
for l:part in split(a:filetype , '\.')
|
|
||||||
call extend(l:ignore_list, get(a:config, l:part, []))
|
|
||||||
endfor
|
|
||||||
|
|
||||||
call filter(a:callback_list, 'index(l:ignore_list, v:val) < 0')
|
call filter(a:callback_list, 'index(l:ignore_list, v:val) < 0')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
40
doc/ale.txt
40
doc/ale.txt
@ -309,6 +309,9 @@ by default.
|
|||||||
|
|
||||||
|g:ale_fix_on_save| - Fix files when they are saved.
|
|g:ale_fix_on_save| - Fix files when they are saved.
|
||||||
|
|
||||||
|
Fixers can be disabled on save with |g:ale_fix_on_save_ignore|. They will
|
||||||
|
still be run when you manually run |ALEFix|.
|
||||||
|
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
5. Language Server Protocol Support *ale-lsp*
|
5. Language Server Protocol Support *ale-lsp*
|
||||||
@ -770,6 +773,43 @@ b:ale_fix_on_save *b:ale_fix_on_save*
|
|||||||
Fixing files can be disabled or enabled for individual buffers by setting
|
Fixing files can be disabled or enabled for individual buffers by setting
|
||||||
`b:ale_fix_on_save` to `0` or `1`.
|
`b:ale_fix_on_save` to `0` or `1`.
|
||||||
|
|
||||||
|
Some fixers can be excluded from being run automatically when you save files
|
||||||
|
with the |g:ale_fix_on_save_ignore| setting.
|
||||||
|
|
||||||
|
|
||||||
|
g:ale_fix_on_save_ignore *g:ale_fix_on_save_ignore*
|
||||||
|
b:ale_fix_on_save_ignore *b:ale_fix_on_save_ignore*
|
||||||
|
|
||||||
|
Type: |Dictionary| or |List|
|
||||||
|
Default: `{}`
|
||||||
|
|
||||||
|
Given a |Dictionary| mapping filetypes to |Lists| of fixers to ignore, or
|
||||||
|
just a |List| of fixers to ignore, exclude those fixers from being run
|
||||||
|
automatically when files are saved.
|
||||||
|
|
||||||
|
You can disable some fixers in your ftplugin file: >
|
||||||
|
|
||||||
|
" Disable fixers 'b' and 'c' when fixing on safe for this buffer.
|
||||||
|
let b:ale_fix_on_save_ignore = ['b', 'c']
|
||||||
|
" Alternatively, define ignore lists for different filetypes.
|
||||||
|
let b:ale_fix_on_save_ignore = {'foo': ['b'], 'bar': ['c']}
|
||||||
|
<
|
||||||
|
You can disable some fixers globally per filetype like so: >
|
||||||
|
|
||||||
|
let g:ale_fixers = {'foo': ['a', 'b'], 'bar': ['c', 'd']}
|
||||||
|
let g:ale_fix_on_save = 1
|
||||||
|
" For filetype `foo.bar`, only fixers 'b' and 'd' will be run on save.
|
||||||
|
let g:ale_fix_on_save_ignore = {'foo': ['a'], 'bar': ['c']}
|
||||||
|
" Alternatively, disable these fixers on save for all filetypes.
|
||||||
|
let g:ale_fix_on_save_ignore = ['a', 'c']
|
||||||
|
<
|
||||||
|
You can ignore fixers based on matching |Funcref| values too: >
|
||||||
|
|
||||||
|
let g:AddBar = {buffer, lines -> lines + ['bar']}
|
||||||
|
let g:ale_fixers = {'foo': g:AddBar}
|
||||||
|
" The lambda fixer will be ignored, as it will be found in the ignore list.
|
||||||
|
let g:ale_fix_on_save_ignore = [g:AddBar]
|
||||||
|
<
|
||||||
|
|
||||||
g:ale_history_enabled *g:ale_history_enabled*
|
g:ale_history_enabled *g:ale_history_enabled*
|
||||||
|
|
||||||
|
110
test/fix/test_ale_fix_ignore.vader
Normal file
110
test/fix/test_ale_fix_ignore.vader
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
Before:
|
||||||
|
Save g:ale_fixers
|
||||||
|
Save g:ale_fix_on_save
|
||||||
|
Save g:ale_fix_on_save_ignore
|
||||||
|
|
||||||
|
let g:ale_fix_on_save = 1
|
||||||
|
let g:ale_fixers = {'abc': ['a', 'b'], 'xyz': ['c', 'd']}
|
||||||
|
unlet! b:ale_fixers
|
||||||
|
unlet! b:ale_fix_on_save_ignore
|
||||||
|
|
||||||
|
function FixerA(buffer, lines) abort
|
||||||
|
return a:lines + ['a']
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function FixerB(buffer, lines) abort
|
||||||
|
return a:lines + ['b']
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function FixerC(buffer, lines) abort
|
||||||
|
return a:lines + ['c']
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function FixerD(buffer, lines) abort
|
||||||
|
return a:lines + ['d']
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
set filetype=abc.xyz
|
||||||
|
let g:test_filename = tempname()
|
||||||
|
execute 'noautocmd silent file ' . fnameescape(g:test_filename)
|
||||||
|
|
||||||
|
call ale#fix#registry#Add('a', 'FixerA', ['abc'], '')
|
||||||
|
call ale#fix#registry#Add('b', 'FixerB', ['abc'], '')
|
||||||
|
call ale#fix#registry#Add('c', 'FixerC', ['xyz'], '')
|
||||||
|
call ale#fix#registry#Add('d', 'FixerD', ['xyz'], '')
|
||||||
|
|
||||||
|
After:
|
||||||
|
Restore
|
||||||
|
|
||||||
|
if exists('g:test_filename') && filereadable(g:test_filename)
|
||||||
|
call delete(g:test_filename)
|
||||||
|
endif
|
||||||
|
|
||||||
|
unlet! b:ale_fixers
|
||||||
|
unlet! b:ale_fix_on_save_ignore
|
||||||
|
unlet! g:test_filename
|
||||||
|
|
||||||
|
delfunction FixerA
|
||||||
|
delfunction FixerB
|
||||||
|
delfunction FixerC
|
||||||
|
delfunction FixerD
|
||||||
|
|
||||||
|
call ale#fix#registry#ResetToDefaults()
|
||||||
|
|
||||||
|
Given abc.xyz (An empty file):
|
||||||
|
Execute(Ignoring with a filetype in a global Dictionary should work):
|
||||||
|
let g:ale_fix_on_save_ignore = {'abc': ['b'], 'xyz': ['c']}
|
||||||
|
|
||||||
|
call ale#events#SaveEvent(bufnr(''))
|
||||||
|
|
||||||
|
AssertEqual ['', 'a', 'd'], getline(1, '$')
|
||||||
|
|
||||||
|
Execute(Ignoring with a filetype in a global List should work):
|
||||||
|
let g:ale_fix_on_save_ignore = ['b', 'c']
|
||||||
|
|
||||||
|
call ale#events#SaveEvent(bufnr(''))
|
||||||
|
|
||||||
|
AssertEqual ['', 'a', 'd'], getline(1, '$')
|
||||||
|
|
||||||
|
Execute(Ignoring with a filetype in a local Dictionary should work):
|
||||||
|
let g:ale_fix_on_save_ignore = {'abc': ['b'], 'xyz': ['c']}
|
||||||
|
" The local Dictionary should entirely replace the global one.
|
||||||
|
let b:ale_fix_on_save_ignore = {'abc': ['b']}
|
||||||
|
|
||||||
|
call ale#events#SaveEvent(bufnr(''))
|
||||||
|
|
||||||
|
AssertEqual ['', 'a', 'c', 'd'], getline(1, '$')
|
||||||
|
|
||||||
|
Execute(Ignoring with a filetype in a local List should work):
|
||||||
|
let g:ale_fix_on_save_ignore = {'abc': ['b'], 'xyz': ['c']}
|
||||||
|
" The local List should entirely replace the global Dictionary.
|
||||||
|
let b:ale_fix_on_save_ignore = ['b']
|
||||||
|
|
||||||
|
call ale#events#SaveEvent(bufnr(''))
|
||||||
|
|
||||||
|
AssertEqual ['', 'a', 'c', 'd'], getline(1, '$')
|
||||||
|
|
||||||
|
Execute(Ignoring functions by reference with a Dictionary should work):
|
||||||
|
let g:ale_fixers = {
|
||||||
|
\ 'abc': [function('FixerA'), function('FixerB')],
|
||||||
|
\ 'xyz': [function('FixerC'), function('FixerD')],
|
||||||
|
\}
|
||||||
|
let b:ale_fix_on_save_ignore = {
|
||||||
|
\ 'abc': [function('FixerB')],
|
||||||
|
\ 'xyz': [function('FixerC')],
|
||||||
|
\}
|
||||||
|
|
||||||
|
call ale#events#SaveEvent(bufnr(''))
|
||||||
|
|
||||||
|
AssertEqual ['', 'a', 'd'], getline(1, '$')
|
||||||
|
|
||||||
|
Execute(Ignoring functions by reference with a List should work):
|
||||||
|
let g:ale_fixers = {
|
||||||
|
\ 'abc': [function('FixerA'), function('FixerB')],
|
||||||
|
\ 'xyz': [function('FixerC'), function('FixerD')],
|
||||||
|
\}
|
||||||
|
let b:ale_fix_on_save_ignore = [function('FixerB'), function('FixerC')]
|
||||||
|
|
||||||
|
call ale#events#SaveEvent(bufnr(''))
|
||||||
|
|
||||||
|
AssertEqual ['', 'a', 'd'], getline(1, '$')
|
Loading…
Reference in New Issue
Block a user