summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorStan Lo <stan001212@gmail.com>2024-02-11 05:17:37 +0000
committergit <svn-admin@ruby-lang.org>2024-02-11 05:17:40 +0000
commit5c4657f8832bcbb9e7c3c50b6fe69212a86de153 (patch)
tree4b5fb921d0b29eab706014691f6663d24e5eb3f8 /lib
parent429eeb09f25bd1bd3f64f70c6ef409bedd3c6c1f (diff)
[ruby/irb] Polish the exit! command and its tests
(https://github.com/ruby/irb/pull/867) * Remove IRB.irb_exit! method It's not necessary to introduce a new method just for the exit! command at this moment. * Rename ExitForcedAction to ForceExit * Move force exit tests to a dedicated file * Fix nested history saving with exit! command Because we switched to use `Kernel#exit` instead of `exit!`, the outer session's ensure block in `Irb#run` will be run, which will save the history. This means the separate check to save history when force exiting is no longer necessary. * execute_lines helper should also capture IRB setup's output This prevents setup warnings from being printed to test output while allowing those output to be tested. * Update readme https://github.com/ruby/irb/commit/899d10ade1
Diffstat (limited to 'lib')
-rw-r--r--lib/irb.rb15
-rw-r--r--lib/irb/cmd/force_exit.rb (renamed from lib/irb/cmd/exit_forced_action.rb)4
-rw-r--r--lib/irb/extend-command.rb2
3 files changed, 6 insertions, 15 deletions
diff --git a/lib/irb.rb b/lib/irb.rb
index ad6ec78aa4..3830867e6a 100644
--- a/lib/irb.rb
+++ b/lib/irb.rb
@@ -889,10 +889,6 @@ module IRB
throw :IRB_EXIT, false
end
- def IRB.irb_exit!(*)
- throw :IRB_EXIT, true
- end
-
# Aborts then interrupts irb.
#
# Will raise an Abort exception, or the given +exception+.
@@ -972,8 +968,7 @@ module IRB
conf[:IRB_RC].call(context) if conf[:IRB_RC]
conf[:MAIN_CONTEXT] = context
- supports_history_saving = conf[:SAVE_HISTORY] && context.io.support_history_saving?
- save_history = !in_nested_session && supports_history_saving
+ save_history = !in_nested_session && conf[:SAVE_HISTORY] && context.io.support_history_saving?
if save_history
context.io.load_history
@@ -993,12 +988,8 @@ module IRB
trap("SIGINT", prev_trap)
conf[:AT_EXIT].each{|hook| hook.call}
- if forced_exit
- context.io.save_history if supports_history_saving
- Kernel.exit(0)
- else
- context.io.save_history if save_history
- end
+ context.io.save_history if save_history
+ Kernel.exit(0) if forced_exit
end
end
diff --git a/lib/irb/cmd/exit_forced_action.rb b/lib/irb/cmd/force_exit.rb
index e5df75b682..2b9f296865 100644
--- a/lib/irb/cmd/exit_forced_action.rb
+++ b/lib/irb/cmd/force_exit.rb
@@ -6,12 +6,12 @@ module IRB
# :stopdoc:
module ExtendCommand
- class ExitForcedAction < Nop
+ class ForceExit < Nop
category "IRB"
description "Exit the current process."
def execute(*)
- IRB.irb_exit!
+ throw :IRB_EXIT, true
rescue UncaughtThrowError
Kernel.exit(0)
end
diff --git a/lib/irb/extend-command.rb b/lib/irb/extend-command.rb
index 2db2b80578..d303bf76da 100644
--- a/lib/irb/extend-command.rb
+++ b/lib/irb/extend-command.rb
@@ -37,7 +37,7 @@ module IRB # :nodoc:
[:irb_quit, OVERRIDE_PRIVATE_ONLY],
],
[
- :irb_exit!, :ExitForcedAction, "cmd/exit_forced_action",
+ :irb_exit!, :ForceExit, "cmd/force_exit",
[:exit!, OVERRIDE_PRIVATE_ONLY],
],