module Lsp::LanguageServer

Constants

LanguageServerError
NotImplementedError

Attributes

language_server[W]

Public Instance Methods

handle_initialize(request) click to toggle source
# File lib/lsp.rb, line 170
def handle_initialize(request)
  raise NotImplementedError
end
handle_text_document_definition(request) click to toggle source
# File lib/lsp.rb, line 166
def handle_text_document_definition(request)
  raise NotImplementedError
end
handle_text_document_did_open() click to toggle source
# File lib/lsp.rb, line 174
def handle_text_document_did_open
  raise NotImplementedError
end
handle_text_document_hover(request) click to toggle source
# File lib/lsp.rb, line 162
def handle_text_document_hover(request)
  raise NotImplementedError
end
notify(method_name, params) click to toggle source
# File lib/lsp.rb, line 130
def notify(method_name, params)
  case method_name
  when "textDocument/didOpen"
    handle_text_document_did_open
  when "textDocument/didChange"
    handle_text_document_did_change(
      DidChangeTextDocumentParams.new(
        VersionedTextDocumentIdentifier.new(
          URI(params.fetch(:textDocument).fetch(:uri)),
          params.fetch(:textDocument).fetch(:version)),
        params.fetch(:contentChanges).map do |contentChange|
          next if contentChange[:range]
          TextDocumentContentChangeEvent.new(
            contentChange.fetch(:text))
        end.compact))
  end
rescue NotImplementedError
end
request(id, method_name, params) click to toggle source
# File lib/lsp.rb, line 95
def request(id, method_name, params)
  response = case method_name
  when "textDocument/hover"
    handle_text_document_hover(
      TextDocumentPositionParams.new(
        TextDocumentIdentifier.new(
          URI(params.fetch(:textDocument).fetch(:uri))),
        Position.from_hash(params.fetch(:position))))
  when "textDocument/definition"
    handle_text_document_definition(
      TextDocumentPositionParams.new(
        TextDocumentIdentifier.new(
          URI(params.fetch(:textDocument).fetch(:uri))),
        Position.from_hash(params.fetch(:position))))
  when "initialize"
    handle_initialize(
      InitializeRequest.new(
        URI(params.fetch(:rootUri))))
  when "textDocument/completion"
    handle_text_document_completion(
      TextDocumentPositionParams.new(
        TextDocumentIdentifier.new(
          URI(params.fetch(:textDocument).fetch(:uri))),
        Position.from_hash(params.fetch(:position))))
  else
    ResponseMessage.new(nil, ResponseError::MethodNotFound.new)
  end
  @language_server.response(
    id,
    to_result(response.result),
    to_result(response.error))
rescue NotImplementedError
  ResponseMessage.new(nil, ResponseError::MethodNotFound.new)
end
to_result(obj) click to toggle source
# File lib/lsp.rb, line 149
def to_result(obj)
  case obj
  when Array
    obj.map {|elem| to_result(elem) }
  when NilClass
    nil
  else
    obj.to_h
  end
end