irb 1.11.2 → 1.12.0

Sign up to get free protection for your applications and to get access to all the features.
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)