class RuboCop::Cop::Lint::UselessSetterCall

This cop checks for setter call to local variable as the final expression of a function definition.

@example

def something
  x = Something.new
  x.attr = 5
end

Constants

ASSIGNMENT_TYPES
MSG

Private Instance Methods

on_method_def(_node, _method_name, _args, body) click to toggle source
# File lib/rubocop/cop/lint/useless_setter_call.rb, line 23
def on_method_def(_node, _method_name, _args, body)
  return unless body

  expression = if body.type == :begin
                 body.children
               else
                 body
               end

  last_expr = expression.is_a?(Array) ? expression.last : expression

  return unless setter_call_to_local_variable?(last_expr)

  tracker = MethodVariableTracker.new(body)
  receiver, = *last_expr
  variable_name, = *receiver
  return unless tracker.contain_local_object?(variable_name)

  add_offense(receiver,
              :name,
              format(MSG, receiver.loc.name.source))
end
setter_call_to_local_variable?(node) click to toggle source
# File lib/rubocop/cop/lint/useless_setter_call.rb, line 46
def setter_call_to_local_variable?(node)
  return unless node && node.type == :send
  receiver, method, _args = *node
  return unless receiver && receiver.type == :lvar
  method =~ /(?:\w|\[\])=$/
end