diff --git a/syntax_checkers/php.vim b/syntax_checkers/php.vim index 3b9db37e..d36dd4d4 100644 --- a/syntax_checkers/php.vim +++ b/syntax_checkers/php.vim @@ -15,13 +15,38 @@ endif let loaded_php_syntax_checker = 1 "bail if the user doesnt have php installed -if !executable("php") +if !executable("php") || !executable("tidy") finish endif function! SyntaxCheckers_php_GetLocList() + return extend(s:PhpErrors(), s:HtmlErrors()) +endfunction + +function! s:PhpErrors() set makeprg=php\ -l\ % set errorformat=%-GNo\ syntax\ errors\ detected\ in%.%#,%-GErrors\ parsing\ %.%#,%-G\\s%#,%EParse\ error:\ syntax\ error\\,\ %m\ in\ %f\ on\ line\ %l, silent lmake! return getloclist(0) endfunction + +function! s:HtmlErrors() + let &makeprg="tidy -e % 2>&1" + + set errorformat=%Wline\ %l\ column\ %c\ -\ Warning:\ %m,%Eline\ %l\ column\ %c\ -\ Error:\ %m,%-G%.%#,%-G%.%# + silent lmake! + + let loclist = filter(getloclist(0), 'index(s:html_ignored_errors, v:val["text"]) == -1') + + "the file name isnt in the output so stick in the buf num manually + for i in loclist + let i['bufnr'] = bufnr("") + endfor + + return loclist +endfunction + +let s:html_ignored_errors = ["inserting missing 'title' element", + \ 'missing declaration', + \ 'inserting implicit ', + \ ' lacks "summary" attribute']