irb 1.6.2 → 1.6.3

Sign up to get free protection for your applications and to get access to all the features.
data/lib/irb/init.rb CHANGED
@@ -1,14 +1,8 @@
1
1
  # frozen_string_literal: false
2
2
  #
3
3
  # irb/init.rb - irb initialize module
4
- # $Release Version: 0.9.6$
5
- # $Revision$
6
4
  # by Keiju ISHITSUKA(keiju@ruby-lang.org)
7
5
  #
8
- # --
9
- #
10
- #
11
- #
12
6
 
13
7
  module IRB # :nodoc:
14
8
 
@@ -407,9 +401,9 @@ module IRB # :nodoc:
407
401
  end
408
402
  if home = ENV["HOME"]
409
403
  yield proc{|rc| home+"/.irb#{rc}"}
404
+ yield proc{|rc| home+"/.config/irb/irb#{rc}"}
410
405
  end
411
406
  current_dir = Dir.pwd
412
- yield proc{|rc| current_dir+"/.config/irb/irb#{rc}"}
413
407
  yield proc{|rc| current_dir+"/.irb#{rc}"}
414
408
  yield proc{|rc| current_dir+"/irb#{rc.sub(/\A_?/, '.')}"}
415
409
  yield proc{|rc| current_dir+"/_irb#{rc}"}
@@ -427,8 +421,6 @@ module IRB # :nodoc:
427
421
  end
428
422
  end
429
423
 
430
-
431
- DefaultEncodings = Struct.new(:external, :internal)
432
424
  class << IRB
433
425
  private
434
426
  def set_encoding(extern, intern = nil, override: true)
@@ -1,14 +1,9 @@
1
1
  # frozen_string_literal: false
2
2
  #
3
3
  # irb/input-method.rb - input methods used irb
4
- # $Release Version: 0.9.6$
5
- # $Revision$
6
4
  # by Keiju ISHITSUKA(keiju@ruby-lang.org)
7
5
  #
8
- # --
9
- #
10
- #
11
- #
6
+
12
7
  require_relative 'src_encoding'
13
8
  require_relative 'magic-file'
14
9
  require_relative 'completion'
data/lib/irb/inspector.rb CHANGED
@@ -1,15 +1,8 @@
1
1
  # frozen_string_literal: false
2
2
  #
3
3
  # irb/inspector.rb - inspect methods
4
- # $Release Version: 0.9.6$
5
- # $Revision: 1.19 $
6
- # $Date: 2002/06/11 07:51:31 $
7
4
  # by Keiju ISHITSUKA(keiju@ruby-lang.org)
8
5
  #
9
- # --
10
- #
11
- #
12
- #
13
6
 
14
7
  module IRB # :nodoc:
15
8
 
@@ -42,6 +35,7 @@ module IRB # :nodoc:
42
35
  # irb(main):001:0> "what?" #=> omg! what?
43
36
  #
44
37
  class Inspector
38
+ KERNEL_INSPECT = Object.instance_method(:inspect)
45
39
  # Default inspectors available to irb, this includes:
46
40
  #
47
41
  # +:pp+:: Using Kernel#pretty_inspect
@@ -100,9 +94,18 @@ module IRB # :nodoc:
100
94
  # Proc to call when the input is evaluated and output in irb.
101
95
  def inspect_value(v)
102
96
  @inspect.call(v)
103
- rescue
104
- puts "(Object doesn't support #inspect)"
105
- ''
97
+ rescue => e
98
+ puts "An error occurred when inspecting the object: #{e.inspect}"
99
+
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}"
103
+ ''
104
+ rescue => e
105
+ puts "An error occurred when running Kernel#inspect: #{e.inspect}"
106
+ puts e.backtrace.join("\n")
107
+ ''
108
+ end
106
109
  end
107
110
  end
108
111
 
data/lib/irb/lc/error.rb CHANGED
@@ -1,14 +1,8 @@
1
1
  # frozen_string_literal: false
