irb 1.6.4 → 1.7.0

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: db51125adbe98b16228e314bff627b1cec953b92f32c774c4b9a820dc3bfc40b
4
- data.tar.gz: ead3ebf30f5a4369d8cc2767691397d766bab8532031f8f505c2d0b3f251e071
3
+ metadata.gz: fa3c9603f48d730988d34f454a10b58021caa677ab8832d9764e39e61bb49abb
4
+ data.tar.gz: c46d1e32c81a8f22593e174af095070159af6a61508c97b3ef4b0b9d28301d58
5
5
  SHA512:
6
- metadata.gz: d2f749ce66ed43433fbbc7ec8682a0c3f0180ac8fb676739e5c3cbf0eb2f8bbb89a7896af11120bdeedd730e57edddaeabf932ae22ac55ad33c99f8408ffc832
7
- data.tar.gz: 55621e3a5f9926c3f1b44426c23b9b08543920075fa0d32eeda8b7db35ded09aba6c311011e7f8397a6a5089bbb63d2b2e2603c1d7e254b77a16b93ca35b76f3
6
+ metadata.gz: 3e99185c909180d01a3310f7db11437181268b930d267f2fe365c06cd7a442ad3a8cdf7d5863fb19e17885a23aad46b993a2e5c21fb8632ff2f91285e469be4b
7
+ data.tar.gz: 44978be86d00d0fc435e81e4cadc5abad08d47519a189db02e34d7eb3435e9ac0cc0adf470e845edba1e7d866574298e1b7b8bba5190d8be538c396cd0179d07
data/lib/irb/cmd/help.rb CHANGED
@@ -1,57 +1,23 @@
1
- # frozen_string_literal: false
2
- #
3
- # help.rb - helper using ri
4
- #
1
+ # frozen_string_literal: true
5
2
 
6
- require_relative "nop"
3
+ require_relative "show_doc"
7
4
 
8
5
  module IRB
9
- # :stopdoc:
10
-
11
6
  module ExtendCommand
12
- class Help < Nop
13
- class << self
14
- def transform_args(args)
15
- # Return a string literal as is for backward compatibility
16
- if args.empty? || string_literal?(args)
17
- args
18
- else # Otherwise, consider the input as a String for convenience
19
- args.strip.dump
20
- end
21
- end
22
- end
23
-
7
+ class Help < ShowDoc
24
8
  category "Context"
25
- description "Enter the mode to look up RI documents."
9
+ description "[DEPRECATED] Enter the mode to look up RI documents."
10
+
11
+ DEPRECATION_MESSAGE = <<~MSG
12
+ [Deprecation] The `help` command will be repurposed to display command help in the future.
13
+ For RI document lookup, please use the `show_doc` command instead.
14
+ For command help, please use `show_cmds` for now.
15
+ MSG
26
16
 
27
17
  def execute(*names)
28
- require 'rdoc/ri/driver'
29
- opts = RDoc::RI::Driver.process_args([])
30
- IRB::ExtendCommand::Help.const_set(:Ri, RDoc::RI::Driver.new(opts))
31
- rescue LoadError, SystemExit
32
- IRB::ExtendCommand::Help.remove_method(:execute)
33
- # raise NoMethodError in ensure
34
- else
35
- def execute(*names)
36
- if names.empty?
37
- Ri.interactive
38
- return
39
- end
40
- names.each do |name|
41
- begin
42
- Ri.display_name(name.to_s)
43
- rescue RDoc::RI::Error
44
- puts $!.message
45
- end
46
- end
47
- nil
48
- end
49
- nil
50
- ensure
51
- execute(*names)
18
+ warn DEPRECATION_MESSAGE
19
+ super
52
20
  end
53
21
  end
54
22
  end
55
-
56
- # :startdoc:
57
23
  end
data/lib/irb/cmd/ls.rb CHANGED
@@ -39,8 +39,12 @@ module IRB
39
39
  def dump_methods(o, klass, obj)
40
40
  singleton_class = begin obj.singleton_class; rescue TypeError; nil end
41
41
  dumped_mods = Array.new
42
+ ancestors = klass.ancestors
43
+ ancestors = ancestors.reject { |c| c >= Object } if klass < Object
44
+ singleton_ancestors = (singleton_class&.ancestors || []).reject { |c| c >= Class }
45
+
42
46
  # singleton_class' ancestors should be at the front
