summaryrefslogtreecommitdiff
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
parent29a9c9a2553911200b5f80d4159e8814e34eb8ab (diff)
parentae8dd39760f1d6e3d9a8110c1d2ec1e2034131c5 (diff)
downloadale-eaf35bc6115694def260a1790b8eb62559af6785.zip
Merge pull request #1562 from haginaga/support_phan_client
Add support phan_client for php
-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*