Issue #11547 has been updated by fxn (Xavier Noria).


I realized that Object does not halt the lookup, but it is rather just skipped. For example, constants in ancestors of Object are still accessible as qualified constants:

~~~ ruby
module Kernel
  X = 1
end

X         # top-level accessible constant
String::X # still accessible this way
~~~

Is that intentional?



----------------------------------------
Feature #11547: remove top-level constant lookup
https://bugs.ruby-lang.org/issues/11547#change-67672

* Author: gucki1 (Corin Langosch)
* Status: Closed
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
If ruby cannot find a class in the specified scope it uses the top-level constant of the same name if it exists and emits a warning:

~~~
irb(main):006:0> class Auth; end
=> nil
irb(main):007:0> class Twitter; end
=> nil
irb(main):008:0> Twitter::Auth
(irb):8: warning: toplevel constant Auth referenced by Twitter::Auth
=> Auth
~~~

In some cases this is not playing nicely with rails autoloading as can be seen here: https://github.com/rails/rails/issues/6931. Many more issues like this exist.

Imo I don't see any reason why this fallback makes any sense. So I'd like to suggest to remove it completely or at least add an option to disable it.





-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>