Project

General

Profile

Bug #18624

Updated by pocke (Masataka Kuwabara) about 2 years ago

`const_source_location` returns `[false, 0]` unexpectedly with the following code. 


 ```ruby 
 # test.rb 
 path = File.join(__dir__, 'test2') 
 Object.autoload 'Test2', path 
 require path 

 p Object.const_source_location 'Test2' 
 ``` 

 ```ruby 
 # test2.rb 
 class Test2 
 end 
 ``` 

 ```bash 
 $ ruby -v test.rb 
 ruby 3.2.0dev (2022-03-11T08:38:13Z master 2e4516be26) [x86_64-linux] 
 [false, 0] 
 ``` 


 I expect it returns `['/path/to/test2.rb', 2]`, but it doesn't. 
 Ruby 2.7 ~ 3.1 have the same behavior. 


 I actually encountered this problem in a Rails app with Zeitwerk. The following codes are a reproducing example with Zeitwerk. 
 `loader.setup` calls `autoload`, so it causes the same problem. 

 ```ruby 
 # test.rb 
 require "zeitwerk" 
 loader = Zeitwerk::Loader.for_gem 
 loader.setup 

 require File.join(__dir__, 'test2') 

 p Zeitwerk::VERSION 
 p Object.const_source_location 'Test2' 
 ``` 

 ```ruby 
 # test2.rb 
 class Test2 
 end 
 ```

Back