irb 1.7.1 → 1.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.document +1 -1
- data/Gemfile +10 -1
- data/README.md +265 -20
- data/Rakefile +13 -10
- data/doc/irb/irb.rd.ja +1 -3
- data/irb.gemspec +2 -1
- data/lib/irb/cmd/nop.rb +3 -52
- data/lib/irb/color.rb +4 -2
- data/lib/irb/command/backtrace.rb +17 -0
- data/lib/irb/command/base.rb +62 -0
- data/lib/irb/command/break.rb +17 -0
- data/lib/irb/command/catch.rb +17 -0
- data/lib/irb/command/chws.rb +40 -0
- data/lib/irb/command/context.rb +16 -0
- data/lib/irb/{cmd → command}/continue.rb +3 -3
- data/lib/irb/command/debug.rb +71 -0
- data/lib/irb/{cmd → command}/delete.rb +3 -3
- data/lib/irb/command/disable_irb.rb +19 -0
- data/lib/irb/command/edit.rb +63 -0
- data/lib/irb/command/exit.rb +18 -0
- data/lib/irb/{cmd → command}/finish.rb +3 -3
- data/lib/irb/command/force_exit.rb +18 -0
- data/lib/irb/command/help.rb +83 -0
- data/lib/irb/command/history.rb +45 -0
- data/lib/irb/command/info.rb +17 -0
- data/lib/irb/command/internal_helpers.rb +27 -0
- data/lib/irb/{cmd → command}/irb_info.rb +7 -7
- data/lib/irb/{cmd → command}/load.rb +23 -8
- data/lib/irb/{cmd → command}/ls.rb +42 -19
- data/lib/irb/{cmd → command}/measure.rb +18 -17
- data/lib/irb/{cmd → command}/next.rb +3 -3
- data/lib/irb/command/pushws.rb +65 -0
- data/lib/irb/command/show_doc.rb +51 -0
- data/lib/irb/command/show_source.rb +74 -0
- data/lib/irb/{cmd → command}/step.rb +3 -3
- data/lib/irb/command/subirb.rb +123 -0
- data/lib/irb/{cmd → command}/whereami.rb +3 -5
- data/lib/irb/command.rb +23 -0
- data/lib/irb/completion.rb +133 -102
- data/lib/irb/context.rb +182 -66
- data/lib/irb/debug/ui.rb +103 -0
- data/lib/irb/{cmd/debug.rb → debug.rb} +53 -59
- data/lib/irb/default_commands.rb +265 -0
- data/lib/irb/easter-egg.rb +16 -6
- data/lib/irb/ext/change-ws.rb +6 -8
- data/lib/irb/ext/{history.rb → eval_history.rb} +7 -7
- data/lib/irb/ext/loader.rb +4 -4
- data/lib/irb/ext/multi-irb.rb +5 -5
- data/lib/irb/ext/tracer.rb +12 -51
- data/lib/irb/ext/use-loader.rb +6 -8
- data/lib/irb/ext/workspaces.rb +10 -34
- data/lib/irb/frame.rb +1 -1
- data/lib/irb/help.rb +3 -3
- data/lib/irb/helper_method/base.rb +16 -0
- data/lib/irb/helper_method/conf.rb +11 -0
- data/lib/irb/helper_method.rb +29 -0
- data/lib/irb/{ext/save-history.rb → history.rb} +20 -58
- data/lib/irb/init.rb +154 -58
- data/lib/irb/input-method.rb +238 -203
- data/lib/irb/inspector.rb +3 -3
- data/lib/irb/lc/error.rb +1 -11
- data/lib/irb/lc/help-message +4 -0
- data/lib/irb/lc/ja/error.rb +1 -11
- data/lib/irb/lc/ja/help-message +13 -0
- data/lib/irb/locale.rb +2 -2
- data/lib/irb/nesting_parser.rb +13 -3
- data/lib/irb/notifier.rb +1 -1
- data/lib/irb/output-method.rb +2 -8
- data/lib/irb/pager.rb +91 -0
- data/lib/irb/ruby-lex.rb +391 -471
- data/lib/irb/ruby_logo.aa +43 -0
- data/lib/irb/source_finder.rb +139 -0
- data/lib/irb/statement.rb +80 -0
- data/lib/irb/version.rb +3 -3
- data/lib/irb/workspace.rb +24 -4
- data/lib/irb/ws-for-case-2.rb +1 -1
- data/lib/irb/xmp.rb +3 -3
- data/lib/irb.rb +1232 -604
- data/man/irb.1 +7 -0
- metadata +60 -32
- data/lib/irb/cmd/backtrace.rb +0 -21
- data/lib/irb/cmd/break.rb +0 -21
- data/lib/irb/cmd/catch.rb +0 -21
- data/lib/irb/cmd/chws.rb +0 -36
- data/lib/irb/cmd/edit.rb +0 -61
- data/lib/irb/cmd/help.rb +0 -23
- data/lib/irb/cmd/info.rb +0 -21
- data/lib/irb/cmd/pushws.rb +0 -45
- data/lib/irb/cmd/show_cmds.rb +0 -39
- data/lib/irb/cmd/show_doc.rb +0 -48
- data/lib/irb/cmd/show_source.rb +0 -113
- data/lib/irb/cmd/subirb.rb +0 -66
- data/lib/irb/extend-command.rb +0 -356
- data/lib/irb/src_encoding.rb +0 -7
data/lib/irb/extend-command.rb
DELETED
@@ -1,356 +0,0 @@
|
|
1
|
-
# frozen_string_literal: false
|
2
|
-
#
|
3
|
-
# irb/extend-command.rb - irb extend command
|
4
|
-
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
5
|
-
#
|
6
|
-
|
7
|
-
module IRB # :nodoc:
|
8
|
-
# Installs the default irb extensions command bundle.
|
9
|
-
module ExtendCommandBundle
|
10
|
-
EXCB = ExtendCommandBundle # :nodoc:
|
11
|
-
|
12
|
-
# See #install_alias_method.
|
13
|
-
NO_OVERRIDE = 0
|
14
|
-
# See #install_alias_method.
|
15
|
-
OVERRIDE_PRIVATE_ONLY = 0x01
|
16
|
-
# See #install_alias_method.
|
17
|
-
OVERRIDE_ALL = 0x02
|
18
|
-
|
19
|
-
# Quits the current irb context
|
20
|
-
#
|
21
|
-
# +ret+ is the optional signal or message to send to Context#exit
|
22
|
-
#
|
23
|
-
# Same as <code>IRB.CurrentContext.exit</code>.
|
24
|
-
def irb_exit(ret = 0)
|
25
|
-
irb_context.exit(ret)
|
26
|
-
end
|
27
|
-
|
28
|
-
# Displays current configuration.
|
29
|
-
#
|
30
|
-
# Modifying the configuration is achieved by sending a message to IRB.conf.
|
31
|
-
def irb_context
|
32
|
-
IRB.CurrentContext
|
33
|
-
end
|
34
|
-
|
35
|
-
@ALIASES = [
|
36
|
-
[:context, :irb_context, NO_OVERRIDE],
|
37
|
-
[:conf, :irb_context, NO_OVERRIDE],
|
38
|
-
[:irb_quit, :irb_exit, OVERRIDE_PRIVATE_ONLY],
|
39
|
-
[:exit, :irb_exit, OVERRIDE_PRIVATE_ONLY],
|
40
|
-
[:quit, :irb_exit, OVERRIDE_PRIVATE_ONLY],
|
41
|
-
]
|
42
|
-
|
43
|
-
|
44
|
-
@EXTEND_COMMANDS = [
|
45
|
-
[
|
46
|
-
:irb_current_working_workspace, :CurrentWorkingWorkspace, "cmd/chws",
|
47
|
-
[:cwws, NO_OVERRIDE],
|
48
|
-
[:pwws, NO_OVERRIDE],
|
49
|
-
[:irb_print_working_workspace, OVERRIDE_ALL],
|
50
|
-
[:irb_cwws, OVERRIDE_ALL],
|
51
|
-
[:irb_pwws, OVERRIDE_ALL],
|
52
|
-
[:irb_current_working_binding, OVERRIDE_ALL],
|
53
|
-
[:irb_print_working_binding, OVERRIDE_ALL],
|
54
|
-
[:irb_cwb, OVERRIDE_ALL],
|
55
|
-
[:irb_pwb, OVERRIDE_ALL],
|
56
|
-
],
|
57
|
-
[
|
58
|
-
:irb_change_workspace, :ChangeWorkspace, "cmd/chws",
|
59
|
-
[:chws, NO_OVERRIDE],
|
60
|
-
[:cws, NO_OVERRIDE],
|
61
|
-
[:irb_chws, OVERRIDE_ALL],
|
62
|
-
[:irb_cws, OVERRIDE_ALL],
|
63
|
-
[:irb_change_binding, OVERRIDE_ALL],
|
64
|
-
[:irb_cb, OVERRIDE_ALL],
|
65
|
-
[:cb, NO_OVERRIDE],
|
66
|
-
],
|
67
|
-
|
68
|
-
[
|
69
|
-
:irb_workspaces, :Workspaces, "cmd/pushws",
|
70
|
-
[:workspaces, NO_OVERRIDE],
|
71
|
-
[:irb_bindings, OVERRIDE_ALL],
|
72
|
-
[:bindings, NO_OVERRIDE],
|
73
|
-
],
|
74
|
-
[
|
75
|
-
:irb_push_workspace, :PushWorkspace, "cmd/pushws",
|
76
|
-
[:pushws, NO_OVERRIDE],
|
77
|
-
[:irb_pushws, OVERRIDE_ALL],
|
78
|
-
[:irb_push_binding, OVERRIDE_ALL],
|
79
|
-
[:irb_pushb, OVERRIDE_ALL],
|
80
|
-
[:pushb, NO_OVERRIDE],
|
81
|
-
],
|
82
|
-
[
|
83
|
-
:irb_pop_workspace, :PopWorkspace, "cmd/pushws",
|
84
|
-
[:popws, NO_OVERRIDE],
|
85
|
-
[:irb_popws, OVERRIDE_ALL],
|
86
|
-
[:irb_pop_binding, OVERRIDE_ALL],
|
87
|
-
[:irb_popb, OVERRIDE_ALL],
|
88
|
-
[:popb, NO_OVERRIDE],
|
89
|
-
],
|
90
|
-
|
91
|
-
[
|
92
|
-
:irb_load, :Load, "cmd/load"],
|
93
|
-
[
|
94
|
-
:irb_require, :Require, "cmd/load"],
|
95
|
-
[
|
96
|
-
:irb_source, :Source, "cmd/load",
|
97
|
-
[:source, NO_OVERRIDE],
|
98
|
-
],
|
99
|
-
|
100
|
-
[
|
101
|
-
:irb, :IrbCommand, "cmd/subirb"],
|
102
|
-
[
|
103
|
-
:irb_jobs, :Jobs, "cmd/subirb",
|
104
|
-
[:jobs, NO_OVERRIDE],
|
105
|
-
],
|
106
|
-
[
|
107
|
-
:irb_fg, :Foreground, "cmd/subirb",
|
108
|
-
[:fg, NO_OVERRIDE],
|
109
|
-
],
|
110
|
-
[
|
111
|
-
:irb_kill, :Kill, "cmd/subirb",
|
112
|
-
[:kill, OVERRIDE_PRIVATE_ONLY],
|
113
|
-
],
|
114
|
-
|
115
|
-
[
|
116
|
-
:irb_debug, :Debug, "cmd/debug",
|
117
|
-
[:debug, NO_OVERRIDE],
|
118
|
-
],
|
119
|
-
[
|
120
|
-
:irb_edit, :Edit, "cmd/edit",
|
121
|
-
[:edit, NO_OVERRIDE],
|
122
|
-
],
|
123
|
-
[
|
124
|
-
:irb_break, :Break, "cmd/break",
|
125
|
-
],
|
126
|
-
[
|
127
|
-
:irb_catch, :Catch, "cmd/catch",
|
128
|
-
],
|
129
|
-
[
|
130
|
-
:irb_next, :Next, "cmd/next"
|
131
|
-
],
|
132
|
-
[
|
133
|
-
:irb_delete, :Delete, "cmd/delete",
|
134
|
-
[:delete, NO_OVERRIDE],
|
135
|
-
],
|
136
|
-
[
|
137
|
-
:irb_step, :Step, "cmd/step",
|
138
|
-
[:step, NO_OVERRIDE],
|
139
|
-
],
|
140
|
-
[
|
141
|
-
:irb_continue, :Continue, "cmd/continue",
|
142
|
-
[:continue, NO_OVERRIDE],
|
143
|
-
],
|
144
|
-
[
|
145
|
-
:irb_finish, :Finish, "cmd/finish",
|
146
|
-
[:finish, NO_OVERRIDE],
|
147
|
-
],
|
148
|
-
[
|
149
|
-
:irb_backtrace, :Backtrace, "cmd/backtrace",
|
150
|
-
[:backtrace, NO_OVERRIDE],
|
151
|
-
[:bt, NO_OVERRIDE],
|
152
|
-
],
|
153
|
-
[
|
154
|
-
:irb_debug_info, :Info, "cmd/info",
|
155
|
-
[:info, NO_OVERRIDE],
|
156
|
-
],
|
157
|
-
|
158
|
-
[
|
159
|
-
:irb_help, :Help, "cmd/help",
|
160
|
-
[:help, NO_OVERRIDE],
|
161
|
-
],
|
162
|
-
|
163
|
-
[
|
164
|
-
:irb_show_doc, :ShowDoc, "cmd/show_doc",
|
165
|
-
[:show_doc, NO_OVERRIDE],
|
166
|
-
],
|
167
|
-
|
168
|
-
[
|
169
|
-
:irb_info, :IrbInfo, "cmd/irb_info"
|
170
|
-
],
|
171
|
-
|
172
|
-
[
|
173
|
-
:irb_ls, :Ls, "cmd/ls",
|
174
|
-
[:ls, NO_OVERRIDE],
|
175
|
-
],
|
176
|
-
|
177
|
-
[
|
178
|
-
:irb_measure, :Measure, "cmd/measure",
|
179
|
-
[:measure, NO_OVERRIDE],
|
180
|
-
],
|
181
|
-
|
182
|
-
[
|
183
|
-
:irb_show_source, :ShowSource, "cmd/show_source",
|
184
|
-
[:show_source, NO_OVERRIDE],
|
185
|
-
],
|
186
|
-
|
187
|
-
[
|
188
|
-
:irb_whereami, :Whereami, "cmd/whereami",
|
189
|
-
[:whereami, NO_OVERRIDE],
|
190
|
-
],
|
191
|
-
[
|
192
|
-
:irb_show_cmds, :ShowCmds, "cmd/show_cmds",
|
193
|
-
[:show_cmds, NO_OVERRIDE],
|
194
|
-
]
|
195
|
-
]
|
196
|
-
|
197
|
-
|
198
|
-
@@commands = []
|
199
|
-
|
200
|
-
def self.all_commands_info
|
201
|
-
return @@commands unless @@commands.empty?
|
202
|
-
user_aliases = IRB.CurrentContext.command_aliases.each_with_object({}) do |(alias_name, target), result|
|
203
|
-
result[target] ||= []
|
204
|
-
result[target] << alias_name
|
205
|
-
end
|
206
|
-
|
207
|
-
@EXTEND_COMMANDS.each do |cmd_name, cmd_class, load_file, *aliases|
|
208
|
-
if !defined?(ExtendCommand) || !ExtendCommand.const_defined?(cmd_class, false)
|
209
|
-
require_relative load_file
|
210
|
-
end
|
211
|
-
|
212
|
-
klass = ExtendCommand.const_get(cmd_class, false)
|
213
|
-
aliases = aliases.map { |a| a.first }
|
214
|
-
|
215
|
-
if additional_aliases = user_aliases[cmd_name]
|
216
|
-
aliases += additional_aliases
|
217
|
-
end
|
218
|
-
|
219
|
-
display_name = aliases.shift || cmd_name
|
220
|
-
@@commands << { display_name: display_name, description: klass.description, category: klass.category }
|
221
|
-
end
|
222
|
-
|
223
|
-
@@commands
|
224
|
-
end
|
225
|
-
|
226
|
-
# Convert a command name to its implementation class if such command exists
|
227
|
-
def self.load_command(command)
|
228
|
-
command = command.to_sym
|
229
|
-
@EXTEND_COMMANDS.each do |cmd_name, cmd_class, load_file, *aliases|
|
230
|
-
next if cmd_name != command && aliases.all? { |alias_name, _| alias_name != command }
|
231
|
-
|
232
|
-
if !defined?(ExtendCommand) || !ExtendCommand.const_defined?(cmd_class, false)
|
233
|
-
require_relative load_file
|
234
|
-
end
|
235
|
-
return ExtendCommand.const_get(cmd_class, false)
|
236
|
-
end
|
237
|
-
nil
|
238
|
-
end
|
239
|
-
|
240
|
-
# Installs the default irb commands.
|
241
|
-
def self.install_extend_commands
|
242
|
-
for args in @EXTEND_COMMANDS
|
243
|
-
def_extend_command(*args)
|
244
|
-
end
|
245
|
-
end
|
246
|
-
|
247
|
-
# Evaluate the given +cmd_name+ on the given +cmd_class+ Class.
|
248
|
-
#
|
249
|
-
# Will also define any given +aliases+ for the method.
|
250
|
-
#
|
251
|
-
# The optional +load_file+ parameter will be required within the method
|
252
|
-
# definition.
|
253
|
-
def self.def_extend_command(cmd_name, cmd_class, load_file, *aliases)
|
254
|
-
case cmd_class
|
255
|
-
when Symbol
|
256
|
-
cmd_class = cmd_class.id2name
|
257
|
-
when String
|
258
|
-
when Class
|
259
|
-
cmd_class = cmd_class.name
|
260
|
-
end
|
261
|
-
|
262
|
-
line = __LINE__; eval %[
|
263
|
-
def #{cmd_name}(*opts, **kwargs, &b)
|
264
|
-
Kernel.require_relative "#{load_file}"
|
265
|
-
::IRB::ExtendCommand::#{cmd_class}.execute(irb_context, *opts, **kwargs, &b)
|
266
|
-
end
|
267
|
-
], nil, __FILE__, line
|
268
|
-
|
269
|
-
for ali, flag in aliases
|
270
|
-
@ALIASES.push [ali, cmd_name, flag]
|
271
|
-
end
|
272
|
-
end
|
273
|
-
|
274
|
-
# Installs alias methods for the default irb commands, see
|
275
|
-
# ::install_extend_commands.
|
276
|
-
def install_alias_method(to, from, override = NO_OVERRIDE)
|
277
|
-
to = to.id2name unless to.kind_of?(String)
|
278
|
-
from = from.id2name unless from.kind_of?(String)
|
279
|
-
|
280
|
-
if override == OVERRIDE_ALL or
|
281
|
-
(override == OVERRIDE_PRIVATE_ONLY) && !respond_to?(to) or
|
282
|
-
(override == NO_OVERRIDE) && !respond_to?(to, true)
|
283
|
-
target = self
|
284
|
-
(class << self; self; end).instance_eval{
|
285
|
-
if target.respond_to?(to, true) &&
|
286
|
-
!target.respond_to?(EXCB.irb_original_method_name(to), true)
|
287
|
-
alias_method(EXCB.irb_original_method_name(to), to)
|
288
|
-
end
|
289
|
-
alias_method to, from
|
290
|
-
}
|
291
|
-
else
|
292
|
-
Kernel.warn "irb: warn: can't alias #{to} from #{from}.\n"
|
293
|
-
end
|
294
|
-
end
|
295
|
-
|
296
|
-
def self.irb_original_method_name(method_name) # :nodoc:
|
297
|
-
"irb_" + method_name + "_org"
|
298
|
-
end
|
299
|
-
|
300
|
-
# Installs alias methods for the default irb commands on the given object
|
301
|
-
# using #install_alias_method.
|
302
|
-
def self.extend_object(obj)
|
303
|
-
unless (class << obj; ancestors; end).include?(EXCB)
|
304
|
-
super
|
305
|
-
for ali, com, flg in @ALIASES
|
306
|
-
obj.install_alias_method(ali, com, flg)
|
307
|
-
end
|
308
|
-
end
|
309
|
-
end
|
310
|
-
|
311
|
-
install_extend_commands
|
312
|
-
end
|
313
|
-
|
314
|
-
# Extends methods for the Context module
|
315
|
-
module ContextExtender
|
316
|
-
CE = ContextExtender # :nodoc:
|
317
|
-
|
318
|
-
@EXTEND_COMMANDS = [
|
319
|
-
[:eval_history=, "ext/history.rb"],
|
320
|
-
[:use_tracer=, "ext/tracer.rb"],
|
321
|
-
[:use_loader=, "ext/use-loader.rb"],
|
322
|
-
[:save_history=, "ext/save-history.rb"],
|
323
|
-
]
|
324
|
-
|
325
|
-
# Installs the default context extensions as irb commands:
|
326
|
-
#
|
327
|
-
# Context#eval_history=:: +irb/ext/history.rb+
|
328
|
-
# Context#use_tracer=:: +irb/ext/tracer.rb+
|
329
|
-
# Context#use_loader=:: +irb/ext/use-loader.rb+
|
330
|
-
# Context#save_history=:: +irb/ext/save-history.rb+
|
331
|
-
def self.install_extend_commands
|
332
|
-
for args in @EXTEND_COMMANDS
|
333
|
-
def_extend_command(*args)
|
334
|
-
end
|
335
|
-
end
|
336
|
-
|
337
|
-
# Evaluate the given +command+ from the given +load_file+ on the Context
|
338
|
-
# module.
|
339
|
-
#
|
340
|
-
# Will also define any given +aliases+ for the method.
|
341
|
-
def self.def_extend_command(cmd_name, load_file, *aliases)
|
342
|
-
line = __LINE__; Context.module_eval %[
|
343
|
-
def #{cmd_name}(*opts, &b)
|
344
|
-
Context.module_eval {remove_method(:#{cmd_name})}
|
345
|
-
require_relative "#{load_file}"
|
346
|
-
__send__ :#{cmd_name}, *opts, &b
|
347
|
-
end
|
348
|
-
for ali in aliases
|
349
|
-
alias_method ali, cmd_name
|
350
|
-
end
|
351
|
-
], __FILE__, line
|
352
|
-
end
|
353
|
-
|
354
|
-
CE.install_extend_commands
|
355
|
-
end
|
356
|
-
end
|