From 131ec84e61aed029464805f069fe4d34f410c93e Mon Sep 17 00:00:00 2001 From: LCD 47 Date: Wed, 24 Jun 2015 10:25:54 +0300 Subject: [PATCH] New checker for reStructuredText: sphinx. --- README.markdown | 18 ++++---- plugin/syntastic.vim | 2 +- syntax_checkers/rst/sphinx.vim | 80 ++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 10 deletions(-) create mode 100644 syntax_checkers/rst/sphinx.vim diff --git a/README.markdown b/README.markdown index 6e4e97b5..b9e08c4e 100644 --- a/README.markdown +++ b/README.markdown @@ -55,15 +55,15 @@ compile their code or execute their script to find them. At the time of this writing, syntastic has checking plugins for ActionScript, Ada, API Blueprint, AppleScript, AsciiDoc, ASM, BEMHTML, Bro, Bourne shell, C, C++, C#, Cabal, Chef, CoffeeScript, Coco, Coq, CSS, Cucumber, CUDA, D, Dart, -DocBook, Dust, Elixir, Erlang, eRuby, Fortran, Gentoo metadata, GLSL, Go, -Haml, Haskell, Haxe, Handlebars, HSS, HTML, Java, JavaScript, JSON, JSX, LESS, -Lex, Limbo, LISP, LLVM intermediate language, Lua, Markdown, MATLAB, Mercury, -NASM, Nix, Objective-C, Objective-C++, OCaml, Perl, Perl POD, PHP, gettext -Portable Object, OS X and iOS property lists, Puppet, Python, R, Racket, Relax -NG, reStructuredText, RPM spec, Ruby, SASS/SCSS, Scala, Slim, SML, Tcl, TeX, -Texinfo, Twig, TypeScript, Vala, Verilog, VHDL, VimL, xHtml, XML, XSLT, YACC, -YAML, z80, Zope page templates, and zsh. See the [wiki][3] for details about -the corresponding supported checkers. +DocBook, Dust, Elixir, Erlang, eRuby, Fortran, Gentoo metadata, GLSL, Go, Haml, +Haskell, Haxe, Handlebars, HSS, HTML, Java, JavaScript, JSON, JSX, LESS, Lex, +Limbo, LISP, LLVM intermediate language, Lua, Markdown, MATLAB, Mercury, NASM, +Nix, Objective-C, Objective-C++, OCaml, Perl, Perl POD, PHP, gettext Portable +Object, OS X and iOS property lists, Puppet, Python, R, Racket, Relax NG, +reStructuredText, RPM spec, Ruby, SASS/SCSS, Scala, Slim, SML, Sphinx, Tcl, +TeX, Texinfo, Twig, TypeScript, Vala, Verilog, VHDL, VimL, xHtml, XML, XSLT, +YACC, YAML, z80, Zope page templates, and zsh. See the [wiki][3] for details +about the corresponding supported checkers. A number of third-party Vim plugins also provide checkers for syntastic, for example: [omnisharp-vim][25], [rust.vim][12], [syntastic-extras][26], diff --git a/plugin/syntastic.vim b/plugin/syntastic.vim index 148efacc..ff4c4574 100644 --- a/plugin/syntastic.vim +++ b/plugin/syntastic.vim @@ -19,7 +19,7 @@ if has('reltime') lockvar! g:_SYNTASTIC_START endif -let g:_SYNTASTIC_VERSION = '3.6.0-100' +let g:_SYNTASTIC_VERSION = '3.6.0-102' lockvar g:_SYNTASTIC_VERSION " Sanity checks {{{1 diff --git a/syntax_checkers/rst/sphinx.vim b/syntax_checkers/rst/sphinx.vim new file mode 100644 index 00000000..afbfc1c8 --- /dev/null +++ b/syntax_checkers/rst/sphinx.vim @@ -0,0 +1,80 @@ +"============================================================================ +"File: sphinx.vim +"Description: Syntax checking plugin for Sphinx reStructuredText files +"Maintainer: Buck Evan +"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:loaded_syntastic_rst_sphinx_checker") + finish +endif +let g:loaded_syntastic_rst_sphinx_checker = 1 + +let s:save_cpo = &cpo +set cpo&vim + +let s:sphinx_cache_location = syntastic#util#tmpdir() +lockvar s:sphinx_cache_location + +augroup syntastic + autocmd VimLeave * call syntastic#util#rmrf(s:sphinx_cache_location) +augroup END + +function! SyntaxCheckers_rst_sphinx_GetLocList() dict + + let srcdir = syntastic#util#var('rst_sphinx_source_dir') + call self.log('g:syntastic_rst_sphinx_source_dir =', srcdir) + if srcdir == '' + let config = findfile('conf.py', escape(expand('%:p:h', 1), ' ') . ';') + if config == '' || !filereadable(config) + call self.log('conf.py file not found') + return [] + endif + let srcdir = fnamemodify(config, ':p:h') + endif + + let confdir = syntastic#util#var('rst_sphinx_config_dir') + call self.log('g:syntastic_rst_sphinx_config_dir =', confdir) + if confdir == '' + let config = findfile('conf.py', escape(expand('%:p:h', 1), ' ') . ';') + let confdir = (config != '' && filereadable(config)) ? fnamemodify(config, ':p:h') : srcdir + endif + + let makeprg = self.makeprgBuild({ + \ 'args': '-n -E', + \ 'args_after': '-q -N -b pseudoxml -c ' . syntastic#util#shescape(confdir), + \ 'fname': syntastic#util#shescape(srcdir), + \ 'fname_after': syntastic#util#shescape(s:sphinx_cache_location) }) + + let errorformat = + \ '%E%f:%l: SEVER%t: %m,' . + \ '%f:%l: %tRROR: %m,' . + \ '%f:%l: %tARNING: %m,' . + \ '%E%f:: SEVER%t: %m,' . + \ '%f:: %tRROR: %m,' . + \ '%f:: %tARNING: %m,' . + \ '%trror: %m,' . + \ '%+C%.%#' + + let loclist = SyntasticMake({ + \ 'makeprg': makeprg, + \ 'errorformat': errorformat, + \ 'returns': [0] }) + + return loclist +endfunction + +call g:SyntasticRegistry.CreateAndRegisterChecker({ + \ 'filetype': 'rst', + \ 'name': 'sphinx', + \ 'exec': 'sphinx-build' }) + +let &cpo = s:save_cpo +unlet s:save_cpo + +" vim: set sw=4 sts=4 et fdm=marker: