irb 1.11.2 → 1.12.0

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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -8
  3. data/lib/irb/cmd/nop.rb +3 -52
  4. data/lib/irb/{cmd → command}/backtrace.rb +1 -1
  5. data/lib/irb/command/base.rb +64 -0
  6. data/lib/irb/{cmd → command}/break.rb +1 -1
  7. data/lib/irb/{cmd → command}/catch.rb +1 -1
  8. data/lib/irb/{cmd → command}/chws.rb +4 -6
  9. data/lib/irb/{cmd → command}/continue.rb +1 -1
  10. data/lib/irb/{cmd → command}/debug.rb +3 -4
  11. data/lib/irb/{cmd → command}/delete.rb +1 -1
  12. data/lib/irb/command/edit.rb +70 -0
  13. data/lib/irb/{cmd → command}/exit.rb +2 -4
  14. data/lib/irb/{cmd → command}/finish.rb +1 -1
  15. data/lib/irb/command/force_exit.rb +20 -0
  16. data/lib/irb/command/help.rb +84 -0
  17. data/lib/irb/{cmd → command}/history.rb +3 -3
  18. data/lib/irb/{cmd → command}/info.rb +1 -1
  19. data/lib/irb/{cmd → command}/irb_info.rb +5 -6
  20. data/lib/irb/{cmd → command}/load.rb +3 -5
  21. data/lib/irb/{cmd → command}/ls.rb +10 -4
  22. data/lib/irb/{cmd → command}/measure.rb +2 -4
  23. data/lib/irb/{cmd → command}/next.rb +1 -1
  24. data/lib/irb/{cmd → command}/pushws.rb +20 -5
  25. data/lib/irb/{cmd → command}/show_doc.rb +17 -5
  26. data/lib/irb/{cmd → command}/show_source.rb +26 -10
  27. data/lib/irb/{cmd → command}/step.rb +1 -1
  28. data/lib/irb/{cmd → command}/subirb.rb +3 -5
  29. data/lib/irb/{cmd → command}/whereami.rb +2 -4
  30. data/lib/irb/{extend-command.rb → command.rb} +50 -85
  31. data/lib/irb/completion.rb +1 -1
  32. data/lib/irb/context.rb +56 -18
  33. data/lib/irb/ext/change-ws.rb +4 -4
  34. data/lib/irb/ext/eval_history.rb +3 -3
  35. data/lib/irb/ext/loader.rb +4 -4
  36. data/lib/irb/ext/multi-irb.rb +1 -1
  37. data/lib/irb/ext/tracer.rb +1 -1
  38. data/lib/irb/ext/use-loader.rb +6 -8
  39. data/lib/irb/ext/workspaces.rb +11 -34
  40. data/lib/irb/frame.rb +1 -1
  41. data/lib/irb/help.rb +1 -1
  42. data/lib/irb/history.rb +2 -2
  43. data/lib/irb/init.rb +22 -14
  44. data/lib/irb/input-method.rb +18 -2
  45. data/lib/irb/inspector.rb +2 -2
  46. data/lib/irb/lc/error.rb +1 -6
  47. data/lib/irb/lc/ja/error.rb +1 -6
  48. data/lib/irb/locale.rb +1 -1
  49. data/lib/irb/notifier.rb +1 -1
  50. data/lib/irb/output-method.rb +2 -8
  51. data/lib/irb/ruby-lex.rb +1 -1
  52. data/lib/irb/source_finder.rb +98 -38
  53. data/lib/irb/statement.rb +25 -3
  54. data/lib/irb/version.rb +3 -3
  55. data/lib/irb/workspace.rb +4 -4
  56. data/lib/irb/ws-for-case-2.rb +1 -1
  57. data/lib/irb/xmp.rb +1 -1
  58. data/lib/irb.rb +29 -22
  59. metadata +30 -29
  60. data/lib/irb/cmd/edit.rb +0 -60
  61. data/lib/irb/cmd/help.rb +0 -23
  62. data/lib/irb/cmd/show_cmds.rb +0 -59
@@ -1,10 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "nop"
4
-
5
3
  module IRB
6
- module ExtendCommand
7
- class ShowDoc < Nop
4
+ module Command
5
+ class ShowDoc < Base
8
6
  class << self
9
7
  def transform_args(args)
10
8
  # Return a string literal as is for backward compatibility
@@ -17,7 +15,21 @@ module IRB
17
15
  end
18
16
 
19
17
  category "Context"
20
- description "Enter the mode to look up RI documents."
18
+ description "Look up documentation with RI."
19
+
20
+ help_message <<~HELP_MESSAGE
21
+ Usage: show_doc [name]
22
+
23
+ When name is provided, IRB will look up the documentation for the given name.
24
+ When no name is provided, a RI session will be started.
25
+
26
+ Examples:
27
+
28
+ show_doc
29
+ show_doc Array
30
+ show_doc Array#each
31
+
32
+ HELP_MESSAGE
21
33
 
22
34
  def execute(*names)
23
35
  require 'rdoc/ri/driver'
@@ -1,15 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "nop"
4
3
  require_relative "../source_finder"
5
4
  require_relative "../pager"
6
5
  require_relative "../color"
7
6
 
8
7
  module IRB
9
- module ExtendCommand
10
- class ShowSource < Nop
8
+ module Command
9
+ class ShowSource < Base
11
10
  category "Context"
12
- description "Show the source code of a given method or constant."
11
+ description "Show the source code of a given method, class/module, or constant."
12
+
13
+ help_message <<~HELP_MESSAGE
14
+ Usage: show_source [target] [-s]
15
+
16
+ -s Show the super method. You can stack it like `-ss` to show the super of the super, etc.
17
+
18
+ Examples:
19
+
20
+ show_source Foo
21
+ show_source Foo#bar
22
+ show_source Foo#bar -s
23
+ show_source Foo.baz
24
+ show_source Foo::BAR
25
+ HELP_MESSAGE
13
26
 
14
27
  class << self
15
28
  def transform_args(args)
@@ -45,15 +58,18 @@ module IRB
45
58
  private
46
59
 
47
60
  def show_source(source)
48
- file_content = IRB::Color.colorize_code(File.read(source.file))
49
- code = file_content.lines[(source.first_line - 1)...source.last_line].join
50
- content = <<~CONTENT
61
+ if source.binary_file?
62
+ content = "\n#{bold('Defined in binary file')}: #{source.file}\n\n"
63
+ else
64
+ code = source.colorized_content || 'Source not available'
65
+ content = <<~CONTENT
51
66
 
52
- #{bold("From")}: #{source.file}:#{source.first_line}
67
+ #{bold("From")}: #{source.file}:#{source.line}
53
68
 
54
- #{code}
55
- CONTENT
69
+ #{code.chomp}
56
70
 
71
+ CONTENT
72
+ end
57
73
  Pager.page_content(content)
58
74
  end
59
75
 
@@ -5,7 +5,7 @@ require_relative "debug"
5
5
  module IRB
6
6
  # :stopdoc:
7
7
 
8
- module ExtendCommand
8
+ module Command
9
9
  class Step < DebugCommand
10
10
  def execute(*args)
11
11
  super(do_cmds: ["step", *args].join(" "))
@@ -1,16 +1,14 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  #
3
3
  # multi.rb -
4
4
  # by Keiju ISHITSUKA(keiju@ruby-lang.org)
5
5
  #
6
6
 
7
- require_relative "nop"
8
-
9
7
  module IRB
10
8
  # :stopdoc:
11
9
 
12
- module ExtendCommand
13
- class MultiIRBCommand < Nop
10
+ module Command
11
+ class MultiIRBCommand < Base
14
12
  def execute(*args)
15
13
  extend_irb_context
16
14
  end
@@ -1,12 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "nop"
4
-
5
3
  module IRB
6
4
  # :stopdoc:
7
5
 
8
- module ExtendCommand
9
- class Whereami < Nop
6
+ module Command
7
+ class Whereami < Base
10
8
  category "Context"
11
9
  description "Show the source code around binding.irb again."
12
10
 
@@ -1,10 +1,15 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  #
3
- # irb/extend-command.rb - irb extend command
3
+ # irb/command.rb - irb command
4
4
  # by Keiju ISHITSUKA(keiju@ruby-lang.org)
5
5
  #
6
6
 
7
+ require_relative "command/base"
8
+
7
9
  module IRB # :nodoc:
10
+ module Command; end
11
+ ExtendCommand = Command
12
+
8
13
  # Installs the default irb extensions command bundle.
9
14
  module ExtendCommandBundle
10
15
  EXCB = ExtendCommandBundle # :nodoc:
@@ -31,13 +36,18 @@ module IRB # :nodoc:
31
36
 
32
37
  @EXTEND_COMMANDS = [
33
38
  [
34
- :irb_exit, :Exit, "cmd/exit",
39
+ :irb_exit, :Exit, "command/exit",
35
40
  [:exit, OVERRIDE_PRIVATE_ONLY],
36
41
  [:quit, OVERRIDE_PRIVATE_ONLY],
37
42
  [:irb_quit, OVERRIDE_PRIVATE_ONLY],
38
43
  ],
39
44
  [
40
- :irb_current_working_workspace, :CurrentWorkingWorkspace, "cmd/chws",
45
+ :irb_exit!, :ForceExit, "command/force_exit",
46
+ [:exit!, OVERRIDE_PRIVATE_ONLY],
47
+ ],
48
+
49
+ [
50
+ :irb_current_working_workspace, :CurrentWorkingWorkspace, "command/chws",
41
51
  [:cwws, NO_OVERRIDE],
42
52
  [:pwws, NO_OVERRIDE],
43
53
  [:irb_print_working_workspace, OVERRIDE_ALL],
@@ -49,7 +59,7 @@ module IRB # :nodoc:
49
59
  [:irb_pwb, OVERRIDE_ALL],
50
60
  ],
51
61
  [
52
- :irb_change_workspace, :ChangeWorkspace, "cmd/chws",
62
+ :irb_change_workspace, :ChangeWorkspace, "command/chws",
53
63
  [:chws, NO_OVERRIDE],
54
64
  [:cws, NO_OVERRIDE],
55
65
  [:irb_chws, OVERRIDE_ALL],
@@ -60,13 +70,13 @@ module IRB # :nodoc:
60
70
  ],
61
71
 
62
72
  [
63
- :irb_workspaces, :Workspaces, "cmd/pushws",
73
+ :irb_workspaces, :Workspaces, "command/pushws",
64
74
  [:workspaces, NO_OVERRIDE],
65
75
  [:irb_bindings, OVERRIDE_ALL],
66
76
  [:bindings, NO_OVERRIDE],
67
77
  ],
68
78
  [
69
- :irb_push_workspace, :PushWorkspace, "cmd/pushws",
79
+ :irb_push_workspace, :PushWorkspace, "command/pushws",
70
80
  [:pushws, NO_OVERRIDE],
71
81
  [:irb_pushws, OVERRIDE_ALL],
72
82
  [:irb_push_binding, OVERRIDE_ALL],
@@ -74,7 +84,7 @@ module IRB # :nodoc:
74
84
  [:pushb, NO_OVERRIDE],
75
85
  ],
76
86
  [
77
- :irb_pop_workspace, :PopWorkspace, "cmd/pushws",
87
+ :irb_pop_workspace, :PopWorkspace, "command/pushws",
78
88
  [:popws, NO_OVERRIDE],
79
89
  [:irb_popws, OVERRIDE_ALL],
80
90
  [:irb_pop_binding, OVERRIDE_ALL],
@@ -83,112 +93,107 @@ module IRB # :nodoc:
83
93
  ],
84
94
 
85
95
  [
86
- :irb_load, :Load, "cmd/load"],
96
+ :irb_load, :Load, "command/load"],
87
97
  [
88
- :irb_require, :Require, "cmd/load"],
98
+ :irb_require, :Require, "command/load"],
89
99
  [
90
- :irb_source, :Source, "cmd/load",
100
+ :irb_source, :Source, "command/load",
91
101
  [:source, NO_OVERRIDE],
92
102
  ],