2
2
  #
3
3
  # irb/lc/error.rb -
4
- # $Release Version: 0.9.6$
5
- # $Revision$
6
4
  # by Keiju ISHITSUKA(keiju@ruby-lang.org)
7
5
  #
8
- # --
9
- #
10
- #
11
- #
12
6
 
13
7
  module IRB
14
8
  # :stopdoc:
@@ -22,8 +22,8 @@ Usage: irb.rb [options] [programfile] [arguments]
22
22
  Show truncated result on assignment (default).
23
23
  --inspect Use 'inspect' for output.
24
24
  --noinspect Don't use 'inspect' for output.
25
- --multiline Use multiline editor module.
26
- --nomultiline Don't use multiline editor module (default).
25
+ --multiline Use multiline editor module (default).
26
+ --nomultiline Don't use multiline editor module.
27
27
  --singleline Use single line editor module.
28
28
  --nosingleline Don't use single line editor module (default).
29
29
  --colorize Use color-highlighting (default).
@@ -1,14 +1,8 @@
1
- # -*- coding: utf-8 -*-
2
1
  # frozen_string_literal: false
2
+ #
3
3
  # irb/lc/ja/error.rb -
4
- # $Release Version: 0.9.6$
5
- # $Revision$
6
4
  # by Keiju ISHITSUKA(keiju@ruby-lang.org)
7
5
  #
8
- # --
9
- #
10
- #
11
- #
12
6
 
13
7
  module IRB
14
8
  # :stopdoc:
data/lib/irb/locale.rb CHANGED
@@ -1,14 +1,9 @@
1
1
  # frozen_string_literal: false
2
2
  #
3
3
  # irb/locale.rb - internationalization module
4
- # $Release Version: 0.9.6$
5
- # $Revision$
6
4
  # by Keiju ISHITSUKA(keiju@ruby-lang.org)
7
5
  #
8
- # --
9
- #
10
- #
11
- #
6
+
12
7
  module IRB # :nodoc:
13
8
  class Locale
14
9
 
data/lib/irb/notifier.rb CHANGED
@@ -1,14 +1,8 @@
1
1
  # frozen_string_literal: false
2
2
  #
3
3
  # notifier.rb - output methods used by irb
4
- # $Release Version: 0.9.6$
5
- # $Revision$
6
4
  # by Keiju ISHITSUKA(keiju@ruby-lang.org)
7
5
  #
8
- # --
9
- #
10
- #
11
- #
12
6
 
13
7
  require_relative "output-method"
14
8
 
@@ -1,14 +1,8 @@
1
1
  # frozen_string_literal: false
2
2
  #
3
3
  # output-method.rb - output methods used by irb
4
- # $Release Version: 0.9.6$
5
- # $Revision$
6
4
  # by Keiju ISHITSUKA(keiju@ruby-lang.org)
7
5
  #
8
- # --
9
- #
10
- #
11
- #
12
6
 
13
7
  module IRB
14
8
  # An abstract output class for IO in irb. This is mainly used internally by
data/lib/irb/ruby-lex.rb CHANGED
@@ -1,14 +1,8 @@
1
1
  # frozen_string_literal: false
2
2
  #
3
3
  # irb/ruby-lex.rb - ruby lexcal analyzer
4
- # $Release Version: 0.9.6$
5
- # $Revision$
6
4
  # by Keiju ISHITSUKA(keiju@ruby-lang.org)
7
5
  #
8
- # --
9
- #
10
- #
11
- #
12
6
 
13
7
  require "ripper"
14
8
  require "jruby" if RUBY_ENGINE == "jruby"
@@ -22,7 +16,8 @@ class RubyLex
22
16
  end
23
17
  end
24
18
 
25
- def initialize
19
+ def initialize(context)
20
+ @context = context
26
21
  @exp_line_no = @line_no = 1
