From 8cee39c614ec741f8f58cb3d8375b8431f990c2a Mon Sep 17 00:00:00 2001 From: haginaga Date: Tue, 8 May 2018 14:19:47 +0900 Subject: [PATCH] (close w0rp/ale#1561) Add support phan_client for php --- ale_linters/php/phan.vim | 63 ++++++++++++++++++++++++++++++---------- doc/ale-php.txt | 18 ++++++++++-- 2 files changed, 64 insertions(+), 17 deletions(-) diff --git a/ale_linters/php/phan.vim b/ale_linters/php/phan.vim index f3b3d48f..de1335fe 100644 --- a/ale_linters/php/phan.vim +++ b/ale_linters/php/phan.vim @@ -1,28 +1,61 @@ -" Author: diegoholiveira +" Author: diegoholiveira , 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 + return ale#Var(a:buffer, 'php_phan_executable') +endfunction + function! ale_linters#php#phan#GetCommand(buffer) abort - return 'phan -y ' - \ . ale#Var(a:buffer, 'php_phan_minimum_severity') - \ . ' %s' + let l:use_client = ale#Var(a:buffer, 'php_phan_use_client') + if l: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\(.\+\)$' - let l:output = [] + let l:use_client = ale#Var(a:buffer, 'php_phan_use_client') + " Matches against lines like the following: + if l: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 l: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 +63,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*