Bug #10661
closedThe "possible reference to past scope" warning is quite frustrating and is forcing me to change my variable names from what I want
Description
I find the change in r48986 to be quite frustrating. It's forcing me to change many of my variable and/or method names if I want to keep my ruby code warning free (which is a thing we enforce in the RSpec code base).
The problem I see is that, in my experience, it's quite common to use the same name for a local variable in one part of a file that you later use for an arg-less method name at a later part in the file.
Consider this ruby command:
ruby -w -e '[1, 2, 3].sample.tap { |rand| puts "Random value: #{rand}" }; puts "Another random value: #{rand}"'
This produces:
-e:1: warning: possible reference to past scope - rand
Random value: 1
Another random value: 0.7483347748677992
Changing the rand
call to self.rand
is one solution I would consider to avoid the warning, but it doesn't work here because rand
is private
(as it comes from Kernel
), so I'm forced to change the block local variable name to a name I do not want.
In RSpec it's an even bigger issue as it's quite common to have a common name for a certain collaborator role in your tests where in some cases there's a helper method (often defined using let
) that exposes an object for that role and in other tests you might build it in-line and assign it to a local. In our rspec-mocks test suite, we had 280 warnings from this. I went through and changed many variable and method names to names I do not like as much (e.g. the_dbl
instead of dbl
or klazz
instead of klass
) simply to avoid this warning:
https://github.com/rspec/rspec-mocks/commit/3b909ed1a951bbca340ea98c27ab65da7f43881c
While I can understand the kinds of errors this warnings helps you avoid, I think that it is too strict and noisy in its current form.