27
22
  @indent = 0
28
23
  @continue = false
@@ -48,13 +43,13 @@ class RubyLex
48
43
  end
49
44
 
50
45
  # io functions
51
- def set_input(io, p = nil, context:, &block)
46
+ def set_input(io, &block)
52
47
  @io = io
53
48
  if @io.respond_to?(:check_termination)
54
49
  @io.check_termination do |code|
55
50
  if Reline::IOGate.in_pasting?
56
- lex = RubyLex.new
57
- rest = lex.check_termination_in_prev_line(code, context: context)
51
+ lex = RubyLex.new(@context)
52
+ rest = lex.check_termination_in_prev_line(code)
58
53
  if rest
59
54
  Reline.delete_text
60
55
  rest.bytes.reverse_each do |c|
@@ -67,12 +62,13 @@ class RubyLex
67
62
  else
68
63
  # Accept any single-line input for symbol aliases or commands that transform args
69
64
  command = code.split(/\s/, 2).first
70
- if context.symbol_alias?(command) || context.transform_args?(command)
65
+ if @context.symbol_alias?(command) || @context.transform_args?(command)
71
66
  next true
72
67
  end
73
68
 
74
69
  code.gsub!(/\s*\z/, '').concat("\n")
75
- ltype, indent, continue, code_block_open = check_state(code, context: context)
70
+ tokens = self.class.ripper_lex_without_warning(code, context: @context)
71
+ ltype, indent, continue, code_block_open = check_state(code, tokens)
76
72
  if ltype or indent > 0 or continue or code_block_open
77
73
  false
78
74
  else
@@ -85,7 +81,7 @@ class RubyLex
85
81
  @io.dynamic_prompt do |lines|
86
82
  lines << '' if lines.empty?
87
83
  result = []
88
- tokens = self.class.ripper_lex_without_warning(lines.map{ |l| l + "\n" }.join, context: context)
84
+ tokens = self.class.ripper_lex_without_warning(lines.map{ |l| l + "\n" }.join, context: @context)
89
85
  code = String.new
90
86
  partial_tokens = []
91
87
  unprocessed_tokens = []
@@ -96,8 +92,9 @@ class RubyLex
96
92
  if t.tok.include?("\n")
97
93
  t_str = t.tok
98
94
  t_str.each_line("\n") do |s|
99
- code << s << "\n"
100
- ltype, indent, continue, code_block_open = check_state(code, partial_tokens, context: context)
95
+ code << s
96
+ next unless s.include?("\n")
97
+ ltype, indent, continue, code_block_open = check_state(code, partial_tokens)
101
98
  result << @prompt.call(ltype, indent, continue || code_block_open, @line_no + line_num_offset)
102
99
  line_num_offset += 1
103
100
  end
@@ -108,29 +105,22 @@ class RubyLex
108
105
  end
109
106
 
110
107
  unless unprocessed_tokens.empty?
111
- ltype, indent, continue, code_block_open = check_state(code, unprocessed_tokens, context: context)
108
+ ltype, indent, continue, code_block_open = check_state(code, unprocessed_tokens)
112
109
  result << @prompt.call(ltype, indent, continue || code_block_open, @line_no + line_num_offset)
113
110
  end
114
111
  result
115
112
  end
116
113
  end
117
114
 
118
- if p.respond_to?(:call)
119
- @input = p
120
- elsif block_given?
115
+ if block_given?
121
116
  @input = block
122
117
  else
123
118
  @input = Proc.new{@io.gets}
124
119
  end
125
120
  end
126
121
 
127
- def set_prompt(p = nil, &block)
128
- p = block if block_given?
129
- if p.respond_to?(:call)
130
- @prompt = p
131
- else
132
- @prompt = Proc.new{print p}
133
- end
122
+ def set_prompt(&block)
123
+ @prompt = block
134
124
  end
135
125
 
