irb 1.6.3 → 1.6.4

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: f82a38c3bf30c31ffcac5b5dd8f7883d9edd65edfbba779d87a18eb028c88c93
4
- data.tar.gz: d45c6f3671612e3186a902c9c3406df16b350ae9a91e89d85383544267bc3eed
3
+ metadata.gz: db51125adbe98b16228e314bff627b1cec953b92f32c774c4b9a820dc3bfc40b
4
+ data.tar.gz: ead3ebf30f5a4369d8cc2767691397d766bab8532031f8f505c2d0b3f251e071
5
5
  SHA512:
6
- metadata.gz: 32eee54235bcc829238f55cb70d29cebce2c0024b6ebb76d9dfc6e168fd4d35fffccd228fa1b848ac4b5a3a0f35e4743533499a060ae2cf5858ffc9caee4ee8c
7
- data.tar.gz: 20bc4fdda9f15c9c668ece83acf81c0b9828664d74dac042430cbbfe798e8467ddf9af0c41a63267ceee402eb92f71c9bc4413f7e91b95b5f8ba2bf64c989505
6
+ metadata.gz: d2f749ce66ed43433fbbc7ec8682a0c3f0180ac8fb676739e5c3cbf0eb2f8bbb89a7896af11120bdeedd730e57edddaeabf932ae22ac55ad33c99f8408ffc832
7
+ data.tar.gz: 55621e3a5f9926c3f1b44426c23b9b08543920075fa0d32eeda8b7db35ded09aba6c311011e7f8397a6a5089bbb63d2b2e2603c1d7e254b77a16b93ca35b76f3
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # IRB
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/irb.svg)](https://badge.fury.io/rb/irb)
4
+ [![build](https://github.com/ruby/irb/actions/workflows/test.yml/badge.svg)](https://github.com/ruby/irb/actions/workflows/test.yml)
5
+
3
6
  IRB stands for "interactive Ruby" and is a tool to interactively execute Ruby expressions read from the standard input.
4
7
 
5
8
  The `irb` command from your shell will start the interpreter.
data/irb.gemspec CHANGED
@@ -39,7 +39,7 @@ Gem::Specification.new do |spec|
39
39
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
40
40
  spec.require_paths = ["lib"]
41
41
 
42
- spec.required_ruby_version = Gem::Requirement.new(">= 2.6")
42
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.7")
43
43
 
44
44
  spec.add_dependency "reline", ">= 0.3.0"
45
45
  end
data/lib/irb/cmd/nop.rb CHANGED
@@ -30,20 +30,11 @@ module IRB
30
30
  end
31
31
  end
32
32
 
33
- if RUBY_ENGINE == "ruby" && RUBY_VERSION >= "2.7.0"
34
- def self.execute(conf, *opts, **kwargs, &block)
35
- command = new(conf)
36
- command.execute(*opts, **kwargs, &block)
37
- rescue CommandArgumentError => e
38
- puts e.message
39
- end
40
- else
41
- def self.execute(conf, *opts, &block)
42
- command = new(conf)
43
- command.execute(*opts, &block)
44
- rescue CommandArgumentError => e
45
- puts e.message
46
- end
33
+ def self.execute(conf, *opts, **kwargs, &block)
34
+ command = new(conf)
35
+ command.execute(*opts, **kwargs, &block)
36
+ rescue CommandArgumentError => e
37
+ puts e.message
47
38
  end
48
39
 
49
40
  def initialize(conf)
@@ -27,7 +27,7 @@ module IRB
27
27
  when /\A[A-Z]\w*(::[A-Z]\w*)*\z/ # Const::Name
28
28
  eval(str, irb_context.workspace.binding) # trigger autoload
29
29
  base = irb_context.workspace.binding.receiver.yield_self { |r| r.is_a?(Module) ? r : Object }
30
- file, line = base.const_source_location(str) if base.respond_to?(:const_source_location) # Ruby 2.7+
30
+ file, line = base.const_source_location(str)
31
31
  when /\A(?<owner>[A-Z]\w*(::[A-Z]\w*)*)#(?<method>[^ :.]+)\z/ # Class#method
32
32
  owner = eval(Regexp.last_match[:owner], irb_context.workspace.binding)
33
33
  method = Regexp.last_match[:method]
data/lib/irb/color.rb CHANGED
@@ -197,15 +197,9 @@ module IRB # :nodoc:
197
197
  end
198
198
  end
199
199
 
200
- if lexer.respond_to?(:scan) # Ruby 2.7+
201
- lexer.scan.each do |elem|
202
- next if allow_last_error and /meets end of file|unexpected end-of-input/ =~ elem.message
203
- on_scan.call(elem)
204
- end
205
- else
206
- lexer.parse.sort_by(&:pos).each do |elem|
207
- on_scan.call(elem)
208
- end
200
+ lexer.scan.each do |elem|
201
+ next if allow_last_error and /meets end of file|unexpected end-of-input/ =~ elem.message
202
+ on_scan.call(elem)
209
203
  end
210
204
  # yield uncolorable DATA section
211
205
  yield(nil, inner_code.byteslice(byte_pos...inner_code.bytesize), nil) if byte_pos < inner_code.bytesize
@@ -4,6 +4,9 @@ require_relative 'color'
4
4
 
5
5
  module IRB
6
6
  class ColorPrinter < ::PP
7
+ METHOD_RESPOND_TO = Object.instance_method(:respond_to?)
8
+ METHOD_INSPECT = Object.instance_method(:inspect)
9
+
7
10
  class << self
8
11
  def pp(obj, out = $>, width = screen_width)
9
12
  q = ColorPrinter.new(out, width)
@@ -22,9 +25,11 @@ module IRB
22
25
  end
23
26
 
24
27
  def pp(obj)
25
- if obj.is_a?(String)
28
+ if String === obj
26
29
  # Avoid calling Ruby 2.4+ String#pretty_print that splits a string by "\n"
27
30
  text(obj.inspect)
31
+ elsif !METHOD_RESPOND_TO.bind(obj).call(:inspect)
32
+ text(METHOD_INSPECT.bind(obj).call)
28
33
  else
29
34
  super
30
35
  end
@@ -58,19 +58,11 @@ module IRB
58
58
 
59
59
  BASIC_WORD_BREAK_CHARACTERS = " \t\n`><=;|&{("
60
60
 
61
- def self.absolute_path?(p) # TODO Remove this method after 2.6 EOL.
62
- if File.respond_to?(:absolute_path?)
63
- File.absolute_path?(p)
64
- else
65
- File.absolute_path(p) == p
66
- end
67
- end
68
-
69
61
  GEM_PATHS =
70
62
  if defined?(Gem::Specification)
71
63
  Gem::Specification.latest_specs(true).map { |s|
72
64
  s.require_paths.map { |p|
73
- if absolute_path?(p)
65
+ if File.absolute_path?(p)
74
66
  p
75
67
  else
76
68
  File.join(s.full_gem_path, p)
@@ -450,30 +442,5 @@ module IRB
450
442
  end
451
443
  end
452
444
  end
453
-
454
- def self.ignored_modules
455
- # We could cache the result, but this is very fast already.
456
- # By using this approach, we avoid Module#name calls, which are
457
- # relatively slow when there are a lot of anonymous modules defined.
458
- s = {}
459
-
460
- scanner = lambda do |m|
461
- next if s.include?(m) # IRB::ExtendCommandBundle::EXCB recurses.
462
- s[m] = true
463
- m.constants(false).each do |c|
464
- value = m.const_get(c)
465
- scanner.call(value) if value.is_a?(Module)
466
- end
467
- end
468
-
469
- %i(IRB RubyLex).each do |sym|
470
- next unless Object.const_defined?(sym)
471
- scanner.call(Object.const_get(sym))
472
- end
473
-
474
- s.delete(IRB::Context) if defined?(IRB::Context)
475
-
476
- s
477
- end
478
445
  end
479
446
  end
@@ -24,31 +24,8 @@ module IRB # :nodoc:
24
24
  load_file(path, priv)
25
25
  end
26
26
 
27
- if File.respond_to?(:absolute_path?)
28
- def absolute_path?(path)
29
- File.absolute_path?(path)
30
- end
31
- else
32
- separator =
33
- if File::ALT_SEPARATOR
34
- "[#{Regexp.quote(File::SEPARATOR + File::ALT_SEPARATOR)}]"
35
- else
36
- File::SEPARATOR
37
- end
38
- ABSOLUTE_PATH_PATTERN = # :nodoc:
39
- case Dir.pwd
40
- when /\A\w:/, /\A#{separator}{2}/
41
- /\A(?:\w:|#{separator})#{separator}/
42
- else
43
- /\A#{separator}/
44
- end
45
- def absolute_path?(path)
46
- ABSOLUTE_PATH_PATTERN =~ path
47
- end
48
- end
49
-
50
27
  def search_file_from_ruby_path(fn) # :nodoc:
51
- if absolute_path?(fn)
28
+ if File.absolute_path?(fn)
52
29
  return fn if File.exist?(fn)
53
30
  return nil
54
31
  end
@@ -9,7 +9,6 @@ begin
9
9
  rescue LoadError
10
10
  $stderr.puts "Tracer extension of IRB is enabled but tracer gem doesn't found."
11
11
  module IRB
12
- TracerLoadError = true
13
12
  class Context
14
13
  def use_tracer=(opt)
15
14
  # do nothing
@@ -246,7 +246,7 @@ module IRB # :nodoc:
246
246
  #
247
247
  # The optional +load_file+ parameter will be required within the method
248
248
  # definition.
249
- def self.def_extend_command(cmd_name, cmd_class, load_file = nil, *aliases)
249
+ def self.def_extend_command(cmd_name, cmd_class, load_file, *aliases)
250
250
  case cmd_class
251
251
  when Symbol
252
252
  cmd_class = cmd_class.id2name
@@ -255,34 +255,12 @@ module IRB # :nodoc:
255
255
  cmd_class = cmd_class.name
256
256
  end
257
257
 
258
- if load_file
259
- kwargs = ", **kwargs" if RUBY_ENGINE == "ruby" && RUBY_VERSION >= "2.7.0"
260
- line = __LINE__; eval %[
261
- def #{cmd_name}(*opts#{kwargs}, &b)
262
- Kernel.require_relative "#{load_file}"
263
- arity = ::IRB::ExtendCommand::#{cmd_class}.instance_method(:execute).arity
264
- args = (1..(arity < 0 ? ~arity : arity)).map {|i| "arg" + i.to_s }
265
- args << "*opts#{kwargs}" if arity < 0
266
- args << "&block"
267
- args = args.join(", ")
268
- line = __LINE__; eval %[
269
- unless singleton_class.class_variable_defined?(:@@#{cmd_name}_)
270
- singleton_class.class_variable_set(:@@#{cmd_name}_, true)
271
- def self.#{cmd_name}_(\#{args})
272
- ::IRB::ExtendCommand::#{cmd_class}.execute(irb_context, \#{args})
273
- end
274
- end
275
- ], nil, __FILE__, line
276
- __send__ :#{cmd_name}_, *opts#{kwargs}, &b
277
- end
278
- ], nil, __FILE__, line
279
- else
280
- line = __LINE__; eval %[
281
- def #{cmd_name}(*opts, &b)
282
- ::IRB::ExtendCommand::#{cmd_class}.execute(irb_context, *opts, &b)
283
- end
284
- ], nil, __FILE__, line
285
- end
258
+ line = __LINE__; eval %[
259
+ def #{cmd_name}(*opts, **kwargs, &b)
260
+ Kernel.require_relative "#{load_file}"
261
+ ::IRB::ExtendCommand::#{cmd_class}.execute(irb_context, *opts, **kwargs, &b)
262
+ end
263
+ ], nil, __FILE__, line
286
264
 
287
265
  for ali, flag in aliases
288
266
  @ALIASES.push [ali, cmd_name, flag]
@@ -371,58 +349,4 @@ module IRB # :nodoc:
371
349
 
372
350
  CE.install_extend_commands
373
351
  end
374
-
375
- # A convenience module for extending Ruby methods.
376
- module MethodExtender
377
- # Extends the given +base_method+ with a prefix call to the given
378
- # +extend_method+.
379
- def def_pre_proc(base_method, extend_method)
380
- base_method = base_method.to_s
381
- extend_method = extend_method.to_s
382
-
383
- alias_name = new_alias_name(base_method)
384
- module_eval %[
385
- alias_method alias_name, base_method
386
- def #{base_method}(*opts)
387
- __send__ :#{extend_method}, *opts
388
- __send__ :#{alias_name}, *opts
389
- end
390
- ]
391
- end
392
-
393
- # Extends the given +base_method+ with a postfix call to the given
394
- # +extend_method+.
395
- def def_post_proc(base_method, extend_method)
396
- base_method = base_method.to_s
397
- extend_method = extend_method.to_s
398
-
399
- alias_name = new_alias_name(base_method)
400
- module_eval %[
401
- alias_method alias_name, base_method
402
- def #{base_method}(*opts)
403
- __send__ :#{alias_name}, *opts
404
- __send__ :#{extend_method}, *opts
405
- end
406
- ]
407
- end
408
-
409
- # Returns a unique method name to use as an alias for the given +name+.
410
- #
411
- # Usually returns <code>#{prefix}#{name}#{postfix}<num></code>, example:
412
- #
413
- # new_alias_name('foo') #=> __alias_of__foo__
414
- # def bar; end
415
- # new_alias_name('bar') #=> __alias_of__bar__2
416
- def new_alias_name(name, prefix = "__alias_of__", postfix = "__")
417
- base_name = "#{prefix}#{name}#{postfix}"
418
- all_methods = instance_methods(true) + private_instance_methods(true)
419
- same_methods = all_methods.grep(/^#{Regexp.quote(base_name)}[0-9]*$/)
420
- return base_name if same_methods.empty?
421
- no = same_methods.size
422
- while !same_methods.include?(alias_name = base_name + no)
423
- no += 1
424
- end
425
- alias_name
426
- end
427
- end
428
352
  end
data/lib/irb/inspector.rb CHANGED
@@ -98,8 +98,7 @@ module IRB # :nodoc:
98
98
  puts "An error occurred when inspecting the object: #{e.inspect}"
99
99
 
100
100
  begin
101
- # TODO: change this to bind_call when we drop support for Ruby 2.6
102
- puts "Result of Kernel#inspect: #{KERNEL_INSPECT.bind(v).call}"
101
+ puts "Result of Kernel#inspect: #{KERNEL_INSPECT.bind_call(v)}"
103
102
  ''
104
103
  rescue => e
105
104
  puts "An error occurred when running Kernel#inspect: #{e.inspect}"
data/lib/irb/ruby-lex.rb CHANGED
@@ -148,19 +148,15 @@ class RubyLex
148
148
 
149
149
  compile_with_errors_suppressed(code, line_no: line_no) do |inner_code, line_no|
150
150
  lexer = Ripper::Lexer.new(inner_code, '-', line_no)
151
- if lexer.respond_to?(:scan) # Ruby 2.7+
152
- lexer.scan.each_with_object([]) do |t, tokens|
153
- next if t.pos.first == 0
154
- prev_tk = tokens.last
155
- position_overlapped = prev_tk && t.pos[0] == prev_tk.pos[0] && t.pos[1] < prev_tk.pos[1] + prev_tk.tok.bytesize
156
- if position_overlapped
157
- tokens[-1] = t if ERROR_TOKENS.include?(prev_tk.event) && !ERROR_TOKENS.include?(t.event)
158
- else
159
- tokens << t
160
- end
151
+ lexer.scan.each_with_object([]) do |t, tokens|
152
+ next if t.pos.first == 0
153
+ prev_tk = tokens.last
154
+ position_overlapped = prev_tk && t.pos[0] == prev_tk.pos[0] && t.pos[1] < prev_tk.pos[1] + prev_tk.tok.bytesize
155
+ if position_overlapped
156
+ tokens[-1] = t if ERROR_TOKENS.include?(prev_tk.event) && !ERROR_TOKENS.include?(t.event)
157
+ else
158
+ tokens << t
161
159
  end
162
- else
163
- lexer.parse.reject { |it| it.pos.first == 0 }.sort_by(&:pos)
164
160
  end
165
161
  end
166
162
  ensure
data/lib/irb/version.rb CHANGED
@@ -5,7 +5,7 @@
5
5
  #
6
6
 
7
7
  module IRB # :nodoc:
8
- VERSION = "1.6.3"
8
+ VERSION = "1.6.4"
9
9
  @RELEASE_VERSION = VERSION
10
- @LAST_UPDATE_DATE = "2023-03-06"
10
+ @LAST_UPDATE_DATE = "2023-04-07"
11
11
  end
data/lib/irb.rb CHANGED
@@ -416,11 +416,6 @@ module IRB
416
416
  irb.run(@CONF)
417
417
  end
418
418
 
419
- # Calls each event hook of <code>IRB.conf[:AT_EXIT]</code> when the current session quits.
420
- def IRB.irb_at_exit
421
- @CONF[:AT_EXIT].each{|hook| hook.call}
422
- end
423
-
424
419
  # Quits irb
425
420
  def IRB.irb_exit(irb, ret)
426
421
  throw :IRB_EXIT, ret
@@ -565,7 +560,6 @@ module IRB
565
560
  @scanner.each_top_level_statement do |line, line_no|
566
561
  signal_status(:IN_EVAL) do
567
562
  begin
568
- line.untaint if RUBY_VERSION < '2.7'
569
563
  if IRB.conf[:MEASURE] && IRB.conf[:MEASURE_CALLBACKS].empty?
570
564
  IRB.set_measure_callback
571
565
  end
@@ -897,11 +891,6 @@ module IRB
897
891
  ensure
898
892
  $VERBOSE = verbose
899
893
  end
900
-
901
- ATTR_TTY = "\e[%sm"
902
- def ATTR_TTY.[](*a) self % a.join(";"); end
903
- ATTR_PLAIN = ""
904
- def ATTR_PLAIN.[](*) self; end
905
894
  end
906
895
 
907
896
  def @CONF.inspect
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.6.3
4
+ version: 1.6.4
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-03-07 00:00:00.000000000 Z
12
+ date: 2023-04-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: reline
@@ -123,14 +123,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
123
123
  requirements:
124
124
  - - ">="
125
125
  - !ruby/object:Gem::Version
126
- version: '2.6'
126
+ version: '2.7'
127
127
  required_rubygems_version: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  requirements: []
133
- rubygems_version: 3.4.1
133
+ rubygems_version: 3.4.8
134
134
  signing_key:
135
135
  specification_version: 4
136
136
  summary: Interactive Ruby command-line tool for REPL (Read Eval Print Loop).