Class: Taski::StaticAnalysis::Visitor
- Inherits:
-
Prism::Visitor
- Object
- Prism::Visitor
- Taski::StaticAnalysis::Visitor
- Defined in:
- lib/taski/static_analysis/visitor.rb
Instance Attribute Summary collapse
-
#dependencies ⇒ Object
readonly
Returns the value of attribute dependencies.
Instance Method Summary collapse
-
#initialize(target_task_class, target_method = :run) ⇒ Visitor
constructor
A new instance of Visitor.
- #visit_call_node(node) ⇒ Object
- #visit_class_node(node) ⇒ Object
- #visit_constant_path_node(node) ⇒ Object
- #visit_constant_read_node(node) ⇒ Object
- #visit_def_node(node) ⇒ Object
- #visit_module_node(node) ⇒ Object
Constructor Details
#initialize(target_task_class, target_method = :run) ⇒ Visitor
12 13 14 15 16 17 18 19 |
# File 'lib/taski/static_analysis/visitor.rb', line 12 def initialize(target_task_class, target_method = :run) super() @target_task_class = target_task_class @target_method = target_method @dependencies = Set.new @in_target_method = false @current_namespace_path = [] end |
Instance Attribute Details
#dependencies ⇒ Object (readonly)
Returns the value of attribute dependencies.
8 9 10 |
# File 'lib/taski/static_analysis/visitor.rb', line 8 def dependencies @dependencies end |
Instance Method Details
#visit_call_node(node) ⇒ Object
39 40 41 42 |
# File 'lib/taski/static_analysis/visitor.rb', line 39 def visit_call_node(node) detect_task_dependency(node) if @in_target_method super end |
#visit_class_node(node) ⇒ Object
21 22 23 |
# File 'lib/taski/static_analysis/visitor.rb', line 21 def visit_class_node(node) within_namespace(extract_constant_name(node.constant_path)) { super } end |
#visit_constant_path_node(node) ⇒ Object
50 51 52 53 54 |
# File 'lib/taski/static_analysis/visitor.rb', line 50 def visit_constant_path_node(node) # For Section.impl, detect constants as impl candidates (static dependencies) detect_impl_candidate(node) if in_impl_method? super end |
#visit_constant_read_node(node) ⇒ Object
44 45 46 47 48 |
# File 'lib/taski/static_analysis/visitor.rb', line 44 def visit_constant_read_node(node) # For Section.impl, detect constants as impl candidates (static dependencies) detect_impl_candidate(node) if in_impl_method? super end |
#visit_def_node(node) ⇒ Object
29 30 31 32 33 34 35 36 37 |
# File 'lib/taski/static_analysis/visitor.rb', line 29 def visit_def_node(node) if node.name == @target_method && in_target_class? @in_target_method = true super @in_target_method = false else super end end |
#visit_module_node(node) ⇒ Object
25 26 27 |
# File 'lib/taski/static_analysis/visitor.rb', line 25 def visit_module_node(node) within_namespace(extract_constant_name(node.constant_path)) { super } end |