irb 1.11.0 → 1.11.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8029dc02923cbb80a77625adad559929050e1e699ef613a2de18cfdc998aef48
4
- data.tar.gz: 4b4165fdd602583745cadd66ad9229eab74e473cf613f25c54a8446a2d9b1589
3
+ metadata.gz: 53ffdc8550a2c9debc40dc6565f23010c02959bf924fc917a6736465960dc660
4
+ data.tar.gz: ca6f06898a6b431303c5b63b9f8ff88295106ad66d8cb30e85a6f5f879449c8e
5
5
  SHA512:
6
- metadata.gz: 1a93cf1c63baba6feba0e9b093ce9f0c200556657cab25760acef18370f1e23d3094865c9c1a8f66d6b1544f3715928f9d8d1212f629e6cec83d0f87ab8eb18c
7
- data.tar.gz: 0171eda936e605d6ea83f9d0a98381f93f441bee435748c41839a04b2b672cae0fa9ab4ee3c276141df3e3ab40141581e3e7167ad710accf2790de664f5e7b34
6
+ metadata.gz: '059eb872f0be29fec2c8fe7c64b809f9346b3e25b084a1033ab4ea6e02e7c3e311317d2a169a18d5a9291acc578e56c1587c12f901d2e09fa52d58fe3717377c'
7
+ data.tar.gz: 8b6cce5c6bc85f25db7a78977e433746efa47d2eb0b0828d9adebb813ce0648396aae6e0c903aca30b79f2c1e947f319e75b21e916eb6f8a8a8f8d5553431d5c
data/Gemfile CHANGED
@@ -17,6 +17,9 @@ gem "rake"
17
17
  gem "test-unit"
18
18
  gem "test-unit-ruby-core"
19
19
 
20
+ gem "rubocop"
21
+
22
+ gem "tracer" if !is_truffleruby
20
23
  gem "debug", github: "ruby/debug", platforms: [:mri, :mswin]
21
24
 
22
25
  if RUBY_VERSION >= "3.0.0" && !is_truffleruby
