Project

General

Profile

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

Added by myronmarston (Myron Marston) about 6 years ago. Updated about 6 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin12.0]
[ruby-core:67162]

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.


Related issues

Related to Ruby master - Feature #14153: [PATCH] resurrection of # -*- warn_past_scope: true -*-OpenActions

Also available in: Atom PDF