class RBI::SigBuilder

Attributes

current[RW]

Public Class Methods

build(node) click to toggle source
# File lib/rbi/parser.rb, line 493
def self.build(node)
  v = SigBuilder.new
  v.visit_all(node.children[2..-1])
  v.current
end
new() click to toggle source
Calls superclass method
# File lib/rbi/parser.rb, line 503
def initialize
  super
  @current = T.let(Sig.new, Sig)
end

Public Instance Methods

visit(node) click to toggle source
# File lib/rbi/parser.rb, line 509
def visit(node)
  return unless node
  case node.type
  when :send
    visit_send(node)
  end
end
visit_send(node) click to toggle source
# File lib/rbi/parser.rb, line 518
def visit_send(node)
  visit(node.children[0]) if node.children[0]
  name = node.children[1]
  case name
  when :abstract
    @current.is_abstract = true
  when :override
    @current.is_override = true
  when :overridable
    @current.is_overridable = true
  when :checked
    @current.checked = node.children[2].children[0]
  when :type_parameters
    node.children[2..-1].each do |child|
      @current.type_params << child.children[0].to_s
    end
  when :params
    node.children[2].children.each do |child|
      name = child.children[0].children[0].to_s
      type = parse_expr(child.children[1])
      @current << SigParam.new(name, type)
    end
  when :returns
    @current.return_type = parse_expr(node.children[2])
  when :void
    @current.return_type = nil
  else
    raise "#{node.location.line}: Unhandled #{name}"
  end
end