From: naruse@... Date: 2015-02-05T08:14:16+00:00 Subject: [ruby-core:68019] [ruby-trunk - Bug #10661] The "possible reference to past scope" warning is quite frustrating and is forcing me to change my variable names from what I want Issue #10661 has been updated by Yui NARUSE. Backport changed from 2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: REQUIRED to 2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: DONE ruby_2_2 r49509 merged revision(s) 49082. ---------------------------------------- Bug #10661: The "possible reference to past scope" warning is quite frustrating and is forcing me to change my variable names from what I want https://bugs.ruby-lang.org/issues/10661#change-51406 * Author: Myron Marston * Status: Closed * Priority: Normal * Assignee: * ruby -v: ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin12.0] * Backport: 2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: DONE ---------------------------------------- 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. -- https://bugs.ruby-lang.org/