[ruby/irb] Drop Ruby 2.6 support
(https://github.com/ruby/irb/pull/555) * Remove all Ruby 2.6 support * Drop Ruby 2.6 specific testing conditions * Only run Ruby 2.7+ on CI * Bump Ruby requirement to 2.7+ https://github.com/ruby/irb/commit/3f714b616c
This commit is contained in:
parent
1587494b0b
commit
2f8e5c80e6
@ -560,7 +560,6 @@ module IRB
|
|||||||
@scanner.each_top_level_statement do |line, line_no|
|
@scanner.each_top_level_statement do |line, line_no|
|
||||||
signal_status(:IN_EVAL) do
|
signal_status(:IN_EVAL) do
|
||||||
begin
|
begin
|
||||||
line.untaint if RUBY_VERSION < '2.7'
|
|
||||||
if IRB.conf[:MEASURE] && IRB.conf[:MEASURE_CALLBACKS].empty?
|
if IRB.conf[:MEASURE] && IRB.conf[:MEASURE_CALLBACKS].empty?
|
||||||
IRB.set_measure_callback
|
IRB.set_measure_callback
|
||||||
end
|
end
|
||||||
|
@ -30,20 +30,11 @@ module IRB
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if RUBY_VERSION >= "2.7.0"
|
def self.execute(conf, *opts, **kwargs, &block)
|
||||||
def self.execute(conf, *opts, **kwargs, &block)
|
command = new(conf)
|
||||||
command = new(conf)
|
command.execute(*opts, **kwargs, &block)
|
||||||
command.execute(*opts, **kwargs, &block)
|
rescue CommandArgumentError => e
|
||||||
rescue CommandArgumentError => e
|
puts e.message
|
||||||
puts e.message
|
|
||||||
end
|
|
||||||
else
|
|
||||||
def self.execute(conf, *opts, &block)
|
|
||||||
command = new(conf)
|
|
||||||
command.execute(*opts, &block)
|
|
||||||
rescue CommandArgumentError => e
|
|
||||||
puts e.message
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize(conf)
|
def initialize(conf)
|
||||||
|
@ -27,7 +27,7 @@ module IRB
|
|||||||
when /\A[A-Z]\w*(::[A-Z]\w*)*\z/ # Const::Name
|
when /\A[A-Z]\w*(::[A-Z]\w*)*\z/ # Const::Name
|
||||||
eval(str, irb_context.workspace.binding) # trigger autoload
|
eval(str, irb_context.workspace.binding) # trigger autoload
|
||||||
base = irb_context.workspace.binding.receiver.yield_self { |r| r.is_a?(Module) ? r : Object }
|
base = irb_context.workspace.binding.receiver.yield_self { |r| r.is_a?(Module) ? r : Object }
|
||||||
file, line = base.const_source_location(str) if base.respond_to?(:const_source_location) # Ruby 2.7+
|
file, line = base.const_source_location(str)
|
||||||
when /\A(?<owner>[A-Z]\w*(::[A-Z]\w*)*)#(?<method>[^ :.]+)\z/ # Class#method
|
when /\A(?<owner>[A-Z]\w*(::[A-Z]\w*)*)#(?<method>[^ :.]+)\z/ # Class#method
|
||||||
owner = eval(Regexp.last_match[:owner], irb_context.workspace.binding)
|
owner = eval(Regexp.last_match[:owner], irb_context.workspace.binding)
|
||||||
method = Regexp.last_match[:method]
|
method = Regexp.last_match[:method]
|
||||||
|
@ -197,15 +197,9 @@ module IRB # :nodoc:
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if lexer.respond_to?(:scan) # Ruby 2.7+
|
lexer.scan.each do |elem|
|
||||||
lexer.scan.each do |elem|
|
next if allow_last_error and /meets end of file|unexpected end-of-input/ =~ elem.message
|
||||||
next if allow_last_error and /meets end of file|unexpected end-of-input/ =~ elem.message
|
on_scan.call(elem)
|
||||||
on_scan.call(elem)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
lexer.parse.sort_by(&:pos).each do |elem|
|
|
||||||
on_scan.call(elem)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
# yield uncolorable DATA section
|
# yield uncolorable DATA section
|
||||||
yield(nil, inner_code.byteslice(byte_pos...inner_code.bytesize), nil) if byte_pos < inner_code.bytesize
|
yield(nil, inner_code.byteslice(byte_pos...inner_code.bytesize), nil) if byte_pos < inner_code.bytesize
|
||||||
|
@ -58,19 +58,11 @@ module IRB
|
|||||||
|
|
||||||
BASIC_WORD_BREAK_CHARACTERS = " \t\n`><=;|&{("
|
BASIC_WORD_BREAK_CHARACTERS = " \t\n`><=;|&{("
|
||||||
|
|
||||||
def self.absolute_path?(p) # TODO Remove this method after 2.6 EOL.
|
|
||||||
if File.respond_to?(:absolute_path?)
|
|
||||||
File.absolute_path?(p)
|
|
||||||
else
|
|
||||||
File.absolute_path(p) == p
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
GEM_PATHS =
|
GEM_PATHS =
|
||||||
if defined?(Gem::Specification)
|
if defined?(Gem::Specification)
|
||||||
Gem::Specification.latest_specs(true).map { |s|
|
Gem::Specification.latest_specs(true).map { |s|
|
||||||
s.require_paths.map { |p|
|
s.require_paths.map { |p|
|
||||||
if absolute_path?(p)
|
if File.absolute_path?(p)
|
||||||
p
|
p
|
||||||
else
|
else
|
||||||
File.join(s.full_gem_path, p)
|
File.join(s.full_gem_path, p)
|
||||||
|
@ -24,31 +24,8 @@ module IRB # :nodoc:
|
|||||||
load_file(path, priv)
|
load_file(path, priv)
|
||||||
end
|
end
|
||||||
|
|
||||||
if File.respond_to?(:absolute_path?)
|
|
||||||
def absolute_path?(path)
|
|
||||||
File.absolute_path?(path)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
separator =
|
|
||||||
if File::ALT_SEPARATOR
|
|
||||||
"[#{Regexp.quote(File::SEPARATOR + File::ALT_SEPARATOR)}]"
|
|
||||||
else
|
|
||||||
File::SEPARATOR
|
|
||||||
end
|
|
||||||
ABSOLUTE_PATH_PATTERN = # :nodoc:
|
|
||||||
case Dir.pwd
|
|
||||||
when /\A\w:/, /\A#{separator}{2}/
|
|
||||||
/\A(?:\w:|#{separator})#{separator}/
|
|
||||||
else
|
|
||||||
/\A#{separator}/
|
|
||||||
end
|
|
||||||
def absolute_path?(path)
|
|
||||||
ABSOLUTE_PATH_PATTERN =~ path
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def search_file_from_ruby_path(fn) # :nodoc:
|
def search_file_from_ruby_path(fn) # :nodoc:
|
||||||
if absolute_path?(fn)
|
if File.absolute_path?(fn)
|
||||||
return fn if File.exist?(fn)
|
return fn if File.exist?(fn)
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
@ -256,13 +256,12 @@ module IRB # :nodoc:
|
|||||||
end
|
end
|
||||||
|
|
||||||
if load_file
|
if load_file
|
||||||
kwargs = ", **kwargs" if RUBY_VERSION >= "2.7.0"
|
|
||||||
line = __LINE__; eval %[
|
line = __LINE__; eval %[
|
||||||
def #{cmd_name}(*opts#{kwargs}, &b)
|
def #{cmd_name}(*opts, **kwargs, &b)
|
||||||
Kernel.require_relative "#{load_file}"
|
Kernel.require_relative "#{load_file}"
|
||||||
arity = ::IRB::ExtendCommand::#{cmd_class}.instance_method(:execute).arity
|
arity = ::IRB::ExtendCommand::#{cmd_class}.instance_method(:execute).arity
|
||||||
args = (1..(arity < 0 ? ~arity : arity)).map {|i| "arg" + i.to_s }
|
args = (1..(arity < 0 ? ~arity : arity)).map {|i| "arg" + i.to_s }
|
||||||
args << "*opts#{kwargs}" if arity < 0
|
args << "*opts, **kwargs" if arity < 0
|
||||||
args << "&block"
|
args << "&block"
|
||||||
args = args.join(", ")
|
args = args.join(", ")
|
||||||
line = __LINE__; eval %[
|
line = __LINE__; eval %[
|
||||||
@ -273,7 +272,7 @@ module IRB # :nodoc:
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
], nil, __FILE__, line
|
], nil, __FILE__, line
|
||||||
__send__ :#{cmd_name}_, *opts#{kwargs}, &b
|
__send__ :#{cmd_name}_, *opts, **kwargs, &b
|
||||||
end
|
end
|
||||||
], nil, __FILE__, line
|
], nil, __FILE__, line
|
||||||
else
|
else
|
||||||
|
@ -98,8 +98,7 @@ module IRB # :nodoc:
|
|||||||
puts "An error occurred when inspecting the object: #{e.inspect}"
|
puts "An error occurred when inspecting the object: #{e.inspect}"
|
||||||
|
|
||||||
begin
|
begin
|
||||||
# TODO: change this to bind_call when we drop support for Ruby 2.6
|
puts "Result of Kernel#inspect: #{KERNEL_INSPECT.bind_call(v)}"
|
||||||
puts "Result of Kernel#inspect: #{KERNEL_INSPECT.bind(v).call}"
|
|
||||||
''
|
''
|
||||||
rescue => e
|
rescue => e
|
||||||
puts "An error occurred when running Kernel#inspect: #{e.inspect}"
|
puts "An error occurred when running Kernel#inspect: #{e.inspect}"
|
||||||
|
@ -39,7 +39,7 @@ Gem::Specification.new do |spec|
|
|||||||
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
||||||
spec.require_paths = ["lib"]
|
spec.require_paths = ["lib"]
|
||||||
|
|
||||||
spec.required_ruby_version = Gem::Requirement.new(">= 2.6")
|
spec.required_ruby_version = Gem::Requirement.new(">= 2.7")
|
||||||
|
|
||||||
spec.add_dependency "reline", ">= 0.3.0"
|
spec.add_dependency "reline", ">= 0.3.0"
|
||||||
end
|
end
|
||||||
|
@ -148,19 +148,15 @@ class RubyLex
|
|||||||
|
|
||||||
compile_with_errors_suppressed(code, line_no: line_no) do |inner_code, line_no|
|
compile_with_errors_suppressed(code, line_no: line_no) do |inner_code, line_no|
|
||||||
lexer = Ripper::Lexer.new(inner_code, '-', line_no)
|
lexer = Ripper::Lexer.new(inner_code, '-', line_no)
|
||||||
if lexer.respond_to?(:scan) # Ruby 2.7+
|
lexer.scan.each_with_object([]) do |t, tokens|
|
||||||
lexer.scan.each_with_object([]) do |t, tokens|
|
next if t.pos.first == 0
|
||||||
next if t.pos.first == 0
|
prev_tk = tokens.last
|
||||||
prev_tk = tokens.last
|
position_overlapped = prev_tk && t.pos[0] == prev_tk.pos[0] && t.pos[1] < prev_tk.pos[1] + prev_tk.tok.bytesize
|
||||||
position_overlapped = prev_tk && t.pos[0] == prev_tk.pos[0] && t.pos[1] < prev_tk.pos[1] + prev_tk.tok.bytesize
|
if position_overlapped
|
||||||
if position_overlapped
|
tokens[-1] = t if ERROR_TOKENS.include?(prev_tk.event) && !ERROR_TOKENS.include?(t.event)
|
||||||
tokens[-1] = t if ERROR_TOKENS.include?(prev_tk.event) && !ERROR_TOKENS.include?(t.event)
|
else
|
||||||
else
|
tokens << t
|
||||||
tokens << t
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
else
|
|
||||||
lexer.parse.reject { |it| it.pos.first == 0 }.sort_by(&:pos)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
ensure
|
ensure
|
||||||
|
@ -855,9 +855,6 @@ module TestIRB
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_edit_with_constant
|
def test_edit_with_constant
|
||||||
# const_source_location is supported after Ruby 2.7
|
|
||||||
omit if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7.0')
|
|
||||||
|
|
||||||
out, err = execute_lines(
|
out, err = execute_lines(
|
||||||
"edit IRB::Irb"
|
"edit IRB::Irb"
|
||||||
)
|
)
|
||||||
|
@ -109,14 +109,11 @@ module TestIRB
|
|||||||
"<<A+1\nA" => "#{RED}<<A#{CLEAR}+#{BLUE}#{BOLD}1#{CLEAR}\n#{RED}A#{CLEAR}",
|
"<<A+1\nA" => "#{RED}<<A#{CLEAR}+#{BLUE}#{BOLD}1#{CLEAR}\n#{RED}A#{CLEAR}",
|
||||||
}
|
}
|
||||||
|
|
||||||
# specific to Ruby 2.7+
|
tests.merge!({
|
||||||
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.7.0')
|
"4.5.6" => "#{MAGENTA}#{BOLD}4.5#{CLEAR}#{RED}#{REVERSE}.6#{CLEAR}",
|
||||||
tests.merge!({
|
"\e[0m\n" => "#{RED}#{REVERSE}^[#{CLEAR}[#{BLUE}#{BOLD}0#{CLEAR}#{RED}#{REVERSE}m#{CLEAR}\n",
|
||||||
"4.5.6" => "#{MAGENTA}#{BOLD}4.5#{CLEAR}#{RED}#{REVERSE}.6#{CLEAR}",
|
"<<EOS\nhere\nEOS" => "#{RED}<<EOS#{CLEAR}\n#{RED}here#{CLEAR}\n#{RED}EOS#{CLEAR}",
|
||||||
"\e[0m\n" => "#{RED}#{REVERSE}^[#{CLEAR}[#{BLUE}#{BOLD}0#{CLEAR}#{RED}#{REVERSE}m#{CLEAR}\n",
|
})
|
||||||
"<<EOS\nhere\nEOS" => "#{RED}<<EOS#{CLEAR}\n#{RED}here#{CLEAR}\n#{RED}EOS#{CLEAR}",
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
# specific to Ruby 3.0+
|
# specific to Ruby 3.0+
|
||||||
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('3.0.0')
|
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('3.0.0')
|
||||||
@ -136,18 +133,9 @@ module TestIRB
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.7.0')
|
|
||||||
tests.merge!({
|
|
||||||
"[1]]]\u0013" => "[#{BLUE}#{BOLD}1#{CLEAR}]#{RED}#{REVERSE}]#{CLEAR}]^S",
|
|
||||||
"def req(true) end" => "#{GREEN}def#{CLEAR} #{BLUE}#{BOLD}req#{CLEAR}(#{RED}#{REVERSE}true#{CLEAR}) end",
|
|
||||||
})
|
|
||||||
else
|
|
||||||
tests.merge!({
|
|
||||||
"[1]]]\u0013" => "[#{BLUE}#{BOLD}1#{CLEAR}]]]^S",
|
|
||||||
"def req(true) end" => "#{GREEN}def#{CLEAR} #{BLUE}#{BOLD}req#{CLEAR}(#{CYAN}#{BOLD}true#{CLEAR}) end",
|
|
||||||
})
|
|
||||||
end
|
|
||||||
tests.merge!({
|
tests.merge!({
|
||||||
|
"[1]]]\u0013" => "[#{BLUE}#{BOLD}1#{CLEAR}]#{RED}#{REVERSE}]#{CLEAR}]^S",
|
||||||
|
"def req(true) end" => "#{GREEN}def#{CLEAR} #{BLUE}#{BOLD}req#{CLEAR}(#{RED}#{REVERSE}true#{CLEAR}) end",
|
||||||
"nil = 1" => "#{CYAN}#{BOLD}nil#{CLEAR} = #{BLUE}#{BOLD}1#{CLEAR}",
|
"nil = 1" => "#{CYAN}#{BOLD}nil#{CLEAR} = #{BLUE}#{BOLD}1#{CLEAR}",
|
||||||
"alias $x $1" => "#{GREEN}alias#{CLEAR} #{GREEN}#{BOLD}$x#{CLEAR} $1",
|
"alias $x $1" => "#{GREEN}alias#{CLEAR} #{GREEN}#{BOLD}$x#{CLEAR} $1",
|
||||||
"class bad; end" => "#{GREEN}class#{CLEAR} bad; #{GREEN}end#{CLEAR}",
|
"class bad; end" => "#{GREEN}class#{CLEAR} bad; #{GREEN}end#{CLEAR}",
|
||||||
@ -184,10 +172,6 @@ module TestIRB
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_colorize_code_complete_true
|
def test_colorize_code_complete_true
|
||||||
unless complete_option_supported?
|
|
||||||
pend '`complete: true` is the same as `complete: false` in Ruby 2.6-'
|
|
||||||
end
|
|
||||||
|
|
||||||
# `complete: true` behaviors. Warn end-of-file.
|
# `complete: true` behaviors. Warn end-of-file.
|
||||||
{
|
{
|
||||||
"'foo' + 'bar" => "#{RED}#{BOLD}'#{CLEAR}#{RED}foo#{CLEAR}#{RED}#{BOLD}'#{CLEAR} + #{RED}#{BOLD}'#{CLEAR}#{RED}#{REVERSE}bar#{CLEAR}",
|
"'foo' + 'bar" => "#{RED}#{BOLD}'#{CLEAR}#{RED}foo#{CLEAR}#{RED}#{BOLD}'#{CLEAR} + #{RED}#{BOLD}'#{CLEAR}#{RED}#{REVERSE}bar#{CLEAR}",
|
||||||
@ -216,16 +200,6 @@ module TestIRB
|
|||||||
assert_equal_with_term(code, code, complete: false, colorable: false)
|
assert_equal_with_term(code, code, complete: false, colorable: false)
|
||||||
|
|
||||||
assert_equal_with_term(result, code, complete: false, tty: false, colorable: true)
|
assert_equal_with_term(result, code, complete: false, tty: false, colorable: true)
|
||||||
|
|
||||||
unless complete_option_supported?
|
|
||||||
assert_equal_with_term(result, code, complete: true)
|
|
||||||
|
|
||||||
assert_equal_with_term(code, code, complete: true, tty: false)
|
|
||||||
|
|
||||||
assert_equal_with_term(code, code, complete: true, colorable: false)
|
|
||||||
|
|
||||||
assert_equal_with_term(result, code, complete: true, tty: false, colorable: true)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -251,11 +225,6 @@ module TestIRB
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
# `complete: true` is the same as `complete: false` in Ruby 2.6-
|
|
||||||
def complete_option_supported?
|
|
||||||
Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.7.0')
|
|
||||||
end
|
|
||||||
|
|
||||||
def with_term(tty: true)
|
def with_term(tty: true)
|
||||||
stdout = $stdout
|
stdout = $stdout
|
||||||
io = StringIO.new
|
io = StringIO.new
|
||||||
|
@ -38,9 +38,6 @@ module TestIRB
|
|||||||
IRBTestColorPrinter = Struct.new(:a)
|
IRBTestColorPrinter = Struct.new(:a)
|
||||||
|
|
||||||
def test_color_printer
|
def test_color_printer
|
||||||
unless ripper_lexer_scan_supported?
|
|
||||||
pend 'Ripper::Lexer#scan is supported in Ruby 2.7+'
|
|
||||||
end
|
|
||||||
{
|
{
|
||||||
1 => "#{BLUE}#{BOLD}1#{CLEAR}\n",
|
1 => "#{BLUE}#{BOLD}1#{CLEAR}\n",
|
||||||
"a\nb" => %[#{RED}#{BOLD}"#{CLEAR}#{RED}a\\nb#{CLEAR}#{RED}#{BOLD}"#{CLEAR}\n],
|
"a\nb" => %[#{RED}#{BOLD}"#{CLEAR}#{RED}a\\nb#{CLEAR}#{RED}#{BOLD}"#{CLEAR}\n],
|
||||||
@ -55,10 +52,6 @@ module TestIRB
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def ripper_lexer_scan_supported?
|
|
||||||
Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.7.0')
|
|
||||||
end
|
|
||||||
|
|
||||||
def with_term
|
def with_term
|
||||||
stdout = $stdout
|
stdout = $stdout
|
||||||
io = StringIO.new
|
io = StringIO.new
|
||||||
|
@ -185,7 +185,6 @@ module TestIRB
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_object_inspection_prints_useful_info_when_kernel_inspect_also_errored
|
def test_object_inspection_prints_useful_info_when_kernel_inspect_also_errored
|
||||||
omit if RUBY_VERSION < '2.7'
|
|
||||||
verbose, $VERBOSE = $VERBOSE, nil
|
verbose, $VERBOSE = $VERBOSE, nil
|
||||||
main = Object.new
|
main = Object.new
|
||||||
main.singleton_class.module_eval <<~RUBY
|
main.singleton_class.module_eval <<~RUBY
|
||||||
|
@ -613,9 +613,6 @@ module TestIRB
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_broken_heredoc
|
def test_broken_heredoc
|
||||||
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7.0')
|
|
||||||
pend 'This test needs Ripper::Lexer#scan to take broken tokens'
|
|
||||||
end
|
|
||||||
input_with_correct_indents = [
|
input_with_correct_indents = [
|
||||||
Row.new(%q(def foo), nil, 2, 1),
|
Row.new(%q(def foo), nil, 2, 1),
|
||||||
Row.new(%q( <<~Q), 2, 2, 1),
|
Row.new(%q( <<~Q), 2, 2, 1),
|
||||||
@ -721,10 +718,6 @@ module TestIRB
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_broken_percent_literal
|
def test_broken_percent_literal
|
||||||
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7.0')
|
|
||||||
pend 'This test needs Ripper::Lexer#scan to take broken tokens'
|
|
||||||
end
|
|
||||||
|
|
||||||
tokens = RubyLex.ripper_lex_without_warning('%wwww')
|
tokens = RubyLex.ripper_lex_without_warning('%wwww')
|
||||||
pos_to_index = {}
|
pos_to_index = {}
|
||||||
tokens.each_with_index { |t, i|
|
tokens.each_with_index { |t, i|
|
||||||
@ -734,10 +727,6 @@ module TestIRB
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_broken_percent_literal_in_method
|
def test_broken_percent_literal_in_method
|
||||||
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7.0')
|
|
||||||
pend 'This test needs Ripper::Lexer#scan to take broken tokens'
|
|
||||||
end
|
|
||||||
|
|
||||||
tokens = RubyLex.ripper_lex_without_warning(<<~EOC.chomp)
|
tokens = RubyLex.ripper_lex_without_warning(<<~EOC.chomp)
|
||||||
def foo
|
def foo
|
||||||
%wwww
|
%wwww
|
||||||
@ -751,10 +740,6 @@ module TestIRB
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_unterminated_code
|
def test_unterminated_code
|
||||||
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7.0')
|
|
||||||
pend 'This test needs Ripper::Lexer#scan to take broken tokens'
|
|
||||||
end
|
|
||||||
|
|
||||||
['do', '<<A'].each do |code|
|
['do', '<<A'].each do |code|
|
||||||
tokens = RubyLex.ripper_lex_without_warning(code)
|
tokens = RubyLex.ripper_lex_without_warning(code)
|
||||||
assert_equal(code, tokens.map(&:tok).join, "Cannot reconstruct code from tokens")
|
assert_equal(code, tokens.map(&:tok).join, "Cannot reconstruct code from tokens")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user