mirror of
https://github.com/ruby/ruby.git
synced 2025-08-25 05:55:46 +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
82 lines
1.7 KiB
Ruby
82 lines
1.7 KiB
Ruby
# frozen_string_literal: false
|
|
#
|
|
# load.rb -
|
|
# $Release Version: 0.9.6$
|
|
# $Revision$
|
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
|
#
|
|
# --
|
|
#
|
|
#
|
|
#
|
|
|
|
require_relative "nop"
|
|
require_relative "../ext/loader"
|
|
|
|
module IRB
|
|
# :stopdoc:
|
|
|
|
module ExtendCommand
|
|
class LoaderCommand < Nop
|
|
include IrbLoader
|
|
|
|
def raise_cmd_argument_error
|
|
raise CommandArgumentError.new("Please specify the file name.")
|
|
end
|
|
end
|
|
|
|
class Load < LoaderCommand
|
|
category "IRB"
|
|
description "Load a Ruby file."
|
|
|
|
def execute(file_name = nil, priv = nil)
|
|
raise_cmd_argument_error unless file_name
|
|
irb_load(file_name, priv)
|
|
end
|
|
end
|
|
|
|
class Require < LoaderCommand
|
|
category "IRB"
|
|
description "Require a Ruby file."
|
|
def execute(file_name = nil)
|
|
raise_cmd_argument_error unless file_name
|
|
|
|
rex = Regexp.new("#{Regexp.quote(file_name)}(\.o|\.rb)?")
|
|
return false if $".find{|f| f =~ rex}
|
|
|
|
case file_name
|
|
when /\.rb$/
|
|
begin
|
|
if irb_load(file_name)
|
|
$".push file_name
|
|
return true
|
|
end
|
|
rescue LoadError
|
|
end
|
|
when /\.(so|o|sl)$/
|
|
return ruby_require(file_name)
|
|
end
|
|
|
|
begin
|
|
irb_load(f = file_name + ".rb")
|
|
$".push f
|
|
return true
|
|
rescue LoadError
|
|
return ruby_require(file_name)
|
|
end
|
|
end
|
|
end
|
|
|
|
class Source < LoaderCommand
|
|
category "IRB"
|
|
description "Loads a given file in the current session."
|
|
|
|
def execute(file_name = nil)
|
|
raise_cmd_argument_error unless file_name
|
|
|
|
source_file(file_name)
|
|
end
|
|
end
|
|
end
|
|
# :startdoc:
|
|
end
|