AaronC81 / sord

Convert YARD docs to Sorbet RBI and Ruby 3/Steep RBS files
https://sord.aaronc.cc
MIT License
293 stars 18 forks source link

Ruby 3.2 support (File.exists? has been removed) #164

Open amiel opened 1 year ago

amiel commented 1 year ago

Describe the bug

Ruby 3.2 removes File.exists?. File.exist? should be used instead.

To Reproduce

Run sord defs.rbs with ruby 3.2.

Expected behavior

I expected no exception.

Actual behavior

I get the following error:

[ERROR] undefined method `exists?' for File:Class                                                                                                                                                            
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/commander-4.6.0/lib/commander/user_interaction.rb:364:in `method_missing'                                                  
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sord-5.0.0/lib/sord/resolver.rb:35:in `block in load_gem_objects'                                                          
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sord-5.0.0/lib/sord/resolver.rb:34:in `each'                                                                               
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sord-5.0.0/lib/sord/resolver.rb:34:in `load_gem_objects'                                                                   
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sord-5.0.0/lib/sord/resolver.rb:13:in `prepare'                                                                            
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sord-5.0.0/lib/sord/resolver.rb:83:in `paths_for'                                                                          
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sord-5.0.0/lib/sord/resolver.rb:95:in `path_for'                                                                           
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sord-5.0.0/lib/sord/type_converter.rb:162:in `yard_to_parlour'                                                             
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sord-5.0.0/lib/sord/type_converter.rb:139:in `block in yard_to_parlour'                                                    
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sord-5.0.0/lib/sord/type_converter.rb:139:in `map'                                                                         
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sord-5.0.0/lib/sord/type_converter.rb:139:in `yard_to_parlour'                                                             
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sord-5.0.0/lib/sord/generator.rb:394:in `block in add_methods'                                                             
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sord-5.0.0/lib/sord/generator.rb:282:in `each'                                                                             
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sord-5.0.0/lib/sord/generator.rb:282:in `add_methods'                                                                      
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sord-5.0.0/lib/sord/generator.rb:586:in `add_namespace'                                                                    
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sord-5.0.0/lib/sord/generator.rb:603:in `block in populate'                                                                
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sord-5.0.0/lib/sord/generator.rb:603:in `each'                                                                             
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sord-5.0.0/lib/sord/generator.rb:603:in `populate'                                                                         
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sord-5.0.0/lib/sord/generator.rb:623:in `run'                                                                              
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sord-5.0.0/lib/sord/parlour_plugin.rb:77:in `generate'                                                                     
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sord-5.0.0/exe/sord:92:in `block (2 levels) in <top (required)>'
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/commander-4.6.0/lib/commander/command.rb:187:in `call'
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/commander-4.6.0/lib/commander/command.rb:157:in `run'
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/commander-4.6.0/lib/commander/runner.rb:444:in `run_active_command'
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/commander-4.6.0/lib/commander/runner.rb:58:in `run!'
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/commander-4.6.0/lib/commander/delegates.rb:18:in `run!'
         /opt/homebrew/Cellar/rbenv/1.2.0/versions/3.2.2/lib/ruby/gems/3.2.0/gems/commander-4.6.0/lib/commander/import.rb:7:in `block in <top (required)>'

Additional information

File.exists? was removed here: https://github.com/ruby/ruby/commit/bf97415c02b11a8949f715431aca9eeb6311add2.

I haven't provided a ton of extra detail in reproduction steps because I believe this is a straight-forward case. Please let me know if it's not so straight-forward and I can provide more specific information.

Bo98 commented 8 months ago

This is partially fixed in Sord 5.0.1, but 5.0.1 and later still have a restriction to only allow Parlour v5, and Ruby 3.2 support there was only added in Parlour 8.1, so using Sord as a Parlour plugin is still broken as a result.