lib/solargraph/language_server/transport/adapter.rb
# frozen_string_literal: true require 'backport' module Solargraph module LanguageServer module Transport # A common module for running language servers in Backport. # module Adapter # This runs in the context of Backport::Adapter, which # provides write() - but if we didn't hide this behind a parse # tag, it would override the one in the class. # # @!method write(text) # @abstract # Write the change to the specified text. # @param text [String] The text to be changed. # @return [String] The updated text. # @return [void] def opening @host = Solargraph::LanguageServer::Host.new @host.add_observer self @host.start @data_reader = Solargraph::LanguageServer::Transport::DataReader.new @data_reader.set_message_handler do |message| process message end end # @return [void] def closing @host.stop end # @param data [String] # @return [void] def receiving data @data_reader.receive data end # @return [void] def update if @host.stopped? shutdown else tmp = @host.flush write tmp unless tmp.empty? end end private # @param request [Hash] # @return [void] def process request @host.process(request) end # @return [void] def shutdown Backport.stop unless @host.options['transport'] == 'external' end end end end end