class RBS::Resolver::TypeNameResolver

Attributes

all_names[R]
cache[R]

Public Class Methods

new(env) click to toggle source
# File rbs-2.8.2/lib/rbs/resolver/type_name_resolver.rb, line 9
def initialize(env)
  @all_names = Set[]
  @cache = {}

  all_names.merge(env.class_decls.keys)
  all_names.merge(env.interface_decls.keys)
  all_names.merge(env.alias_decls.keys)
end

Public Instance Methods

has_name?(full_name) click to toggle source
# File rbs-2.8.2/lib/rbs/resolver/type_name_resolver.rb, line 50
def has_name?(full_name)
  if all_names.include?(full_name)
    full_name
  end
end
resolve(type_name, context:) click to toggle source
# File rbs-2.8.2/lib/rbs/resolver/type_name_resolver.rb, line 25
def resolve(type_name, context:)
  if type_name.absolute?
    return type_name
  end

  try_cache([type_name, context]) do
    resolve_in(type_name, context)
  end
end
resolve_in(type_name, context) click to toggle source
# File rbs-2.8.2/lib/rbs/resolver/type_name_resolver.rb, line 35
def resolve_in(type_name, context)
  if context
    parent, child = context
    case child
    when false
      resolve_in(type_name, parent)
    when TypeName
      name = type_name.with_prefix(child.to_namespace)
      has_name?(name) || resolve_in(type_name, parent)
    end
  else
    has_name?(type_name.absolute!)
  end
end
try_cache(query) { || ... } click to toggle source
# File rbs-2.8.2/lib/rbs/resolver/type_name_resolver.rb, line 18
def try_cache(query)
  cache.fetch(query) do
    result = yield
    cache[query] = result
  end
end