Rubocop Naming/MemoizedInstanceVariableName warning
Last week I upgraded Rubocop to 0.53. I ran the test suite and noticed a new warning called Naming/MemoizedInstanceVariableName
, which targets methods that use an instance variable for memoization. Here is an example that would trigger the warning:
def greeting
@hello ||= user_greeting
end
Rubocop raises an error because the method name is different from the name of the instance variable, used for memoization. This seems sensible so I started working through the failing tests and fixing them. As I fixed tests I began to find bugs. I realised that the Naming/MemoizedInstanceVariableName
warning is super useful. Here’s an example of a bug that I uncovered:
def user
@user ||= User.create!
end
def admin
@user ||= Admin.create!
end
This bug occurred in my test code, probably due to careless copy/pasting. It could occur in application code just as easily. The bug is that calling the user
method will create a User
and memoize it. When admin
is called, instead of creating an Admin
, the User
object is returned.
Upgrading ensures that this type of bug will never occur again. Thanks Rubocop!