class RBS::Resolver::ConstantResolver::Table - rbs: Ruby Standard Library Documentation

# class RBS::Resolver::ConstantResolver::Table

### Attributes

children_table[R]
constants_table[R]
toplevel[R]

### Public Class Methods

new(environment) click to toggle source

    # File rbs-3.8.0/lib/rbs/resolver/constant_resolver.rb, line 10
    def initialize(environment)
      @children_table = {}
      @toplevel = {}

      @constants_table = {}

      environment.class_decls.each_key do |name|
        children_table[name] = {}
      end

      environment.class_decls.each do |name, entry|
        constant = constant_of_module(name, entry)

        unless name.namespace.empty?
          parent = name.namespace.to_type_name
          table = children_table[parent] or raise "#{parent} not found by #{name}"
        else
          table = toplevel
        end

        table[name.name] = constant
        constants_table[name] = constant
      end

      environment.class_alias_decls.each do |name, entry|
        normalized_entry = environment.normalized_module_class_entry(name) or next
        constant = constant_of_module(name, normalized_entry)

        # Insert class/module aliases into `children_table` and `toplevel` table
        unless name.namespace.empty?
          normalized_parent = environment.normalize_module_name?(name.namespace.to_type_name) or raise
          table = children_table[normalized_parent] or raise
          table[name.name] = constant
        else
          toplevel[name.name] = constant
        end
      end

      environment.constant_decls.each do |name, entry|
        unless name.namespace.empty?
          parent = name.namespace.to_type_name

          table = children_table[parent] or raise
          constant = constant_of_constant(name, entry)
        else
          table = toplevel
          constant = constant_of_constant(name, entry)
        end

        table[name.name] = constant
      end
    end

### Public Instance Methods

children(name) click to toggle source

    # File rbs-3.8.0/lib/rbs/resolver/constant_resolver.rb, line 63
    def children(name)
      children_table[name]
    end

constant(name) click to toggle source

    # File rbs-3.8.0/lib/rbs/resolver/constant_resolver.rb, line 67
    def constant(name)
      constants_table[name]
    end

constant_of_constant(name, entry) click to toggle source

    # File rbs-3.8.0/lib/rbs/resolver/constant_resolver.rb, line 80
    def constant_of_constant(name, entry)
      Constant.new(name: name, type: entry.decl.type, entry: entry)
    end

constant_of_module(name, entry) click to toggle source

    # File rbs-3.8.0/lib/rbs/resolver/constant_resolver.rb, line 71
    def constant_of_module(name, entry)
      type = Types::ClassSingleton.new(
        name: name,
        location: nil
      )

      Constant.new(name: name, type: type, entry: entry)
    end