New checker for python: prospector.

This commit is contained in:
LCD 47 2014-10-21 16:37:33 +03:00
parent 77c125170a
commit 72a7cb3898
2 changed files with 109 additions and 0 deletions

View File

@ -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)

View File

@ -0,0 +1,76 @@
"============================================================================
"File: prospector.vim
"Description: Syntax checking plugin for syntastic.vim
"Maintainer: LCD 47 <lcd047 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.
"
"============================================================================
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: