da78242123
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.
118 lines
4.7 KiB
VimL
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
|