136
126
  ERROR_TOKENS = [
@@ -188,6 +178,7 @@ class RubyLex
188
178
  if line_count >= line_index
189
179
  return prev_spaces
190
180
  end
181
+ next if t.event == :on_tstring_content || t.event == :on_words_sep
191
182
  if (@tokens.size - 1) > i
192
183
  md = @tokens[i + 1].tok.match(/(\A +)/)
193
184
  prev_spaces = md.nil? ? 0 : md[1].count(' ')
@@ -197,11 +188,11 @@ class RubyLex
197
188
  prev_spaces
198
189
  end
199
190
 
200
- def set_auto_indent(context)
201
- if @io.respond_to?(:auto_indent) and context.auto_indent_mode
191
+ def set_auto_indent
192
+ if @io.respond_to?(:auto_indent) and @context.auto_indent_mode
202
193
  @io.auto_indent do |lines, line_index, byte_pointer, is_newline|
203
194
  if is_newline
204
- @tokens = self.class.ripper_lex_without_warning(lines[0..line_index].join("\n"), context: context)
195
+ @tokens = self.class.ripper_lex_without_warning(lines[0..line_index].join("\n"), context: @context)
205
196
  prev_spaces = find_prev_spaces(line_index)
206
197
  depth_difference = check_newline_depth_difference
207
198
  depth_difference = 0 if depth_difference < 0
@@ -210,19 +201,18 @@ class RubyLex
210
201
  code = line_index.zero? ? '' : lines[0..(line_index - 1)].map{ |l| l + "\n" }.join
211
202
  last_line = lines[line_index]&.byteslice(0, byte_pointer)
212
203
  code += last_line if last_line
213
- @tokens = self.class.ripper_lex_without_warning(code, context: context)
204
+ @tokens = self.class.ripper_lex_without_warning(code, context: @context)
214
205
  check_corresponding_token_depth(lines, line_index)
215
206
  end
216
207
  end
217
208
  end
218
209
  end
219
210
 
220
- def check_state(code, tokens = nil, context: nil)
221
- tokens = self.class.ripper_lex_without_warning(code, context: context) unless tokens
211
+ def check_state(code, tokens)
222
212
  ltype = process_literal_type(tokens)
223
213
  indent = process_nesting_level(tokens)
224
214
  continue = process_continue(tokens)
225
- lvars_code = self.class.generate_local_variables_assign_code(context.local_variables)
215
+ lvars_code = self.class.generate_local_variables_assign_code(@context.local_variables)
226
216
  code = "#{lvars_code}\n#{code}" if lvars_code
227
217
  code_block_open = check_code_block(code, tokens)
228
218
  [ltype, indent, continue, code_block_open]
@@ -243,13 +233,13 @@ class RubyLex
243
233
  @code_block_open = false
244
234
  end
245
235
 
246
- def each_top_level_statement(context)
236
+ def each_top_level_statement
247
237
  initialize_input
248
238
  catch(:TERM_INPUT) do
249
239
  loop do
250
240
  begin
251
241
  prompt
252
- unless l = lex(context)
242
+ unless l = lex
253
243
  throw :TERM_INPUT if @line == ''
254
244
  else
255
245
  @line_no += l.count("\n")
@@ -279,19 +269,19 @@ class RubyLex
279
269
  end
280
270
  end
281
271
 
282
- def lex(context)
272
+ def lex
283
273
  line = @input.call
284
274
  if @io.respond_to?(:check_termination)
285
275
  return line # multiline
286
276
  end
287
277
  code = @line + (line.nil? ? '' : line)
288
278
  code.gsub!(/\s*\z/, '').concat("\n")
289
- @tokens = self.class.ripper_lex_without_warning(code, context: context)
290
- @ltype, @indent, @continue, @code_block_open = check_state(code, @tokens, context: context)
279
+ @tokens = self.class.ripper_lex_without_warning(code, context: @context)
280
+ @ltype, @indent, @continue, @code_block_open = check_state(code, @tokens)
291
281
  line
292
282
  end
293
283
 
294
- def process_continue(tokens = @tokens)
284
+ def process_continue(tokens)
295
285
  # last token is always newline
296
286
  if tokens.size >= 2 and tokens[-2].event == :on_regexp_end
297
287
  # end of regexp literal
@@ -312,7 +302,7 @@ class RubyLex
312
302
  false
313
303
  end
314
304
 
315
- def check_code_block(code, tokens = @tokens)
305
+ def check_code_block(code, tokens)
316
306
  return true if tokens.empty?
317
307
  if tokens.last.event == :on_heredoc_beg
318
308
  return true
@@ -404,7 +394,7 @@ class RubyLex
404
394
  false
405
395
  end
406
396
 
407
- def process_nesting_level(tokens = @tokens)
397
+ def process_nesting_level(tokens)
408
398
  indent = 0
409
399
  in_oneliner_def = nil
410
400
  tokens.each_with_index { |t, index|
@@ -642,7 +632,7 @@ class RubyLex
642
632
  end
643
633
 
644
634
  case t.event
645
- when :on_ignored_nl, :on_nl, :on_comment
635
+ when :on_ignored_nl, :on_nl, :on_comment, :on_heredoc_end, :on_embdoc_end
646
636
  if in_oneliner_def != :BODY
647
637
  corresponding_token_depth = nil
648
638
  spaces_at_line_head = 0
@@ -760,7 +750,7 @@ class RubyLex
760
750
  pending_heredocs.first || start_token.last
761
751
  end
762
752
 
763
- def process_literal_type(tokens = @tokens)
753
+ def process_literal_type(tokens)
764
754
  start_token = check_string_literal(tokens)
765
755
  return nil if start_token == ""
766
756
 
@@ -781,20 +771,15 @@ class RubyLex
781
771
  when :on_qsymbols_beg then ?]
782
772
  when :on_symbols_beg then ?]