93
103
 
94
104
  [
95
- :irb, :IrbCommand, "cmd/subirb"],
105
+ :irb, :IrbCommand, "command/subirb"],
96
106
  [
97
- :irb_jobs, :Jobs, "cmd/subirb",
107
+ :irb_jobs, :Jobs, "command/subirb",
98
108
  [:jobs, NO_OVERRIDE],
99
109
  ],
100
110
  [
101
- :irb_fg, :Foreground, "cmd/subirb",
111
+ :irb_fg, :Foreground, "command/subirb",
102
112
  [:fg, NO_OVERRIDE],
103
113
  ],
104
114
  [
105
- :irb_kill, :Kill, "cmd/subirb",
115
+ :irb_kill, :Kill, "command/subirb",
106
116
  [:kill, OVERRIDE_PRIVATE_ONLY],
107
117
  ],
108
118
 
109
119
  [
110
- :irb_debug, :Debug, "cmd/debug",
120
+ :irb_debug, :Debug, "command/debug",
111
121
  [:debug, NO_OVERRIDE],
112
122
  ],
113
123
  [
114
- :irb_edit, :Edit, "cmd/edit",
124
+ :irb_edit, :Edit, "command/edit",
115
125
  [:edit, NO_OVERRIDE],
116
126
  ],
117
127
  [
118
- :irb_break, :Break, "cmd/break",
128
+ :irb_break, :Break, "command/break",
119
129
  ],
120
130
  [
121
- :irb_catch, :Catch, "cmd/catch",
131
+ :irb_catch, :Catch, "command/catch",
122
132
  ],
123
133
  [
124
- :irb_next, :Next, "cmd/next"
134
+ :irb_next, :Next, "command/next"
125
135
  ],
126
136
  [
127
- :irb_delete, :Delete, "cmd/delete",
137
+ :irb_delete, :Delete, "command/delete",
128
138
  [:delete, NO_OVERRIDE],
129
139
  ],
130
140
  [
131
- :irb_step, :Step, "cmd/step",
141
+ :irb_step, :Step, "command/step",
132
142
  [:step, NO_OVERRIDE],
133
143
  ],
134
144
  [
135
- :irb_continue, :Continue, "cmd/continue",
145
+ :irb_continue, :Continue, "command/continue",
136
146
  [:continue, NO_OVERRIDE],
137
147
  ],
138
148
  [
139
- :irb_finish, :Finish, "cmd/finish",
149
+ :irb_finish, :Finish, "command/finish",
140
150
  [:finish, NO_OVERRIDE],
141
151
  ],
142
152
  [
143
- :irb_backtrace, :Backtrace, "cmd/backtrace",
153
+ :irb_backtrace, :Backtrace, "command/backtrace",
144
154
  [:backtrace, NO_OVERRIDE],
145
155
  [:bt, NO_OVERRIDE],
146
156
  ],
147
157
  [
148
- :irb_debug_info, :Info, "cmd/info",
158
+ :irb_debug_info, :Info, "command/info",
149
159
  [:info, NO_OVERRIDE],
150
160
  ],
151
161
 
152
162
  [
153
- :irb_help, :Help, "cmd/help",
163
+ :irb_help, :Help, "command/help",
154
164
  [:help, NO_OVERRIDE],
165
+ [:show_cmds, NO_OVERRIDE],
155
166
  ],
