class Yoda::Server::Providers::Hover

Public Class Methods

provider_method() click to toggle source
# File lib/yoda/server/providers/hover.rb, line 5
def self.provider_method
  :'textDocument/hover'
end

Public Instance Methods

provide(params) click to toggle source
# File lib/yoda/server/providers/hover.rb, line 9
def provide(params)
  calculate(params[:text_document][:uri], params[:position])
end
timeout() click to toggle source
# File lib/yoda/server/providers/hover.rb, line 13
def timeout
  10
end

Private Instance Methods

calculate(uri, position) click to toggle source

@param uri [String] @param position [{Symbol => Integer}]

# File lib/yoda/server/providers/hover.rb, line 21
def calculate(uri, position)
  source = session.file_store.get(uri)
  location = Parsing::Location.of_language_server_protocol_position(line: position[:line], character: position[:character])

  node_worker = Evaluation::CurrentNodeExplain.new(session.registry, source, location)

  current_node_signature = node_worker.current_node_signature
  create_hover(current_node_signature) if current_node_signature
end
create_hover(signature) click to toggle source

@param signature [Evaluation::NodeSignature]

# File lib/yoda/server/providers/hover.rb, line 32
def create_hover(signature)
  LanguageServer::Protocol::Interface::Hover.new(
    contents: signature.descriptions.map { |value| create_hover_text(value) },
    range: LanguageServer::Protocol::Interface::Range.new(signature.node_range.to_language_server_protocol_range),
  )
end
create_hover_text(description) click to toggle source

@param description [Evaluation::Descriptions::Base] @return [String]

# File lib/yoda/server/providers/hover.rb, line 41
def create_hover_text(description)
  description.to_markdown
end