Class: Taski::StaticAnalysis::Visitor

Inherits:
Prism::Visitor
  • Object
show all
Defined in:
lib/taski/static_analysis/visitor.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#dependenciesObject (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