Allow ALEFix functions to be defined with only the buffer argument

This commit is contained in:
w0rp 2017-06-06 23:13:53 +01:00
parent e4d886d4a7
commit f30652a98f
3 changed files with 42 additions and 5 deletions

View File

@ -232,7 +232,10 @@ function! s:RunFixer(options) abort
let l:index = a:options.callback_index
while len(a:options.callback_list) > l:index
let l:result = call(a:options.callback_list[l:index], [l:buffer, copy(l:input)])
let l:Function = a:options.callback_list[l:index]
let l:result = ale#util#FunctionArgCount(l:Function) == 1
\ ? call(l:Function, [l:buffer])
\ : call(l:Function, [l:buffer, copy(l:input)])
if type(l:result) == type(0) && l:result == 0
" When `0` is returned, skip this item.

View File

@ -770,10 +770,16 @@ The values for `g:ale_fixers` can be a list of |String|, |Funcref|, or
|lambda| values. String values must either name a function, or a short name
for a function set in the ALE fixer registry.
Each function for fixing errors must accept two arguments `(buffer, lines)`,
representing the buffer being fixed and the lines to fix. The functions must
return either `0`, for changing nothing, a |List| for new lines to set, or a
|Dictionary| for describing a command to be run in the background.
Each function for fixing errors must accept either one argument `(buffer)` or
two arguments `(buffer, lines)`, representing the buffer being fixed and the
lines to fix. The functions must return either `0`, for changing nothing, a
|List| for new lines to set, or a |Dictionary| for describing a command to be
run in the background.
Functions receiving a variable number of arguments will not receive the second
argument `lines`. Functions should name two arguments if the `lines` argument
is desired. This is required to avoid unnecessary copying of the lines of
the buffers being checked.
When a |Dictionary| is returned for an |ALEFix| callback, the following keys
are supported for running the commands.

View File

@ -35,6 +35,10 @@ Before:
return {'command': 'cat - <(echo d)'}
endfunction
function CatLineOneArg(buffer) abort
return {'command': 'cat - <(echo d)'}
endfunction
function ReplaceWithTempFile(buffer, lines) abort
return {'command': 'echo x > %t', 'read_temporary_file': 1}
endfunction
@ -43,6 +47,10 @@ Before:
return ['a', 'b']
endfunction
function RemoveLastLineOneArg(buffer) abort
return ['a', 'b']
endfunction
function! TestCallback(buffer, output)
return [{'lnum': 1, 'col': 1, 'text': 'xxx'}]
endfunction
@ -65,8 +73,10 @@ After:
delfunction AddDollars
delfunction DoNothing
delfunction CatLine
delfunction CatLineOneArg
delfunction ReplaceWithTempFile
delfunction RemoveLastLine
delfunction RemoveLastLineOneArg
delfunction TestCallback
delfunction SetUpLinters
call ale#fix#registry#ResetToDefaults()
@ -315,3 +325,21 @@ Execute(ale#fix#InitBufferData() should set up the correct data):
\ 'should_save': 1,
\ },
\}, g:ale_fix_buffer_data
Execute(ALEFix simple functions should be able to accept one argument, the buffer):
let g:ale_fixers.testft = ['RemoveLastLineOneArg']
ALEFix
Expect(There should be only two lines):
a
b
Execute(ALEFix functions returning jobs should be able to accept one argument):
let g:ale_fixers.testft = ['CatLine']
ALEFix
Expect(An extra line should be added):
a
b
c
d