summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ale_linters/php/phpstan.vim36
-rw-r--r--test/command_callback/test_phpstan_command_callbacks.vader10
2 files changed, 42 insertions, 4 deletions
diff --git a/ale_linters/php/phpstan.vim b/ale_linters/php/phpstan.vim
index b3875216..1c831e1b 100644
--- a/ale_linters/php/phpstan.vim
+++ b/ale_linters/php/phpstan.vim
@@ -6,15 +6,40 @@ let g:ale_php_phpstan_executable = get(g:, 'ale_php_phpstan_executable', 'phpsta
let g:ale_php_phpstan_level = get(g:, 'ale_php_phpstan_level', '4')
let g:ale_php_phpstan_configuration = get(g:, 'ale_php_phpstan_configuration', '')
-function! ale_linters#php#phpstan#GetCommand(buffer) abort
+function! ale_linters#php#phpstan#GetExecutable(buffer) abort
+ return ale#Var(a:buffer, 'php_phpstan_executable')
+endfunction
+
+function! ale_linters#php#phpstan#VersionCheck(buffer) abort
+ let l:executable = ale_linters#php#phpstan#GetExecutable(a:buffer)
+
+ " If we have previously stored the version number in a cache, then
+ " don't look it up again.
+ if ale#semver#HasVersion(l:executable)
+ " Returning an empty string skips this command.
+ return ''
+ endif
+
+ let l:executable = ale#Escape(l:executable)
+
+ return l:executable . ' --version'
+endfunction
+
+function! ale_linters#php#phpstan#GetCommand(buffer, version_output) abort
let l:configuration = ale#Var(a:buffer, 'php_phpstan_configuration')
let l:configuration_option = !empty(l:configuration)
\ ? ' -c ' . l:configuration
\ : ''
+ let l:executable = ale_linters#php#phpstan#GetExecutable(a:buffer)
+ let l:version = ale#semver#GetVersion(l:executable, a:version_output)
+ let l:error_format = ale#semver#GTE(l:version, [0, 10, 3])
+ \ ? ' --error-format raw'
+ \ : ' --errorFormat raw'
+
return '%e analyze -l'
\ . ale#Var(a:buffer, 'php_phpstan_level')
- \ . ' --errorFormat raw'
+ \ . l:error_format
\ . l:configuration_option
\ . ' %s'
endfunction
@@ -40,7 +65,10 @@ endfunction
call ale#linter#Define('php', {
\ 'name': 'phpstan',
-\ 'executable_callback': ale#VarFunc('php_phpstan_executable'),
-\ 'command_callback': 'ale_linters#php#phpstan#GetCommand',
+\ 'executable_callback': 'ale_linters#php#phpstan#GetExecutable',
+\ 'command_chain': [
+\ {'callback': 'ale_linters#php#phpstan#VersionCheck'},
+\ {'callback': 'ale_linters#php#phpstan#GetCommand'},
+\ ],
\ 'callback': 'ale_linters#php#phpstan#Handle',
\})
diff --git a/test/command_callback/test_phpstan_command_callbacks.vader b/test/command_callback/test_phpstan_command_callbacks.vader
index c7db587a..665661a3 100644
--- a/test/command_callback/test_phpstan_command_callbacks.vader
+++ b/test/command_callback/test_phpstan_command_callbacks.vader
@@ -1,6 +1,8 @@
Before:
call ale#assert#SetUpLinterTest('php', 'phpstan')
+ WithChainResults ['0.10.2']
+
After:
call ale#assert#TearDownLinterTest()
@@ -22,3 +24,11 @@ Execute(Custom phpstan configuration file):
AssertLinter 'phpstan',
\ ale#Escape('phpstan') . ' analyze -l4 --errorFormat raw -c phpstan_config %s'
+
+Execute(Choose the right format for error format param):
+ WithChainResults ['0.10.3']
+
+ AssertLinter 'phpstan', [
+ \ ale#Escape('phpstan') . ' --version',
+ \ ale#Escape('phpstan') . ' analyze -l4 --error-format raw %s'
+ \ ]