class TypeProf::Core::AST::SigModuleBaseNode::SigDefNode::SigIncludeNode::SigAliasNode::SigAttrReaderNode::SigAttrWriterNode

Attributes

method_type[R]
mid[R]

Public Class Methods

new(raw_decl, lenv) click to toggle source
Calls superclass method TypeProf::Core::AST::Node::new
# File typeprof-0.30.1/lib/typeprof/core/ast/sig_decl.rb, line 305
      def initialize(raw_decl, lenv)
        super(raw_decl, lenv)
        @mid = :"#{raw_decl.name}="

        # `eval` is used to prevent TypeProf from failing to parse keyword arguments during dogfooding.
        # TODO: Remove `eval` once TypeProf supports keyword arguments.
        eval <<~RUBY
          # (raw_decl.type) -> raw_decl.type
          rbs_method_type = RBS::MethodType.new(
            type: RBS::Types::Function.new(
              required_positionals: [RBS::Types::Function::Param.new(name: nil, type: raw_decl.type, location: raw_decl.type.location)],
              optional_positionals: [],
              rest_positionals: nil,
              trailing_positionals: [],
              required_keywords: {},
              optional_keywords: {},
              rest_keywords: nil,
              return_type: raw_decl.type,
            ),
            type_params: [],
            block: nil,
            location: raw_decl.type.location,
          )
          @method_type = AST.create_rbs_func_type(rbs_method_type, [], nil, lenv)
        RUBY
      end

Public Instance Methods

attrs(= { mid: }) click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/sig_decl.rb, line 335
  def attrs = { mid: }

  def install0(genv)
    @changes.add_method_decl_box(genv, @lenv.cref.cpath, false, @mid, [@method_type], false)
    Source.new
  end
end
install0(genv) click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/sig_decl.rb, line 337
def install0(genv)
  @changes.add_method_decl_box(genv, @lenv.cref.cpath, false, @mid, [@method_type], false)
  Source.new
end
subnodes(= { method_type: }) click to toggle source
# File typeprof-0.30.1/lib/typeprof/core/ast/sig_decl.rb, line 334
  def subnodes = { method_type: }
  def attrs = { mid: }

  def install0(genv)
    @changes.add_method_decl_box(genv, @lenv.cref.cpath, false, @mid, [@method_type], false)
    Source.new
  end
end

class SigAttrAccessorNode < Node
  def initialize(raw_decl, lenv)
    super(raw_decl, lenv)
    @reader = SigAttrReaderNode.new(raw_decl, lenv)
    @writer = SigAttrWriterNode.new(raw_decl, lenv)
  end

  attr_reader :reader, :writer

  def subnodes = { reader:, writer: }

  def install0(genv)
    @reader.install0(genv)
    @writer.install0(genv)
    Source.new
  end
end

class SigConstNode < Node
  def initialize(raw_decl, lenv)
    super(raw_decl, lenv)
    @cpath = AST.resolve_rbs_name(raw_decl.name, lenv)
    @type = AST.create_rbs_type(raw_decl.type, lenv)
  end

  attr_reader :cpath, :type
  def subnodes = { type: }
  def attrs = { cpath: }

  def define0(genv)
    @type.define(genv)
    mod = genv.resolve_const(@cpath)
    mod.add_decl(self)
    mod
  end

  def define_copy(genv)
    mod = genv.resolve_const(@cpath)
    mod.add_decl(self)
    mod.remove_decl(@prev_node)
    super(genv)
  end

  def undefine0(genv)
    genv.resolve_const(@cpath).remove_decl(self)
    @type.undefine(genv)
  end

  def install0(genv)
    box = @changes.add_type_read_box(genv, @type)
    @changes.add_edge(genv, box.ret, @static_ret.vtx)
    box.ret
  end
end

class SigTypeAliasNode < Node
  def initialize(raw_decl, lenv)
    super(raw_decl, lenv)
    @cpath = AST.resolve_rbs_name(raw_decl.name, lenv)
    @name = @cpath.pop
    @type = AST.create_rbs_type(raw_decl.type, lenv)
    @params = raw_decl.type_params.map {|param| param.name }
  end

  attr_reader :cpath, :name, :type, :params

  def define0(genv)
    @type.define(genv)
    tae = genv.resolve_type_alias(@cpath, @name)
    tae.add_decl(self)
    tae
  end

  def define_copy(genv)
    tae = genv.resolve_type_alias(@cpath, @name)
    tae.add_decl(self)
    tae.remove_decl(@prev_node)
    super(genv)
  end

  def undefine0(genv)
    tae = genv.resolve_type_alias(@cpath, @name)
    tae.remove_decl(self)
    @type.undefine(genv)
  end

  def install0(genv)
    Source.new
  end
end

class SigGlobalVariableNode < Node
  def initialize(raw_decl, lenv)
    super(raw_decl, lenv)
    @var = raw_decl.name
    @type = AST.create_rbs_type(raw_decl.type, lenv)
  end

  attr_reader :cpath, :type
  def subnodes = { type: }
  def attrs = { cpath: }

  def define0(genv)
    @type.define(genv)
    mod = genv.resolve_gvar(@var)
    mod.add_decl(self)
    mod
  end

  def define_copy(genv)
    mod = genv.resolve_gvar(@var)
    mod.add_decl(self)
    mod.remove_decl(@prev_node)
    super(genv)
  end

  def undefine0(genv)
    genv.resolve_gvar(@var).remove_decl(self)
    @type.undefine(genv)
  end

  def install0(genv)
    box = @changes.add_type_read_box(genv, @type)
    @changes.add_edge(genv, box.ret, @static_ret.vtx)
    box.ret
  end