From: nobu@... Date: 2020-03-06T04:43:54+00:00 Subject: [ruby-core:97375] [Ruby master Bug#16675] Regression on Ripper in Ruby 2.7 when parsing new line Issue #16675 has been updated by nobu (Nobuyoshi Nakada). Status changed from Open to Closed This is because comment lines can be placed between fluent dot. That means it is undecidable if a newline before a comment line is ignored until comment lines end. ---------------------------------------- Bug #16675: Regression on Ripper in Ruby 2.7 when parsing new line https://bugs.ruby-lang.org/issues/16675#change-84499 * Author: Benoit_Tigeot (Benoit Tigeot) * Status: Closed * Priority: Normal * ruby -v: 2.7 * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN ---------------------------------------- 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. ``` ruby 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) ``` ```diff --- 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](https://github.com/lsegal/yard/issues/1313#issuecomment-595458928) > Note that "comment" is detected before "nl" in both the event and the collected tokens, which is different from the results in Ripper.lex -- https://bugs.ruby-lang.org/ Unsubscribe: