Class: RbsActiverecord::Parser::Visitor

Inherits:
Prism::Visitor
  • Object
show all
Defined in:
lib/rbs_activerecord/parser/visitor.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeVisitor

: void



9
10
11
12
13
14
# File 'lib/rbs_activerecord/parser/visitor.rb', line 9

def initialize #: void
  super

  @context = []
  @decls = {}
end

Instance Attribute Details

#contextObject (readonly)

: Array[Prism::ClassNode | Prism::ModuleNode]



6
7
8
# File 'lib/rbs_activerecord/parser/visitor.rb', line 6

def context
  @context
end

#declsObject (readonly)

: Hash[String, Array]



7
8
9
# File 'lib/rbs_activerecord/parser/visitor.rb', line 7

def decls
  @decls
end

Instance Method Details

#current_namespaceObject

: String



16
17
18
# File 'lib/rbs_activerecord/parser/visitor.rb', line 16

def current_namespace #: String
  context.map { |node| Parser.eval_node(node.constant_path) }.join("::")
end

#visit_call_node(node) ⇒ Object



41
42
43
44
# File 'lib/rbs_activerecord/parser/visitor.rb', line 41

def visit_call_node(node)
  decls[current_namespace] ||= []
  decls.fetch(current_namespace) << node
end

#visit_class_node(node) ⇒ Object



31
32
33
34
35
36
37
38
# File 'lib/rbs_activerecord/parser/visitor.rb', line 31

def visit_class_node(node)
  context << node
  begin
    super
  ensure
    context.pop
  end
end

#visit_def_node(node) ⇒ Object



47
48
49
# File 'lib/rbs_activerecord/parser/visitor.rb', line 47

def visit_def_node(node)
  # ignore
end

#visit_module_node(node) ⇒ Object



21
22
23
24
25
26
27
28
# File 'lib/rbs_activerecord/parser/visitor.rb', line 21

def visit_module_node(node)
  context << node
  begin
    super
  ensure
    context.pop
  end
end