156
167
 
157
168
  [
158
- :irb_show_doc, :ShowDoc, "cmd/show_doc",
169
+ :irb_show_doc, :ShowDoc, "command/show_doc",
159
170
  [:show_doc, NO_OVERRIDE],
160
171
  ],
161
172
 
162
173
  [
163
- :irb_info, :IrbInfo, "cmd/irb_info"
174
+ :irb_info, :IrbInfo, "command/irb_info"
164
175
  ],
165
176
 
166
177
  [
167
- :irb_ls, :Ls, "cmd/ls",
178
+ :irb_ls, :Ls, "command/ls",
168
179
  [:ls, NO_OVERRIDE],
169
180
  ],
170
181
 
171
182
  [
172
- :irb_measure, :Measure, "cmd/measure",
183
+ :irb_measure, :Measure, "command/measure",
173
184
  [:measure, NO_OVERRIDE],
174
185
  ],
175
186
 
176
187
  [
177
- :irb_show_source, :ShowSource, "cmd/show_source",
188
+ :irb_show_source, :ShowSource, "command/show_source",
178
189
  [:show_source, NO_OVERRIDE],
179
190
  ],
180
-
181
191
  [
182
- :irb_whereami, :Whereami, "cmd/whereami",
192
+ :irb_whereami, :Whereami, "command/whereami",
183
193
  [:whereami, NO_OVERRIDE],
184
194
  ],
185
195
  [
186
- :irb_show_cmds, :ShowCmds, "cmd/show_cmds",
187
- [:show_cmds, NO_OVERRIDE],
188
- ],
189
-
190
- [
191
- :irb_history, :History, "cmd/history",
196
+ :irb_history, :History, "command/history",
192
197
  [:history, NO_OVERRIDE],
193
198
  [:hist, NO_OVERRIDE],
194
199
  ]
@@ -205,11 +210,11 @@ module IRB # :nodoc:
205
210
  end
206
211
 
207
212
  @EXTEND_COMMANDS.each do |cmd_name, cmd_class, load_file, *aliases|
208
- if !defined?(ExtendCommand) || !ExtendCommand.const_defined?(cmd_class, false)
213
+ if !defined?(Command) || !Command.const_defined?(cmd_class, false)
209
214
  require_relative load_file
210
215
  end
211
216
 
212
- klass = ExtendCommand.const_get(cmd_class, false)
217
+ klass = Command.const_get(cmd_class, false)
213
218
  aliases = aliases.map { |a| a.first }
214
219
 
215
220
  if additional_aliases = user_aliases[cmd_name]
@@ -229,10 +234,10 @@ module IRB # :nodoc:
229
234
  @EXTEND_COMMANDS.each do |cmd_name, cmd_class, load_file, *aliases|
230
235
  next if cmd_name != command && aliases.all? { |alias_name, _| alias_name != command }
231
236
 
232
- if !defined?(ExtendCommand) || !ExtendCommand.const_defined?(cmd_class, false)
237
+ if !defined?(Command) || !Command.const_defined?(cmd_class, false)
233
238
  require_relative load_file
234
239
  end
235
- return ExtendCommand.const_get(cmd_class, false)
240
+ return Command.const_get(cmd_class, false)
236
241
  end
237
242
  nil
238
243
  end
@@ -262,7 +267,7 @@ module IRB # :nodoc:
262
267
  line = __LINE__; eval %[
263
268
  def #{cmd_name}(*opts, **kwargs, &b)
264
269
  Kernel.require_relative "#{load_file}"
265
- ::IRB::ExtendCommand::#{cmd_class}.execute(irb_context, *opts, **kwargs, &b)
270
+ ::IRB::Command::#{cmd_class}.execute(irb_context, *opts, **kwargs, &b)
266
271
  end
267
272
  ], nil, __FILE__, line
