Skip to content

Commit

Permalink
Move call to neomake#utils#ExpandArgs to neomake#compat#get_argv
Browse files Browse the repository at this point in the history
  • Loading branch information
blueyed committed Feb 23, 2018
1 parent 3ec9f99 commit 2cc4b43
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 17 deletions.
4 changes: 0 additions & 4 deletions autoload/neomake.vim
Original file line number Diff line number Diff line change
Expand Up @@ -698,10 +698,6 @@ function! s:command_maker_base._bind_args() abort dict
else
let args = copy(self.args)
endif
let args_is_list = type(args) == type([])
if args_is_list
let args = neomake#utils#ExpandArgs(args)
endif
let self.args = args
endfunction

Expand Down
17 changes: 10 additions & 7 deletions autoload/neomake/compat.vim
Original file line number Diff line number Diff line change
Expand Up @@ -163,17 +163,18 @@ if has('nvim')
if neomake#utils#IsRunningWindows()
function! neomake#compat#get_argv(exe, args, args_is_list) abort
if a:args_is_list
let args = neomake#utils#ExpandArgs(a:args)
" Convert it to a string to handle PATHEXT (e.g. .cmd files).
" This might be skipped when `exepath(a:exe)[-4:] == '.exe'`,
" but not worth it probably (and more fragile in the end?!).
return join(map(copy([a:exe] + a:args), 'neomake#utils#shellescape(v:val)'))
return join(map(copy([a:exe] + args), 'neomake#utils#shellescape(v:val)'))
endif
return a:exe . (empty(a:args) ? '' : ' '.a:args)
endfunction
else
function! neomake#compat#get_argv(exe, args, args_is_list) abort
if a:args_is_list
return [a:exe] + a:args
return [a:exe] + neomake#utils#ExpandArgs(a:args)
endif
return a:exe . (empty(a:args) ? '' : ' '.a:args)
endfunction
Expand All @@ -184,11 +185,12 @@ elseif neomake#has_async_support() " Vim-async.
function! neomake#compat#get_argv(exe, args, args_is_list) abort
let prefix = &shell.' '.&shellcmdflag.' '
if a:args_is_list
if a:exe ==# &shell && get(a:args, 0) ==# &shellcmdflag
let args = neomake#utils#ExpandArgs(a:args)
if a:exe ==# &shell && get(args, 0) ==# &shellcmdflag
" Remove already existing &shell/&shellcmdflag from e.g. NeomakeSh.
let argv = join(map(copy(a:args[1:]), 'neomake#utils#shellescape(v:val)'))
let argv = join(map(copy(args[1:]), 'neomake#utils#shellescape(v:val)'))
else
let argv = join(map(copy([a:exe] + a:args), 'neomake#utils#shellescape(v:val)'))
let argv = join(map(copy([a:exe] + args), 'neomake#utils#shellescape(v:val)'))
endif
else
let argv = a:exe . (empty(a:args) ? '' : ' '.a:args)
Expand All @@ -201,7 +203,7 @@ elseif neomake#has_async_support() " Vim-async.
else
function! neomake#compat#get_argv(exe, args, args_is_list) abort
if a:args_is_list
return [a:exe] + a:args
return [a:exe] + neomake#utils#ExpandArgs(a:args)
endif
" Use a shell to handle argv properly (Vim splits at spaces).
let argv = a:exe . (empty(a:args) ? '' : ' '.a:args)
Expand All @@ -212,7 +214,8 @@ else
" Vim (synchronously), via system().
function! neomake#compat#get_argv(exe, args, args_is_list) abort
if a:args_is_list
return join(map(copy([a:exe] + a:args), 'neomake#utils#shellescape(v:val)'))
let args = neomake#utils#ExpandArgs(a:args)
return join(map(copy([a:exe] + args), 'neomake#utils#shellescape(v:val)'))
endif
return a:exe . (empty(a:args) ? '' : ' '.a:args)
endfunction
Expand Down
8 changes: 5 additions & 3 deletions tests/stdin.vader
Original file line number Diff line number Diff line change
Expand Up @@ -118,15 +118,17 @@ Execute (stdin maker: supports_stdin can be a callback adding args):
Execute (stdin maker: supports_stdin can be a callback adding args, and setting tempfile_name):
let maker = {'exe': 'printf', 'args': ['%s\n']}
function maker.supports_stdin(jobinfo)
let self.args += ['added_arg']
let self.args += ['added_arg', '%:p']
let self.tempfile_name = 'custom_tempfile'
return 1
endfunction
let fname = tempname()
new
exe 'file '.fname
set buftype=nofile
CallNeomake 1, [maker]
AssertNeomakeMessage 'Using stdin for unnamed buffer.'
AssertEqual map(getloclist(0), 'v:val.text'), ['added_arg', 'custom_tempfile']
AssertNeomakeMessage 'Using stdin for unreadable buffer.'
AssertEqual map(getloclist(0), 'v:val.text'), ['added_arg', fname, 'custom_tempfile']
bwipe

