Add a function for computing the number of arguments for a function
This commit is contained in:
parent
eeea72e167
commit
e4d886d4a7
@ -123,3 +123,18 @@ function! ale#util#GetMatches(lines, patterns) abort
|
|||||||
|
|
||||||
return l:matches
|
return l:matches
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
" Given the name of a function, a Funcref, or a lambda, return the number
|
||||||
|
" of named arguments for a function.
|
||||||
|
function! ale#util#FunctionArgCount(function) abort
|
||||||
|
let l:Function = ale#util#GetFunction(a:function)
|
||||||
|
|
||||||
|
redir => l:output
|
||||||
|
silent function Function
|
||||||
|
redir END
|
||||||
|
|
||||||
|
let l:match = matchstr(split(l:output, "\n")[0], '\v\([^)]+\)')[1:-2]
|
||||||
|
let l:arg_list = filter(split(l:match, ', '), 'v:val !=# ''...''')
|
||||||
|
|
||||||
|
return len(l:arg_list)
|
||||||
|
endfunction
|
||||||
|
41
test/test_function_arg_count.vader
Normal file
41
test/test_function_arg_count.vader
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
Before:
|
||||||
|
function! Func0()
|
||||||
|
endfunction
|
||||||
|
function! Func1(x)
|
||||||
|
endfunction
|
||||||
|
function! Func2(x,y)
|
||||||
|
endfunction
|
||||||
|
function! Func3(x,y,z)
|
||||||
|
endfunction
|
||||||
|
function! Func3a(x,y,z,...)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
After:
|
||||||
|
delfunction Func0
|
||||||
|
delfunction Func1
|
||||||
|
delfunction Func2
|
||||||
|
delfunction Func3
|
||||||
|
delfunction Func3a
|
||||||
|
|
||||||
|
Execute(We should be able to compute the argument count for function names):
|
||||||
|
AssertEqual 0, ale#util#FunctionArgCount('Func0')
|
||||||
|
AssertEqual 1, ale#util#FunctionArgCount('Func1')
|
||||||
|
AssertEqual 2, ale#util#FunctionArgCount('Func2')
|
||||||
|
AssertEqual 3, ale#util#FunctionArgCount('Func3')
|
||||||
|
AssertEqual 3, ale#util#FunctionArgCount('Func3a')
|
||||||
|
|
||||||
|
Execute(We should be able to compute the argument count for Funcrefs):
|
||||||
|
AssertEqual 0, ale#util#FunctionArgCount(function('Func0'))
|
||||||
|
AssertEqual 1, ale#util#FunctionArgCount(function('Func1'))
|
||||||
|
AssertEqual 2, ale#util#FunctionArgCount(function('Func2'))
|
||||||
|
AssertEqual 3, ale#util#FunctionArgCount(function('Func3'))
|
||||||
|
AssertEqual 3, ale#util#FunctionArgCount(function('Func3a'))
|
||||||
|
|
||||||
|
Execute(We should be able to compute the argument count for lambdas):
|
||||||
|
if has('lambda')
|
||||||
|
AssertEqual 0, ale#util#FunctionArgCount({->1})
|
||||||
|
AssertEqual 1, ale#util#FunctionArgCount({x->1})
|
||||||
|
AssertEqual 2, ale#util#FunctionArgCount({x,y->1})
|
||||||
|
AssertEqual 3, ale#util#FunctionArgCount({x,y,z->1})
|
||||||
|
AssertEqual 3, ale#util#FunctionArgCount({x,y,z,...->1})
|
||||||
|
endif
|
Loading…
Reference in New Issue
Block a user