[ruby/irb] Unroll extension method generation
(https://github.com/ruby/irb/pull/882) * Unroll extension method generation Given we only have 2 remaining extension setter methods, both of which only take 1 argument and don't have any alias, the current method generation logic is overly complicated. This commit simplifies the method generation logic by simply defining the methods directly in the `IRB::Context` class. * Fix use_loader extension https://github.com/ruby/irb/commit/67eba5401b
This commit is contained in:
parent
f403660805
commit
37dde6e2f8
@ -315,44 +315,4 @@ module IRB # :nodoc:
|
||||
|
||||
install_extend_commands
|
||||
end
|
||||
|
||||
# Extends methods for the Context module
|
||||
module ContextExtender
|
||||
CE = ContextExtender # :nodoc:
|
||||
|
||||
@EXTEND_COMMANDS = [
|
||||
[:eval_history=, "ext/eval_history.rb"],
|
||||
[:use_loader=, "ext/use-loader.rb"],
|
||||
]
|
||||
|
||||
# Installs the default context extensions as irb commands:
|
||||
#
|
||||
# Context#eval_history=:: +irb/ext/history.rb+
|
||||
# Context#use_tracer=:: +irb/ext/tracer.rb+
|
||||
# Context#use_loader=:: +irb/ext/use-loader.rb+
|
||||
def self.install_extend_commands
|
||||
for args in @EXTEND_COMMANDS
|
||||
def_extend_command(*args)
|
||||
end
|
||||
end
|
||||
|
||||
# Evaluate the given +command+ from the given +load_file+ on the Context
|
||||
# module.
|
||||
#
|
||||
# Will also define any given +aliases+ for the method.
|
||||
def self.def_extend_command(cmd_name, load_file, *aliases)
|
||||
line = __LINE__; Context.module_eval %[
|
||||
def #{cmd_name}(*opts, &b)
|
||||
Context.module_eval {remove_method(:#{cmd_name})}
|
||||
require_relative "#{load_file}"
|
||||
__send__ :#{cmd_name}, *opts, &b
|
||||
end
|
||||
for ali in aliases
|
||||
alias_method ali, cmd_name
|
||||
end
|
||||
], __FILE__, line
|
||||
end
|
||||
|
||||
CE.install_extend_commands
|
||||
end
|
||||
end
|
||||
|
@ -166,6 +166,18 @@ module IRB
|
||||
IRB.conf[:USE_TRACER] = val
|
||||
end
|
||||
|
||||
def eval_history=(val)
|
||||
self.class.remove_method(__method__)
|
||||
require_relative "ext/eval_history"
|
||||
__send__(__method__, val)
|
||||
end
|
||||
|
||||
def use_loader=(val)
|
||||
self.class.remove_method(__method__)
|
||||
require_relative "ext/use-loader"
|
||||
__send__(__method__, val)
|
||||
end
|
||||
|
||||
private def build_completor
|
||||
completor_type = IRB.conf[:COMPLETOR]
|
||||
case completor_type
|
||||
|
@ -4,7 +4,7 @@
|
||||
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
||||
#
|
||||
|
||||
require_relative "../cmd/load"
|
||||
require_relative "../command/load"
|
||||
require_relative "loader"
|
||||
|
||||
class Object
|
||||
@ -49,7 +49,7 @@ module IRB
|
||||
if IRB.conf[:USE_LOADER] != opt
|
||||
IRB.conf[:USE_LOADER] = opt
|
||||
if opt
|
||||
if !$".include?("irb/cmd/load")
|
||||
if !$".include?("irb/command/load")
|
||||
end
|
||||
(class<<@workspace.main;self;end).instance_eval {
|
||||
alias_method :load, :irb_load
|
||||
|
Loading…
x
Reference in New Issue
Block a user