diff --git a/ale_linters/php/phpstan.vim b/ale_linters/php/phpstan.vim index 69173ef4..b99e4f58 100644 --- a/ale_linters/php/phpstan.vim +++ b/ale_linters/php/phpstan.vim @@ -5,8 +5,14 @@ let g:ale_php_phpstan_executable = get(g:, 'ale_php_phpstan_executable', 'phpstan') let g:ale_php_phpstan_level = get(g:, 'ale_php_phpstan_level', '4') -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#GetCommand(buffer) abort + let l:executable = ale_linters#php#phpstan#GetExecutable(a:buffer) + + return ale#Escape(l:executable) \ . ' analyze -l' \ . ale#Var(a:buffer, 'php_phpstan_level') \ . ' --errorFormat raw' @@ -34,7 +40,7 @@ endfunction call ale#linter#Define('php', { \ 'name': 'phpstan', -\ 'executable': 'phpstan', +\ 'executable_callback': 'ale_linters#php#phpstan#GetExecutable', \ 'command_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 new file mode 100644 index 00000000..7366df8b --- /dev/null +++ b/test/command_callback/test_phpstan_command_callbacks.vader @@ -0,0 +1,29 @@ +Before: + Save g:ale_php_phpstan_executable + Save g:ale_php_phpstan_level + + unlet! g:ale_php_phpstan_executable + unlet! g:ale_php_phpstan_level + + runtime ale_linters/php/phpstan.vim + +After: + Restore + + call ale#linter#Reset() + +Execute(Custom executables should be used for the executable and command): + let g:ale_php_phpstan_executable = 'phpstan_test' + + AssertEqual 'phpstan_test', ale_linters#php#phpstan#GetExecutable(bufnr('')) + AssertEqual + \ ale#Escape('phpstan_test') . ' analyze -l4 --errorFormat raw %s', + \ ale_linters#php#phpstan#GetCommand(bufnr('')) + +Execute(project with level set to 3): + call ale#test#SetFilename('phpstan-test-files/foo/test.php') + let g:ale_php_phpstan_level = 3 + + AssertEqual + \ ale#Escape('phpstan') . ' analyze -l3 --errorFormat raw %s', + \ ale_linters#php#phpstan#GetCommand(bufnr('')) diff --git a/test/test_phpstan_executable_detection.vader b/test/handler/test_phpstan_handler.vader similarity index 63% rename from test/test_phpstan_executable_detection.vader rename to test/handler/test_phpstan_handler.vader index 24ba8cd8..207a7758 100644 --- a/test/test_phpstan_executable_detection.vader +++ b/test/handler/test_phpstan_handler.vader @@ -1,9 +1,4 @@ Before: - Save g:ale_php_phpstan_executable - Save g:ale_php_phpstan_level - - let g:ale_php_phpstan_executable = 'phpstan_test' - call ale#test#SetDirectory('/testplugin/test') runtime ale_linters/php/phpstan.vim @@ -14,45 +9,14 @@ After: call ale#test#RestoreDirectory() call ale#linter#Reset() -Execute(project with level set to 3): - call ale#test#SetFilename('phpstan-test-files/foo/test.php') - let g:ale_php_phpstan_level = 3 - - AssertEqual - \ 'phpstan_test analyze -l3 --errorFormat raw %s', - \ ale_linters#php#phpstan#GetCommand(bufnr('')) - -Execute(project with default level): - call ale#test#SetFilename('phpstan-test-files/foo/test.php') - - AssertEqual - \ 'phpstan_test analyze -l4 --errorFormat raw %s', - \ ale_linters#php#phpstan#GetCommand(bufnr('')) - -Execute(parse output without errors): +Execute(Output without errors should be parsed correctly): call ale#test#SetFilename('phpstan-test-files/foo/test.php') AssertEqual \ [], \ ale_linters#php#phpstan#Handle(bufnr(''), [" 1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%"]) -Execute(parse output with one error): - call ale#test#SetFilename('phpstan-test-files/foo/test.php') - - AssertEqual - \ [ - \ { - \ 'lnum': 9, - \ 'text': 'Access to an undefined property Test::$var.', - \ 'type': 'W' - \ } - \ ], - \ ale_linters#php#phpstan#Handle(bufnr(''), [ - \ ' 1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%', - \ 'phpstan-test-files/foo/test.php:9:Access to an undefined property Test::$var.', - \]) - -Execute(parse output with three errors): +Execute(Output with some errors should be parsed correctly): call ale#test#SetFilename('phpstan-test-files/foo/test.php') AssertEqual @@ -80,7 +44,7 @@ Execute(parse output with three errors): \ 'phpstan-test-files/foo/test.php:192:Invalid command testCommand.', \]) -Execute(parse output for windows filesystem): +Execute(Output should be parsed correctly with Windows paths): call ale#test#SetFilename('phpstan-test-files/foo/test.php') AssertEqual @@ -96,7 +60,7 @@ Execute(parse output for windows filesystem): \ 'D:\phpstan-test-files\foo\test.php:9:Access to an undefined property Test::$var.', \]) -Execute(parse output for not php file): +Execute(Output for .inc files should be parsed correctly): call ale#test#SetFilename('phpstan-test-files/test.inc') AssertEqual