[ruby/irb] Refactor exit command
(https://github.com/ruby/irb/pull/835) * Remove unnecessary code from the exit command's implementation 1. The parameters of `IRB.irb_exit` were never used. But there are some libraries seem to call it with arguments + it's declared on the top-level IRB constant. So I changed the params to anonymous splat instead of removing them. 2. `Context#exit` was completely unnecessary as `IRB.irb_exit` doesn't use the `@irb` instance it passes. And since it's (or should be treated as) a private method, I simply removed it. 3. The `exit` command doesn't use the status argument it receives at all. But to avoid raising errors on usages like `exit 1`, I changed the argument to anonymous splat instead removing it. * Make exit an actual command * Update readme https://github.com/ruby/irb/commit/452b543a65
This commit is contained in:
parent
d96fe5e4f8
commit
4bdfc9070c
@ -886,8 +886,8 @@ module IRB
|
||||
end
|
||||
|
||||
# Quits irb
|
||||
def IRB.irb_exit(irb, ret)
|
||||
throw :IRB_EXIT, ret
|
||||
def IRB.irb_exit(*)
|
||||
throw :IRB_EXIT
|
||||
end
|
||||
|
||||
# Aborts then interrupts irb.
|
||||
|
22
lib/irb/cmd/exit.rb
Normal file
22
lib/irb/cmd/exit.rb
Normal file
@ -0,0 +1,22 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require_relative "nop"
|
||||
|
||||
module IRB
|
||||
# :stopdoc:
|
||||
|
||||
module ExtendCommand
|
||||
class Exit < Nop
|
||||
category "IRB"
|
||||
description "Exit the current irb session."
|
||||
|
||||
def execute(*)
|
||||
IRB.irb_exit
|
||||
rescue UncaughtThrowError
|
||||
Kernel.exit
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# :startdoc:
|
||||
end
|
@ -573,14 +573,6 @@ module IRB
|
||||
@inspect_method.inspect_value(@last_value)
|
||||
end
|
||||
|
||||
alias __exit__ exit
|
||||
# Exits the current session, see IRB.irb_exit
|
||||
def exit(ret = 0)
|
||||
IRB.irb_exit(@irb, ret)
|
||||
rescue UncaughtThrowError
|
||||
super
|
||||
end
|
||||
|
||||
NOPRINTING_IVARS = ["@last_value"] # :nodoc:
|
||||
NO_INSPECTING_IVARS = ["@irb", "@io"] # :nodoc:
|
||||
IDNAME_IVARS = ["@prompt_mode"] # :nodoc:
|
||||
|
@ -16,15 +16,6 @@ module IRB # :nodoc:
|
||||
# See #install_alias_method.
|
||||
OVERRIDE_ALL = 0x02
|
||||
|
||||
# Quits the current irb context
|
||||
#
|
||||
# +ret+ is the optional signal or message to send to Context#exit
|
||||
#
|
||||
# Same as <code>IRB.CurrentContext.exit</code>.
|
||||
def irb_exit(ret = 0)
|
||||
irb_context.exit(ret)
|
||||
end
|
||||
|
||||
# Displays current configuration.
|
||||
#
|
||||
# Modifying the configuration is achieved by sending a message to IRB.conf.
|
||||
@ -35,13 +26,16 @@ module IRB # :nodoc:
|
||||
@ALIASES = [
|
||||
[:context, :irb_context, NO_OVERRIDE],
|
||||
[:conf, :irb_context, NO_OVERRIDE],
|
||||
[:irb_quit, :irb_exit, OVERRIDE_PRIVATE_ONLY],
|
||||
[:exit, :irb_exit, OVERRIDE_PRIVATE_ONLY],
|
||||
[:quit, :irb_exit, OVERRIDE_PRIVATE_ONLY],
|
||||
]
|
||||
|
||||
|
||||
@EXTEND_COMMANDS = [
|
||||
[
|
||||
:irb_exit, :Exit, "cmd/exit",
|
||||
[:exit, OVERRIDE_PRIVATE_ONLY],
|
||||
[:quit, OVERRIDE_PRIVATE_ONLY],
|
||||
[:irb_quit, OVERRIDE_PRIVATE_ONLY],
|
||||
],
|
||||
[
|
||||
:irb_current_working_workspace, :CurrentWorkingWorkspace, "cmd/chws",
|
||||
[:cwws, NO_OVERRIDE],
|
||||
|
Loading…
x
Reference in New Issue
Block a user