diff --git a/autoload/syntastic/preprocess.vim b/autoload/syntastic/preprocess.vim index 56998d26..275b2aa6 100644 --- a/autoload/syntastic/preprocess.vim +++ b/autoload/syntastic/preprocess.vim @@ -76,6 +76,39 @@ function! syntastic#preprocess#perl(errors) " {{{2 return syntastic#util#unique(out) endfunction " }}}2 +function! syntastic#preprocess#prospector(errors) " {{{2 + let true = 1 + let false = 0 + let null = '' + let errs = eval(join(a:errors, '')) + + let out = [] + let warn_issued = 0 + if type(errs) == type({}) && has_key(errs, 'messages') && type(errs['messages']) == type([]) + for e in errs['messages'] + if type(e) == type({}) + try + let msg = + \ e['locaton']['path'] . ':' . + \ e['location']['line'] . ':' . + \ (e['location']['character'] + 1) . ': ' . + \ e['code'] . ' ' . + \ e['message'] . ' ' . + \ '[' . e['source'] . ']' + call add(out, msg) + catch /\m^Vim\%((\a\+)\)\=:E716/ + if !warn_issued + call add(out, '.:0:0: unknown error format') + let warn_issued = 1 + endif + endtry + endif + endfor + endif + + return out +endfunction " }}}2 + function! syntastic#preprocess#rparse(errors) " {{{2 let errlist = copy(a:errors) diff --git a/syntax_checkers/python/prospector.vim b/syntax_checkers/python/prospector.vim new file mode 100644 index 00000000..cd3271e6 --- /dev/null +++ b/syntax_checkers/python/prospector.vim @@ -0,0 +1,76 @@ +"============================================================================ +"File: prospector.vim +"Description: Syntax checking plugin for syntastic.vim +"Maintainer: LCD 47 +"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_python_prospector_checker") + finish +endif +let g:loaded_syntastic_python_prospector_checker = 1 + +let s:save_cpo = &cpo +set cpo&vim + +function! SyntaxCheckers_python_prospector_GetLocList() dict + let base = syntastic#util#var('prospector_base_dir') + if base == '' + let base = expand('%:p:h') + let init = findfile('setup.py', base . ';') + if init == '' + let init = findfile('__init__.py', base . ';') + endif + if init != '' + let base = fnamemodify(init, '%:p:h') + endif + endif + + let makeprg = self.makeprgBuild({ + \ 'args': '--external-config merge', + \ 'args_after': '--messages-only --absolute-paths --die-on-tool-error --output-format json', + \ 'fname': syntastic#util#shescape(base) }) + + let errorformat = '%f:%l:%c: %m' + + let env = syntastic#util#isRunningWindows() ? {} : { 'TERM': 'dumb' } + + let loclist = SyntasticMake({ + \ 'makeprg': makeprg, + \ 'errorformat': errorformat, + \ 'env': env, + \ 'preprocess': 'prospector', + \ 'returns': [0, 1] }) + + for e in loclist + if e['text'] =~# '\v\[%(dodgy|mccabe|pep8|pep257|pyroma)\]$' + let e['subtype'] = 'Style' + endif + + if e['text'] =~# '\v\[pylint\]$' + let e['type'] = e['text'] =~? '\m^[CRW]' ? 'W' : 'E' + elseif e['text'] =~# '\v\[%(frosted|pep8)\]$' + let e['type'] = e['text'] =~? '\m^W' ? 'W' : 'E' + elseif e['text'] =~# '\v\[%(dodgy|pyroma|vulture)\]$' + let e['type'] = 'W' + else + let e['type'] = 'E' + endif + endfor + + return loclist +endfunction + +call g:SyntasticRegistry.CreateAndRegisterChecker({ + \ 'filetype': 'python', + \ 'name': 'prospector'}) + +let &cpo = s:save_cpo +unlet s:save_cpo + +" vim: set et sts=4 sw=4: