summaryrefslogtreecommitdiff
path: root/ale_linters/php/phan.vim
diff options
context:
space:
mode:
authorw0rp <w0rp@users.noreply.github.com>2018-05-28 12:41:13 +0100
committerGitHub <noreply@github.com>2018-05-28 12:41:13 +0100
commiteaf35bc6115694def260a1790b8eb62559af6785 (patch)
treeb50780def8f2950c92aa210fb62559d7b350eec3 /ale_linters/php/phan.vim
parent29a9c9a2553911200b5f80d4159e8814e34eb8ab (diff)
parentae8dd39760f1d6e3d9a8110c1d2ec1e2034131c5 (diff)
downloadale-eaf35bc6115694def260a1790b8eb62559af6785.zip
Merge pull request #1562 from haginaga/support_phan_client
Add support phan_client for php
Diffstat (limited to 'ale_linters/php/phan.vim')
-rw-r--r--ale_linters/php/phan.vim63
1 files changed, 50 insertions, 13 deletions
diff --git a/ale_linters/php/phan.vim b/ale_linters/php/phan.vim
index f3b3d48f..c6f16356 100644
--- a/ale_linters/php/phan.vim
+++ b/ale_linters/php/phan.vim
@@ -1,28 +1,65 @@
-" Author: diegoholiveira <https://github.com/diegoholiveira>
+" Author: diegoholiveira <https://github.com/diegoholiveira>, haginaga <https://github.com/haginaga>
" Description: static analyzer for PHP
" Define the minimum severity
let g:ale_php_phan_minimum_severity = get(g:, 'ale_php_phan_minimum_severity', 0)
+let g:ale_php_phan_executable = get(g:, 'ale_php_phan_executable', 'phan')
+let g:ale_php_phan_use_client = get(g:, 'ale_php_phan_use_client', 0)
+
+function! ale_linters#php#phan#GetExecutable(buffer) abort
+ let l:executable = ale#Var(a:buffer, 'php_phan_executable')
+
+ if ale#Var(a:buffer, 'php_phan_use_client') == 1 && l:executable is# 'phan'
+ let l:executable = 'phan_client'
+ endif
+
+ return l:executable
+endfunction
+
function! ale_linters#php#phan#GetCommand(buffer) abort
- return 'phan -y '
- \ . ale#Var(a:buffer, 'php_phan_minimum_severity')
- \ . ' %s'
+ if ale#Var(a:buffer, 'php_phan_use_client') == 1
+ let l:args = '-l '
+ \ . ' %s'
+ else
+ let l:args = '-y '
+ \ . ale#Var(a:buffer, 'php_phan_minimum_severity')
+ \ . ' %s'
+ endif
+
+ let l:executable = ale_linters#php#phan#GetExecutable(a:buffer)
+
+ return ale#Escape(l:executable) . ' ' . l:args
endfunction
function! ale_linters#php#phan#Handle(buffer, lines) abort
" Matches against lines like the following:
- "
- " /path/to/some-filename.php:18 ERRORTYPE message
- let l:pattern = '^.*:\(\d\+\)\s\(\w\+\)\s\(.\+\)$'
+ if ale#Var(a:buffer, 'php_phan_use_client') == 1
+ " Phan error: ERRORTYPE: message in /path/to/some-filename.php on line nnn
+ let l:pattern = '^Phan error: \(\w\+\): \(.\+\) in \(.\+\) on line \(\d\+\)$'
+ else
+ " /path/to/some-filename.php:18 ERRORTYPE message
+ let l:pattern = '^.*:\(\d\+\)\s\(\w\+\)\s\(.\+\)$'
+ endif
+
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
- call add(l:output, {
- \ 'lnum': l:match[1] + 0,
- \ 'text': l:match[3],
- \ 'type': 'W',
- \})
+ if ale#Var(a:buffer, 'php_phan_use_client') == 1
+ let l:dict = {
+ \ 'lnum': l:match[4] + 0,
+ \ 'text': l:match[2],
+ \ 'type': 'W',
+ \}
+ else
+ let l:dict = {
+ \ 'lnum': l:match[1] + 0,
+ \ 'text': l:match[3],
+ \ 'type': 'W',
+ \}
+ endif
+
+ call add(l:output, l:dict)
endfor
return l:output
@@ -30,7 +67,7 @@ endfunction
call ale#linter#Define('php', {
\ 'name': 'phan',
-\ 'executable': 'phan',
+\ 'executable_callback': 'ale_linters#php#phan#GetExecutable',
\ 'command_callback': 'ale_linters#php#phan#GetCommand',
\ 'callback': 'ale_linters#php#phan#Handle',
\})