268
273
 
@@ -310,44 +315,4 @@ module IRB # :nodoc:
310
315
 
311
316
  install_extend_commands
312
317
  end
313
-
314
- # Extends methods for the Context module
315
- module ContextExtender
316
- CE = ContextExtender # :nodoc:
317
-
318
- @EXTEND_COMMANDS = [
319
- [:eval_history=, "ext/eval_history.rb"],
320
- [:use_loader=, "ext/use-loader.rb"],
321
- ]
322
-
323
- # Installs the default context extensions as irb commands:
324
- #
325
- # Context#eval_history=:: +irb/ext/history.rb+
326
- # Context#use_tracer=:: +irb/ext/tracer.rb+
327
- # Context#use_loader=:: +irb/ext/use-loader.rb+
328
- def self.install_extend_commands
329
- for args in @EXTEND_COMMANDS
330
- def_extend_command(*args)
331
- end
332
- end
333
-
334
- # Evaluate the given +command+ from the given +load_file+ on the Context
335
- # module.
336
- #
337
- # Will also define any given +aliases+ for the method.
338
- def self.def_extend_command(cmd_name, load_file, *aliases)
339
- line = __LINE__; Context.module_eval %[
340
- def #{cmd_name}(*opts, &b)
341
- Context.module_eval {remove_method(:#{cmd_name})}
342
- require_relative "#{load_file}"
343
- __send__ :#{cmd_name}, *opts, &b
344
- end
345
- for ali in aliases
346
- alias_method ali, cmd_name
347
- end
348
- ], __FILE__, line
349
- end
350
-
351
- CE.install_extend_commands
352
- end
353
318
  end
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  #
3
3
  # irb/completion.rb -
4
4
  # by Keiju ISHITSUKA(keiju@ishitsuka.com)
data/lib/irb/context.rb CHANGED
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  #
3
3
  # irb/context.rb - irb context
4
4
  # by Keiju ISHITSUKA(keiju@ruby-lang.org)
@@ -22,10 +22,11 @@ module IRB
22
22
  # +other+:: uses this as InputMethod
23
23
  def initialize(irb, workspace = nil, input_method = nil)
24
24
  @irb = irb
25
+ @workspace_stack = []
25
26
  if workspace
26
- @workspace = workspace
27
+ @workspace_stack << workspace
27
28
  else
28
- @workspace = WorkSpace.new
29
+ @workspace_stack << WorkSpace.new
29
30
  end
30
31
  @thread = Thread.current
31
32
 
@@ -77,7 +78,7 @@ module IRB
77
78
  else
78
79
  @irb_name = IRB.conf[:IRB_NAME]+"#"+IRB.JobManager.n_jobs.to_s
79
80
  end
80
- @irb_path = "(" + @irb_name + ")"
81
+ self.irb_path = "(" + @irb_name + ")"
81
82
 
82
83
  case input_method
83
84
  when nil
@@ -121,11 +122,11 @@ module IRB
121
122
  when '-'
122
123
  @io = FileInputMethod.new($stdin)
123
124
  @irb_name = '-'
124
- @irb_path = '-'
125
+ self.irb_path = '-'
125
126
  when String
126
127
  @io = FileInputMethod.new(input_method)
127
128
  @irb_name = File.basename(input_method)
128
- @irb_path = input_method
129
+ self.irb_path = input_method
129
130
  else
130
131
  @io = input_method
131
132
  end
@@ -166,6 +167,18 @@ module IRB
166
167
  IRB.conf[:USE_TRACER] = val
167
168
  end
168
169
 
170
+ def eval_history=(val)
171
+ self.class.remove_method(__method__)
172
+ require_relative "ext/eval_history"
173
+ __send__(__method__, val)
174
+ end
175
+
176
+ def use_loader=(val)
177
+ self.class.remove_method(__method__)
178
+ require_relative "ext/use-loader"
179
+ __send__(__method__, val)
180
+ end
181
+
169
182
  private def build_completor
170
183
  completor_type = IRB.conf[:COMPLETOR]
171
184
  case completor_type
@@ -217,15 +230,24 @@ module IRB
217
230
  IRB.conf[:HISTORY_FILE] = hist
218
231
  end
219
232
 
233
+ # Workspace in the current context.
234
+ def workspace
235
+ @workspace_stack.last
236
+ end
237
+
238
+ # Replace the current workspace with the given +workspace+.
239
+ def replace_workspace(workspace)
240
+ @workspace_stack.pop
241
+ @workspace_stack.push(workspace)
242
+ end
243
+
220
244
  # The top-level workspace, see WorkSpace#main
221
245
  def main
222
- @workspace.main
246
+ workspace.main
223
247
  end
224
248
 
225
249
  # The toplevel workspace, see #home_workspace
226
250
  attr_reader :workspace_home
227
- # WorkSpace in the current context.
228
- attr_accessor :workspace
229
251
  # The current thread in this context.
230
252
  attr_reader :thread
231
253
  # The current input method.
@@ -246,9 +268,27 @@ module IRB
246
268
  # Can be either name from <code>IRB.conf[:IRB_NAME]</code>, or the number of
247
269
  # the current job set by JobManager, such as <code>irb#2</code>
248
270
  attr_accessor :irb_name
249
- # Can be either the #irb_name surrounded by parenthesis, or the
250
- # +input_method+ passed to Context.new
251
- attr_accessor :irb_path
271
+
272
+ # Can be one of the following:
273
+ # - the #irb_name surrounded by parenthesis
274
+ # - the +input_method+ passed to Context.new
275
+ # - the file path of the current IRB context in a binding.irb session
276
+ attr_reader :irb_path
277
+
278
+ # Sets @irb_path to the given +path+ as well as @eval_path
279
+ # @eval_path is used for evaluating code in the context of IRB session
280
+ # It's the same as irb_path, but with the IRB name postfix
281
+ # This makes sure users can distinguish the methods defined in the IRB session
282
+ # from the methods defined in the current file's context, especially with binding.irb
283
+ def irb_path=(path)
284
+ @irb_path = path
285
+
286
+ if File.exist?(path)
287
+ @eval_path = "#{path}(#{IRB.conf[:IRB_NAME]})"
288
+ else
289
+ @eval_path = path
290
+ end
291
+ end
252
292
 
253
293
  # Whether multiline editor mode is enabled or not.
254
294
  #
@@ -449,9 +489,7 @@ module IRB
449
489
  # StdioInputMethod or RelineInputMethod or ReadlineInputMethod, see #io
450
490
  # for more information.
451
491
  def prompting?
452
- verbose? || (STDIN.tty? && @io.kind_of?(StdioInputMethod) ||
453
- @io.kind_of?(RelineInputMethod) ||
454
- (defined?(ReadlineInputMethod) && @io.kind_of?(ReadlineInputMethod)))
492
+ verbose? || @io.prompting?
455
493
  end
456
494
 
457
495
  # The return value of the last statement evaluated.
@@ -461,7 +499,7 @@ module IRB
461
499
  # to #last_value.
462
500
  def set_last_value(value)
463
501
  @last_value = value
464
- @workspace.local_variable_set :_, value
502
+ workspace.local_variable_set :_, value
465
503
  end
466
504
 
467
505
  # Sets the +mode+ of the prompt in this context.
@@ -557,7 +595,7 @@ module IRB
557
595
 
558
596
  if IRB.conf[:MEASURE] && !IRB.conf[:MEASURE_CALLBACKS].empty?
559
597
  last_proc = proc do
560
- result = @workspace.evaluate(line, irb_path, line_no)
598
+ result = workspace.evaluate(line, @eval_path, line_no)
561
599
  end
562
600
  IRB.conf[:MEASURE_CALLBACKS].inject(last_proc) do |chain, item|
563
601
  _name, callback, arg = item
@@ -568,7 +606,7 @@ module IRB
568
606
  end
569
607
  end.call
570
608
  else
571
- result = @workspace.evaluate(line, irb_path, line_no)
609
+ result = workspace.evaluate(line, @eval_path, line_no)
572
610
  end
573
611
 
574
612
  set_last_value(result)
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  #
3
3
  # irb/ext/cb.rb -
4
4
  # by Keiju ISHITSUKA(keiju@ruby-lang.org)
@@ -12,7 +12,7 @@ module IRB # :nodoc:
12
12
  if defined? @home_workspace
13
13
  @home_workspace
14
14
  else
15
- @home_workspace = @workspace
15
+ @home_workspace = workspace
16
16
  end
17
17
  end
18
18
 
@@ -25,11 +25,11 @@ module IRB # :nodoc:
25
25
  # See IRB::WorkSpace.new for more information.
26
26
  def change_workspace(*_main)
27
27
  if _main.empty?
28
- @workspace = home_workspace
28
+ replace_workspace(home_workspace)
29
29
  return main
30
30
  end
31
31
 
32
- @workspace = WorkSpace.new(_main[0])
32
+ replace_workspace(WorkSpace.new(_main[0]))
33
33
 
34
34
  if !(class<<main;ancestors;end).include?(ExtendCommandBundle)
35
35
  main.extend ExtendCommandBundle
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  #
3
3
  # history.rb -
4
4
  # by Keiju ISHITSUKA(keiju@ruby-lang.org)
@@ -18,7 +18,7 @@ module IRB # :nodoc:
18
18
 
19
19
  if defined?(@eval_history) && @eval_history
20
20
  @eval_history_values.push @line_no, @last_value
21
- @workspace.evaluate "__ = IRB.CurrentContext.instance_eval{@eval_history_values}"
21
+ workspace.evaluate "__ = IRB.CurrentContext.instance_eval{@eval_history_values}"
22
22
  end
23
23
 
24
24
  @last_value
@@ -49,7 +49,7 @@ module IRB # :nodoc:
49
49
  else
50
50
  @eval_history_values = EvalHistory.new(no)
51
51
  IRB.conf[:__TMP__EHV__] = @eval_history_values
52
- @workspace.evaluate("__ = IRB.conf[:__TMP__EHV__]")
52
+ workspace.evaluate("__ = IRB.conf[:__TMP__EHV__]")
53
53
  IRB.conf.delete(:__TMP_EHV__)
54
54
  end
55
55
  else
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  #
3
3
  # loader.rb -
4
4
  # by Keiju ISHITSUKA(keiju@ruby-lang.org)
@@ -98,13 +98,13 @@ module IRB # :nodoc:
98
98
 
99
99
  def old # :nodoc:
100
100
  back_io = @io
101
- back_path = @irb_path
101
+ back_path = irb_path
102
102
  back_name = @irb_name
103
103
  back_scanner = @irb.scanner
104
104
  begin
105
105
  @io = FileInputMethod.new(path)
106
106
  @irb_name = File.basename(path)
107
- @irb_path = path
107
+ self.irb_path = path
108
108
  @irb.signal_status(:IN_LOAD) do
109
109
  if back_io.kind_of?(FileInputMethod)
110
110
  @irb.eval_input
@@ -119,7 +119,7 @@ module IRB # :nodoc:
119
119
  ensure
120
120
  @io = back_io
121
121
  @irb_name = back_name
122
- @irb_path = back_path
122
+ self.irb_path = back_path
123
123
  @irb.scanner = back_scanner
124
124
  end
125
125
  end
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  #
3
3
  # irb/multi-irb.rb - multiple irb module
4
4
  # by Keiju ISHITSUKA(keiju@ruby-lang.org)