🔖

[Bug #21202] ヒアドキュメントがネストしている場合に Ripper で正しくパースされないバグ報告

に公開

[Bug #21202] Ripper wrongly concats separate tstring_content within nested unterminated heredoc

  • 次のようにヒアドキュメントがネストしている場合に Ripper で正しく token がパースされないというバグ報告
require "ripper"

code = <<~'CODE'
  <<H1
  #{<<H2}a
  H2
  b
CODE

# 本来は "a\nb\n" は別々の token になってほしいがそうなっていない
p Ripper.tokenize(code)
# => ["<<H1", "\n", "\#{", "<<H2", "}", "a\nb\n", "H2\n"]
  • この不具合は開発版の Ruby 3.5-dev で修正済み
require "ripper"

code = <<~'CODE'
  <<H1
  #{<<H2}a
  H2
  b
CODE

p Ripper.tokenize(code)
# Ruby 3.4 => ["<<H1", "\n", "\#{", "<<H2", "}", "a\nb\n", "H2\n"]
# Ruby 3.3 => ["<<H1", "\n", "\#{", "<<H2", "}", "a\n", "H2\n", "b\n"]
GitHubで編集を提案

Discussion