[ruby/prism] Handle chomped bytesize with lines without newlines
https://github.com/ruby/prism/commit/1528d3c019
This commit is contained in:
parent
94e059797a
commit
41a36b6853
@ -2040,6 +2040,13 @@ module Prism
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# The parser gem automatically converts \r\n to \n, meaning our offsets
|
||||||
|
# need to be adjusted to always subtract 1 from the length.
|
||||||
|
def chomped_bytesize(line)
|
||||||
|
chomped = line.chomp
|
||||||
|
chomped.bytesize + (chomped == line ? 0 : 1)
|
||||||
|
end
|
||||||
|
|
||||||
# Visit a heredoc that can be either a string or an xstring.
|
# Visit a heredoc that can be either a string or an xstring.
|
||||||
def visit_heredoc(node)
|
def visit_heredoc(node)
|
||||||
children = Array.new
|
children = Array.new
|
||||||
@ -2066,14 +2073,14 @@ module Prism
|
|||||||
if node.opening.end_with?("'")
|
if node.opening.end_with?("'")
|
||||||
escaped.each do |line|
|
escaped.each do |line|
|
||||||
escaped_lengths << line.bytesize
|
escaped_lengths << line.bytesize
|
||||||
normalized_lengths << (line.chomp.bytesize + 1)
|
normalized_lengths << chomped_bytesize(line)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
escaped
|
escaped
|
||||||
.chunk_while { |before, after| before.match?(/(?<!\\)\\\r?\n$/) }
|
.chunk_while { |before, after| before.match?(/(?<!\\)\\\r?\n$/) }
|
||||||
.each do |lines|
|
.each do |lines|
|
||||||
escaped_lengths << lines.sum(&:bytesize)
|
escaped_lengths << lines.sum(&:bytesize)
|
||||||
normalized_lengths << lines.sum { |line| line.chomp.bytesize + 1 }
|
normalized_lengths << lines.sum { |line| chomped_bytesize(line) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -59,7 +59,6 @@ module Prism
|
|||||||
# These files are either failing to parse or failing to translate, so we'll
|
# These files are either failing to parse or failing to translate, so we'll
|
||||||
# skip them for now.
|
# skip them for now.
|
||||||
skip_all = skip_incorrect | [
|
skip_all = skip_incorrect | [
|
||||||
"dash_heredocs.txt",
|
|
||||||
"regex.txt",
|
"regex.txt",
|
||||||
"regex_char_width.txt",
|
"regex_char_width.txt",
|
||||||
"unescaping.txt",
|
"unescaping.txt",
|
||||||
@ -86,6 +85,7 @@ module Prism
|
|||||||
# output expected by the parser gem, so we'll skip them for now.
|
# output expected by the parser gem, so we'll skip them for now.
|
||||||
skip_tokens = [
|
skip_tokens = [
|
||||||
"comments.txt",
|
"comments.txt",
|
||||||
|
"dash_heredocs.txt",
|
||||||
"dos_endings.txt",
|
"dos_endings.txt",
|
||||||
"embdoc_no_newline_at_end.txt",
|
"embdoc_no_newline_at_end.txt",
|
||||||
"heredoc_with_comment.txt",
|
"heredoc_with_comment.txt",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user