class Solargraph::LanguageServer::Message::TextDocument::Definition

def code_location

def code_location
  suggestions = host.definitions_at(params['textDocument']['uri'], @line, @column)
  return nil if suggestions.empty?
  suggestions.reject { |pin| pin.best_location.nil? || pin.best_location.filename.nil? }.map do |pin|
    {
      uri: file_to_uri(pin.best_location.filename),
      range: pin.best_location.range.to_hash
    }
  end
end

def process

def process
  @line = params['position']['line']
  @column = params['position']['character']
  set_result(code_location || require_location || [])
end

def require_location

def require_location
  # @todo Terrible hack

  lib = host.library_for(params['textDocument']['uri'])
  rloc = Solargraph::Location.new(uri_to_file(params['textDocument']['uri']), Solargraph::Range.from_to(@line, @column, @line, @column))
  dloc = lib.locate_ref(rloc)
  return nil if dloc.nil?
  [
    {
      uri: file_to_uri(dloc.filename),
      range: dloc.range.to_hash
    }
  ]
end