[ruby/prism] Add character APIs for locations

(https://github.com/ruby/prism/pull/1809)

d493ccd093
This commit is contained in:
Kevin Newton 2023-11-20 11:07:02 -05:00 committed by git
parent adee7dab3e
commit f2ed7eaba0
4 changed files with 83 additions and 23 deletions

View file

@ -71,6 +71,38 @@ module Prism
end
end
def test_location_character_offsets
program = Prism.parse("😀 + 😀\n😍 ||= 😍").value
# first 😀
location = program.statements.body.first.receiver.location
assert_equal 0, location.start_character_offset
assert_equal 1, location.end_character_offset
assert_equal 0, location.start_character_column
assert_equal 1, location.end_character_column
# second 😀
location = program.statements.body.first.arguments.arguments.first.location
assert_equal 4, location.start_character_offset
assert_equal 5, location.end_character_offset
assert_equal 4, location.start_character_column
assert_equal 5, location.end_character_column
# first 😍
location = program.statements.body.last.name_loc
assert_equal 6, location.start_character_offset
assert_equal 7, location.end_character_offset
assert_equal 0, location.start_character_column
assert_equal 1, location.end_character_column
# second 😍
location = program.statements.body.last.value.location
assert_equal 12, location.start_character_offset
assert_equal 13, location.end_character_offset
assert_equal 6, location.start_character_column
assert_equal 7, location.end_character_column
end
private
def parse_expression(source)