class Reek::SmellDetectors::InstanceVariableAssumption
The InstanceVariableAssumption
class is responsible for detecting directly access of instance variables in a class that does not define them in its initialize method.
Public Class Methods
Source
# File lib/reek/smell_detectors/instance_variable_assumption.rb, line 13 def self.contexts [:class] end
Public Instance Methods
Source
# File lib/reek/smell_detectors/instance_variable_assumption.rb, line 22 def sniff assumptions = (variables_from_context - variables_from_initializers).uniq assumptions.map do |assumption| build_smell_warning(assumption) end end
Checks klass
for instance variables assumptions.
@return [Array<SmellWarning>]
Private Instance Methods
Source
# File lib/reek/smell_detectors/instance_variable_assumption.rb, line 36 def build_smell_warning(assumption) message = "assumes too much for instance variable '#{assumption}'" smell_warning( lines: [source_line], message: message, parameters: { assumption: assumption.to_s }) end
Source
# File lib/reek/smell_detectors/instance_variable_assumption.rb, line 32 def method_expressions @method_expressions ||= context.node_instance_methods end
Source
# File lib/reek/smell_detectors/instance_variable_assumption.rb, line 55 def variables_from_context method_expressions.map do |method| method.each_node(:ivar, [:or_asgn]).map(&:name) end.flatten end
Source
# File lib/reek/smell_detectors/instance_variable_assumption.rb, line 51 def variables_from_initialize method_expressions.select { |method| method.name == :initialize } end
Source
# File lib/reek/smell_detectors/instance_variable_assumption.rb, line 45 def variables_from_initializers variables_from_initialize.map do |method| method.each_node(:ivasgn).map(&:name) end.flatten end