data/README.md CHANGED
@@ -15,6 +15,10 @@ The `irb` command from your shell will start the interpreter.
15
15
  - [Debugging with IRB](#debugging-with-irb)
16
16
  - [More about `debug.gem`](#more-about-debuggem)
17
17
  - [Advantages Over `debug.gem`'s Console](#advantages-over-debuggems-console)
18
+ - [Type Based Completion](#type-based-completion)
19
+ - [How to Enable IRB::TypeCompletor](#how-to-enable-irbtypecompletor)
20
+ - [Advantage over Default IRB::RegexpCompletor](#advantage-over-default-irbregexpcompletor)
21
+ - [Difference between Steep's Completion](#difference-between-steeps-completion)
18
22
  - [Configuration](#configuration)
19
23
  - [Environment Variables](#environment-variables)
20
24
  - [Documentation](#documentation)
@@ -105,15 +109,9 @@ Hello World
105
109
 
106
110
  The following commands are available on IRB. You can get the same output from the `show_cmds` command.
107
111
 
108
- ```
109
- Workspace
110
- cwws Show the current workspace.
111
- chws Change the current workspace to an object.
112
- workspaces Show workspaces.
113
- pushws Push an object to the workspace stack.
114
- popws Pop a workspace from the workspace stack.
115
-
112
+ ```txt
116
113
  IRB
114
+ exit Exit the current irb session.
117
115
  irb_load Load a Ruby file.
118
116
  irb_require Require a Ruby file.
119
117
  source Loads a given file in the current session.
@@ -121,6 +119,13 @@ IRB
121
119
  show_cmds List all available commands and their description.
122
120
  history Shows the input history. `-g [query]` or `-G [query]` allows you to filter the output.
123
121
 
122
+ Workspace
123
+ cwws Show the current workspace.
124
+ chws Change the current workspace to an object.
125
+ workspaces Show workspaces.
126
+ pushws Push an object to the workspace stack.
127
+ popws Pop a workspace from the workspace stack.
128
+
124
129
  Multi-irb (DEPRECATED)
125
130
  irb Start a child IRB.
126
131
  jobs List of current sessions.
@@ -149,6 +154,10 @@ Context
149
154
  ls Show methods, constants, and variables. `-g [query]` or `-G [query]` allows you to filter out the output.
150
155
  show_source Show the source code of a given method or constant.
151
156
  whereami Show the source code around binding.irb again.
157
+
158
+ Aliases
159
+ $ Alias for `show_source`
160
+ @ Alias for `whereami`
152
161
  ```
153
162
 
154
163
  ## Debugging with IRB
@@ -242,15 +251,33 @@ IRB's default completion `IRB::RegexpCompletor` uses Regexp. IRB has another exp
242
251
 
243
252
  ### How to Enable IRB::TypeCompletor
244
253
 
245
- To enable IRB::TypeCompletor, run IRB with `--type-completor` option
254
+ Install [ruby/repl_type_completor](https://github.com/ruby/repl_type_completor/) with:
255
+ ```
256
+ $ gem install repl_type_completor
257
+ ```
258
+ Or add these lines to your project's Gemfile.
259
+ ```ruby
260
+ gem 'irb'
261
+ gem 'repl_type_completor', group: [:development, :test]
262
+ ```
263
+
264
+ Now you can use type based completion by:
265
+
266
+ Running IRB with the `--type-completor` option
246
267
  ```
247
268
  $ irb --type-completor
248
269
  ```
249
- Or write the code below to IRB's rc-file.
270
+
271
+ Or writing this line to IRB's rc-file (e.g. `~/.irbrc`)
250
272
  ```ruby
251
273
  IRB.conf[:COMPLETOR] = :type # default is :regexp
252
274
  ```
253
- You also need `gem repl_type_completor` to use this feature.
275
+
276
+ Or setting the environment variable `IRB_COMPLETOR`
277
+ ```ruby
278
+ ENV['IRB_COMPLETOR'] = 'type'
279
+ IRB.start
280
+ ```
254
281
 
255
282
  To check if it's enabled, type `irb_info` into IRB and see the `Completion` section.
256
283
  ```
@@ -357,7 +384,7 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/i
357
384
 
358
385
  ### Run integration tests
359
386
 
360
- If your changes affect component rendering, such as the autocompletion's dialog/dropdown, you may need to run IRB's integration tests, known as `yamatanarroroti`.
387
+ If your changes affect component rendering, such as the autocompletion's dialog/dropdown, you may need to run IRB's integration tests, known as `yamatanooroti`.
361
388
 
362
389
  Before running these tests, ensure that you have `libvterm` installed. If you're using Homebrew, you can install it by running:
363
390
 
data/Rakefile CHANGED
@@ -17,7 +17,7 @@ task :test_in_isolation do
17
17
  ENV["TEST"] = test_file
18
18
  begin
19
19
  Rake::Task["test"].execute
20
- rescue => e
20
+ rescue
21
21
  failed = true
22
22
  msg = "Test '#{test_file}' failed when being executed in isolation. Please make sure 'rake test TEST=#{test_file}' passes."
23
23
  separation_line = '=' * msg.length
data/irb.gemspec CHANGED
@@ -41,6 +41,6 @@ Gem::Specification.new do |spec|
41
41
 
42
42
  spec.required_ruby_version = Gem::Requirement.new(">= 2.7")
43
43
 
44
- spec.add_dependency "reline", ">= 0.3.8"
44
+ spec.add_dependency "reline", ">= 0.4.2"
45
45
  spec.add_dependency "rdoc"
46
46
  end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "nop"
4
+
5
+ module IRB
6
+ # :stopdoc:
7
+
8
+ module ExtendCommand
9
+ class Exit < Nop
10
+ category "IRB"
11
+ description "Exit the current irb session."
12
+
13
+ def execute(*)
14
+ IRB.irb_exit
15
+ rescue UncaughtThrowError
16
+ Kernel.exit
17
+ end
18
+ end
19
+ end
20
+
21
+ # :startdoc:
22
+ end
@@ -406,7 +406,13 @@ module IRB
406
406
  else
407
407
  select_message(receiver, message, candidates.sort)
408
408
  end
409
-
409
+ when /^\s*$/
410
+ # empty input
411
+ if doc_namespace
412
+ nil
413
+ else
414
+ []
415
+ end
410
416
  else
411
417
  if doc_namespace
412
418
  vars = (bind.local_variables | bind.eval_instance_variables).collect{|m| m.to_s}
data/lib/irb/context.rb CHANGED
@@ -61,7 +61,7 @@ module IRB
61
61
  @io = nil
62
62
 
63
63
  self.inspect_mode = IRB.conf[:INSPECT_MODE]
64
- self.use_tracer = IRB.conf[:USE_TRACER] if IRB.conf[:USE_TRACER]
64
+ self.use_tracer = IRB.conf[:USE_TRACER]
65
65
  self.use_loader = IRB.conf[:USE_LOADER] if IRB.conf[:USE_LOADER]
66
66
  self.eval_history = IRB.conf[:EVAL_HISTORY] if IRB.conf[:EVAL_HISTORY]
67
67
 
@@ -161,6 +161,11 @@ module IRB
161
161
 
162
162
  private_constant :KEYWORD_ALIASES
163
163
 
164
+ def use_tracer=(val)
165
+ require_relative "ext/tracer" if val
166
+ IRB.conf[:USE_TRACER] = val
167
+ end
168
+
164
169
  private def build_completor
165
170
  completor_type = IRB.conf[:COMPLETOR]
166
171
  case completor_type
@@ -178,7 +183,7 @@ module IRB
178
183
 
179
184
  private def build_type_completor
180
185
  if RUBY_ENGINE == 'truffleruby'
181
- # Avoid SynatxError. truffleruby does not support endless method definition yet.
186
+ # Avoid SyntaxError. truffleruby does not support endless method definition yet.
182
187
  warn 'TypeCompletor is not supported on TruffleRuby yet'
183
188
  return
184
189
  end
@@ -573,14 +578,6 @@ module IRB
573
578
  @inspect_method.inspect_value(@last_value)
574
579
  end
575
580
 
576
- alias __exit__ exit
577
- # Exits the current session, see IRB.irb_exit
578
- def exit(ret = 0)
579
- IRB.irb_exit(@irb, ret)
580
- rescue UncaughtThrowError
581
- super
582
- end
583
-
584
581
  NOPRINTING_IVARS = ["@last_value"] # :nodoc:
585
582
  NO_INSPECTING_IVARS = ["@irb", "@io"] # :nodoc:
586
583
  IDNAME_IVARS = ["@prompt_mode"] # :nodoc:
@@ -3,76 +3,37 @@
3
3
  # irb/lib/tracer.rb -
4
4
  # by Keiju ISHITSUKA(keiju@ruby-lang.org)
5
5
  #
6
-
6
+ # Loading the gem "tracer" will cause it to extend IRB commands with:
7
+ # https://github.com/ruby/tracer/blob/v0.2.2/lib/tracer/irb.rb
7
8
  begin
8
9
  require "tracer"
9
10
  rescue LoadError
10
11
  $stderr.puts "Tracer extension of IRB is enabled but tracer gem wasn't found."
11
- module IRB
12
- class Context
13
- def use_tracer=(opt)
14
- # do nothing
15
- end
16
- end
17
- end
18
12
  return # This is about to disable loading below
19
13
  end
20
14
 
21
15
  module IRB
16
+ class CallTracer < ::CallTracer
17
+ IRB_DIR = File.expand_path('../..', __dir__)
22
18
 
23
- # initialize tracing function
24
- def IRB.initialize_tracer
25
- Tracer.verbose = false
26
- Tracer.add_filter {
27
- |event, file, line, id, binding, *rests|
28
- /^#{Regexp.quote(@CONF[:IRB_LIB_PATH])}/ !~ file and
29
- File::basename(file) != "irb.rb"
30
- }
31
- end
32
-
33
- class Context
34
- # Whether Tracer is used when evaluating statements in this context.
35
- #
36
- # See +lib/tracer.rb+ for more information.
37
- attr_reader :use_tracer
38
- alias use_tracer? use_tracer
39
-
40
- # Sets whether or not to use the Tracer library when evaluating statements
41
- # in this context.
42
- #
43
- # See +lib/tracer.rb+ for more information.
44
- def use_tracer=(opt)
45
- if opt
46
- Tracer.set_get_line_procs(@irb_path) {
47
- |line_no, *rests|
48
- @io.line(line_no)
49
- }
50
- elsif !opt && @use_tracer
51
- Tracer.off
52
- end
53
- @use_tracer=opt
19
+ def skip?(tp)
20
+ super || tp.path.match?(IRB_DIR) || tp.path.match?('<internal:prelude>')
54
21
  end
55
22
  end
56
-
57
23
  class WorkSpace
58
24
  alias __evaluate__ evaluate
59
25
  # Evaluate the context of this workspace and use the Tracer library to
60
26
  # output the exact lines of code are being executed in chronological order.
61
27
  #
62
- # See +lib/tracer.rb+ for more information.
63
- def evaluate(context, statements, file = nil, line = nil)
64
- if context.use_tracer? && file != nil && line != nil
65
- Tracer.on
66
- begin
28
+ # See https://github.com/ruby/tracer for more information.
29
+ def evaluate(statements, file = __FILE__, line = __LINE__)
30
+ if IRB.conf[:USE_TRACER] == true
31
+ CallTracer.new(colorize: Color.colorable?).start do
67
32
  __evaluate__(statements, file, line)
68
- ensure
69
- Tracer.off
70
33
  end
71
34
  else
72
- __evaluate__(statements, file || __FILE__, line || __LINE__)
35
+ __evaluate__(statements, file, line)
73
36
  end
74
37
  end
75
38
  end
76
-
77
- IRB.initialize_tracer
78
39
  end
@@ -16,15 +16,6 @@ module IRB # :nodoc:
16
16
  # See #install_alias_method.
17
17
  OVERRIDE_ALL = 0x02
18
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
19
  # Displays current configuration.
29
20
  #
30
21
  # Modifying the configuration is achieved by sending a message to IRB.conf.
@@ -35,13 +26,16 @@ module IRB # :nodoc:
35
26
  @ALIASES = [
36
27
  [:context, :irb_context, NO_OVERRIDE],
37
28
  [: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
29
  ]
42
30
 
43
31
 
44
32
  @EXTEND_COMMANDS = [
33
+ [
34
+ :irb_exit, :Exit, "cmd/exit",
35
+ [:exit, OVERRIDE_PRIVATE_ONLY],
36
+ [:quit, OVERRIDE_PRIVATE_ONLY],
37
+ [:irb_quit, OVERRIDE_PRIVATE_ONLY],
38
+ ],
45
39
  [
46
40
  :irb_current_working_workspace, :CurrentWorkingWorkspace, "cmd/chws",
47
41
  [:cwws, NO_OVERRIDE],
@@ -323,7 +317,6 @@ module IRB # :nodoc:
323
317
 
324
318
  @EXTEND_COMMANDS = [
325
319
  [:eval_history=, "ext/eval_history.rb"],
326
- [:use_tracer=, "ext/tracer.rb"],
327
320
  [:use_loader=, "ext/use-loader.rb"],
328
321
  ]
329
322
 
data/lib/irb/history.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require "pathname"
2
+
1
3
  module IRB
2
4
  module HistorySavingAbility # :nodoc:
3
5
  def support_history_saving?
@@ -5,7 +7,7 @@ module IRB
5
7
  end
6
8
 
7
9
  def reset_history_counter
8
- @loaded_history_lines = self.class::HISTORY.size if defined? @loaded_history_lines
10
+ @loaded_history_lines = self.class::HISTORY.size
9
11
  end
10
12
 
11
13
  def load_history
@@ -59,13 +61,19 @@ module IRB
59
61
  append_history = true
60
62
  end
61
63
 
64
+ pathname = Pathname.new(history_file)
65
+ unless Dir.exist?(pathname.dirname)
66
+ warn "Warning: The directory to save IRB's history file does not exist. Please double check `IRB.conf[:HISTORY_FILE]`'s value."
67
+ return
68
+ end
69
+
62
70
  File.open(history_file, (append_history ? 'a' : 'w'), 0o600, encoding: IRB.conf[:LC_MESSAGES]&.encoding) do |f|
63
71
  hist = history.map{ |l| l.scrub.split("\n").join("\\\n") }
64
72
  unless append_history
65
73
  begin
66
74
  hist = hist.last(num) if hist.size > num and num > 0
67
75
  rescue RangeError # bignum too big to convert into `long'
68
- # Do nothing because the bignum should be treated as inifinity
76
+ # Do nothing because the bignum should be treated as infinity
69
77
  end
70
78
  end
71
79
  f.puts(hist)
data/lib/irb/init.rb CHANGED
@@ -6,6 +6,7 @@
6
6
 
7
7
  module IRB # :nodoc:
8
8
  @CONF = {}
9
+ @INITIALIZED = false
9
10
  # Displays current configuration.
10
11
  #
11
12
  # Modifying the configuration is achieved by sending a message to IRB.conf.
@@ -41,6 +42,10 @@ module IRB # :nodoc:
41
42
  format("irb %s (%s)", @RELEASE_VERSION, @LAST_UPDATE_DATE)
42
43
  end
43
44
 
45
+ def IRB.initialized?
46
+ !!@INITIALIZED
47
+ end
48
+
44
49
  # initialize config
45
50
  def IRB.setup(ap_path, argv: ::ARGV)
46
51
  IRB.init_config(ap_path)
@@ -52,13 +57,11 @@ module IRB # :nodoc:
52
57
  unless @CONF[:PROMPT][@CONF[:PROMPT_MODE]]
53
58
  fail UndefinedPromptMode, @CONF[:PROMPT_MODE]
54
59
  end
60
+ @INITIALIZED = true
55
61
  end
56
62
 
57
63
  # @CONF default setting
58
64
  def IRB.init_config(ap_path)
59
- # class instance variables
60
- @TRACER_INITIALIZED = false
61
-
62
65
  # default configurations
63
66
  unless ap_path and @CONF[:AP_NAME]
64
67
  ap_path = File.join(File.dirname(File.dirname(__FILE__)), "irb.rb")
@@ -291,11 +291,13 @@ module IRB
291
291
  @auto_indent_proc = block
292
292
  end
293
293
 
294
+ def retrieve_doc_namespace(matched)
295
+ preposing, _target, postposing, bind = @completion_params
296
+ @completor.doc_namespace(preposing, matched, postposing, bind: bind)
297
+ end
298
+
294
299
  def show_doc_dialog_proc
295
- doc_namespace = ->(matched) {
296
- preposing, _target, postposing, bind = @completion_params
297
- @completor.doc_namespace(preposing, matched, postposing, bind: bind)
298
- }
300
+ input_method = self # self is changed in the lambda below.
299
301
  ->() {
300
302
  dialog.trap_key = nil
301
303
  alt_d = [
@@ -311,7 +313,7 @@ module IRB
311
313
  cursor_pos_to_render, result, pointer, autocomplete_dialog = context.pop(4)
312
314
  return nil if result.nil? or pointer.nil? or pointer < 0
313
315
 
314
- name = doc_namespace.call(result[pointer])
316
+ name = input_method.retrieve_doc_namespace(result[pointer])
315
317
  # Use first one because document dialog does not support multiple namespaces.
316
318
  name = name.first if name.is_a?(Array)
317
319
 
@@ -419,8 +421,7 @@ module IRB
419
421
  return
420
422
  end
421
423
 
422
- _target, preposing, postposing, bind = @completion_params
423
- namespace = @completor.doc_namespace(preposing, matched, postposing, bind: bind)
424
+ namespace = retrieve_doc_namespace(matched)
424
425
  return unless namespace
425
426
 
426
427
  driver ||= RDoc::RI::Driver.new
data/lib/irb/inspector.rb CHANGED
@@ -46,7 +46,7 @@ module IRB # :nodoc:
46
46
  # Determines the inspector to use where +inspector+ is one of the keys passed
47
47
  # during inspector definition.
48
48
  def self.keys_with_inspector(inspector)
49
- INSPECTORS.select{|k,v| v == inspector}.collect{|k, v| k}
49
+ INSPECTORS.select{|k, v| v == inspector}.collect{|k, v| k}
50
50
  end
51
51
 
52
52
  # Example
data/lib/irb/locale.rb CHANGED
@@ -94,7 +94,7 @@ module IRB # :nodoc:
94
94
  end
95
95
  end
96
96
 
97
- def find(file , paths = $:)
97
+ def find(file, paths = $:)
98
98
  dir = File.dirname(file)
99
99
  dir = "" if dir == "."
100
100
  base = File.basename(file)
@@ -12,6 +12,8 @@ module IRB
12
12
  skip = false
13
13
  last_tok, state, args = opens.last
14
14
  case state
15
+ when :in_alias_undef
16
+ skip = t.event == :on_kw
15
17
  when :in_unquoted_symbol
16
18
  unless IGNORE_TOKENS.include?(t.event)
17
19
  opens.pop
@@ -61,17 +63,17 @@ module IRB
61
63
  if args.include?(:arg)
62
64
  case t.event
63
65
  when :on_nl, :on_semicolon
64
- # def recever.f;
66
+ # def receiver.f;
65
67
  body = :normal
66
68
  when :on_lparen
67
- # def recever.f()
69
+ # def receiver.f()
68
70
  next_args << :eq
69
71
  else
70
72
  if t.event == :on_op && t.tok == '='
71
73
  # def receiver.f =
72
74
  body = :oneliner
73
75
  else
74
- # def recever.f arg
76
+ # def receiver.f arg
75
77
  next_args << :arg_without_paren
76
78
  end
77
79
  end
@@ -130,6 +132,10 @@ module IRB
130
132
  opens.pop
131
133
  opens << [t, nil]
132
134
  end
135
+ when 'alias'
136
+ opens << [t, :in_alias_undef, 2]
137
+ when 'undef'
138
+ opens << [t, :in_alias_undef, 1]
133
139
  when 'elsif', 'else', 'when'
134
140
  opens.pop
135
141
  opens << [t, nil]
@@ -174,6 +180,10 @@ module IRB
174
180
  pending_heredocs.reverse_each { |t| opens << [t, nil] }
175
181
  pending_heredocs = []
176
182
  end
183
+ if opens.last && opens.last[1] == :in_alias_undef && !IGNORE_TOKENS.include?(t.event) && t.event != :on_heredoc_end
184
+ tok, state, arg = opens.pop
185
+ opens << [tok, state, arg - 1] if arg >= 1
186
+ end
177
187
  yield t, opens if block_given?
178
188
  end
179
189
  opens.map(&:first) + pending_heredocs.reverse
data/lib/irb/ruby-lex.rb CHANGED
@@ -290,7 +290,7 @@ module IRB
290
290
  when :on_embdoc_beg
291
291
  indent_level = 0
292
292
  else
293
- indent_level += 1
293
+ indent_level += 1 unless t.tok == 'alias' || t.tok == 'undef'
294
294
  end
295
295
  end
296
296
  indent_level
@@ -19,7 +19,7 @@ module IRB
19
19
  def find_source(signature, super_level = 0)
20
20
  context_binding = @irb_context.workspace.binding
21
21
  case signature
22
- when /\A[A-Z]\w*(::[A-Z]\w*)*\z/ # Const::Name
22
+ when /\A(::)?[A-Z]\w*(::[A-Z]\w*)*\z/ # Const::Name
23
23
  eval(signature, context_binding) # trigger autoload
24
24
  base = context_binding.receiver.yield_self { |r| r.is_a?(Module) ? r : Object }
25
25
  file, line = base.const_source_location(signature)
@@ -34,7 +34,8 @@ module IRB
34
34
  return unless receiver.respond_to?(method, true)
35
35
  file, line = method_target(receiver, super_level, method, "receiver")
36
36
  end
37
- if file && line && File.exist?(file)
37
+ # If the line is zero, it means that the target's source is probably in a binary file, which we should ignore.
38
+ if file && line && !line.zero? && File.exist?(file)
38
39
  Source.new(file: file, first_line: line, last_line: find_end(file, line))
39
40
  end
40
41
  end
data/lib/irb/version.rb CHANGED
@@ -5,7 +5,7 @@
5
5
  #
6
6
 
7
7
  module IRB # :nodoc:
8
- VERSION = "1.11.0"
8
+ VERSION = "1.11.2"
9
9
  @RELEASE_VERSION = VERSION
10
- @LAST_UPDATE_DATE = "2023-12-19"
10
+ @LAST_UPDATE_DATE = "2024-02-07"
11
11
  end
data/lib/irb.rb CHANGED
@@ -203,11 +203,10 @@ require_relative "irb/pager"
203
203
  #
204
204
  # === Input Command History
205
205
  #
206
- # By default, \IRB stores a history of up to 1000 input commands
207
- # in file <tt>~/.irb_history</tt>
208
- # (or, if a {configuration file}[rdoc-ref:IRB@Configuration+File]
209
- # is found, in file +.irb_history+
210
- # inin the same directory as that file).
206
+ # By default, \IRB stores a history of up to 1000 input commands in a
207
+ # file named <tt>.irb_history</tt>. The history file will be in the same directory
208
+ # as the {configuration file}[rdoc-ref:IRB@Configuration+File] if one is found, or
209
+ # in <tt>~/</tt> otherwise.
211
210
  #
212
211
  # A new \IRB session creates the history file if it does not exist,
213
212
  # and appends to the file if it does exist.
@@ -365,7 +364,7 @@ require_relative "irb/pager"
365
364
  # You can change the initial behavior and suppress all echoing by:
366
365
  #
367
366
  # - Adding to the configuration file: <tt>IRB.conf[:ECHO] = false</tt>.
368
- # (The default value for this entry is +niL+, which means the same as +true+.)
367
+ # (The default value for this entry is +nil+, which means the same as +true+.)
369
368
  # - Giving command-line option <tt>--noecho</tt>.
370
369
  # (The default is <tt>--echo</tt>.)
371
370
  #
@@ -392,7 +391,7 @@ require_relative "irb/pager"
392
391
  # (The default value for this entry is +niL+, which means the same as +:truncate+.)
393
392
  # - Giving command-line option <tt>--noecho-on-assignment</tt>
394
393
  # or <tt>--echo-on-assignment</tt>.
395
- # (The default is <tt>--truncate-echo-on-assigment</tt>.)
394
+ # (The default is <tt>--truncate-echo-on-assignment</tt>.)
396
395
  #
397
396
  # During the session, you can change the current setting
398
397
  # with configuration method <tt>conf.echo_on_assignment=</tt>
@@ -413,7 +412,7 @@ require_relative "irb/pager"
413
412
  #
414
413
  # By default, \IRB prefixes a newline to a multiline response.
415
414
  #
416
- # You can change the initial default value by adding to the configuation file:
415
+ # You can change the initial default value by adding to the configuration file:
417
416
  #
418
417
  # IRB.conf[:NEWLINE_BEFORE_MULTILINE_OUTPUT] = false
419
418
  #
@@ -705,12 +704,6 @@ require_relative "irb/pager"
705
704
  # Command-line option <tt>-W[_level_]<tt>
706
705
  # sets warning level; 0=silence, 1=medium, 2=verbose.
707
706
  #
708
- # :stopdoc:
709
- # === Performance Measurement
710
- #
711
- # IRB.conf[:MEASURE] IRB.conf[:MEASURE_CALLBACKS] IRB.conf[:MEASURE_PROC]
712
- # :startdoc:
713
- #
714
707
  # == Other Features
715
708
  #
716
709
  # === Load Modules
@@ -771,12 +764,6 @@ require_relative "irb/pager"
771
764
  #
772
765
  # Note that the configuration file entry overrides the command-line options.
773
766
  #
774
- # :stopdoc:
775
- # === \Context Mode
776
- #
777
- # IRB.conf[:CONTEXT_MODE]
778
- # :startdoc:
779
- #
780
767
  # === \IRB Name
781
768
  #
782
769
  # You can specify a name for \IRB.
@@ -815,12 +802,6 @@ require_relative "irb/pager"
815
802
  # Each time the configuration is changed,
816
803
  # that proc is called with argument +conf+:
817
804
  #
818
- # :stopdoc:
819
- # === \Locale
820
- #
821
- # IRB.conf[:LC_MESSAGES]
822
- # :startdoc:
823
- #
824
805
  # === Encodings
825
806
  #
826
807
  # Command-line option <tt>-E _ex_[:_in_]</tt>
@@ -904,8 +885,8 @@ module IRB
904
885
  end
905
886
 
906
887
  # Quits irb
907
- def IRB.irb_exit(irb, ret)
908
- throw :IRB_EXIT, ret
888
+ def IRB.irb_exit(*)
889
+ throw :IRB_EXIT
909
890
  end
910
891
 
911
892
  # Aborts then interrupts irb.
@@ -963,7 +944,7 @@ module IRB
963
944
  # Irb#eval_input will simply return the input, and we need to pass it to the debugger.
964
945
  input = if IRB.conf[:SAVE_HISTORY] && context.io.support_history_saving?
965
946
  # Previous IRB session's history has been saved when `Irb#run` is exited
966
- # We need to make sure the saved history is not saved again by reseting the counter
947
+ # We need to make sure the saved history is not saved again by resetting the counter
967
948
  context.io.reset_history_counter
968
949
 
969
950
  begin
@@ -1533,7 +1514,7 @@ class Binding
1533
1514
  # See IRB for more information.
1534
1515
  def irb(show_code: true)
1535
1516
  # Setup IRB with the current file's path and no command line arguments
1536
- IRB.setup(source_location[0], argv: [])
1517
+ IRB.setup(source_location[0], argv: []) unless IRB.initialized?
1537
1518
  # Create a new workspace using the current binding
1538
1519
  workspace = IRB::WorkSpace.new(self)
1539
1520
  # Print the code around the binding if show_code is true
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: irb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.11.0
4
+ version: 1.11.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - aycabta
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2023-12-20 00:00:00.000000000 Z
12
+ date: 2024-02-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: reline
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: 0.3.8
20
+ version: 0.4.2
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: 0.3.8
27
+ version: 0.4.2
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rdoc
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -68,6 +68,7 @@ files:
68
68
  - lib/irb/cmd/debug.rb
69
69
  - lib/irb/cmd/delete.rb
70
70
  - lib/irb/cmd/edit.rb
71
+ - lib/irb/cmd/exit.rb
71
72
  - lib/irb/cmd/finish.rb
72
73
  - lib/irb/cmd/help.rb
73
74
  - lib/irb/cmd/history.rb
@@ -148,7 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
148
149
  - !ruby/object:Gem::Version
149
150
  version: '0'
150
151
  requirements: []
151
- rubygems_version: 3.5.1
152
+ rubygems_version: 3.5.4
152
153
  signing_key:
153
154
  specification_version: 4
154
155
  summary: Interactive Ruby command-line tool for REPL (Read Eval Print Loop).