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

Execute(We should be able to compute the argument count autoload functions not yet loaded):
  AssertEqual 1, ale#util#FunctionArgCount(function('ale#fixers#yapf#Fix'))
  AssertEqual 1, ale#util#FunctionArgCount('ale#fixers#yapf#Fix')