summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ale_linters/php/phan.vim63
-rw-r--r--doc/ale-php.txt18
2 files changed, 66 insertions, 15 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',
\})
diff --git a/doc/ale-php.txt b/doc/ale-php.txt
index 1ba34388..33796f7c 100644
--- a/doc/ale-php.txt
+++ b/doc/ale-php.txt
@@ -48,7 +48,7 @@ g:ale_php_langserver_use_global *g:ale_php_langserver_use_global*
===============================================================================
phan *ale-php-phan*
-WARNING: please do not use this linter if you have an configuration file
+WARNING: please use the phan_client linter if you have an configuration file
for your project because the phan will look into your entirely project and
ale will display in the current buffer warnings that may belong to other file.
@@ -57,8 +57,22 @@ g:ale_php_phan_minimum_severity *g:ale_php_phan_minimum_severity*
Type: |Number|
Default: `0`
- This variable defines the minimum severity level
+ This variable defines the minimum severity level.
+g:ale_php_phan_executable *g:ale_php_phan_executable*
+ *b:ale_php_phan_executable*
+ Type: |String|
+ Default: `'phan'`
+
+ This variable sets executable used for phan or phan_client.
+
+g:ale_php_phan_use_client *g:ale_php_phan_use_client*
+ *b:ale_php_phan_use_client*
+ Type: |Number|
+ Default: `get(g:, 'ale_php_phan_use_client', 0)`
+
+ This variable can be set to 1 to use the phan_client with phan daemon mode
+ instead of the phan standalone.
===============================================================================
phpcbf *ale-php-phpcbf*