class RuboCop::Cop::Lint::UselessSetterCall
end
x
x.attr = 5
x = Something.new
def something
# good
@example
end
x.attr = 5
x = Something.new
def something
# bad
@example
expression of a function definition.
This cop checks for setter call to local variable as the final
def last_expression(body)
def last_expression(body) expression = body.begin_type? ? body.children : body expression.is_a?(Array) ? expression.last : expression end
def on_method_def(_node, _method_name, _args, body)
def on_method_def(_node, _method_name, _args, body) return unless body last_expr = last_expression(body) 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
def setter_call_to_local_variable?(node)
def setter_call_to_local_variable?(node) return unless node && node.send_type? receiver, method, _args = *node return unless receiver && receiver.lvar_type? method =~ /(?:\w|\[\])=$/ end