diff --git a/lib/irb/command/help.rb b/lib/irb/command/help.rb index 1ed7a7707..995b81bf1 100644 --- a/lib/irb/command/help.rb +++ b/lib/irb/command/help.rb @@ -12,7 +12,7 @@ def execute(command_name) help_message else if command_class = Command.load_command(command_name) - command_class.help_message || command_class.description + command_class.help_message || command_class.description || "" else "Can't find command `#{command_name}`. Please check the command name and try again.\n\n" end diff --git a/test/irb/command/test_custom_command.rb b/test/irb/command/test_custom_command.rb index 16800db2c..eac0bd349 100644 --- a/test/irb/command/test_custom_command.rb +++ b/test/irb/command/test_custom_command.rb @@ -123,5 +123,31 @@ def execute(*) assert_include(output, "2 FooBar executed") assert_include(output, "foobar_description") end + + def test_no_meta_command_also_works + write_ruby <<~RUBY + require "irb/command" + + class NoMetaCommand < IRB::Command::Base + def execute(*) + puts "This command does not override meta attributes" + nil + end + end + + IRB::Command.register(:no_meta, NoMetaCommand) + + binding.irb + RUBY + + output = run_ruby_file do + type "no_meta\n" + type "help no_meta\n" + type "exit" + end + + assert_include(output, "This command does not override meta attributes") + assert_not_include(output, "Maybe IRB bug") + end end end