Class: CallCollector
- Inherits:
-
Prism::Visitor
- Object
- Prism::Visitor
- CallCollector
- Defined in:
- lib/enola/providers/prism/enola_prism_provider.rb
Instance Attribute Summary collapse
-
#facts ⇒ Object
readonly
Returns the value of attribute facts.
Instance Method Summary collapse
-
#initialize(file) ⇒ CallCollector
constructor
A new instance of CallCollector.
- #visit_call_node(node) ⇒ Object
- #visit_class_node(node) ⇒ Object
- #visit_def_node(node) ⇒ Object
- #visit_module_node(node) ⇒ Object
-
#visit_singleton_class_node(node) ⇒ Object
An eigenclass body (class << self) pushes an unnameable scope: calls inside it degrade to name-only rather than being attributed to a name this script cannot lexically prove.
Constructor Details
#initialize(file) ⇒ CallCollector
Returns a new instance of CallCollector.
52 53 54 55 56 57 58 59 |
# File 'lib/enola/providers/prism/enola_prism_provider.rb', line 52 def initialize(file) @file = file @scopes = [] @methods = [] @facts = [] @chained = [] super() end |
Instance Attribute Details
#facts ⇒ Object (readonly)
Returns the value of attribute facts.
50 51 52 |
# File 'lib/enola/providers/prism/enola_prism_provider.rb', line 50 def facts @facts end |
Instance Method Details
#visit_call_node(node) ⇒ Object
82 83 84 85 86 87 88 89 |
# File 'lib/enola/providers/prism/enola_prism_provider.rb', line 82 def visit_call_node(node) record(node) receiver = node.receiver chained = receiver.is_a?(Prism::CallNode) && receiver.name.to_s == "new" ? node.name.to_s : nil @chained.push(chained) super @chained.pop end |
#visit_class_node(node) ⇒ Object
61 62 63 |
# File 'lib/enola/providers/prism/enola_prism_provider.rb', line 61 def visit_class_node(node) with_scope(constant_name(node.constant_path)) { super } end |
#visit_def_node(node) ⇒ Object
76 77 78 79 80 |
# File 'lib/enola/providers/prism/enola_prism_provider.rb', line 76 def visit_def_node(node) @methods.push(node.name.to_s) super @methods.pop end |
#visit_module_node(node) ⇒ Object
65 66 67 |
# File 'lib/enola/providers/prism/enola_prism_provider.rb', line 65 def visit_module_node(node) with_scope(constant_name(node.constant_path)) { super } end |
#visit_singleton_class_node(node) ⇒ Object
An eigenclass body (class << self) pushes an unnameable scope: calls inside it degrade to name-only rather than being attributed to a name this script cannot lexically prove.
72 73 74 |
# File 'lib/enola/providers/prism/enola_prism_provider.rb', line 72 def visit_singleton_class_node(node) with_scope(nil) { super } end |