Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

YARD rake task crash #1603

Open
dvandersluis opened this issue Jan 30, 2025 · 0 comments
Open

YARD rake task crash #1603

dvandersluis opened this issue Jan 30, 2025 · 0 comments

Comments

@dvandersluis
Copy link

dvandersluis commented Jan 30, 2025

I am not exactly sure what the cause of this is, but the following code (simplified from real code) causes the YARD rake task to crash when in a file that's being evaluated:

class Test
  def foo
    x do
      next
    end
  end

  def bar
    y do |var|
      case var
      when :def
        next unless z?
      end
    end
  end
end
Crash backlog
rake aborted!
RangeError: cannot get the first element of beginless range (RangeError)
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/yard-0.9.37/lib/yard/parser/ruby/ruby_parser.rb:452:in 'Range#first'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/yard-0.9.37/lib/yard/parser/ruby/ruby_parser.rb:452:in 'YARD::Parser::Ruby::RipperParser#on_unless_mod'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/yard-0.9.37/lib/yard/parser/ruby/ruby_parser.rb:56:in 'Ripper#parse'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/yard-0.9.37/lib/yard/parser/ruby/ruby_parser.rb:56:in 'YARD::Parser::Ruby::RipperParser#parse'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/yard-0.9.37/lib/yard/parser/ruby/ruby_parser.rb:17:in 'YARD::Parser::Ruby::RubyParser#parse'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/yard-0.9.37/lib/yard/parser/source_parser.rb:442:in 'YARD::Parser::SourceParser#parse'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/yard-0.9.37/lib/yard/parser/source_parser.rb:45:in 'block in YARD::Parser::OrderedParser#parse'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/yard-0.9.37/lib/yard/logging.rb:236:in 'YARD::Logger#capture'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/yard-0.9.37/lib/yard/parser/source_parser.rb:44:in 'YARD::Parser::OrderedParser#parse'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/yard-0.9.37/lib/yard/parser/source_parser.rb:371:in 'YARD::Parser::SourceParser.parse_in_order'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/yard-0.9.37/lib/yard/parser/source_parser.rb:114:in 'block in YARD::Parser::SourceParser.parse'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/yard-0.9.37/lib/yard/logging.rb:145:in 'YARD::Logger#enter_level'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/yard-0.9.37/lib/yard/parser/source_parser.rb:113:in 'YARD::Parser::SourceParser.parse'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/yard-0.9.37/lib/yard.rb:20:in 'YARD.parse'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/yard-0.9.37/lib/yard/cli/yardoc.rb:259:in 'block in YARD::CLI::Yardoc#run'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/yard-0.9.37/lib/yard/serializers/yardoc_serializer.rb:56:in 'YARD::Serializers::YardocSerializer#lock_for_writing'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/yard-0.9.37/lib/yard/registry_store.rb:202:in 'YARD::RegistryStore#lock_for_writing'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/yard-0.9.37/lib/yard/registry.rb:210:in 'YARD::Registry.lock_for_writing'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/yard-0.9.37/lib/yard/cli/yardoc.rb:258:in 'YARD::CLI::Yardoc#run'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/yard-0.9.37/lib/yard/rake/yardoc_task.rb:74:in 'block in YARD::Rake::YardocTask#define'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/rake-13.1.0/lib/rake/task.rb:281:in 'block in Rake::Task#execute'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/rake-13.1.0/lib/rake/task.rb:281:in 'Array#each'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/rake-13.1.0/lib/rake/task.rb:281:in 'Rake::Task#execute'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/rake-13.1.0/lib/rake/task.rb:219:in 'block in Rake::Task#invoke_with_call_chain'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/rake-13.1.0/lib/rake/task.rb:199:in 'Monitor#synchronize'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/rake-13.1.0/lib/rake/task.rb:199:in 'Rake::Task#invoke_with_call_chain'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/rake-13.1.0/lib/rake/task.rb:188:in 'Rake::Task#invoke'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/rake-13.1.0/lib/rake/application.rb:182:in 'Rake::Application#invoke_task'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/rake-13.1.0/lib/rake/application.rb:138:in 'block (2 levels) in Rake::Application#top_level'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/rake-13.1.0/lib/rake/application.rb:138:in 'Array#each'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/rake-13.1.0/lib/rake/application.rb:138:in 'block in Rake::Application#top_level'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/rake-13.1.0/lib/rake/application.rb:147:in 'Rake::Application#run_with_threads'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/rake-13.1.0/lib/rake/application.rb:132:in 'Rake::Application#top_level'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/rake-13.1.0/lib/rake/application.rb:83:in 'block in Rake::Application#run'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/rake-13.1.0/lib/rake/application.rb:208:in 'Rake::Application#standard_exception_handling'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/rake-13.1.0/lib/rake/application.rb:80:in 'Rake::Application#run'
/Users/daniel/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/rake-13.1.0/exe/rake:27:in ''
/Users/daniel/.rbenv/versions/3.4.1/bin/rake:25:in 'Kernel#load'
/Users/daniel/.rbenv/versions/3.4.1/bin/rake:25:in ''

If the symbol on line 11 is changed from :def to something else, YARD no longer crashes. If either of the next keywords on lines 4 and 12 are changed, it no longer crashes either. If either method is removed, it no longer crashes as well.

I'm using YARD 0.9.37 on Ruby 3.4.1. My rake task setup looks like this:

YARD::Rake::YardocTask.new do |task|
  task.files = ['test.rb']
  task.options = ['--no-output']
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant