class RBS::MethodType - rbs: Ruby Standard Library Documentation

# class RBS::MethodType

### Attributes

block[R]
location[R]
type[R]
type_params[R]

### Public Class Methods

new(type_params:, type:, block:, location:) click to toggle source

    # File rbs-3.8.0/lib/rbs/method_type.rb, line 10
    def initialize(type_params:, type:, block:, location:)
      @type_params = type_params
      @type = type
      @block = block
      @location = location
    end

### Public Instance Methods

==(other) click to toggle source

    # File rbs-3.8.0/lib/rbs/method_type.rb, line 17
    def ==(other)
      other.is_a?(MethodType) &&
        other.type_params == type_params &&
        other.type == type &&
        other.block == block
    end

each_type() { |self_type| ... } click to toggle source

    # File rbs-3.8.0/lib/rbs/method_type.rb, line 84
    def each_type(&block)
      if block
        type.each_type(&block)
        self.block&.yield_self do |b|
          b.type.each_type(&block)
          if b.self_type
            yield b.self_type
          end
        end
      else
        enum_for :each_type
      end
    end

free_variables(set = Set.new) click to toggle source

    # File rbs-3.8.0/lib/rbs/method_type.rb, line 57
    def free_variables(set = Set.new)
      type.free_variables(set)
      block&.type&.free_variables(set)
      set.subtract(type_param_names)
    end

has_classish_type?() click to toggle source

    # File rbs-3.8.0/lib/rbs/method_type.rb, line 125
    def has_classish_type?
      each_type.any? {|type| type.has_classish_type? }
    end

has_self_type?() click to toggle source

    # File rbs-3.8.0/lib/rbs/method_type.rb, line 121
    def has_self_type?
      each_type.any? {|type| type.has_self_type? }
    end

map_type(&block) click to toggle source

    # File rbs-3.8.0/lib/rbs/method_type.rb, line 63
    def map_type(&block)
      self.class.new(
        type_params: type_params,
        type: type.map_type(&block),
        block: self.block&.map_type(&block),
        location: location
      )
    end

map_type_bound(&block) click to toggle source

    # File rbs-3.8.0/lib/rbs/method_type.rb, line 72
    def map_type_bound(&block)
      if type_params.empty?
        self
      else
        self.update(
          type_params: type_params.map {|param|
            param.map_type(&block)
          }
        )
      end
    end

sub(s) click to toggle source

    # File rbs-3.8.0/lib/rbs/method_type.rb, line 33
    def sub(s)
      sub = s.without(*type_param_names)

      self.class.new(
        type_params: type_params.map do |param|
          param.map_type do |bound|
            bound.map_type {|ty| ty.sub(sub) }
          end
        end,
        type: type.sub(sub),
        block: block&.sub(sub),
        location: location
      )
    end

to_json(state = _ = nil) click to toggle source

    # File rbs-3.8.0/lib/rbs/method_type.rb, line 24
    def to_json(state = _ = nil)
      {
        type_params: type_params,
        type: type,
        block: block,
        location: location
      }.to_json(state)
    end

to_s() click to toggle source

    # File rbs-3.8.0/lib/rbs/method_type.rb, line 98
    def to_s
      block_self_binding = Types::SelfTypeBindingHelper.self_type_binding_to_s(block&.self_type)

      s = case
          when (b = block) && b.required
            "(#{type.param_to_s}) { (#{b.type.param_to_s}) #{block_self_binding}-> #{b.type.return_to_s} } -> #{type.return_to_s}"
          when b = block
            "(#{type.param_to_s}) ?{ (#{b.type.param_to_s}) #{block_self_binding}-> #{b.type.return_to_s} } -> #{type.return_to_s}"
          else
            "(#{type.param_to_s}) -> #{type.return_to_s}"
          end

      if type_params.empty?
        s
      else
        "[#{type_params.join(", ")}] #{s}"
      end
    end

type_param_names() click to toggle source

    # File rbs-3.8.0/lib/rbs/method_type.rb, line 117
    def type_param_names
      type_params.map(&:name)
    end

update(type_params: self.type_params, type: self.type, block: self.block, location: self.location) click to toggle source

    # File rbs-3.8.0/lib/rbs/method_type.rb, line 48
    def update(type_params: self.type_params, type: self.type, block: self.block, location: self.location)
      self.class.new(
        type_params: type_params,
        type: type,
        block: block,
        location: location
      )
    end

with_nonreturn_void?() click to toggle source

    # File rbs-3.8.0/lib/rbs/method_type.rb, line 129
    def with_nonreturn_void?
      if type.with_nonreturn_void?
        true
      else
        if block = block()
          block.type.with_nonreturn_void? || block.self_type&.with_nonreturn_void? || false
        else
          false
        end
      end
    end