Support reading from both output streams, and fix PHP error parsing, which sometimes logs to stderr, sometimes stdout.

This commit is contained in:
w0rp 2016-10-07 17:08:11 +01:00
parent f0f17e4b0d
commit d97e25a260
3 changed files with 17 additions and 5 deletions

View File

@ -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',
\})

View File

@ -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

View File

@ -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