syntastic/syntax_checkers/javascript.vim
Martin Grenfell da78242123 add an option to SyntasticMake to specify defaults
Many of the syntax checkers were setting the 'bufnr' key for each
error manually and one was setting 'text' if it didnt exist too.

Add the 'defaults' option to SyntasticMake to set default values in the
returned error list - it only sets values if they are empty.
2011-12-09 13:47:42 +00:00

118 lines
4.7 KiB
VimL

"============================================================================
"File: javascript.vim
"Description: Syntax checking plugin for syntastic.vim using jslin/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.
"
" 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
endif
let loaded_javascript_syntax_checker = 1
let s:supported_checkers = ["gjslint", "jslint", "jsl", "jshint"]
let s:checker = ""
if exists("g:syntastic_javascript_checker")
let s:checker = g:syntastic_javascript_checker
if !executable(s:checker) || index(s:supported_checkers, s:checker) == -1
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
endif