syntastic/syntax_checkers/php.vim
2013-01-20 13:48:58 +00:00

97 lines
3.5 KiB
VimL

"============================================================================
"File: php.vim
"Description: Syntax checking plugin for syntastic.vim
"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.
"
"============================================================================
"
"This syntax checker is composed of three checkers:
" - php -l
" - phpcs (see http://pear.php.net/package/PHP_CodeSniffer)
" - phpmd (see http://phpmd.org)
"
"If any of these checkers are installed then they will be used. Phpcs and
"Phpmd are 'style checkers' and will only be called if `php -l` doesnt find
"any syntax errors.
"
"There are options below to config and disable phpcs and phpmd.
"bail if the user doesnt have php installed
if !executable("php")
finish
endif
"Support passing configuration directives to phpcs
if !exists("g:syntastic_phpcs_conf")
let g:syntastic_phpcs_conf = ""
endif
if !exists("g:syntastic_phpcs_disable") || !executable('phpcs')
let g:syntastic_phpcs_disable = 0
endif
if !exists("g:syntastic_phpmd_disable") || !executable('phpmd')
let g:syntastic_phpmd_disable = 0
endif
"Support passing selected rules to phpmd
if !exists("g:syntastic_phpmd_rules")
let g:syntastic_phpmd_rules = "codesize,design,unusedcode,naming"
endif
function! SyntaxCheckers_php_GetHighlightRegex(item)
let unexpected = matchstr(a:item['text'], "unexpected '[^']\\+'")
if len(unexpected) < 1
return ''
endif
return '\V'.split(unexpected, "'")[1]
endfunction
function! SyntaxCheckers_php_GetLocList()
let makeprg = syntastic#makeprg#build({
\ 'exe': 'php',
\ 'args': '-l -d error_reporting=E_ALL -d display_errors=1 -d log_errors=0',
\ 'subchecker': 'php' })
let errorformat='%-GNo syntax errors detected in%.%#,Parse error: %#syntax %trror\ , %m in %f on line %l,Parse %trror: %m in %f on line %l,Fatal %trror: %m in %f on line %l,%-G\s%#,%-GErrors parsing %.%#'
let errors = SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat })
if empty(errors)
if !g:syntastic_phpcs_disable
let errors = errors + s:GetPHPCSErrors()
endif
if !g:syntastic_phpmd_disable
let errors = errors + s:GetPHPMDErrors()
endif
end
return errors
endfunction
function! s:GetPHPCSErrors()
let makeprg = syntastic#makeprg#build({
\ 'exe': 'phpcs',
\ 'args': g:syntastic_phpcs_conf . " --report=csv",
\ 'subchecker': 'phpcs' })
let errorformat = '%-GFile\,Line\,Column\,Type\,Message\,Source\,Severity,"%f"\,%l\,%c\,%t%*[a-zA-Z]\,"%m"\,%*[a-zA-Z0-9_.-]\,%*[0-9]'
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat, 'subtype': 'Style' })
endfunction
"Helper function. This one runs and parses phpmd tool output.
function! s:GetPHPMDErrors()
let makeprg = syntastic#makeprg#build({
\ 'exe': 'phpmd',
\ 'args': 'text ' . g:syntastic_phpmd_rules,
\ 'subchecker': 'phpcs' })
let errorformat = '%E%f:%l%m'
return SyntasticMake({ 'makeprg': makeprg, 'errorformat': errorformat, 'subtype' : 'Style' })
endfunction