Actions
Bug #16675
closedRegression on Ripper in Ruby 2.7 when parsing new line
Description
Hello
While using migrating RSpec documentation to last Yard. I noticed an issue in code parsing and Ripper. The regression appears on Ruby 2.7 and Head.
require 'pp'
require 'ripper'
SOURCE = "def name\n # comment\nend"
class RipperParser < Ripper
attr_accessor :tokens
SCANNER_EVENTS.each do |event|
define_method("on_#{event}") do |*args|
puts "TOKEN: #{event}"
(@tokens ||= []) << [event, args]
super(*args)
end
end
end
parser = RipperParser.new(SOURCE, '(stdin)')
puts "PARSING:"
parser.parse
puts "\nTOKENS:"
pp parser.tokens
puts "\nRIPPER SAYS"
pp Ripper.lex(SOURCE)
--- a/2-6-3_ripper_lex.txt
+++ b/2-7-0_ripper_lex.txt
@@ -1,27 +1,27 @@
->> RUBY_VERSION: 2.6.3
+>> RUBY_VERSION: 2.7.0
PARSING:
TOKEN: kw
TOKEN: sp
TOKEN: ident
-TOKEN: nl
TOKEN: sp
TOKEN: comment
+TOKEN: nl
TOKEN: kw
TOKENS:
[[:kw, ["def"]],
[:sp, [" "]],
[:ident, ["name"]],
- [:nl, ["\n"]],
[:sp, [" "]],
[:comment, ["# comment\n"]],
+ [:nl, ["\n"]],
[:kw, ["end"]]]
RIPPER SAYS
-[[[1, 0], :on_kw, "def", EXPR_FNAME],
- [[1, 3], :on_sp, " ", EXPR_FNAME],
- [[1, 4], :on_ident, "name", EXPR_ENDFN],
- [[1, 8], :on_nl, "\n", EXPR_BEG],
- [[2, 0], :on_sp, " ", EXPR_BEG],
- [[2, 2], :on_comment, "# comment\n", EXPR_BEG],
- [[3, 0], :on_kw, "end", EXPR_END]]
+[[[1, 0], :on_kw, "def", FNAME],
+ [[1, 3], :on_sp, " ", FNAME],
+ [[1, 4], :on_ident, "name", ENDFN],
+ [[1, 8], :on_nl, "\n", BEG],
+ [[2, 0], :on_sp, " ", ENDFN],
+ [[2, 2], :on_comment, "# comment\n", ENDFN],
+ [[3, 0], :on_kw, "end", END]]
As Loren Segal mentionned
Note that "comment" is detected before "nl" in both the event and the collected tokens, which is different from the results in Ripper.lex
Actions
Like0
Like0Like0Like0Like0Like0Like0