mirror of
https://github.com/ruby/ruby.git
synced 2025-08-24 21:44:30 +02:00

(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
71 lines
1.4 KiB
Ruby
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
|