add a makeprg builder
The problem --- Some people want to change the syntax checker args and/or executable. Currently they have to create their own checker to do this. Solution --- Create a standard API for building a makeprg that allows users to set global variables to override the exe or args. This API is in use in the coffee and python/flake8 checkers - as proofs of concept. So, if the user wanted to change the args that get passed to `flake8` they can now set `let g:syntastic_python_flake8_args="--foo --bar"` in their vimrc. Similarly they could set `let g:syntastic_python_flake8_exe='python foo.py'`
This commit is contained in:
parent
5fbe86db7b
commit
10c845d1f5
65
autoload/syntastic/makeprg.vim
Normal file
65
autoload/syntastic/makeprg.vim
Normal file
@ -0,0 +1,65 @@
|
||||
if exists("g:loaded_syntastic_makeprg_autoload")
|
||||
finish
|
||||
endif
|
||||
let g:loaded_syntastic_makeprg_autoload = 1
|
||||
|
||||
function! syntastic#makeprg#build(opts)
|
||||
let opts = copy(a:opts)
|
||||
|
||||
if !has_key(opts, 'args')
|
||||
let opts['args'] = ''
|
||||
endif
|
||||
|
||||
if !has_key(opts, 'subchecker')
|
||||
let opts['subchecker'] = ''
|
||||
endif
|
||||
|
||||
let builder = s:MakeprgBuilder.New(opts['exe'], opts['args'], opts['subchecker'])
|
||||
return builder.makeprg()
|
||||
endfunction
|
||||
|
||||
let s:MakeprgBuilder = {}
|
||||
|
||||
function! s:MakeprgBuilder.New(exe, args, subchecker)
|
||||
let newObj = copy(self)
|
||||
let newObj._exe = a:exe
|
||||
let newObj._args = a:args
|
||||
let newObj._subchecker = a:subchecker
|
||||
return newObj
|
||||
endfunction
|
||||
|
||||
function! s:MakeprgBuilder.makeprg()
|
||||
return join([self.exe(), self.args(), self.fname()])
|
||||
endfunction
|
||||
|
||||
function! s:MakeprgBuilder.exe()
|
||||
if self.optExists('exe')
|
||||
return {self.optName('exe')}
|
||||
endif
|
||||
|
||||
return self._exe
|
||||
endfunction
|
||||
|
||||
function! s:MakeprgBuilder.args()
|
||||
if exists('g:syntastic_' . &ft . '_args')
|
||||
return g:syntastic_{&ft}_args
|
||||
endif
|
||||
|
||||
return self._args
|
||||
endfunction
|
||||
|
||||
function! s:MakeprgBuilder.fname()
|
||||
return shellescape(expand("%"))
|
||||
endfunction
|
||||
|
||||
function! s:MakeprgBuilder.optExists(name)
|
||||
return exists(self.optName(a:name))
|
||||
endfunction
|
||||
|
||||
function! s:MakeprgBuilder.optName(name)
|
||||
let setting = "g:syntastic_" . &ft
|
||||
if !empty(self._subchecker)
|
||||
let setting .= '_' . self._subchecker
|
||||
endif
|
||||
return setting . '_' . a:name
|
||||
endfunction
|
@ -21,7 +21,9 @@ endif
|
||||
|
||||
|
||||
function! SyntaxCheckers_coffee_GetLocList()
|
||||
let makeprg = 'coffee -c -l -o /tmp '.shellescape(expand('%'))
|
||||
let makeprg = syntastic#makeprg#build({
|
||||
\ 'exe': 'coffee',
|
||||
\ 'args': '-c -l -o /tmp' })
|
||||
let errorformat = 'Syntax%trror: In %f\, %m on line %l,%EError: In %f\, Parse error on line %l: %m,%EError: In %f\, %m on line %l,%W%f(%l): lint warning: %m,%-Z%p^,%W%f(%l): warning: %m,%-Z%p^,%E%f(%l): SyntaxError: %m,%-Z%p^,%-G%.%#'
|
||||
|
||||
let coffee_results = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
|
||||
|
@ -22,7 +22,10 @@ function! SyntaxCheckers_python_GetHighlightRegex(i)
|
||||
endfunction
|
||||
|
||||
function! SyntaxCheckers_python_GetLocList()
|
||||
let makeprg = 'flake8 '.g:syntastic_python_checker_args.' '.shellescape(expand('%'))
|
||||
let makeprg = syntastic#makeprg#build({
|
||||
\ 'exe': 'flake8',
|
||||
\ 'args': g:syntastic_python_checker_args,
|
||||
\ 'subchecker': 'flake8' })
|
||||
let errorformat = '%E%f:%l: could not compile,%-Z%p^,%E%f:%l:%c: %m,%W%f:%l: %m,%-G%.%#'
|
||||
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
|
||||
endfunction
|
||||
|
Loading…
Reference in New Issue
Block a user