refactor the javascript syntax checkers
The js syntax checker was 4 checkers stuffed into 1 file. Now it is broken down so that each checker is in its own file inside syntax_checkers/javascript/ while syntax_checkers/javascript.vim just determines which file to source. Change the names of the global js checker config variables so that they all start with "syntastic_javascript_". This is purely for namespacing. Remove some unneeded logic around the config variables too. Not sure how it got in there, but it was more confusing than helpful without offering any benefits...
This commit is contained in:
parent
8dba3fe0b5
commit
394d129b55
@ -1,6 +1,7 @@
|
||||
"============================================================================
|
||||
"File: javascript.vim
|
||||
"Description: Syntax checking plugin for syntastic.vim using jslin/jshint
|
||||
"Description: Figures out which javascript syntax checker (if any) to load
|
||||
" from the javascript directory.
|
||||
"Maintainer: Martin Grenfell <martin.grenfell at gmail dot com>
|
||||
"License: This program is free software. It comes without any warranty,
|
||||
" to the extent permitted by applicable law. You can redistribute
|
||||
@ -8,16 +9,10 @@
|
||||
" Want To Public License, Version 2, as published by Sam Hocevar.
|
||||
" See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
"
|
||||
" Added changes from Matthew Kitt's javascript.vim to support jshint.
|
||||
"
|
||||
" Use g:syntastic_javascript_checker option to specify which jslint executable
|
||||
" should be used (see below for a list of supported checkers).
|
||||
" If g:syntastic_javascript_checker is not set, just use the first syntax
|
||||
" checker that we find installed.
|
||||
"
|
||||
" Some work could be done here to remove the duplication of the *_conf
|
||||
" variables. A single variable could be used here.
|
||||
"
|
||||
"============================================================================
|
||||
if exists("loaded_javascript_syntax_checker")
|
||||
finish
|
||||
@ -26,92 +21,21 @@ let loaded_javascript_syntax_checker = 1
|
||||
|
||||
let s:supported_checkers = ["gjslint", "jslint", "jsl", "jshint"]
|
||||
|
||||
let s:checker = ""
|
||||
function! s:load_checker(checker)
|
||||
exec "runtime syntax_checkers/javascript/" . a:checker . ".vim"
|
||||
endfunction
|
||||
|
||||
if exists("g:syntastic_javascript_checker")
|
||||
let s:checker = g:syntastic_javascript_checker
|
||||
if !executable(s:checker) || index(s:supported_checkers, s:checker) == -1
|
||||
if index(s:supported_checkers, g:syntastic_javascript_checker) != -1 && executable(g:syntastic_javascript_checker)
|
||||
call s:load_checker(g:syntastic_javascript_checker)
|
||||
else
|
||||
echoerr "Javascript syntax not supported or not installed."
|
||||
endif
|
||||
else
|
||||
" Use whichever syntax checker we find installed first
|
||||
if executable("gjslint")
|
||||
let s:checker = "gjslint"
|
||||
elseif executable("jslint")
|
||||
let s:checker = "jslint"
|
||||
elseif executable("jsl")
|
||||
let s:checker = "jsl"
|
||||
elseif executable("jshint")
|
||||
let s:checker = "jshint"
|
||||
endif
|
||||
endif
|
||||
|
||||
if s:checker == "gjslint"
|
||||
if !exists("g:syntastic_gjslint_conf")
|
||||
let g:syntastic_gjslint_conf = ""
|
||||
endif
|
||||
|
||||
function! SyntaxCheckers_javascript_GetLocList()
|
||||
if empty(g:syntastic_gjslint_conf)
|
||||
let gjslintconf = ""
|
||||
else
|
||||
let gjslintconf = g:syntastic_gjslint_conf
|
||||
endif
|
||||
let makeprg = "gjslint" . gjslintconf . " --nosummary --unix_mode --nodebug_indentation --nobeep " . shellescape(expand('%'))
|
||||
let errorformat="%f:%l:(New Error -%\\?\%n) %m,%f:%l:(-%\\?%n) %m,%-G1 files checked, no errors found.,%-G%.%#"
|
||||
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
|
||||
endfunction
|
||||
|
||||
elseif s:checker == "jslint"
|
||||
if !exists("g:syntastic_jslint_conf")
|
||||
let g:syntastic_jslint_conf = ""
|
||||
endif
|
||||
|
||||
function! SyntaxCheckers_javascript_HighlightTerm(error)
|
||||
let unexpected = matchstr(a:error['text'], 'Expected.*and instead saw \'\zs.*\ze\'')
|
||||
if len(unexpected) < 1 | return '' | end
|
||||
return '\V'.split(unexpected, "'")[1]
|
||||
endfunction
|
||||
|
||||
function! SyntaxCheckers_javascript_GetLocList()
|
||||
if empty(g:syntastic_jslint_conf)
|
||||
let jslintconf = ""
|
||||
else
|
||||
let jslintconf = g:syntastic_jslint_conf
|
||||
endif
|
||||
|
||||
let makeprg = "jslint" . jslintconf . " " . shellescape(expand('%'))
|
||||
let errorformat=' %#%n %l\,%c: %m,%-G%.%#'
|
||||
let errors = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat, 'defaults': {'bufnr': bufnr("")} })
|
||||
|
||||
call SyntasticHighlightErrors(errors, function('SyntaxCheckers_javascript_HighlightTerm'))
|
||||
|
||||
return errors
|
||||
endfunction
|
||||
|
||||
elseif s:checker == "jsl"
|
||||
if !exists("g:syntastic_jsl_conf")
|
||||
let g:syntastic_jsl_conf = ""
|
||||
endif
|
||||
|
||||
function! SyntaxCheckers_javascript_GetLocList()
|
||||
if empty(g:syntastic_jsl_conf)
|
||||
let jslconf = ""
|
||||
else
|
||||
let jslconf = " -conf " . g:syntastic_jsl_conf
|
||||
endif
|
||||
let makeprg = "jsl" . jslconf . " -nologo -nofilelisting -nosummary -nocontext -process ".shellescape(expand('%'))
|
||||
let errorformat='%W%f(%l): lint warning: %m,%-Z%p^,%W%f(%l): warning: %m,%-Z%p^,%E%f(%l): SyntaxError: %m,%-Z%p^,%-G'
|
||||
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
|
||||
endfunction
|
||||
|
||||
elseif s:checker == 'jshint'
|
||||
function! SyntaxCheckers_javascript_GetLocList()
|
||||
if exists('s:config')
|
||||
let makeprg = 'jshint ' . shellescape(expand("%")) . ' --config ' . s:config
|
||||
else
|
||||
let makeprg = 'jshint ' . shellescape(expand("%"))
|
||||
endif
|
||||
let errorformat = '%ELine %l:%c,%Z\\s%#Reason: %m,%C%.%#,%f: line %l\, col %c\, %m,%-G%.%#'
|
||||
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat, 'defaults': {'bufnr': bufnr('')} })
|
||||
endfunction
|
||||
for checker in s:supported_checkers
|
||||
if executable(checker)
|
||||
call s:load_checker(checker)
|
||||
break
|
||||
endif
|
||||
endfor
|
||||
endif
|
||||
|
20
syntax_checkers/javascript/gjslint.vim
Normal file
20
syntax_checkers/javascript/gjslint.vim
Normal file
@ -0,0 +1,20 @@
|
||||
"============================================================================
|
||||
"File: gjslint.vim
|
||||
"Description: Javascript syntax checker - using gjslint
|
||||
"Maintainer: Martin Grenfell <martin.grenfell at gmail dot com>
|
||||
"License: This program is free software. It comes without any warranty,
|
||||
" to the extent permitted by applicable law. You can redistribute
|
||||
" it and/or modify it under the terms of the Do What The Fuck You
|
||||
" Want To Public License, Version 2, as published by Sam Hocevar.
|
||||
" See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
"============================================================================
|
||||
if !exists("g:syntastic_javascript_gjslint_conf")
|
||||
let g:syntastic_javascript_gjslint_conf = ""
|
||||
endif
|
||||
|
||||
function! SyntaxCheckers_javascript_GetLocList()
|
||||
let makeprg = "gjslint " . g:syntastic_javascript_gjslint_conf . " --nosummary --unix_mode --nodebug_indentation --nobeep " . shellescape(expand('%'))
|
||||
let errorformat="%f:%l:(New Error -%\\?\%n) %m,%f:%l:(-%\\?%n) %m,%-G1 files checked, no errors found.,%-G%.%#"
|
||||
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
|
||||
endfunction
|
||||
|
19
syntax_checkers/javascript/jshint.vim
Normal file
19
syntax_checkers/javascript/jshint.vim
Normal file
@ -0,0 +1,19 @@
|
||||
"============================================================================
|
||||
"File: jshint.vim
|
||||
"Description: Javascript syntax checker - using jshint
|
||||
"Maintainer: Martin Grenfell <martin.grenfell at gmail dot com>
|
||||
"License: This program is free software. It comes without any warranty,
|
||||
" to the extent permitted by applicable law. You can redistribute
|
||||
" it and/or modify it under the terms of the Do What The Fuck You
|
||||
" Want To Public License, Version 2, as published by Sam Hocevar.
|
||||
" See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
"============================================================================
|
||||
if !exists("g:syntastic_javascript_jshint_conf")
|
||||
let g:syntastic_javascript_jshint_conf = ""
|
||||
endif
|
||||
|
||||
function! SyntaxCheckers_javascript_GetLocList()
|
||||
let makeprg = 'jshint ' . shellescape(expand("%")) . ' --config ' . g:syntastic_javascript_jshint_conf
|
||||
let errorformat = '%ELine %l:%c,%Z\\s%#Reason: %m,%C%.%#,%f: line %l\, col %c\, %m,%-G%.%#'
|
||||
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat, 'defaults': {'bufnr': bufnr('')} })
|
||||
endfunction
|
20
syntax_checkers/javascript/jsl.vim
Normal file
20
syntax_checkers/javascript/jsl.vim
Normal file
@ -0,0 +1,20 @@
|
||||
"============================================================================
|
||||
"File: jsl.vim
|
||||
"Description: Javascript syntax checker - using jsl
|
||||
"Maintainer: Martin Grenfell <martin.grenfell at gmail dot com>
|
||||
"License: This program is free software. It comes without any warranty,
|
||||
" to the extent permitted by applicable law. You can redistribute
|
||||
" it and/or modify it under the terms of the Do What The Fuck You
|
||||
" Want To Public License, Version 2, as published by Sam Hocevar.
|
||||
" See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
"============================================================================
|
||||
if !exists("g:syntastic_javascript_jsl_conf")
|
||||
let g:syntastic_javascript_jsl_conf = ""
|
||||
endif
|
||||
|
||||
function! SyntaxCheckers_javascript_GetLocList()
|
||||
let makeprg = "jsl " . g:syntastic_javascript_jsl_conf . " -nologo -nofilelisting -nosummary -nocontext -process ".shellescape(expand('%'))
|
||||
let errorformat='%W%f(%l): lint warning: %m,%-Z%p^,%W%f(%l): warning: %m,%-Z%p^,%E%f(%l): SyntaxError: %m,%-Z%p^,%-G'
|
||||
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
|
||||
endfunction
|
||||
|
30
syntax_checkers/javascript/jslint.vim
Normal file
30
syntax_checkers/javascript/jslint.vim
Normal file
@ -0,0 +1,30 @@
|
||||
"============================================================================
|
||||
"File: jslint.vim
|
||||
"Description: Javascript syntax checker - using jslint
|
||||
"Maintainer: Martin Grenfell <martin.grenfell at gmail dot com>
|
||||
"License: This program is free software. It comes without any warranty,
|
||||
" to the extent permitted by applicable law. You can redistribute
|
||||
" it and/or modify it under the terms of the Do What The Fuck You
|
||||
" Want To Public License, Version 2, as published by Sam Hocevar.
|
||||
" See http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
"============================================================================
|
||||
if !exists("g:syntastic_javascript_jslint_conf")
|
||||
let g:syntastic_javascript_jslint_conf = ""
|
||||
endif
|
||||
|
||||
function! SyntaxCheckers_javascript_HighlightTerm(error)
|
||||
let unexpected = matchstr(a:error['text'], 'Expected.*and instead saw \'\zs.*\ze\'')
|
||||
if len(unexpected) < 1 | return '' | end
|
||||
return '\V'.split(unexpected, "'")[1]
|
||||
endfunction
|
||||
|
||||
function! SyntaxCheckers_javascript_GetLocList()
|
||||
let makeprg = "jslint" . g:syntastic_javascript_jslint_conf . " " . shellescape(expand('%'))
|
||||
let errorformat=' %#%n %l\,%c: %m,%-G%.%#'
|
||||
let errors = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat, 'defaults': {'bufnr': bufnr("")} })
|
||||
|
||||
call SyntasticHighlightErrors(errors, function('SyntaxCheckers_javascript_HighlightTerm'))
|
||||
|
||||
return errors
|
||||
endfunction
|
||||
|
Loading…
x
Reference in New Issue
Block a user