diff --git a/ale_linters/php/php.vim b/ale_linters/php/php.vim index 4b4b1720..cc875e9c 100644 --- a/ale_linters/php/php.vim +++ b/ale_linters/php/php.vim @@ -39,7 +39,7 @@ endfunction call ALEAddLinter('php', { \ 'name': 'php', \ 'executable': 'php', -\ 'output_stream': 'stderr', +\ 'output_stream': 'both', \ 'command': 'php -l --', \ 'callback': 'ale_linters#php#php#Handle', \}) diff --git a/doc/ale.txt b/doc/ale.txt index ecb39f32..3788c2ae 100644 --- a/doc/ale.txt +++ b/doc/ale.txt @@ -324,10 +324,12 @@ ALEAddLinter(filetype, linter) *ALEAddLinter()* `output_stream` A |String| for the output stream the lines of output should be read from for the command which is run. The - accepted values are `'stdout'` and `'stderr'`. This - argument defaults to `'stdout'`. This argument can be - set for linter programs which output their errors and - warnings to the stderr stream instead of stdout. + accepted values are `'stdout'`, `'stderr'`, and + `'both'`. This argument defaults to `'stdout'`. This + argument can be set for linter programs which output + their errors and warnings to the stderr stream + instead of stdout. The option `'both'` will read + from both stder and stdout at the same time. Some programs for checking for errors are not capable of receiving input from stdin, as is required by ALE. To remedy this, a wrapper script is diff --git a/plugin/ale/zmain.vim b/plugin/ale/zmain.vim index 83bb8109..8db9d8f7 100644 --- a/plugin/ale/zmain.vim +++ b/plugin/ale/zmain.vim @@ -184,6 +184,12 @@ function! s:ApplyLinter(buffer, linter) \ 'on_stderr': 's:GatherOutputNeoVim', \ 'on_exit': 's:HandleExitNeoVim', \}) + elseif a:linter.output_stream ==# 'both' + let a:linter.job = jobstart(command, { + \ 'on_stdout': 's:GatherOutputNeoVim', + \ 'on_stderr': 's:GatherOutputNeoVim', + \ 'on_exit': 's:HandleExitNeoVim', + \}) else let a:linter.job = jobstart(command, { \ 'on_stdout': 's:GatherOutputNeoVim', @@ -202,6 +208,10 @@ function! s:ApplyLinter(buffer, linter) if a:linter.output_stream ==# 'stderr' " Read from stderr instead of stdout. let job_options.err_cb = function('s:GatherOutputVim') + elseif a:linter.output_stream ==# 'both' + " Read from both streams. + let job_options.out_cb = function('s:GatherOutputVim') + let job_options.err_cb = function('s:GatherOutputVim') else let job_options.out_cb = function('s:GatherOutputVim') endif