mirror of
https://github.com/ruby/ruby.git
synced 2026-08-21 03:34:31 +08: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
83 lines
1.7 KiB
Ruby
83 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
|