зеркало из https://github.com/github/ruby.git
ast.rb: Fix bug for source of multibyte characters
first_column and last_column return byte positions, but existing implementations did not consider multibyte.
This commit is contained in:
Родитель
d896269068
Коммит
8ed733f8f2
4
ast.rb
4
ast.rb
|
@ -265,8 +265,8 @@ module RubyVM::AbstractSyntaxTree
|
||||||
lines = script_lines
|
lines = script_lines
|
||||||
if lines
|
if lines
|
||||||
lines = lines[first_lineno - 1 .. last_lineno - 1]
|
lines = lines[first_lineno - 1 .. last_lineno - 1]
|
||||||
lines[-1] = lines[-1][0...last_column]
|
lines[-1] = lines[-1].byteslice(0...last_column)
|
||||||
lines[0] = lines[0][first_column..-1]
|
lines[0] = lines[0].byteslice(first_column..-1)
|
||||||
lines.join
|
lines.join
|
||||||
else
|
else
|
||||||
nil
|
nil
|
||||||
|
|
|
@ -746,6 +746,14 @@ dummy
|
||||||
assert_equal("def test_keep_script_lines_for_of\n", node_method.source.lines.first)
|
assert_equal("def test_keep_script_lines_for_of\n", node_method.source.lines.first)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_source_with_multibyte_characters
|
||||||
|
ast = RubyVM::AbstractSyntaxTree.parse(%{a("\u00a7");b("\u00a9")}, keep_script_lines: true)
|
||||||
|
a_fcall, b_fcall = ast.children[2].children
|
||||||
|
|
||||||
|
assert_equal(%{a("\u00a7")}, a_fcall.source)
|
||||||
|
assert_equal(%{b("\u00a9")}, b_fcall.source)
|
||||||
|
end
|
||||||
|
|
||||||
def test_keep_tokens_for_parse
|
def test_keep_tokens_for_parse
|
||||||
node = RubyVM::AbstractSyntaxTree.parse(<<~END, keep_tokens: true)
|
node = RubyVM::AbstractSyntaxTree.parse(<<~END, keep_tokens: true)
|
||||||
1.times do
|
1.times do
|
||||||
|
|
Загрузка…
Ссылка в новой задаче