Execute (stdin maker: supports_stdin can be a callback returning 0):
Expand Down
39 changes: 36 additions & 3 deletions tests/utils.vader
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,24 @@ Execute (neomake#utils#MakerFromCommand splits shell/shellcmdflag):
let bound_maker = neomake#GetMaker(maker).fn(jobinfo)
AssertEqual bound_maker._get_argv(jobinfo), expected_argv

Execute (neomake#utils#MakerFromCommand copies args):
new
exe 'file file_with_escaped_\%:p'
let maker = neomake#utils#MakerFromCommand('echo "%" 1')
let maker.tempfile_name = 'tempfile'
let jobinfo = NeomakeTestsFakeJobinfo()
let bound_maker = neomake#GetMaker(maker).fn(jobinfo)
let argv = bound_maker._get_argv(jobinfo)
let shell_argv = split(&shell) + split(&shellcmdflag)
if type(argv) == type([])
AssertEqual argv, shell_argv + ['echo "file_with_escaped_%:p" 1 tempfile']
else
AssertEqual argv, join(shell_argv)." 'echo \"file_with_escaped_%:p\" 1 tempfile'"
endif
let again_argv = bound_maker._get_argv(jobinfo)
AssertEqual argv, again_argv
bwipe

Execute (neomake#utils#MakerFromCommand appends args for file_mode (string)):
let maker = neomake#utils#MakerFromCommand('echo "%" 1')

Expand All @@ -427,7 +445,16 @@ Execute (neomake#utils#MakerFromCommand appends args for file_mode (string)):
AssertEqual bound_maker.remove_invalid_entries, 0

call bound_maker._bind_args()
AssertEqual bound_maker.args, shell_argv[1:] + ['echo "'.bufname('%').'" 1 '.fname]
AssertEqual bound_maker.args, shell_argv[1:] + ['echo "%" 1 '.fname]

let argv = bound_maker._get_argv(jobinfo)
if type(argv) == type([])
AssertEqual argv, shell_argv + ['echo "'.bufname('%').'" 1 '.fname]
else
AssertEqual argv, join(shell_argv)." 'echo \"".bufname('%').'" 1 '.fname."'"
endif
" self.args is not changed.
AssertEqual bound_maker.args, shell_argv[1:] + ['echo "%" 1 '.fname]

CallNeomake 0, [maker]
AssertEqual getqflist()[0].text, 'tests/fixtures/a filename with spaces 1'
Expand All @@ -454,8 +481,14 @@ Execute (neomake#utils#MakerFromCommand appends args for file_mode (list)):
AssertEqual bound_maker.exe, 'echo'
AssertEqual bound_maker.remove_invalid_entries, 0

call bound_maker._bind_args()
AssertEqual bound_maker.args, [bufname('%'), '1', fname]

let argv = bound_maker._get_argv(jobinfo)
if type(argv) == type([])
AssertEqual argv, ['echo', bufname('%'), '1', fname]
else
AssertEqual argv, printf("echo '%s' 1 '%s'", bufname('%'), fname)
endif
AssertEqual bound_maker.args, ['%', '1', fname]

CallNeomake 0, [maker]
AssertEqual getqflist()[0].text, 'tests/fixtures/a filename with spaces 1'
Expand Down

0 comments on commit 2cc4b43

Please sign in to comment.