Class: RBI::SigBuilder

Inherits:
ASTVisitor show all
Extended by:
T::Sig
Defined in:
lib/rbi/parser.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ASTVisitor

#visit_all

Constructor Details

#initializeSigBuilder

Returns a new instance of SigBuilder.



403
404
405
406
# File 'lib/rbi/parser.rb', line 403

def initialize
  super
  @current = T.let(Sig.new, Sig)
end

Instance Attribute Details

#currentObject

Returns the value of attribute current.



400
401
402
# File 'lib/rbi/parser.rb', line 400

def current
  @current
end

Class Method Details

.build(node) ⇒ Object



393
394
395
396
397
# File 'lib/rbi/parser.rb', line 393

def self.build(node)
  v = SigBuilder.new
  v.visit_all(node.children[2..-1])
  v.current
end

Instance Method Details

#visit(node) ⇒ Object



409
410
411
412
413
414
415
# File 'lib/rbi/parser.rb', line 409

def visit(node)
  return unless node
  case node.type
  when :send
    visit_send(node)
  end
end

#visit_send(node) ⇒ Object



418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
# File 'lib/rbi/parser.rb', line 418

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 = visit_expr(child.children[1])
      @current << SigParam.new(name, type)
    end
  when :returns
    @current.return_type = visit_expr(node.children[2])
  when :void
    @current.return_type = nil
  else
    raise "#{node.location.line}: Unhandled #{name}"
  end
end