irb 1.12.0 → 1.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -11
- data/Rakefile +10 -0
- data/irb.gemspec +1 -1
- data/lib/irb/cmd/nop.rb +1 -1
- data/lib/irb/color.rb +2 -2
- data/lib/irb/command/backtrace.rb +2 -6
- data/lib/irb/command/base.rb +7 -9
- data/lib/irb/command/break.rb +2 -6
- data/lib/irb/command/catch.rb +2 -6
- data/lib/irb/command/chws.rb +11 -5
- data/lib/irb/command/context.rb +16 -0
- data/lib/irb/command/continue.rb +2 -2
- data/lib/irb/command/debug.rb +8 -1
- data/lib/irb/command/delete.rb +2 -2
- data/lib/irb/command/disable_irb.rb +19 -0
- data/lib/irb/command/edit.rb +6 -13
- data/lib/irb/command/exit.rb +1 -3
- data/lib/irb/command/finish.rb +2 -2
- data/lib/irb/command/force_exit.rb +1 -3
- data/lib/irb/command/help.rb +8 -17
- data/lib/irb/command/history.rb +4 -6
- data/lib/irb/command/info.rb +2 -6
- data/lib/irb/command/internal_helpers.rb +27 -0
- data/lib/irb/command/irb_info.rb +2 -2
- data/lib/irb/command/load.rb +20 -3
- data/lib/irb/command/ls.rb +20 -10
- data/lib/irb/command/measure.rb +12 -6
- data/lib/irb/command/next.rb +2 -2
- data/lib/irb/command/pushws.rb +10 -5
- data/lib/irb/command/show_doc.rb +9 -18
- data/lib/irb/command/show_source.rb +5 -12
- data/lib/irb/command/step.rb +2 -2
- data/lib/irb/command/subirb.rb +28 -12
- data/lib/irb/command/whereami.rb +1 -1
- data/lib/irb/command.rb +8 -303
- data/lib/irb/completion.rb +16 -5
- data/lib/irb/context.rb +21 -19
- data/lib/irb/default_commands.rb +260 -0
- data/lib/irb/ext/change-ws.rb +3 -5
- data/lib/irb/ext/multi-irb.rb +4 -4
- data/lib/irb/ext/workspaces.rb +3 -4
- data/lib/irb/help.rb +1 -1
- 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/history.rb +6 -3
- data/lib/irb/init.rb +60 -44
- data/lib/irb/input-method.rb +18 -10
- data/lib/irb/lc/error.rb +0 -5
- data/lib/irb/lc/ja/error.rb +0 -5
- data/lib/irb/lc/ja/help-message +10 -0
- data/lib/irb/statement.rb +5 -27
- data/lib/irb/version.rb +2 -2
- data/lib/irb/workspace.rb +18 -2
- data/lib/irb.rb +675 -624
- metadata +12 -5
@@ -0,0 +1,260 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "command"
|
4
|
+
require_relative "command/internal_helpers"
|
5
|
+
require_relative "command/context"
|
6
|
+
require_relative "command/exit"
|
7
|
+
require_relative "command/force_exit"
|
8
|
+
require_relative "command/chws"
|
9
|
+
require_relative "command/pushws"
|
10
|
+
require_relative "command/subirb"
|
11
|
+
require_relative "command/load"
|
12
|
+
require_relative "command/debug"
|
13
|
+
require_relative "command/edit"
|
14
|
+
require_relative "command/break"
|
15
|
+
require_relative "command/catch"
|
16
|
+
require_relative "command/next"
|
17
|
+
require_relative "command/delete"
|
18
|
+
require_relative "command/step"
|
19
|
+
require_relative "command/continue"
|
20
|
+
require_relative "command/finish"
|
21
|
+
require_relative "command/backtrace"
|
22
|
+
require_relative "command/info"
|
23
|
+
require_relative "command/help"
|
24
|
+
require_relative "command/show_doc"
|
25
|
+
require_relative "command/irb_info"
|
26
|
+
require_relative "command/ls"
|
27
|
+
require_relative "command/measure"
|
28
|
+
require_relative "command/show_source"
|
29
|
+
require_relative "command/whereami"
|
30
|
+
require_relative "command/history"
|
31
|
+
|
32
|
+
module IRB
|
33
|
+
module Command
|
34
|
+
NO_OVERRIDE = 0
|
35
|
+
OVERRIDE_PRIVATE_ONLY = 0x01
|
36
|
+
OVERRIDE_ALL = 0x02
|
37
|
+
|
38
|
+
class << self
|
39
|
+
# This API is for IRB's internal use only and may change at any time.
|
40
|
+
# Please do NOT use it.
|
41
|
+
def _register_with_aliases(name, command_class, *aliases)
|
42
|
+
@commands[name.to_sym] = [command_class, aliases]
|
43
|
+
end
|
44
|
+
|
45
|
+
def all_commands_info
|
46
|
+
user_aliases = IRB.CurrentContext.command_aliases.each_with_object({}) do |(alias_name, target), result|
|
47
|
+
result[target] ||= []
|
48
|
+
result[target] << alias_name
|
49
|
+
end
|
50
|
+
|
51
|
+
commands.map do |command_name, (command_class, aliases)|
|
52
|
+
aliases = aliases.map { |a| a.first }
|
53
|
+
|
54
|
+
if additional_aliases = user_aliases[command_name]
|
55
|
+
aliases += additional_aliases
|
56
|
+
end
|
57
|
+
|
58
|
+
display_name = aliases.shift || command_name
|
59
|
+
{
|
60
|
+
display_name: display_name,
|
61
|
+
description: command_class.description,
|
62
|
+
category: command_class.category
|
63
|
+
}
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def command_override_policies
|
68
|
+
@@command_override_policies ||= commands.flat_map do |cmd_name, (cmd_class, aliases)|
|
69
|
+
[[cmd_name, OVERRIDE_ALL]] + aliases
|
70
|
+
end.to_h
|
71
|
+
end
|
72
|
+
|
73
|
+
def execute_as_command?(name, public_method:, private_method:)
|
74
|
+
case command_override_policies[name]
|
75
|
+
when OVERRIDE_ALL
|
76
|
+
true
|
77
|
+
when OVERRIDE_PRIVATE_ONLY
|
78
|
+
!public_method
|
79
|
+
when NO_OVERRIDE
|
80
|
+
!public_method && !private_method
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def command_names
|
85
|
+
command_override_policies.keys.map(&:to_s)
|
86
|
+
end
|
87
|
+
|
88
|
+
# Convert a command name to its implementation class if such command exists
|
89
|
+
def load_command(command)
|
90
|
+
command = command.to_sym
|
91
|
+
commands.each do |command_name, (command_class, aliases)|
|
92
|
+
if command_name == command || aliases.any? { |alias_name, _| alias_name == command }
|
93
|
+
return command_class
|
94
|
+
end
|
95
|
+
end
|
96
|
+
nil
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
_register_with_aliases(:irb_context, Command::Context,
|
101
|
+
[:context, NO_OVERRIDE]
|
102
|
+
)
|
103
|
+
|
104
|
+
_register_with_aliases(:irb_exit, Command::Exit,
|
105
|
+
[:exit, OVERRIDE_PRIVATE_ONLY],
|
106
|
+
[:quit, OVERRIDE_PRIVATE_ONLY],
|
107
|
+
[:irb_quit, OVERRIDE_PRIVATE_ONLY]
|
108
|
+
)
|
109
|
+
|
110
|
+
_register_with_aliases(:irb_exit!, Command::ForceExit,
|
111
|
+
[:exit!, OVERRIDE_PRIVATE_ONLY]
|
112
|
+
)
|
113
|
+
|
114
|
+
_register_with_aliases(:irb_current_working_workspace, Command::CurrentWorkingWorkspace,
|
115
|
+
[:cwws, NO_OVERRIDE],
|
116
|
+
[:pwws, NO_OVERRIDE],
|
117
|
+
[:irb_print_working_workspace, OVERRIDE_ALL],
|
118
|
+
[:irb_cwws, OVERRIDE_ALL],
|
119
|
+
[:irb_pwws, OVERRIDE_ALL],
|
120
|
+
[:irb_current_working_binding, OVERRIDE_ALL],
|
121
|
+
[:irb_print_working_binding, OVERRIDE_ALL],
|
122
|
+
[:irb_cwb, OVERRIDE_ALL],
|
123
|
+
[:irb_pwb, OVERRIDE_ALL],
|
124
|
+
)
|
125
|
+
|
126
|
+
_register_with_aliases(:irb_change_workspace, Command::ChangeWorkspace,
|
127
|
+
[:chws, NO_OVERRIDE],
|
128
|
+
[:cws, NO_OVERRIDE],
|
129
|
+
[:irb_chws, OVERRIDE_ALL],
|
130
|
+
[:irb_cws, OVERRIDE_ALL],
|
131
|
+
[:irb_change_binding, OVERRIDE_ALL],
|
132
|
+
[:irb_cb, OVERRIDE_ALL],
|
133
|
+
[:cb, NO_OVERRIDE],
|
134
|
+
)
|
135
|
+
|
136
|
+
_register_with_aliases(:irb_workspaces, Command::Workspaces,
|
137
|
+
[:workspaces, NO_OVERRIDE],
|
138
|
+
[:irb_bindings, OVERRIDE_ALL],
|
139
|
+
[:bindings, NO_OVERRIDE],
|
140
|
+
)
|
141
|
+
|
142
|
+
_register_with_aliases(:irb_push_workspace, Command::PushWorkspace,
|
143
|
+
[:pushws, NO_OVERRIDE],
|
144
|
+
[:irb_pushws, OVERRIDE_ALL],
|
145
|
+
[:irb_push_binding, OVERRIDE_ALL],
|
146
|
+
[:irb_pushb, OVERRIDE_ALL],
|
147
|
+
[:pushb, NO_OVERRIDE],
|
148
|
+
)
|
149
|
+
|
150
|
+
_register_with_aliases(:irb_pop_workspace, Command::PopWorkspace,
|
151
|
+
[:popws, NO_OVERRIDE],
|
152
|
+
[:irb_popws, OVERRIDE_ALL],
|
153
|
+
[:irb_pop_binding, OVERRIDE_ALL],
|
154
|
+
[:irb_popb, OVERRIDE_ALL],
|
155
|
+
[:popb, NO_OVERRIDE],
|
156
|
+
)
|
157
|
+
|
158
|
+
_register_with_aliases(:irb_load, Command::Load)
|
159
|
+
_register_with_aliases(:irb_require, Command::Require)
|
160
|
+
_register_with_aliases(:irb_source, Command::Source,
|
161
|
+
[:source, NO_OVERRIDE]
|
162
|
+
)
|
163
|
+
|
164
|
+
_register_with_aliases(:irb, Command::IrbCommand)
|
165
|
+
_register_with_aliases(:irb_jobs, Command::Jobs,
|
166
|
+
[:jobs, NO_OVERRIDE]
|
167
|
+
)
|
168
|
+
_register_with_aliases(:irb_fg, Command::Foreground,
|
169
|
+
[:fg, NO_OVERRIDE]
|
170
|
+
)
|
171
|
+
_register_with_aliases(:irb_kill, Command::Kill,
|
172
|
+
[:kill, OVERRIDE_PRIVATE_ONLY]
|
173
|
+
)
|
174
|
+
|
175
|
+
_register_with_aliases(:irb_debug, Command::Debug,
|
176
|
+
[:debug, NO_OVERRIDE]
|
177
|
+
)
|
178
|
+
_register_with_aliases(:irb_edit, Command::Edit,
|
179
|
+
[:edit, NO_OVERRIDE]
|
180
|
+
)
|
181
|
+
|
182
|
+
_register_with_aliases(:irb_break, Command::Break)
|
183
|
+
_register_with_aliases(:irb_catch, Command::Catch)
|
184
|
+
_register_with_aliases(:irb_next, Command::Next)
|
185
|
+
_register_with_aliases(:irb_delete, Command::Delete,
|
186
|
+
[:delete, NO_OVERRIDE]
|
187
|
+
)
|
188
|
+
|
189
|
+
_register_with_aliases(:irb_step, Command::Step,
|
190
|
+
[:step, NO_OVERRIDE]
|
191
|
+
)
|
192
|
+
_register_with_aliases(:irb_continue, Command::Continue,
|
193
|
+
[:continue, NO_OVERRIDE]
|
194
|
+
)
|
195
|
+
_register_with_aliases(:irb_finish, Command::Finish,
|
196
|
+
[:finish, NO_OVERRIDE]
|
197
|
+
)
|
198
|
+
_register_with_aliases(:irb_backtrace, Command::Backtrace,
|
199
|
+
[:backtrace, NO_OVERRIDE],
|
200
|
+
[:bt, NO_OVERRIDE]
|
201
|
+
)
|
202
|
+
|
203
|
+
_register_with_aliases(:irb_debug_info, Command::Info,
|
204
|
+
[:info, NO_OVERRIDE]
|
205
|
+
)
|
206
|
+
|
207
|
+
_register_with_aliases(:irb_help, Command::Help,
|
208
|
+
[:help, NO_OVERRIDE],
|
209
|
+
[:show_cmds, NO_OVERRIDE]
|
210
|
+
)
|
211
|
+
|
212
|
+
_register_with_aliases(:irb_show_doc, Command::ShowDoc,
|
213
|
+
[:show_doc, NO_OVERRIDE]
|
214
|
+
)
|
215
|
+
|
216
|
+
_register_with_aliases(:irb_info, Command::IrbInfo)
|
217
|
+
|
218
|
+
_register_with_aliases(:irb_ls, Command::Ls,
|
219
|
+
[:ls, NO_OVERRIDE]
|
220
|
+
)
|
221
|
+
|
222
|
+
_register_with_aliases(:irb_measure, Command::Measure,
|
223
|
+
[:measure, NO_OVERRIDE]
|
224
|
+
)
|
225
|
+
|
226
|
+
_register_with_aliases(:irb_show_source, Command::ShowSource,
|
227
|
+
[:show_source, NO_OVERRIDE]
|
228
|
+
)
|
229
|
+
|
230
|
+
_register_with_aliases(:irb_whereami, Command::Whereami,
|
231
|
+
[:whereami, NO_OVERRIDE]
|
232
|
+
)
|
233
|
+
|
234
|
+
_register_with_aliases(:irb_history, Command::History,
|
235
|
+
[:history, NO_OVERRIDE],
|
236
|
+
[:hist, NO_OVERRIDE]
|
237
|
+
)
|
238
|
+
end
|
239
|
+
|
240
|
+
ExtendCommand = Command
|
241
|
+
|
242
|
+
# For backward compatibility, we need to keep this module:
|
243
|
+
# - As a container of helper methods
|
244
|
+
# - As a place to register commands with the deprecated def_extend_command method
|
245
|
+
module ExtendCommandBundle
|
246
|
+
# For backward compatibility
|
247
|
+
NO_OVERRIDE = Command::NO_OVERRIDE
|
248
|
+
OVERRIDE_PRIVATE_ONLY = Command::OVERRIDE_PRIVATE_ONLY
|
249
|
+
OVERRIDE_ALL = Command::OVERRIDE_ALL
|
250
|
+
|
251
|
+
# Deprecated. Doesn't have any effect.
|
252
|
+
@EXTEND_COMMANDS = []
|
253
|
+
|
254
|
+
# Drepcated. Use Command.regiser instead.
|
255
|
+
def self.def_extend_command(cmd_name, cmd_class, _, *aliases)
|
256
|
+
Command._register_with_aliases(cmd_name, cmd_class, *aliases)
|
257
|
+
Command.class_variable_set(:@@command_override_policies, nil)
|
258
|
+
end
|
259
|
+
end
|
260
|
+
end
|
data/lib/irb/ext/change-ws.rb
CHANGED
@@ -29,11 +29,9 @@ module IRB # :nodoc:
|
|
29
29
|
return main
|
30
30
|
end
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
main.extend ExtendCommandBundle
|
36
|
-
end
|
32
|
+
workspace = WorkSpace.new(_main[0])
|
33
|
+
replace_workspace(workspace)
|
34
|
+
workspace.load_helper_methods_to_main
|
37
35
|
end
|
38
36
|
end
|
39
37
|
end
|
data/lib/irb/ext/multi-irb.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
#
|
6
6
|
|
7
7
|
module IRB
|
8
|
-
class JobManager
|
8
|
+
class JobManager # :nodoc:
|
9
9
|
|
10
10
|
# Creates a new JobManager object
|
11
11
|
def initialize
|
@@ -166,12 +166,12 @@ module IRB
|
|
166
166
|
@JobManager = JobManager.new
|
167
167
|
|
168
168
|
# The current JobManager in the session
|
169
|
-
def IRB.JobManager
|
169
|
+
def IRB.JobManager # :nodoc:
|
170
170
|
@JobManager
|
171
171
|
end
|
172
172
|
|
173
173
|
# The current Context in this session
|
174
|
-
def IRB.CurrentContext
|
174
|
+
def IRB.CurrentContext # :nodoc:
|
175
175
|
IRB.JobManager.irb(Thread.current).context
|
176
176
|
end
|
177
177
|
|
@@ -179,7 +179,7 @@ module IRB
|
|
179
179
|
#
|
180
180
|
# The optional +file+ argument is given to Context.new, along with the
|
181
181
|
# workspace created with the remaining arguments, see WorkSpace.new
|
182
|
-
def IRB.irb(file = nil, *main)
|
182
|
+
def IRB.irb(file = nil, *main) # :nodoc:
|
183
183
|
workspace = WorkSpace.new(*main)
|
184
184
|
parent_thread = Thread.current
|
185
185
|
Thread.start do
|
data/lib/irb/ext/workspaces.rb
CHANGED
@@ -19,10 +19,9 @@ module IRB # :nodoc:
|
|
19
19
|
@workspace_stack.push current_workspace, previous_workspace
|
20
20
|
end
|
21
21
|
else
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
22
|
+
new_workspace = WorkSpace.new(workspace.binding, _main[0])
|
23
|
+
@workspace_stack.push new_workspace
|
24
|
+
new_workspace.load_helper_methods_to_main
|
26
25
|
end
|
27
26
|
end
|
28
27
|
|
data/lib/irb/help.rb
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative "helper_method/base"
|
2
|
+
|
3
|
+
module IRB
|
4
|
+
module HelperMethod
|
5
|
+
@helper_methods = {}
|
6
|
+
|
7
|
+
class << self
|
8
|
+
attr_reader :helper_methods
|
9
|
+
|
10
|
+
def register(name, helper_class)
|
11
|
+
@helper_methods[name] = helper_class
|
12
|
+
|
13
|
+
if defined?(HelpersContainer)
|
14
|
+
HelpersContainer.install_helper_methods
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def all_helper_methods_info
|
19
|
+
@helper_methods.map do |name, helper_class|
|
20
|
+
{ display_name: name, description: helper_class.description }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Default helper_methods
|
26
|
+
require_relative "helper_method/conf"
|
27
|
+
register(:conf, HelperMethod::Conf)
|
28
|
+
end
|
29
|
+
end
|
data/lib/irb/history.rb
CHANGED
@@ -16,8 +16,8 @@ module IRB
|
|
16
16
|
if history_file = IRB.conf[:HISTORY_FILE]
|
17
17
|
history_file = File.expand_path(history_file)
|
18
18
|
end
|
19
|
-
history_file = IRB.
|
20
|
-
if File.exist?(history_file)
|
19
|
+
history_file = IRB.rc_file("_history") unless history_file
|
20
|
+
if history_file && File.exist?(history_file)
|
21
21
|
File.open(history_file, "r:#{IRB.conf[:LC_MESSAGES].encoding}") do |f|
|
22
22
|
f.each { |l|
|
23
23
|
l = l.chomp
|
@@ -41,7 +41,10 @@ module IRB
|
|
41
41
|
if history_file = IRB.conf[:HISTORY_FILE]
|
42
42
|
history_file = File.expand_path(history_file)
|
43
43
|
end
|
44
|
-
history_file = IRB.
|
44
|
+
history_file = IRB.rc_file("_history") unless history_file
|
45
|
+
|
46
|
+
# When HOME and XDG_CONFIG_HOME are not available, history_file might be nil
|
47
|
+
return unless history_file
|
45
48
|
|
46
49
|
# Change the permission of a file that already exists[BUG #7694]
|
47
50
|
begin
|
data/lib/irb/init.rb
CHANGED
@@ -395,10 +395,8 @@ module IRB # :nodoc:
|
|
395
395
|
# Run the config file
|
396
396
|
def IRB.run_config
|
397
397
|
if @CONF[:RC]
|
398
|
-
|
399
|
-
|
400
|
-
# Otherwise, it'd be very noisy.
|
401
|
-
load rc if File.exist?(rc)
|
398
|
+
irbrc_files.each do |rc|
|
399
|
+
load rc
|
402
400
|
rescue StandardError, ScriptError => e
|
403
401
|
warn "Error loading RC file '#{rc}':\n#{e.full_message(highlight: false)}"
|
404
402
|
end
|
@@ -406,53 +404,27 @@ module IRB # :nodoc:
|
|
406
404
|
end
|
407
405
|
|
408
406
|
IRBRC_EXT = "rc"
|
409
|
-
def IRB.rc_file(ext = IRBRC_EXT)
|
410
|
-
warn "rc_file is deprecated, please use rc_files instead."
|
411
|
-
rc_files(ext).first
|
412
|
-
end
|
413
|
-
|
414
|
-
def IRB.rc_files(ext = IRBRC_EXT)
|
415
|
-
if !@CONF[:RC_NAME_GENERATOR]
|
416
|
-
@CONF[:RC_NAME_GENERATOR] ||= []
|
417
|
-
existing_rc_file_generators = []
|
418
407
|
|
419
|
-
|
420
|
-
|
421
|
-
existing_rc_file_generators << rcgen if File.exist?(rcgen.call(ext))
|
422
|
-
end
|
408
|
+
def IRB.rc_file(ext)
|
409
|
+
prepare_irbrc_name_generators
|
423
410
|
|
424
|
-
|
425
|
-
|
426
|
-
|
411
|
+
# When irbrc exist in default location
|
412
|
+
if (rcgen = @existing_rc_name_generators.first)
|
413
|
+
return rcgen.call(ext)
|
427
414
|
end
|
428
415
|
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
rc_file
|
416
|
+
# When irbrc does not exist in default location
|
417
|
+
rc_file_generators do |rcgen|
|
418
|
+
return rcgen.call(ext)
|
433
419
|
end
|
420
|
+
|
421
|
+
# When HOME and XDG_CONFIG_HOME are not available
|
422
|
+
nil
|
434
423
|
end
|
435
424
|
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
yield proc{|rc| rc == "rc" ? irbrc : irbrc+rc}
|
440
|
-
end
|
441
|
-
if xdg_config_home = ENV["XDG_CONFIG_HOME"]
|
442
|
-
irb_home = File.join(xdg_config_home, "irb")
|
443
|
-
if File.directory?(irb_home)
|
444
|
-
yield proc{|rc| irb_home + "/irb#{rc}"}
|
445
|
-
end
|
446
|
-
end
|
447
|
-
if home = ENV["HOME"]
|
448
|
-
yield proc{|rc| home+"/.irb#{rc}"}
|
449
|
-
yield proc{|rc| home+"/.config/irb/irb#{rc}"}
|
450
|
-
end
|
451
|
-
current_dir = Dir.pwd
|
452
|
-
yield proc{|rc| current_dir+"/.irb#{rc}"}
|
453
|
-
yield proc{|rc| current_dir+"/irb#{rc.sub(/\A_?/, '.')}"}
|
454
|
-
yield proc{|rc| current_dir+"/_irb#{rc}"}
|
455
|
-
yield proc{|rc| current_dir+"/$irb#{rc}"}
|
425
|
+
def IRB.irbrc_files
|
426
|
+
prepare_irbrc_name_generators
|
427
|
+
@irbrc_files
|
456
428
|
end
|
457
429
|
|
458
430
|
# loading modules
|
@@ -468,6 +440,50 @@ module IRB # :nodoc:
|
|
468
440
|
|
469
441
|
class << IRB
|
470
442
|
private
|
443
|
+
|
444
|
+
def prepare_irbrc_name_generators
|
445
|
+
return if @existing_rc_name_generators
|
446
|
+
|
447
|
+
@existing_rc_name_generators = []
|
448
|
+
@irbrc_files = []
|
449
|
+
rc_file_generators do |rcgen|
|
450
|
+
irbrc = rcgen.call(IRBRC_EXT)
|
451
|
+
if File.exist?(irbrc)
|
452
|
+
@irbrc_files << irbrc
|
453
|
+
@existing_rc_name_generators << rcgen
|
454
|
+
end
|
455
|
+
end
|
456
|
+
generate_current_dir_irbrc_files.each do |irbrc|
|
457
|
+
@irbrc_files << irbrc if File.exist?(irbrc)
|
458
|
+
end
|
459
|
+
@irbrc_files.uniq!
|
460
|
+
end
|
461
|
+
|
462
|
+
# enumerate possible rc-file base name generators
|
463
|
+
def rc_file_generators
|
464
|
+
if irbrc = ENV["IRBRC"]
|
465
|
+
yield proc{|rc| rc == "rc" ? irbrc : irbrc+rc}
|
466
|
+
end
|
467
|
+
if xdg_config_home = ENV["XDG_CONFIG_HOME"]
|
468
|
+
irb_home = File.join(xdg_config_home, "irb")
|
469
|
+
if File.directory?(irb_home)
|
470
|
+
yield proc{|rc| irb_home + "/irb#{rc}"}
|
471
|
+
end
|
472
|
+
end
|
473
|
+
if home = ENV["HOME"]
|
474
|
+
yield proc{|rc| home+"/.irb#{rc}"}
|
475
|
+
if xdg_config_home.nil? || xdg_config_home.empty?
|
476
|
+
yield proc{|rc| home+"/.config/irb/irb#{rc}"}
|
477
|
+
end
|
478
|
+
end
|
479
|
+
end
|
480
|
+
|
481
|
+
# possible irbrc files in current directory
|
482
|
+
def generate_current_dir_irbrc_files
|
483
|
+
current_dir = Dir.pwd
|
484
|
+
%w[.irbrc irbrc _irbrc $irbrc].map { |file| "#{current_dir}/#{file}" }
|
485
|
+
end
|
486
|
+
|
471
487
|
def set_encoding(extern, intern = nil, override: true)
|
472
488
|
verbose, $VERBOSE = $VERBOSE, nil
|
473
489
|
Encoding.default_external = extern unless extern.nil? || extern.empty?
|
data/lib/irb/input-method.rb
CHANGED
@@ -308,6 +308,20 @@ module IRB
|
|
308
308
|
@completor.doc_namespace(preposing, matched, postposing, bind: bind)
|
309
309
|
end
|
310
310
|
|
311
|
+
def rdoc_ri_driver
|
312
|
+
return @rdoc_ri_driver if defined?(@rdoc_ri_driver)
|
313
|
+
|
314
|
+
begin
|
315
|
+
require 'rdoc'
|
316
|
+
rescue LoadError
|
317
|
+
@rdoc_ri_driver = nil
|
318
|
+
else
|
319
|
+
options = {}
|
320
|
+
options[:extra_doc_dirs] = IRB.conf[:EXTRA_DOC_DIRS] unless IRB.conf[:EXTRA_DOC_DIRS].empty?
|
321
|
+
@rdoc_ri_driver = RDoc::RI::Driver.new(options)
|
322
|
+
end
|
323
|
+
end
|
324
|
+
|
311
325
|
def show_doc_dialog_proc
|
312
326
|
input_method = self # self is changed in the lambda below.
|
313
327
|
->() {
|
@@ -331,9 +345,7 @@ module IRB
|
|
331
345
|
|
332
346
|
show_easter_egg = name&.match?(/\ARubyVM/) && !ENV['RUBY_YES_I_AM_NOT_A_NORMAL_USER']
|
333
347
|
|
334
|
-
|
335
|
-
options[:extra_doc_dirs] = IRB.conf[:EXTRA_DOC_DIRS] unless IRB.conf[:EXTRA_DOC_DIRS].empty?
|
336
|
-
driver = RDoc::RI::Driver.new(options)
|
348
|
+
driver = input_method.rdoc_ri_driver
|
337
349
|
|
338
350
|
if key.match?(dialog.name)
|
339
351
|
if show_easter_egg
|
@@ -421,12 +433,9 @@ module IRB
|
|
421
433
|
}
|
422
434
|
end
|
423
435
|
|
424
|
-
def display_document(matched
|
425
|
-
|
426
|
-
|
427
|
-
rescue LoadError
|
428
|
-
return
|
429
|
-
end
|
436
|
+
def display_document(matched)
|
437
|
+
driver = rdoc_ri_driver
|
438
|
+
return unless driver
|
430
439
|
|
431
440
|
if matched =~ /\A(?:::)?RubyVM/ and not ENV['RUBY_YES_I_AM_NOT_A_NORMAL_USER']
|
432
441
|
IRB.__send__(:easter_egg)
|
@@ -436,7 +445,6 @@ module IRB
|
|
436
445
|
namespace = retrieve_doc_namespace(matched)
|
437
446
|
return unless namespace
|
438
447
|
|
439
|
-
driver ||= RDoc::RI::Driver.new
|
440
448
|
if namespace.is_a?(Array)
|
441
449
|
out = RDoc::Markup::Document.new
|
442
450
|
namespace.each do |m|
|
data/lib/irb/lc/error.rb
CHANGED
data/lib/irb/lc/ja/error.rb
CHANGED
data/lib/irb/lc/ja/help-message
CHANGED
@@ -9,10 +9,18 @@ Usage: irb.rb [options] [programfile] [arguments]
|
|
9
9
|
-W[level=2] ruby -W と同じ.
|
10
10
|
--context-mode n 新しいワークスペースを作成した時に関連する Binding
|
11
11
|
オブジェクトの作成方法を 0 から 3 のいずれかに設定する.
|
12
|
+
--extra-doc-dir 指定したディレクトリのドキュメントを追加で読み込む.
|
12
13
|
--echo 実行結果を表示する(デフォルト).
|
13
14
|
--noecho 実行結果を表示しない.
|
15
|
+
--echo-on-assignment
|
16
|
+
代入結果を表示する.
|
17
|
+
--noecho-on-assignment
|
18
|
+
代入結果を表示しない.
|
19
|
+
--truncate-echo-on-assignment
|
20
|
+
truncateされた代入結果を表示する(デフォルト).
|
14
21
|
--inspect 結果出力にinspectを用いる.
|
15
22
|
--noinspect 結果出力にinspectを用いない.
|
23
|
+
--no-pager ページャを使用しない.
|
16
24
|
--multiline マルチラインエディタを利用する.
|
17
25
|
--nomultiline マルチラインエディタを利用しない.
|
18
26
|
--singleline シングルラインエディタを利用する.
|
@@ -34,6 +42,8 @@ Usage: irb.rb [options] [programfile] [arguments]
|
|
34
42
|
--sample-book-mode/--simple-prompt
|
35
43
|
非常にシンプルなプロンプトを用いるモードです.
|
36
44
|
--noprompt プロンプト表示を行なわない.
|
45
|
+
--script スクリプトモード(最初の引数をスクリプトファイルとして扱う、デフォルト)
|
46
|
+
--noscript 引数をargvとして扱う.
|
37
47
|
--single-irb irb 中で self を実行して得られるオブジェクトをサ
|
38
48
|
ブ irb と共有する.
|
39
49
|
--tracer コマンド実行時にトレースを行なう.
|