Class: RBS::Trace::ReturnValueVisitor

Inherits:
Prism::BasicVisitor
  • Object
show all
Defined in:
lib/rbs/trace/return_value_visitor.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeReturnValueVisitor

Returns a new instance of ReturnValueVisitor.



20
21
22
23
24
# File 'lib/rbs/trace/return_value_visitor.rb', line 20

def initialize
  @void_types = {} #: Hash[Array[Integer|Symbol], bool]
  @parents = [] #: Array[Prism::Node]
  super
end

Class Method Details

.parse_file(path) ⇒ Object



8
9
10
11
12
13
# File 'lib/rbs/trace/return_value_visitor.rb', line 8

def parse_file(path)
  new.tap do |visitor|
    result = Prism.parse_file(path)
    visitor.visit(result.value)
  end
end

Instance Method Details

#visit_call_node(node) ⇒ Object



39
40
41
42
43
44
# File 'lib/rbs/trace/return_value_visitor.rb', line 39

def visit_call_node(node)
  key = [node.location.start_line, node.name]
  @void_types[key] = void?(node)

  visit_child_nodes(node)
end

#visit_child_nodes(node) ⇒ Object



32
33
34
35
36
# File 'lib/rbs/trace/return_value_visitor.rb', line 32

def visit_child_nodes(node)
  @parents.push(node)
  super
  @parents.pop
end

#void_type?(lineno, name) ⇒ Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/rbs/trace/return_value_visitor.rb', line 27

def void_type?(lineno, name)
  @void_types.fetch([lineno, name], false)
end