mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			83 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
| " The Ruby provider helper
 | |
| if exists('g:loaded_ruby_provider')
 | |
|   finish
 | |
| endif
 | |
| let g:loaded_ruby_provider = 1
 | |
| 
 | |
| let s:stderr = {}
 | |
| 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
 | |
|   if exists("g:ruby_host_prog")
 | |
|     return g:ruby_host_prog
 | |
|   else
 | |
|     return has('win32') ? exepath('neovim-ruby-host.bat') : exepath('neovim-ruby-host')
 | |
|   end
 | |
| endfunction
 | |
| 
 | |
| function! provider#ruby#Prog() abort
 | |
|   return s:prog
 | |
| endfunction
 | |
| 
 | |
| function! provider#ruby#Require(host) abort
 | |
|   let prog = provider#ruby#Prog()
 | |
|   let ruby_plugins = remote#host#PluginsForHost(a:host.name)
 | |
| 
 | |
|   for plugin in ruby_plugins
 | |
|     let prog .= " " . shellescape(plugin.path)
 | |
|   endfor
 | |
| 
 | |
|   try
 | |
|     let channel_id = jobstart(prog, s:job_opts)
 | |
|     if rpcrequest(channel_id, 'poll') ==# 'ok'
 | |
|       return channel_id
 | |
|     endif
 | |
|   catch
 | |
|     echomsg v:throwpoint
 | |
|     echomsg v:exception
 | |
|     for row in get(s:stderr, channel_id, [])
 | |
|       echomsg row
 | |
|     endfor
 | |
|   endtry
 | |
|   throw remote#host#LoadErrorForHost(a:host.orig_name, '$NVIM_RUBY_LOG_FILE')
 | |
| endfunction
 | |
| 
 | |
| function! provider#ruby#Call(method, args) abort
 | |
|   if s:err != ''
 | |
|     echoerr s:err
 | |
|     return
 | |
|   endif
 | |
| 
 | |
|   if !exists('s:host')
 | |
|     try
 | |
|       let s:host = remote#host#Require('legacy-ruby-provider')
 | |
|     catch
 | |
|       let s:err = v:exception
 | |
|       echohl WarningMsg
 | |
|       echomsg v:exception
 | |
|       echohl None
 | |
|       return
 | |
|     endtry
 | |
|   endif
 | |
|   return call('rpcrequest', insert(insert(a:args, 'ruby_'.a:method), s:host))
 | |
| endfunction
 | |
| 
 | |
| let s:err = ''
 | |
| let s:prog = provider#ruby#Detect()
 | |
| let s:plugin_path = expand('<sfile>:p:h') . '/script_host.rb'
 | |
| 
 | |
| if empty(s:prog)
 | |
|   let s:err = 'Cannot find the neovim RubyGem. Try :checkhealth'
 | |
| endif
 | |
| 
 | |
| call remote#host#RegisterClone('legacy-ruby-provider', 'ruby')
 | |
| call remote#host#RegisterPlugin('legacy-ruby-provider', s:plugin_path, [])
 | 
