Class: Lilac::CLI::ScriptAnalyzer::Visitor

Inherits:
Prism::Visitor
  • Object
show all
Defined in:
lib/lilac/cli/lint/script_analyzer.rb

Instance Method Summary collapse

Constructor Details

#initializeVisitor

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_resultObject



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
  record_metaprogramming_target(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