Sha256: 479f7cfbdcce422979466a31b00b76505a2a88c2cdfb26529ea9d900be8547e6

Contents?: true

Size: 1.02 KB

Versions: 3

Compression:

Stored size: 1.02 KB

Contents

module Steep
  module TypeInference
    class ConstantEnv
      attr_reader :context
      attr_reader :cache
      attr_reader :factory
      attr_reader :table

      # ConstantEnv receives an Names::Module as a context, not a Namespace, because this is a simulation of Ruby.
      # Any namespace is a module or class.
      def initialize(factory:, context:)
        @cache = {}
        @factory = factory
        @context = context
        @table = RBS::ConstantTable.new(builder: factory.definition_builder)
      end

      def lookup(name)
        cache[name] ||= begin
          constant = table.resolve_constant_reference(
            factory.type_name_1(name),
            context: context.map {|namespace| factory.namespace_1(namespace) }
          )

          if constant
            factory.type(constant.type)
          end
        rescue => exn
          Steep.logger.debug "Looking up a constant failed: name=#{name}, context=[#{context.join(", ")}], error=#{exn.inspect}"
          nil
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
steep-0.28.0 lib/steep/type_inference/constant_env.rb
steep-0.27.0 lib/steep/type_inference/constant_env.rb
steep-0.25.0 lib/steep/type_inference/constant_env.rb