provider: ruby: Use stderr_buffered to collect stderr

This commit is contained in:
James McCoy
2018-02-16 13:33:07 -05:00
parent 09b51bbf87
commit 48dc1f3f90

View File

@@ -4,16 +4,7 @@ if exists('g:loaded_ruby_provider')
endif endif
let g:loaded_ruby_provider = 1 let g:loaded_ruby_provider = 1
let s:stderr = {} let s:job_opts = {'rpc': v:true, 'stderr_buffered': v:true}
let s:job_opts = {'rpc': v:true}
function! s:job_opts.on_stderr(chan_id, data, event) abort
let stderr = get(s:stderr, a:chan_id, [''])
let last = remove(stderr, -1)
let a:data[0] = last.a:data[0]
call extend(stderr, a:data)
let s:stderr[a:chan_id] = stderr
endfunction
function! provider#ruby#Detect() abort function! provider#ruby#Detect() abort
if exists("g:ruby_host_prog") if exists("g:ruby_host_prog")
@@ -36,14 +27,15 @@ function! provider#ruby#Require(host) abort
endfor endfor
try try
let channel_id = jobstart(prog, s:job_opts) let job = copy(s:job_opts)
let channel_id = jobstart(prog, job)
if rpcrequest(channel_id, 'poll') ==# 'ok' if rpcrequest(channel_id, 'poll') ==# 'ok'
return channel_id return channel_id
endif endif
catch catch
echomsg v:throwpoint echomsg v:throwpoint
echomsg v:exception echomsg v:exception
for row in get(s:stderr, channel_id, []) for row in get(job, 'stderr', [])
echomsg row echomsg row
endfor endfor
endtry endtry