43
- maps = class_method_map(singleton_class&.ancestors || [], dumped_mods) + class_method_map(klass.ancestors, dumped_mods)
47
+ maps = class_method_map(singleton_ancestors, dumped_mods) + class_method_map(ancestors, dumped_mods)
44
48
  maps.each do |mod, methods|
45
49
  name = mod == singleton_class ? "#{klass}.methods" : "#{mod}#methods"
46
50
  o.dump(name, methods)
@@ -49,7 +53,6 @@ module IRB
49
53
 
50
54
  def class_method_map(classes, dumped_mods)
51
55
  dumped_methods = Array.new
52
- classes = classes.reject { |mod| mod >= Object }
53
56
  classes.map do |mod|
54
57
  next if dumped_mods.include? mod
55
58
 
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "nop"
4
+
5
+ module IRB
6
+ module ExtendCommand
7
+ class ShowDoc < Nop
8
+ class << self
9
+ def transform_args(args)
10
+ # Return a string literal as is for backward compatibility
11
+ if args.empty? || string_literal?(args)
12
+ args
13
+ else # Otherwise, consider the input as a String for convenience
14
+ args.strip.dump
15
+ end
16
+ end
17
+ end
18
+
19
+ category "Context"
20
+ description "Enter the mode to look up RI documents."
21
+
22
+ def execute(*names)
23
+ require 'rdoc/ri/driver'
24
+
25
+ unless ShowDoc.const_defined?(:Ri)
26
+ opts = RDoc::RI::Driver.process_args([])
27
+ ShowDoc.const_set(:Ri, RDoc::RI::Driver.new(opts))
28
+ end
29
+
30
+ if names.empty?
31
+ Ri.interactive
32
+ else
33
+ names.each do |name|
34
+ begin
35
+ Ri.display_name(name.to_s)
36
+ rescue RDoc::RI::Error
37
+ puts $!.message
38
+ end
39
+ end
40
+ end
41
+
42
+ nil
43
+ rescue LoadError, SystemExit
44
+ warn "Can't display document because `rdoc` is not installed."
45
+ end
46
+ end
47
+ end
48
+ end
@@ -31,13 +31,14 @@ module IRB
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]
34
- if owner.respond_to?(:instance_method) && owner.instance_methods.include?(method.to_sym)
35
- file, line = owner.instance_method(method).source_location
34
+ if owner.respond_to?(:instance_method)
35
+ methods = owner.instance_methods + owner.private_instance_methods
36
+ file, line = owner.instance_method(method).source_location if methods.include?(method.to_sym)
36
37
  end
37
38
  when /\A((?<receiver>.+)(\.|::))?(?<method>[^ :.]+)\z/ # method, receiver.method, receiver::method
38
39
  receiver = eval(Regexp.last_match[:receiver] || 'self', irb_context.workspace.binding)
39
40
  method = Regexp.last_match[:method]
40
- file, line = receiver.method(method).source_location if receiver.respond_to?(method)
41
+ file, line = receiver.method(method).source_location if receiver.respond_to?(method, true)
41
42
  end
42
43
  if file && line
43
44
  Source.new(file: file, first_line: line, last_line: find_end(file, line, irb_context))
@@ -7,7 +7,7 @@
7
7
  begin
8
8
  require "tracer"
9
9
  rescue LoadError
10
- $stderr.puts "Tracer extension of IRB is enabled but tracer gem doesn't found."
10
+ $stderr.puts "Tracer extension of IRB is enabled but tracer gem wasn't found."
11
11
  module IRB
12
12
  class Context
13
13
  def use_tracer=(opt)
@@ -157,10 +157,14 @@ module IRB # :nodoc:
157
157
 
158
158
  [
159
159
  :irb_help, :Help, "cmd/help",
160
- [:show_doc, NO_OVERRIDE],
161
160
  [:help, NO_OVERRIDE],
162
161
  ],
163
162
 
163
+ [
164
+ :irb_show_doc, :ShowDoc, "cmd/show_doc",
165
+ [:show_doc, NO_OVERRIDE],
166
+ ],
167
+
164
168
  [
165
169
  :irb_info, :IrbInfo, "cmd/irb_info"
166
170
  ],
data/lib/irb/help.rb CHANGED
@@ -4,15 +4,13 @@
4
4
  # by Keiju ISHITSUKA(keiju@ishitsuka.com)
5
5
  #
6
6
 
7
- require_relative 'magic-file'
8
-
9
7
  module IRB
