Sha256: c2529cb1b1027193865a4edc63ff25f9090b7863f09cdf3261826050c58dff2c

Contents?: true

Size: 1.09 KB

Versions: 38

Compression:

Stored size: 1.09 KB

Contents

module Steep
  module Subtyping
    class VariableOccurence
      attr_reader :params
      attr_reader :returns

      def initialize
        @params = Set.new
        @returns = Set.new
      end

      def add_method_type(method_type)
        method_type.params.each_type do |type|
          each_var(type) do |var|
            params << var
          end
        end
        each_var(method_type.return_type) do |var|
          returns << var
        end

        method_type.block&.yield_self do |block|
          block.type.params.each_type do |type|
            each_var(type) do |var|
              params << var
            end
          end
          each_var(block.type.return_type) do |var|
            returns << var
          end
        end
      end

      def each_var(type, &block)
        type.free_variables.each(&block)
      end

      def strictly_return?(var)
        !params.member?(var) && returns.member?(var)
      end

      def self.from_method_type(method_type)
        self.new.tap do |occurence|
          occurence.add_method_type(method_type)
        end
      end
    end
  end
end

Version data entries

38 entries across 38 versions & 1 rubygems

Version Path
steep-0.33.0 lib/steep/subtyping/variable_occurrence.rb
steep-0.32.0 lib/steep/subtyping/variable_occurrence.rb
steep-0.31.1 lib/steep/subtyping/variable_occurrence.rb
steep-0.31.0 lib/steep/subtyping/variable_occurrence.rb
steep-0.30.0 lib/steep/subtyping/variable_occurrence.rb
steep-0.29.0 lib/steep/subtyping/variable_occurrence.rb
steep-0.28.0 lib/steep/subtyping/variable_occurrence.rb
steep-0.27.0 lib/steep/subtyping/variable_occurrence.rb
steep-0.25.0 lib/steep/subtyping/variable_occurrence.rb
steep-0.24.0 lib/steep/subtyping/variable_occurrence.rb
steep-0.23.0 lib/steep/subtyping/variable_occurrence.rb
steep-0.22.0 lib/steep/subtyping/variable_occurrence.rb
steep-0.21.0 lib/steep/subtyping/variable_occurrence.rb
steep-0.20.0 lib/steep/subtyping/variable_occurrence.rb
steep-0.19.0 lib/steep/subtyping/variable_occurrence.rb
steep-0.18.0 lib/steep/subtyping/variable_occurrence.rb
steep-0.17.1 lib/steep/subtyping/variable_occurrence.rb
steep-0.17.0 lib/steep/subtyping/variable_occurrence.rb
steep-0.16.3 lib/steep/subtyping/variable_occurrence.rb
steep-0.16.2 lib/steep/subtyping/variable_occurrence.rb