[ruby/irb] Simplify command method definition
(https://github.com/ruby/irb/pull/559) * Remove unnecessary command argument generation code Now that all the supported Ruby versions handle splat args and splat kwargs, we don't need that args generation code anymore. * Remove unused command definition code If we look at `@EXTEND_COMMANDS`, all commands are defined in a file, which means the `if load_file` branch is always executed. Therefore we can drop the else branch of that condition. * Avoid defining unnecessary command methods There's no need to define another command method just to call `Command.execute`.
This commit is contained in:
parent
08324ab9eb
commit
e7f77e1e89
@ -246,7 +246,7 @@ module IRB # :nodoc:
|
|||||||
#
|
#
|
||||||
# The optional +load_file+ parameter will be required within the method
|
# The optional +load_file+ parameter will be required within the method
|
||||||
# definition.
|
# definition.
|
||||||
def self.def_extend_command(cmd_name, cmd_class, load_file = nil, *aliases)
|
def self.def_extend_command(cmd_name, cmd_class, load_file, *aliases)
|
||||||
case cmd_class
|
case cmd_class
|
||||||
when Symbol
|
when Symbol
|
||||||
cmd_class = cmd_class.id2name
|
cmd_class = cmd_class.id2name
|
||||||
@ -255,33 +255,12 @@ module IRB # :nodoc:
|
|||||||
cmd_class = cmd_class.name
|
cmd_class = cmd_class.name
|
||||||
end
|
end
|
||||||
|
|
||||||
if load_file
|
line = __LINE__; eval %[
|
||||||
line = __LINE__; eval %[
|
def #{cmd_name}(*opts, **kwargs, &b)
|
||||||
def #{cmd_name}(*opts, **kwargs, &b)
|
Kernel.require_relative "#{load_file}"
|
||||||
Kernel.require_relative "#{load_file}"
|
::IRB::ExtendCommand::#{cmd_class}.execute(irb_context, *opts, **kwargs, &b)
|
||||||
arity = ::IRB::ExtendCommand::#{cmd_class}.instance_method(:execute).arity
|
end
|
||||||
args = (1..(arity < 0 ? ~arity : arity)).map {|i| "arg" + i.to_s }
|
], nil, __FILE__, line
|
||||||
args << "*opts, **kwargs" if arity < 0
|
|
||||||
args << "&block"
|
|
||||||
args = args.join(", ")
|
|
||||||
line = __LINE__; eval %[
|
|
||||||
unless singleton_class.class_variable_defined?(:@@#{cmd_name}_)
|
|
||||||
singleton_class.class_variable_set(:@@#{cmd_name}_, true)
|
|
||||||
def self.#{cmd_name}_(\#{args})
|
|
||||||
::IRB::ExtendCommand::#{cmd_class}.execute(irb_context, \#{args})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
], nil, __FILE__, line
|
|
||||||
__send__ :#{cmd_name}_, *opts, **kwargs, &b
|
|
||||||
end
|
|
||||||
], nil, __FILE__, line
|
|
||||||
else
|
|
||||||
line = __LINE__; eval %[
|
|
||||||
def #{cmd_name}(*opts, &b)
|
|
||||||
::IRB::ExtendCommand::#{cmd_class}.execute(irb_context, *opts, &b)
|
|
||||||
end
|
|
||||||
], nil, __FILE__, line
|
|
||||||
end
|
|
||||||
|
|
||||||
for ali, flag in aliases
|
for ali, flag in aliases
|
||||||
@ALIASES.push [ali, cmd_name, flag]
|
@ALIASES.push [ali, cmd_name, flag]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user