10
8
  # Outputs the irb help message, see IRB@Command+line+options.
11
9
  def IRB.print_usage
12
10
  lc = IRB.conf[:LC_MESSAGES]
13
11
  path = lc.find("irb/help-message")
14
12
  space_line = false
15
- IRB::MagicFile.open(path){|f|
13
+ File.open(path){|f|
16
14
  f.each_line do |l|
17
15
  if /^\s*$/ =~ l
18
16
  lc.puts l unless space_line
@@ -5,7 +5,6 @@
5
5
  #
6
6
 
7
7
  require_relative 'src_encoding'
8
- require_relative 'magic-file'
9
8
  require_relative 'completion'
10
9
  require 'io/console'
11
10
  require 'reline'
@@ -132,7 +131,7 @@ module IRB
132
131
  # Creates a new input method object
133
132
  def initialize(file)
134
133
  super
135
- @io = file.is_a?(IO) ? file : IRB::MagicFile.open(file)
134
+ @io = file.is_a?(IO) ? file : File.open(file)
136
135
  @external_encoding = @io.external_encoding
137
136
  end
138
137
  # The file name of this input method, usually given during initialization.
@@ -399,8 +398,10 @@ module IRB
399
398
  formatter = RDoc::Markup::ToAnsi.new
400
399
  formatter.width = width
401
400
  dialog.trap_key = alt_d
402
- message = 'Press Alt+d to read the full document'
401
+ mod_key = RUBY_PLATFORM.match?(/darwin/) ? "Option" : "Alt"
402
+ message = "Press #{mod_key}+d to read the full document"
403
403
  contents = [message] + doc.accept(formatter).split("\n")
404
+ contents = contents.take(preferred_dialog_height) if respond_to?(:preferred_dialog_height)
404
405
 
405
406
  y = cursor_pos_to_render.y
406
407
  DialogRenderInfo.new(pos: Reline::CursorPos.new(x, y), contents: contents, width: width, bg_color: '49')
data/lib/irb/locale.rb CHANGED
@@ -15,7 +15,11 @@ module IRB # :nodoc:
15
15
  ]x
16
16
  LOCALE_DIR = "/lc/"
17
17
 
18
- @@legacy_encoding_alias_map = {}.freeze
18
+ LEGACY_ENCODING_ALIAS_MAP = {
19
+ 'ujis' => Encoding::EUC_JP,
20
+ 'euc' => Encoding::EUC_JP
21
+ }
22
+
19
23
  @@loaded = []
20
24
 
21
25
  def initialize(locale = nil)
@@ -26,11 +30,11 @@ module IRB # :nodoc:
26
30
  @lang, @territory, @encoding_name, @modifier = m[:language], m[:territory], m[:codeset], m[:modifier]
27
31
 
28
32
  if @encoding_name
29
- begin load 'irb/encoding_aliases.rb'; rescue LoadError; end
30
- if @encoding = @@legacy_encoding_alias_map[@encoding_name]
33
+ if @encoding = LEGACY_ENCODING_ALIAS_MAP[@encoding_name]
31
34
  warn(("%s is obsolete. use %s" % ["#{@lang}_#{@territory}.#{@encoding_name}", "#{@lang}_#{@territory}.#{@encoding.name}"]), uplevel: 1)
35
+ else
36
+ @encoding = Encoding.find(@encoding_name) rescue nil
32
37
  end
33
- @encoding = Encoding.find(@encoding_name) rescue nil
34
38
  end
35
39
  end
36
40
  @encoding ||= (Encoding.find('locale') rescue Encoding::ASCII_8BIT)
@@ -78,39 +82,12 @@ module IRB # :nodoc:
78
82
  super(*ary)
79
83
  end
80
84
 
81
- def require(file, priv = nil)
82
- rex = Regexp.new("lc/#{Regexp.quote(file)}\.(so|o|sl|rb)?")
83
- return false if $".find{|f| f =~ rex}
84
-
85
- case file
86
- when /\.rb$/
87
- begin
88
- load(file, priv)
89
- $".push file
90
- return true
91
- rescue LoadError
92
- end
93
- when /\.(so|o|sl)$/
94
- return super
95
- end
96
-
97
- begin
98
- load(f = file + ".rb")
99
- $".push f #"
100
- return true
101
- rescue LoadError
102
- return ruby_require(file)
103
- end
104
- end
105
-
106
- alias toplevel_load load
107
-
108
- def load(file, priv=nil)
85
+ def load(file)
109
86
  found = find(file)
110
87
  if found
111
88
  unless @@loaded.include?(found)
112
89
  @@loaded << found # cache
113
- return real_load(found, priv)
90
+ Kernel.load(found)
114
91
  end
115
92
  else
116
93
  raise LoadError, "No such file to load -- #{file}"
@@ -129,16 +106,6 @@ module IRB # :nodoc:
129
106
  end
130
107
  end
131
108
 
132
- private
133
- def real_load(path, priv)
134
- src = MagicFile.open(path){|f| f.read}
135
- if priv
136
- eval("self", TOPLEVEL_BINDING).extend(Module.new {eval(src, nil, path)})
137
- else
138
- eval(src, TOPLEVEL_BINDING, path)
139
- end
140
- end
141
-
142
109
  # @param paths load paths in which IRB find a localized file.
143
110
  # @param dir directory
144
111
  # @param file basename to be localized
data/lib/irb/ruby-lex.rb CHANGED
@@ -18,10 +18,7 @@ class RubyLex
18
18
 
19
19
  def initialize(context)
20
20
  @context = context
21
- @exp_line_no = @line_no = 1
22
- @indent = 0
23
- @continue = false
24
- @line = ""
21
+ @line_no = 1
25
22
  @prompt = nil
26
23
  end
27
24
 
@@ -42,8 +39,17 @@ class RubyLex
42
39
  result
43
40
  end
44
41
 
42
+ def single_line_command?(code)
43
+ command = code.split(/\s/, 2).first
44
+ @context.symbol_alias?(command) || @context.transform_args?(command)
45
+ end
46
+
45
47
  # io functions
46
- def set_input(io, &block)
48
+ def set_input(&block)
49
+ @input = block
50
+ end
51
+
52
+ def configure_io(io)
47
53
  @io = io
48
54
  if @io.respond_to?(:check_termination)
49
55
  @io.check_termination do |code|
@@ -61,14 +67,9 @@ class RubyLex
61
67
  end
62
68
  else
63
69
  # Accept any single-line input for symbol aliases or commands that transform args
64
- command = code.split(/\s/, 2).first
65
- if @context.symbol_alias?(command) || @context.transform_args?(command)
66
- next true
67
- end
70
+ next true if single_line_command?(code)
68
71
 
69
- code.gsub!(/\s*\z/, '').concat("\n")
70
- tokens = self.class.ripper_lex_without_warning(code, context: @context)
71
- ltype, indent, continue, code_block_open = check_state(code, tokens)
72
+ ltype, indent, continue, code_block_open = check_code_state(code)
72
73
  if ltype or indent > 0 or continue or code_block_open
73
74
  false
74
75
  else
@@ -112,10 +113,22 @@ class RubyLex
112
113
  end
113
114
  end
114
115
 
115
- if block_given?
116
- @input = block
117
- else
118
- @input = Proc.new{@io.gets}
116
+ if @io.respond_to?(:auto_indent) and @context.auto_indent_mode
117
+ @io.auto_indent do |lines, line_index, byte_pointer, is_newline|
118
+ if is_newline
119
+ @tokens = self.class.ripper_lex_without_warning(lines[0..line_index].join("\n"), context: @context)
120
+ prev_spaces = find_prev_spaces(line_index)
121
+ depth_difference = check_newline_depth_difference
122
+ depth_difference = 0 if depth_difference < 0
123
+ prev_spaces + depth_difference * 2
124
+ else
125
+ code = line_index.zero? ? '' : lines[0..(line_index - 1)].map{ |l| l + "\n" }.join
126
+ last_line = lines[line_index]&.byteslice(0, byte_pointer)
127
+ code += last_line if last_line
128
+ @tokens = self.class.ripper_lex_without_warning(code, context: @context)
129
+ check_corresponding_token_depth(lines, line_index)
130
+ end
131
+ end
119
132
  end
120
133
  end
121
134
 
@@ -184,26 +197,6 @@ class RubyLex
184
197
  prev_spaces
185
198
  end
186
199
 
187
- def set_auto_indent
188
- if @io.respond_to?(:auto_indent) and @context.auto_indent_mode
189
- @io.auto_indent do |lines, line_index, byte_pointer, is_newline|
190
- if is_newline
191
- @tokens = self.class.ripper_lex_without_warning(lines[0..line_index].join("\n"), context: @context)
192
- prev_spaces = find_prev_spaces(line_index)
193
- depth_difference = check_newline_depth_difference
194
- depth_difference = 0 if depth_difference < 0
195
- prev_spaces + depth_difference * 2
196
- else
197
- code = line_index.zero? ? '' : lines[0..(line_index - 1)].map{ |l| l + "\n" }.join
198
- last_line = lines[line_index]&.byteslice(0, byte_pointer)
199
- code += last_line if last_line
200
- @tokens = self.class.ripper_lex_without_warning(code, context: @context)
201
- check_corresponding_token_depth(lines, line_index)
202
- end
203
- end
204
- end
205
- end
206
-
207
200
  def check_state(code, tokens)
208
201
  ltype = process_literal_type(tokens)
209
202
  indent = process_nesting_level(tokens)
@@ -214,67 +207,56 @@ class RubyLex
214
207
  [ltype, indent, continue, code_block_open]
215
208
  end
216
209
 
217
- def prompt
218
- if @prompt
219
- @prompt.call(@ltype, @indent, @continue, @line_no)
220
- end
210
+ def check_code_state(code)
211
+ check_target_code = code.gsub(/\s*\z/, '').concat("\n")
212
+ tokens = self.class.ripper_lex_without_warning(check_target_code, context: @context)
213
+ check_state(check_target_code, tokens)
221
214
  end
222
215
 
223
- def initialize_input
224
- @ltype = nil
225
- @indent = 0
226
- @continue = false
227
- @line = ""
228
- @exp_line_no = @line_no
229
- @code_block_open = false
216
+ def save_prompt_to_context_io(ltype, indent, continue, line_num_offset)
217
+ # Implicitly saves prompt string to `@context.io.prompt`. This will be used in the next `@input.call`.
218
+ @prompt.call(ltype, indent, continue, @line_no + line_num_offset)
230
219
  end
231
220
 
232
- def each_top_level_statement
233
- initialize_input
234
- catch(:TERM_INPUT) do
235
- loop do
236
- begin
237
- prompt
238
- unless l = lex
239
- throw :TERM_INPUT if @line == ''
240
- else
241
- @line_no += l.count("\n")
242
- if l == "\n"
243
- @exp_line_no += 1
244
- next
245
- end
246
- @line.concat l
247
- if @code_block_open or @ltype or @continue or @indent > 0
248
- next
249
- end
250
- end
251
- if @line != "\n"
252
- @line.force_encoding(@io.encoding)
253
- yield @line, @exp_line_no
254
- end
255
- raise TerminateLineInput if @io.eof?
256
- @line = ''
257
- @exp_line_no = @line_no
258
-
259
- @indent = 0
260
- rescue TerminateLineInput
261
- initialize_input
262
- prompt
263
- end
221
+ def readmultiline
222
+ save_prompt_to_context_io(nil, 0, false, 0)
223
+
224
+ # multiline
225
+ return @input.call if @io.respond_to?(:check_termination)
226
+
227
+ # nomultiline
228
+ code = ''
229
+ line_offset = 0
230
+ loop do
231
+ line = @input.call
232
+ unless line
233
+ return code.empty? ? nil : code
264
234
  end
235
+
236
+ code << line
237
+ # Accept any single-line input for symbol aliases or commands that transform args
238
+ return code if single_line_command?(code)
239
+
240
+ ltype, indent, continue, code_block_open = check_code_state(code)
241
+ return code unless ltype or indent > 0 or continue or code_block_open
242
+
243
+ line_offset += 1
244
+ save_prompt_to_context_io(ltype, indent, continue, line_offset)
265
245
  end
266
246
  end
267
247
 
268
- def lex
269
- line = @input.call
270
- if @io.respond_to?(:check_termination)
271
- return line # multiline
248
+ def each_top_level_statement
249
+ loop do
250
+ code = readmultiline
251
+ break unless code
252
+
253
+ if code != "\n"
254
+ code.force_encoding(@io.encoding)
255
+ yield code, @line_no
256
+ end
257
+ @line_no += code.count("\n")
258
+ rescue TerminateLineInput
272
259
  end
273
- code = @line + (line.nil? ? '' : line)
274
- code.gsub!(/\s*\z/, '').concat("\n")
275
- @tokens = self.class.ripper_lex_without_warning(code, context: @context)
276
- @ltype, @indent, @continue, @code_block_open = check_state(code, @tokens)
277
- line
278
260
  end
279
261
 
280
262
  def process_continue(tokens)
data/lib/irb/version.rb CHANGED
@@ -5,7 +5,7 @@
5
5
  #
6
6
 
7
7
  module IRB # :nodoc:
8
- VERSION = "1.6.4"
8
+ VERSION = "1.7.0"
9
9
  @RELEASE_VERSION = VERSION
10
- @LAST_UPDATE_DATE = "2023-04-07"
10
+ @LAST_UPDATE_DATE = "2023-06-03"
11
11
  end
data/lib/irb.rb CHANGED
@@ -537,7 +537,7 @@ module IRB
537
537
  @context.io.prompt
538
538
  end
539
539
 
540
- @scanner.set_input(@context.io) do
540
+ @scanner.set_input do
541
541
  signal_status(:IN_INPUT) do
542
542
  if l = @context.io.gets
543
543
  print l if @context.verbose?
@@ -555,7 +555,7 @@ module IRB
555
555
  end
556
556
  end
557
557
 
558
- @scanner.set_auto_indent
558
+ @scanner.configure_io(@context.io)
559
559
 
560
560
  @scanner.each_top_level_statement do |line, line_no|
561
561
  signal_status(:IN_EVAL) do
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.4
4
+ version: 1.7.0
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-04-09 00:00:00.000000000 Z
12
+ date: 2023-06-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: reline
@@ -66,6 +66,7 @@ files:
66
66
  - lib/irb/cmd/nop.rb
67
67
  - lib/irb/cmd/pushws.rb
68
68
  - lib/irb/cmd/show_cmds.rb
69
+ - lib/irb/cmd/show_doc.rb
69
70
  - lib/irb/cmd/show_source.rb
70
71
  - lib/irb/cmd/step.rb
71
72
  - lib/irb/cmd/subirb.rb
@@ -91,11 +92,9 @@ files:
91
92
  - lib/irb/inspector.rb
92
93
  - lib/irb/lc/error.rb
93
94
  - lib/irb/lc/help-message
94
- - lib/irb/lc/ja/encoding_aliases.rb
95
95
  - lib/irb/lc/ja/error.rb
96
96
  - lib/irb/lc/ja/help-message
97
97
  - lib/irb/locale.rb
98
- - lib/irb/magic-file.rb
99
98
  - lib/irb/notifier.rb
100
99
  - lib/irb/output-method.rb
101
100
  - lib/irb/ruby-lex.rb
@@ -130,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
129
  - !ruby/object:Gem::Version
131
130
  version: '0'
132
131
  requirements: []
133
- rubygems_version: 3.4.8
132
+ rubygems_version: 3.5.0.dev
134
133
  signing_key:
135
134
  specification_version: 4
136
135
  summary: Interactive Ruby command-line tool for REPL (Read Eval Print Loop).
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: false
2
- module IRB
3
- # :stopdoc:
4
-
5
- class Locale
6
- @@legacy_encoding_alias_map = {
7
- 'ujis' => Encoding::EUC_JP,
8
- 'euc' => Encoding::EUC_JP
9
- }.freeze
10
- end
11
-
12
- # :startdoc:
13
- end
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: false
2
- module IRB
3
- class << (MagicFile = Object.new)
4
- # see parser_magic_comment in parse.y
5
- ENCODING_SPEC_RE = %r"coding\s*[=:]\s*([[:alnum:]\-_]+)"
6
-
7
- def open(path)
8
- io = File.open(path, 'rb')
9
- line = io.gets
10
- line = io.gets if line[0,2] == "#!"
11
- encoding = detect_encoding(line)
12
- internal_encoding = encoding
13
- encoding ||= IRB.default_src_encoding
14
- io.rewind
15
- io.set_encoding(encoding, internal_encoding)
16
-
17
- if block_given?
18
- begin
19
- return (yield io)
20
- ensure
21
- io.close
22
- end
23
- else
24
- return io
25
- end
26
- end
27
-
28
- private
29
- def detect_encoding(line)
30
- return unless line[0] == ?#
31
- line = line[1..-1]
32
- line = $1 if line[/-\*-\s*(.*?)\s*-*-$/]
33
- return nil unless ENCODING_SPEC_RE =~ line
34
- encoding = $1
35
- return encoding.sub(/-(?:mac|dos|unix)/i, '')
36
- end
37
- end
38
- end