class Solargraph::LanguageServer::Message::Base

def accept_or_cancel

def accept_or_cancel
  if host.cancel?(id)
    # https://microsoft.github.io/language-server-protocol/specifications/specification-current/#cancelRequest

    # cancel should send response RequestCancelled

    Solargraph::Logging.logger.info "Cancelled response to ##{id} #{method}"
    set_result nil
    set_error ErrorCodes::REQUEST_CANCELLED, 'Cancelled by client'
  else
    Solargraph::Logging.logger.info "Sending response to ##{id} #{method}"
  end
end

def initialize host, request

Parameters:
  • request (Hash) --
  • host (Solargraph::LanguageServer::Host) --
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

Returns:
  • (void) -
def post_initialize; end

def process; end

Returns:
  • (void) -
def process; end

def send_response

Returns:
  • (void) -
def send_response
  return if id.nil?
  accept_or_cancel
  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}"
  Solargraph.logger.debug envelope
  host.queue envelope
  host.clear id
end

def set_error code, message

Returns:
  • (void) -

Parameters:
  • message (String) --
  • code (Integer) -- See Solargraph::LanguageServer::ErrorCodes
def set_error code, message
  @error = {
    code: code,
    message: message
  }
end

def set_result data

Returns:
  • (void) -

Parameters:
  • data (Hash, Array, nil) --
def set_result data
  @result = data
end