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!
Subscribe to get articles like this in your inbox, every week.
You'll get my latest blog posts as well as article, book and podcast recommendations. All about tech.