diff --git a/doc/syntastic.txt b/doc/syntastic.txt index 32ad4e47..3c77f88e 100644 --- a/doc/syntastic.txt +++ b/doc/syntastic.txt @@ -344,6 +344,8 @@ Next - auto close location list when leaving buffer. (millermedeiros) - updates/fixes to existing checkers: - javascript (millermedeiros) + - Support for new filetypes: + - JSON (millermedeiros, tocer) 2.1.0 - when the cursor is on a line containing an error, echo the @@ -440,6 +442,7 @@ Next Thanks to the following people for testing, bug reports, patches etc. They own, hard. + tocer James Rowe (JNRowe) Zhai Cai Matt Butcher (technosophos) diff --git a/syntax_checkers/json.vim b/syntax_checkers/json.vim new file mode 100644 index 00000000..c528b1e7 --- /dev/null +++ b/syntax_checkers/json.vim @@ -0,0 +1,41 @@ +"============================================================================ +"File: json.vim +"Description: Figures out which json syntax checker (if any) to load +" from the json directory. +"Maintainer: Miller Medeiros +"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. +" +" Use g:syntastic_json_checker option to specify which jsonlint executable +" should be used (see below for a list of supported checkers). +" If g:syntastic_json_checker is not set, just use the first syntax +" checker that we find installed. +"============================================================================ +if exists("loaded_json_syntax_checker") + finish +endif +let loaded_json_syntax_checker = 1 + +let s:supported_checkers = ["jsonlint", "jsonval"] + +function! s:load_checker(checker) + exec "runtime syntax_checkers/json/" . a:checker . ".vim" +endfunction + +if exists("g:syntastic_json_checker") + if index(s:supported_checkers, g:syntastic_json_checker) != -1 && executable(g:syntastic_json_checker) + call s:load_checker(g:syntastic_json_checker) + else + echoerr "JSON syntax not supported or not installed." + endif +else + for checker in s:supported_checkers + if executable(checker) + call s:load_checker(checker) + break + endif + endfor +endif diff --git a/syntax_checkers/json/jsonlint.vim b/syntax_checkers/json/jsonlint.vim new file mode 100644 index 00000000..6e4a4c0a --- /dev/null +++ b/syntax_checkers/json/jsonlint.vim @@ -0,0 +1,16 @@ +"============================================================================ +"File: jsonlint.vim +"Description: JSON syntax checker - using jsonlint +"Maintainer: Miller Medeiros +"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. +"============================================================================ + +function! SyntaxCheckers_json_GetLocList() + let makeprg = 'jsonlint ' . shellescape(expand("%")) . ' --compact' + 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 diff --git a/syntax_checkers/json/jsonval.vim b/syntax_checkers/json/jsonval.vim new file mode 100644 index 00000000..f288039a --- /dev/null +++ b/syntax_checkers/json/jsonval.vim @@ -0,0 +1,17 @@ +"============================================================================ +"File: jsonval.vim +"Description: JSON syntax checker - using jsonval +"Maintainer: Miller Medeiros +"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. +"============================================================================ + +function! SyntaxCheckers_json_GetLocList() + " based on https://gist.github.com/1196345 + let makeprg = 'jsonval '. shellescape(expand('%')) + let errorformat = '%E%f:\ %m\ at\ line\ %l,%-G%.%#' + return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat, 'defaults': {'bufnr': bufnr('')} }) +endfunction