mirror of
https://github.com/ruby/ruby.git
synced 2026-01-27 04:24:23 +00:00
[ruby/irb] Warn users about errors in loading RC files
(https://github.com/ruby/irb/pull/817) 1. Because `IRB.rc_file` always generates an rc file name, even if the file doesn't exist, we should check the file exists before trying to load it. 2. If any type of errors occur while loading the rc file, we should warn the user about it. https://github.com/ruby/irb/commit/37ffdc6b19
This commit is contained in:
parent
7c2d819862
commit
2793a30b69
@ -389,18 +389,16 @@ module IRB # :nodoc:
|
||||
$LOAD_PATH.unshift(*load_path)
|
||||
end
|
||||
|
||||
# running config
|
||||
# Run the config file
|
||||
def IRB.run_config
|
||||
if @CONF[:RC]
|
||||
begin
|
||||
load rc_file
|
||||
rescue LoadError, Errno::ENOENT
|
||||
rescue # StandardError, ScriptError
|
||||
print "load error: #{rc_file}\n"
|
||||
print $!.class, ": ", $!, "\n"
|
||||
for err in $@[0, $@.size - 2]
|
||||
print "\t", err, "\n"
|
||||
end
|
||||
file = rc_file
|
||||
# Because rc_file always returns `HOME/.irbrc` even if no rc file is present, we can't warn users about missing rc files.
|
||||
# Otherwise, it'd be very noisy.
|
||||
load file if File.exist?(file)
|
||||
rescue StandardError, ScriptError => e
|
||||
warn "Error loading RC file '#{file}':\n#{e.full_message(highlight: false)}"
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -418,7 +416,7 @@ module IRB # :nodoc:
|
||||
end
|
||||
case rc_file = @CONF[:RC_NAME_GENERATOR].call(ext)
|
||||
when String
|
||||
return rc_file
|
||||
rc_file
|
||||
else
|
||||
fail IllegalRCNameGenerator
|
||||
end
|
||||
|
||||
@ -218,4 +218,44 @@ module TestIRB
|
||||
ARGV.replace(orig)
|
||||
end
|
||||
end
|
||||
|
||||
class InitIntegrationTest < IntegrationTestCase
|
||||
def test_load_error_in_rc_file_is_warned
|
||||
write_rc <<~'IRBRC'
|
||||
require "file_that_does_not_exist"
|
||||
IRBRC
|
||||
|
||||
write_ruby <<~'RUBY'
|
||||
binding.irb
|
||||
RUBY
|
||||
|
||||
output = run_ruby_file do
|
||||
type "'foobar'"
|
||||
type "exit"
|
||||
end
|
||||
|
||||
# IRB session should still be started
|
||||
assert_includes output, "foobar"
|
||||
assert_includes output, 'cannot load such file -- file_that_does_not_exist (LoadError)'
|
||||
end
|
||||
|
||||
def test_normal_errors_in_rc_file_is_warned
|
||||
write_rc <<~'IRBRC'
|
||||
raise "I'm an error"
|
||||
IRBRC
|
||||
|
||||
write_ruby <<~'RUBY'
|
||||
binding.irb
|
||||
RUBY
|
||||
|
||||
output = run_ruby_file do
|
||||
type "'foobar'"
|
||||
type "exit"
|
||||
end
|
||||
|
||||
# IRB session should still be started
|
||||
assert_includes output, "foobar"
|
||||
assert_includes output, 'I\'m an error (RuntimeError)'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user