ruby/lib/irb/cmd/subirb.rb
Stan Lo 12b7c129bf [ruby/irb] Gracefully handle missing command argument
(https://github.com/ruby/irb/pull/473)

* Handle file loading commands' argument error gracefully

Currently, if users don't provide an argument to `source`,
`irb_load`, and `irb_require`, IRB raises `ArgumentError` with full
stacktrace. This is confusing because it looks similar to when IRB has
internal issues. The message also isn't helpful on helping users avoid
the error.

So in this commit, I add a new `CommandArgumentError` for commands to
raise explicitly when users' input doesn't satisfy a command's argument
requirement.

* Gracefully handle `fg` command's argument requirement
2022-12-08 21:05:37 +00:00

71 lines
1.4 KiB
Ruby

# frozen_string_literal: false
# multi.rb -
# $Release Version: 0.9.6$
# $Revision$
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
#
# --
#
#
#
require_relative "nop"
module IRB
# :stopdoc:
module ExtendCommand
class MultiIRBCommand < Nop
def initialize(conf)
super
extend_irb_context
end
private
def extend_irb_context
# this extension patches IRB context like IRB.CurrentContext
require_relative "../ext/multi-irb"
end
end
class IrbCommand < MultiIRBCommand
category "IRB"
description "Start a child IRB."
def execute(*obj)
IRB.irb(nil, *obj)
end
end
class Jobs < MultiIRBCommand
category "IRB"
description "List of current sessions."
def execute
IRB.JobManager
end
end
class Foreground < MultiIRBCommand
category "IRB"
description "Switches to the session of the given number."
def execute(key = nil)
raise CommandArgumentError.new("Please specify the id of target IRB job (listed in the `jobs` command).") unless key
IRB.JobManager.switch(key)
end
end
class Kill < MultiIRBCommand
category "IRB"
description "Kills the session with the given number."
def execute(*keys)
IRB.JobManager.kill(*keys)
end
end
end
# :startdoc:
end