class Neovim::Host
@api private
Attributes
plugins[R]
Public Class Methods
new(event_loop)
click to toggle source
# File lib/neovim/host.rb, line 20 def initialize(event_loop) @event_loop = event_loop @session = Session.new(event_loop) @handlers = {"poll" => poll_handler, "specs" => specs_handler} @plugins = [] @specs = {} end
run(rplugin_paths, event_loop=EventLoop.stdio)
click to toggle source
# File lib/neovim/host.rb, line 14 def self.run(rplugin_paths, event_loop=EventLoop.stdio) new(event_loop).tap do |host| Loader.new(host).load(rplugin_paths) end.run end
Public Instance Methods
handle(message)
click to toggle source
# File lib/neovim/host.rb, line 32 def handle(message) log(:debug) { message.to_h } @handlers .fetch(message.method_name, default_handler) .call(@client, message) rescue Exception => e log_exception(:error, e, __method__) if message.sync? @session.respond(message.id, nil, e.message) else @client.err_writeln("Exception handling #{message.method_name}: (#{e.class}) #{e.message}") end raise unless e.is_a?(StandardError) end
run()
click to toggle source
# File lib/neovim/host.rb, line 28 def run @session.run { |msg| handle(msg) } end
Private Instance Methods
default_handler()
click to toggle source
# File lib/neovim/host.rb, line 73 def default_handler @default_handler ||= lambda do |_, message| next unless message.sync? @session.respond(message.id, nil, "Unknown request #{message.method_name}") end end
initialize_client(request_id)
click to toggle source
# File lib/neovim/host.rb, line 80 def initialize_client(request_id) @session.request_id = request_id @session.notify(:nvim_set_client_info, *ClientInfo.for_host(self).to_args) @client = Client.from_event_loop(@event_loop, @session) end
initialize_plugins()
click to toggle source
# File lib/neovim/host.rb, line 87 def initialize_plugins @plugins.each do |plugin| plugin.handlers.each do |handler| @handlers[handler.qualified_name] = wrap_plugin_handler(handler) end plugin.setup(@client) @specs[plugin.source] = plugin.specs end end
poll_handler()
click to toggle source
# File lib/neovim/host.rb, line 52 def poll_handler @poll_handler ||= lambda do |_, req| initialize_client(req.id) initialize_plugins @session.respond(req.id, "ok") end end
specs_handler()
click to toggle source
# File lib/neovim/host.rb, line 61 def specs_handler @specs_handler ||= lambda do |_, req| source = req.arguments.fetch(0) if @specs.key?(source) @session.respond(req.id, @specs.fetch(source)) else @session.respond(req.id, nil, "Unknown plugin #{source}") end end end
wrap_plugin_handler(handler)
click to toggle source
# File lib/neovim/host.rb, line 98 def wrap_plugin_handler(handler) lambda do |client, message| args = message.arguments.flatten(1) result = handler.call(client, *args) @session.respond(message.id, result) if message.sync? end end