Class: Lilac::CLI::ScriptAnalyzer::Visitor
- Inherits:
-
Prism::Visitor
- Object
- Prism::Visitor
- Lilac::CLI::ScriptAnalyzer::Visitor
- Defined in:
- lib/lilac/cli/lint/script_analyzer.rb
Instance Method Summary collapse
-
#initialize ⇒ Visitor
constructor
A new instance of Visitor.
- #to_result ⇒ Object
- #visit_call_node(node) ⇒ Object
- #visit_def_node(node) ⇒ Object
- #visit_instance_variable_and_write_node(node) ⇒ Object
-
#visit_instance_variable_operator_write_node(node) ⇒ Object
@x ||= signal(...)— operator-write counts as declaration for the same reason as plain=. - #visit_instance_variable_or_write_node(node) ⇒ Object
- #visit_instance_variable_read_node(node) ⇒ Object
- #visit_instance_variable_write_node(node) ⇒ Object
Constructor Details
#initialize ⇒ Visitor
Returns a new instance of Visitor.
159 160 161 162 163 164 165 166 |
# File 'lib/lilac/cli/lint/script_analyzer.rb', line 159 def initialize super @declared_signals = {} @declared_methods = {} @referenced_ivars = [] @assigned_ivars = [] @method_calls = [] end |
Instance Method Details
#to_result ⇒ Object
168 169 170 171 172 173 174 175 176 |
# File 'lib/lilac/cli/lint/script_analyzer.rb', line 168 def to_result Result.new( declared_signals: @declared_signals, declared_methods: @declared_methods, referenced_ivars: @referenced_ivars.uniq, method_calls: @method_calls.uniq, assigned_ivars: @assigned_ivars.uniq, ) end |
#visit_call_node(node) ⇒ Object
218 219 220 221 222 |
# File 'lib/lilac/cli/lint/script_analyzer.rb', line 218 def visit_call_node(node) @method_calls << node.name.to_s (node) super end |
#visit_def_node(node) ⇒ Object
178 179 180 181 |
# File 'lib/lilac/cli/lint/script_analyzer.rb', line 178 def visit_def_node(node) @declared_methods[node.name.to_s] ||= node.location.start_line super end |
#visit_instance_variable_and_write_node(node) ⇒ Object
208 209 210 211 |
# File 'lib/lilac/cli/lint/script_analyzer.rb', line 208 def visit_instance_variable_and_write_node(node) record_ivar_op_write(node) super end |
#visit_instance_variable_operator_write_node(node) ⇒ Object
@x ||= signal(...) — operator-write counts as declaration
for the same reason as plain =. Prism splits this into
three node kinds depending on the operator: += etc. use
InstanceVariableOperatorWriteNode, ||= uses
InstanceVariableOrWriteNode, &&= uses
InstanceVariableAndWriteNode.
198 199 200 201 |
# File 'lib/lilac/cli/lint/script_analyzer.rb', line 198 def visit_instance_variable_operator_write_node(node) record_ivar_op_write(node) super end |
#visit_instance_variable_or_write_node(node) ⇒ Object
203 204 205 206 |
# File 'lib/lilac/cli/lint/script_analyzer.rb', line 203 def visit_instance_variable_or_write_node(node) record_ivar_op_write(node) super end |
#visit_instance_variable_read_node(node) ⇒ Object
213 214 215 216 |
# File 'lib/lilac/cli/lint/script_analyzer.rb', line 213 def visit_instance_variable_read_node(node) @referenced_ivars << node.name.to_s super end |
#visit_instance_variable_write_node(node) ⇒ Object
183 184 185 186 187 188 189 190 |
# File 'lib/lilac/cli/lint/script_analyzer.rb', line 183 def visit_instance_variable_write_node(node) name = node.name.to_s @assigned_ivars << name if signal_factory_call?(node.value) @declared_signals[name] ||= node.location.start_line end super end |