Class: Lagoon::Analyzer::MethodReferenceVisitor
- Inherits:
-
Prism::Visitor
- Object
- Prism::Visitor
- Lagoon::Analyzer::MethodReferenceVisitor
- Defined in:
- lib/lagoon/analyzer/ast/method_reference_visitor.rb
Instance Method Summary collapse
-
#initialize(methods:, model_names:, associations:, helper_models:) ⇒ MethodReferenceVisitor
constructor
A new instance of MethodReferenceVisitor.
- #models_for(action, callbacks: []) ⇒ Object
- #visit_call_node(node) ⇒ Object
- #visit_constant_path_node(node) ⇒ Object
- #visit_constant_read_node(node) ⇒ Object
- #visit_def_node(_node) ⇒ Object
- #visit_instance_variable_write_node(node) ⇒ Object
- #visit_local_variable_write_node(node) ⇒ Object
Constructor Details
#initialize(methods:, model_names:, associations:, helper_models:) ⇒ MethodReferenceVisitor
Returns a new instance of MethodReferenceVisitor.
6 7 8 9 10 11 12 |
# File 'lib/lagoon/analyzer/ast/method_reference_visitor.rb', line 6 def initialize(methods:, model_names:, associations:, helper_models:) super() @methods = methods @model_names = model_names.to_set(&:to_s) @associations = normalize_associations(associations) @helper_models = helper_models.to_h.transform_keys(&:to_s).transform_values(&:to_s) end |
Instance Method Details
#models_for(action, callbacks: []) ⇒ Object
14 15 16 17 18 19 20 21 22 |
# File 'lib/lagoon/analyzer/ast/method_reference_visitor.rb', line 14 def models_for(action, callbacks: []) @models = Set.new @instance_variables = {} @method_stack = [] callbacks.each { |callback| analyze_method(callback.to_s) } analyze_method(action.to_s) @models end |
#visit_call_node(node) ⇒ Object
46 47 48 49 50 51 52 53 |
# File 'lib/lagoon/analyzer/ast/method_reference_visitor.rb', line 46 def visit_call_node(node) node.receiver&.accept(self) node.arguments&.accept(self) returned_models = infer_call(node) returned_models.each { |model| record_model(model) } visit_block(node.block, returned_models) if node.block end |
#visit_constant_path_node(node) ⇒ Object
32 33 34 |
# File 'lib/lagoon/analyzer/ast/method_reference_visitor.rb', line 32 def visit_constant_path_node(node) record_model(constant_path_name(node)) end |
#visit_constant_read_node(node) ⇒ Object
28 29 30 |
# File 'lib/lagoon/analyzer/ast/method_reference_visitor.rb', line 28 def visit_constant_read_node(node) record_model(node.name.to_s) end |
#visit_def_node(_node) ⇒ Object
24 25 26 |
# File 'lib/lagoon/analyzer/ast/method_reference_visitor.rb', line 24 def visit_def_node(_node) # Nested method definitions have an independent scope. end |
#visit_instance_variable_write_node(node) ⇒ Object
41 42 43 44 |
# File 'lib/lagoon/analyzer/ast/method_reference_visitor.rb', line 41 def visit_instance_variable_write_node(node) node.value&.accept(self) @instance_variables[node.name.to_s] = infer_value(node.value) end |
#visit_local_variable_write_node(node) ⇒ Object
36 37 38 39 |
# File 'lib/lagoon/analyzer/ast/method_reference_visitor.rb', line 36 def visit_local_variable_write_node(node) node.value&.accept(self) @local_variables[node.name.to_s] = infer_value(node.value) end |