lsegal / yard

YARD is a Ruby Documentation tool. The Y stands for "Yay!"
http://yardoc.org
MIT License
1.94k stars 397 forks source link

yardoc 0.7.4 exceptions under rubinius 1.2.0dev #471

Closed postmodern closed 12 years ago

postmodern commented 12 years ago

While installing a gem under rubinius 1.2.0dev, I noticed a bunch of these exceptions:

[error]: Unhandled exception in YARD::Handlers::Ruby::Legacy::ClassHandler:
[error]:   in `lib/ronin/database/migrations/exceptions/unknown_migration.rb`:23:

     23: class UnknownMigration < RuntimeError

[error]: TypeError: to_ary must return an Array
[error]: Stack trace:
    kernel/common/enumerable.rb:268:in `any?'
    kernel/bootstrap/array.rb:68:in `each'
    kernel/common/enumerable.rb:268:in `any?'
    /vault/0/src/rubinius/gems/1.8/gems/yard-0.7.4/lib/yard/code_objects/class_object.rb:33:in `is_exception?'
    /vault/0/src/rubinius/gems/1.8/gems/yard-0.7.4/lib/yard/code_objects/class_object.rb:15:in `initialize'
    kernel/alpha.rb:96:in `new'
lsegal commented 12 years ago

This seems like a third party issue to me for a few reasons;

First because it seems to be failing inside of Rubinius code, though the trace might be misleading. But more importantly, we only define to_ary in one place and it is done purposely to handle splatting. MRI handles this behavior in 1.9, Rubinius should too... The commit is here 26607e05b568171f7858bed1e6c136bdc3205ced for reference

FYI, I should add that even 1.8.6 accepts this: http://codepad.org/BGzRCznt (not sure how long this URL will last). A bug should probably be filed with Rubinius for this.

postmodern commented 12 years ago

Tested yardoc again on some trivial code and found an exception coming from yardoc. RubyGems was likely mangling the backtraces.

mkdir -p test_yard/lib/
cd test_yard/
cat >test_yard/lib/test.rb
module TestYard
  class Test
  end
end
EOF

$ rbx -S yardoc
[error]: Unhandled exception in YARD::Handlers::Ruby::Legacy::ClassHandler:
[error]:   in `lib/test_yard.rb`:2:

     2: class Test

[error]: TypeError: to_ary must return an Array
[error]: Stack trace:
    kernel/common/enumerable.rb:268:in `any?'
    kernel/bootstrap/array.rb:68:in `each'
    kernel/common/enumerable.rb:268:in `any?'
    /vault/0/src/rubinius/gems/1.8/gems/yard-0.7.4/lib/yard/code_objects/class_object.rb:33:in `is_exception?'
    /vault/0/src/rubinius/gems/1.8/gems/yard-0.7.4/lib/yard/code_objects/class_object.rb:15:in `initialize'
    kernel/alpha.rb:96:in `new'

An exception occurred running /vault/0/src/rubinius/gems/1.8/bin/yardoc
    to_ary must return an Array (TypeError)

Backtrace:
  { } in Enumerable(YARD::CodeObjects::CodeObjectList)#any? at \
          kernel/common/enumerable.rb:268
  Array(YARD::CodeObjects::CodeObjectList)#each at kernel/bootstrap/array.rb:68
 Enumerable(YARD::CodeObjects::CodeObjectList)#any? at kernel/common
                                                           /enumerable.rb:268
  { } in YARD::Templates::Engine::Template__vault_0_src_rubinius_gems_1_8_gems_yard_0_7_4_templates_default_fulldoc_html(Object)#class_list at \
          /vault/0/src/rubinius/gems/1.8/gems/yard-0.7.4/templates/default/fulldoc/html/setup.rb:181
                             Array#map at kernel/bootstrap/array18.rb:18
      YARD::Templates::Engine::Template__vault_0_src_rubinius_gems_1_8_gems_yard_0_7_4_templates_default_fulldoc_html(Object)#class_list at \
          /vault/0/src/rubinius/gems/1.8/gems/yard-0.7.4/templates/default/fulldoc/html/setup.rb:178
 YARD::Templates::ErbCache(Object)#_erb_cache_1 at /vault/0/src/rubinius/gems
                                                   /1.8/gems/yard-0.7.4
                                                   /templates/default/fulldoc
                                                   /html/full_list_class.erb:2
 YARD::Templates::Template(Object)#erb at /vault/0/src/rubinius/gems/1.8/gems
                                          /yard-0.7.4/lib/yard/templates
                                          /template.rb:238
 YARD::Templates::ErbCache(Object)#_erb_cache_0 at /vault/0/src/rubinius/gems
                                                   /1.8/gems/yard-0.7.4
                                                   /templates/default/fulldoc
                                                   /html/full_list.erb:33
 YARD::Templates::Template(Object)#erb at /vault/0/src/rubinius/gems/1.8/gems
                                          /yard-0.7.4/lib/yard/templates
                                          /template.rb:238
      YARD::Templates::Engine::Template__vault_0_src_rubinius_gems_1_8_gems_yard_0_7_4_templates_default_fulldoc_html(Object)#generate_class_list at \
          /vault/0/src/rubinius/gems/1.8/gems/yard-0.7.4/templates/default/fulldoc/html/setup.rb:150
  { } in YARD::Templates::Engine::Template__vault_0_src_rubinius_gems_1_8_gems_yard_0_7_4_templates_default_fulldoc_html(Object)#generate_assets at \
          /vault/0/src/rubinius/gems/1.8/gems/yard-0.7.4/templates/default/fulldoc/html/setup.rb:124
                            Array#each at kernel/bootstrap/array.rb:68
      YARD::Templates::Engine::Template__vault_0_src_rubinius_gems_1_8_gems_yard_0_7_4_templates_default_fulldoc_html(Object)#generate_assets at \
          /vault/0/src/rubinius/gems/1.8/gems/yard-0.7.4/templates/default/fulldoc/html/setup.rb:121
  YARD::Templates::Engine::Template__vault_0_src_rubinius_gems_1_8_gems_yard_0_7_4_templates_default_fulldoc_html(Object)#init at \
          /vault/0/src/rubinius/gems/1.8/gems/yard-0.7.4/templates/default/fulldoc/html/setup.rb:7
 YARD::Templates::Template(Object)#initialize at /vault/0/src/rubinius/gems/1.8
                                                 /gems/yard-0.7.4/lib/yard
                                                 /templates/template.rb:144
 YARD::Templates::Template::ClassMethods(Module)#new at /vault/0/src/rubinius
                                                        /gems/1.8/gems
                                                        /yard-0.7.4/lib/yard
                                                        /templates
                                                        /template.rb:86
 YARD::Templates::Template::ClassMethods(Module)#run at /vault/0/src/rubinius
                                                        /gems/1.8/gems
                                                        /yard-0.7.4/lib/yard
                                                        /templates
                                                        /template.rb:91
     YARD::Templates::Engine.generate at /vault/0/src/rubinius/gems/1.8/gems
                                         /yard-0.7.4/lib/yard/templates
                                         /engine.rb:103
       YARD::CLI::Yardoc#run_generate at /vault/0/src/rubinius/gems/1.8/gems
                                         /yard-0.7.4/lib/yard/cli/yardoc.rb:306
                YARD::CLI::Yardoc#run at /vault/0/src/rubinius/gems/1.8/gems
                                         /yard-0.7.4/lib/yard/cli/yardoc.rb:219
               YARD::CLI::Command.run at /vault/0/src/rubinius/gems/1.8/gems
                                         /yard-0.7.4/lib/yard/cli/command.rb:13
                    Object#__script__ at /vault/0/src/rubinius/gems/1.8/gems
                                         /yard-0.7.4/bin/yardoc:4
                   Kernel(Object)#load at kernel/common/kernel.rb:588
                    Object#__script__ at /vault/0/src/rubinius/gems/1.8/bin
                                         /yardoc:19
      Rubinius::CodeLoader#load_script at kernel/delta/codeloader.rb:67
      Rubinius::CodeLoader.load_script at kernel/delta/codeloader.rb:109
               Rubinius::Loader#script at kernel/loader.rb:630
                 Rubinius::Loader#main at kernel/loader.rb:834
postmodern commented 12 years ago

Correction again, this bug happens in 1.8 mode as well as 1.9 mode. Likely a Rubinius regression.