lib/solargraph/language_server/message/base.rb



module Solargraph
  module LanguageServer
    module Message
      class Base
        # @return [Solargraph::LanguageServer::Host]
        attr_reader :host
        attr_reader :id
        attr_reader :request
        attr_reader :method
        attr_reader :params
        attr_reader :result
        attr_reader :error

        def initialize host, request
          @host = host
          @id = request['id'].freeze
          @request = request.freeze
          @method = request['method'].freeze
          @params = (request['params'] || {}).freeze
          post_initialize
        end

        def post_initialize
        end

        def process
        end

        def set_result data
          @result = data
        end

        def set_error code, message
          @error = {
            code: code,
            message: message
          }
        end

        def send_response
          unless id.nil? or host.cancel?(id)
            response = {
              jsonrpc: "2.0",
              id: id,
            }
            response[:result] = result unless result.nil?
            response[:error] = error unless error.nil?
            response[:result] = nil if result.nil? and error.nil?
            json = response.to_json
            envelope = "Content-Length: #{json.bytesize}\r\n\r\n#{json}"
            host.queue envelope
          end
          host.clear id
        end
      end
    end
  end
end