class Yoda::Server::Providers::Definition

Public Class Methods

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

Public Instance Methods

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

Private Instance Methods

calculate(uri, position, include_declaration = false) click to toggle source

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

# File lib/yoda/server/providers/definition.rb, line 22
def calculate(uri, position, include_declaration = false)
  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)
  references = node_worker.defined_files
  references.map { |(path, line, column)| create_location(path, line, column) }
end
create_location(path, line, column) click to toggle source

@param path [String] @param line [Integer] @param column [Integer]

# File lib/yoda/server/providers/definition.rb, line 34
def create_location(path, line, column)
  location = Parsing::Location.new(row: line - 1, column: column)
  LanguageServer::Protocol::Interface::Location.new(
    uri: session.uri_of_path(path),
    range: LanguageServer::Protocol::Interface::Range.new(Parsing::Range.new(location, location).to_language_server_protocol_range),
  )
end