783
773
  when :on_heredoc_beg
784
- start_token&.tok =~ /<<[-~]?(['"`])[_a-zA-Z0-9]+\1/
785
- case $1
786
- when ?" then ?"
787
- when ?' then ?'
788
- when ?` then ?`
789
- else ?"
790
- end
774
+ start_token&.tok =~ /<<[-~]?(['"`])\w+\1/
775
+ $1 || ?"
791
776
  else
792
777
  nil
793
778
  end
794
779
  end
795
780
 
796
- def check_termination_in_prev_line(code, context: nil)
797
- tokens = self.class.ripper_lex_without_warning(code, context: context)
781
+ def check_termination_in_prev_line(code)
782
+ tokens = self.class.ripper_lex_without_warning(code, context: @context)
798
783
  past_first_newline = false
799
784
  index = tokens.rindex do |t|
800
785
  # traverse first token before last line
data/lib/irb/version.rb CHANGED
@@ -1,17 +1,11 @@
1
1
  # frozen_string_literal: false
2
2
  #
3
3
  # irb/version.rb - irb version definition file
4
- # $Release Version: 0.9.6$
5
- # $Revision$
6
4
  # by Keiju ISHITSUKA(keiju@ishitsuka.com)
7
5
  #
8
- # --
9
- #
10
- #
11
- #
12
6
 
13
7
  module IRB # :nodoc:
14
- VERSION = "1.6.2"
8
+ VERSION = "1.6.3"
15
9
  @RELEASE_VERSION = VERSION
16
- @LAST_UPDATE_DATE = "2022-12-13"
10
+ @LAST_UPDATE_DATE = "2023-03-06"
17
11
  end
data/lib/irb/workspace.rb CHANGED
@@ -1,14 +1,8 @@
1
1
  # frozen_string_literal: false
2
2
  #
3
3
  # irb/workspace-binding.rb -
4
- # $Release Version: 0.9.6$
5
- # $Revision$
6
4
  # by Keiju ISHITSUKA(keiju@ruby-lang.org)
7
5
  #
8
- # --
9
- #
10
- #
11
- #
12
6
 
13
7
  require "delegate"
14
8
 
@@ -115,7 +109,7 @@ EOF
115
109
  attr_reader :main
116
110
 
117
111
  # Evaluate the given +statements+ within the context of this workspace.
118
- def evaluate(context, statements, file = __FILE__, line = __LINE__)
112
+ def evaluate(statements, file = __FILE__, line = __LINE__)
119
113
  eval(statements, @binding, file, line)
120
114
  end
121
115
 
@@ -128,6 +122,8 @@ EOF
128
122
  end
129
123
 
130
124
  # error message manipulator
125
+ # WARN: Rails patches this method to filter its own backtrace. Be cautious when changing it.
126
+ # See: https://github.com/rails/rails/blob/main/railties/lib/rails/commands/console/console_command.rb#L8:~:text=def,filter_backtrace
131
127
  def filter_backtrace(bt)
132
128
  return nil if bt =~ /\/irb\/.*\.rb/
133
129
  return nil if bt =~ /\/irb\.rb/
@@ -142,11 +138,7 @@ EOF
142
138
  end
143
139
 
144
140
  def code_around_binding
145
- if @binding.respond_to?(:source_location)
146
- file, pos = @binding.source_location
147
- else
148
- file, pos = @binding.eval('[__FILE__, __LINE__]')
149
- end
141
+ file, pos = @binding.source_location
150
142
 
151
143
  if defined?(::SCRIPT_LINES__[file]) && lines = ::SCRIPT_LINES__[file]
152
144
  code = ::SCRIPT_LINES__[file].join('')
@@ -173,8 +165,5 @@ EOF
173
165
 
174
166
  "\nFrom: #{file} @ line #{pos + 1} :\n\n#{body}#{Color.clear}\n"
175
167
  end
176
-
177
- def IRB.delete_caller
178
- end
179
168
  end
180
169
  end
@@ -1,14 +1,8 @@
1
1
  # frozen_string_literal: false
2
2
  #
3
3
  # irb/ws-for-case-2.rb -
4
- # $Release Version: 0.9.6$
5
- # $Revision$
6
4
  # by Keiju ISHITSUKA(keiju@ruby-lang.org)
7
5
  #
8
- # --
9
- #
10
- #
11
- #
12
6
 
13
7
  while true
14
8
  IRB::BINDING_QUEUE.push _ = binding
data/lib/irb/xmp.rb CHANGED
@@ -1,14 +1,8 @@
1
1
  # frozen_string_literal: false
2
2
  #
3
3
  # xmp.rb - irb version of gotoken xmp
4
- # $Release Version: 0.9$
5
- # $Revision$
6
4
  # by Keiju ISHITSUKA(Nippon Rational Inc.)
7
5
  #
8
- # --
9
- #
10
- #
11
- #
12
6
 
13
7
  require_relative "../irb"
14
8
  require_relative "frame"
data/lib/irb.rb CHANGED
@@ -1,14 +1,9 @@
1
1
  # frozen_string_literal: false
2
2
  #
3
3
  # irb.rb - irb main module
4
- # $Release Version: 0.9.6 $
5
- # $Revision$
6
4
  # by Keiju ISHITSUKA(keiju@ruby-lang.org)
7
5
  #
8
- # --
9
- #
10
- #
11
- #
6
+
12
7
  require "ripper"
13
8
  require "reline"
14
9
 
@@ -468,12 +463,16 @@ module IRB
468
463
  # be parsed as :assign and echo will be suppressed, but the latter is
469
464
  # parsed as a :method_add_arg and the output won't be suppressed
470
465
 
466
+ PROMPT_MAIN_TRUNCATE_LENGTH = 32
467
+ PROMPT_MAIN_TRUNCATE_OMISSION = '...'.freeze
468
+ CONTROL_CHARACTERS_PATTERN = "\x00-\x1F".freeze
469
+
471
470
  # Creates a new irb session
472
471
  def initialize(workspace = nil, input_method = nil)
473
472
  @context = Context.new(self, workspace, input_method)
474
473
  @context.main.extend ExtendCommandBundle
475
474
  @signal_status = :IN_IRB
476
- @scanner = RubyLex.new
475
+ @scanner = RubyLex.new(@context)
477
476
  end
478
477
 
479
478
  # A hook point for `debug` command's TracePoint after :IRB_EXIT as well as its clean-up
@@ -543,7 +542,7 @@ module IRB
543
542
  @context.io.prompt
544
543
  end
545
544
 
546
- @scanner.set_input(@context.io, context: @context) do
545
+ @scanner.set_input(@context.io) do
547
546
  signal_status(:IN_INPUT) do
548
547
  if l = @context.io.gets
549
548
  print l if @context.verbose?
@@ -561,9 +560,9 @@ module IRB
561
560
  end
562
561
  end
563
562
 
564
- @scanner.set_auto_indent(@context) if @context.auto_indent_mode
563
+ @scanner.set_auto_indent
565
564
 
566
- @scanner.each_top_level_statement(@context) do |line, line_no|
565
+ @scanner.each_top_level_statement do |line, line_no|
567
566
  signal_status(:IN_EVAL) do
568
567
  begin
569
568
  line.untaint if RUBY_VERSION < '2.7'
@@ -780,6 +779,15 @@ module IRB
780
779
  end
781
780
  end
782
781
 
782
+ def truncate_prompt_main(str) # :nodoc:
783
+ str = str.tr(CONTROL_CHARACTERS_PATTERN, ' ')
784
+ if str.size <= PROMPT_MAIN_TRUNCATE_LENGTH
785
+ str
786
+ else
787
+ str[0, PROMPT_MAIN_TRUNCATE_LENGTH - PROMPT_MAIN_TRUNCATE_OMISSION.size] + PROMPT_MAIN_TRUNCATE_OMISSION
788
+ end
789
+ end
790
+
783
791
  def prompt(prompt, ltype, indent, line_no) # :nodoc:
784
792
  p = prompt.dup
785
793
  p.gsub!(/%([0-9]+)?([a-zA-Z])/) do
@@ -787,9 +795,9 @@ module IRB
787
795
  when "N"
788
796
  @context.irb_name
789
797
  when "m"
790
- @context.main.to_s
798
+ truncate_prompt_main(@context.main.to_s)
791
799
  when "M"
792
- @context.main.inspect
800
+ truncate_prompt_main(@context.main.inspect)
793
801
  when "l"
794
802
  ltype
795
803
  when "i"
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.2
4
+ version: 1.6.3
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: 2022-12-20 00:00:00.000000000 Z
12
+ date: 2023-03-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: reline
@@ -110,7 +110,11 @@ homepage: https://github.com/ruby/irb
110
110
  licenses:
111
111
  - Ruby
112
112
  - BSD-2-Clause
113
- metadata: {}
113
+ metadata:
114
+ homepage_uri: https://github.com/ruby/irb
115
+ source_code_uri: https://github.com/ruby/irb
116
+ documentation_uri: https://github.com/ruby/irb
117
+ changelog_uri: https://github.com/ruby/irb/releases
114
118
  post_install_message:
115
119
  rdoc_options: []
116
120
  require_paths:
@@ -126,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
130
  - !ruby/object:Gem::Version
127
131
  version: '0'
128
132
  requirements: []
129
- rubygems_version: 3.3.7
133
+ rubygems_version: 3.4.1
130
134
  signing_key:
131
135
  specification_version: 4
132
136
  summary: Interactive Ruby command-line tool for REPL (Read Eval Print Loop).