mirror of
https://github.com/ruby/ruby.git
synced 2025-08-27 15:06:10 +02:00
[ruby/prism] Add code unit APIs to location
LSPs need this because the protocol dictates that you return code
units for offsets. None of our existing APIs provided that
information, and since we hid the source it's not nearly as useful
for them. Now they can pass an encoding directly to:
* Location#start_code_units_offset
* Location#end_code_units_offset
* Location#start_code_units_column
* Location#end_code_units_column
4757a2cc06
Co-Authored-By: Vinicius Stock <vinicius.stock@shopify.com>
This commit is contained in:
parent
6261d4b4d8
commit
b1964a9204
2 changed files with 119 additions and 0 deletions
|
@ -116,6 +116,86 @@ module Prism
|
|||
assert_equal 7, location.end_character_column
|
||||
end
|
||||
|
||||
def test_location_code_units
|
||||
program = Prism.parse("😀 + 😀\n😍 ||= 😍").value
|
||||
|
||||
# first 😀
|
||||
location = program.statements.body.first.receiver.location
|
||||
|
||||
assert_equal 0, location.start_code_units_offset(Encoding::UTF_8)
|
||||
assert_equal 0, location.start_code_units_offset(Encoding::UTF_16LE)
|
||||
assert_equal 0, location.start_code_units_offset(Encoding::UTF_32LE)
|
||||
|
||||
assert_equal 1, location.end_code_units_offset(Encoding::UTF_8)
|
||||
assert_equal 2, location.end_code_units_offset(Encoding::UTF_16LE)
|
||||
assert_equal 1, location.end_code_units_offset(Encoding::UTF_32LE)
|
||||
|
||||
assert_equal 0, location.start_code_units_column(Encoding::UTF_8)
|
||||
assert_equal 0, location.start_code_units_column(Encoding::UTF_16LE)
|
||||
assert_equal 0, location.start_code_units_column(Encoding::UTF_32LE)
|
||||
|
||||
assert_equal 1, location.end_code_units_column(Encoding::UTF_8)
|
||||
assert_equal 2, location.end_code_units_column(Encoding::UTF_16LE)
|
||||
assert_equal 1, location.end_code_units_column(Encoding::UTF_32LE)
|
||||
|
||||
# second 😀
|
||||
location = program.statements.body.first.arguments.arguments.first.location
|
||||
|
||||
assert_equal 4, location.start_code_units_offset(Encoding::UTF_8)
|
||||
assert_equal 5, location.start_code_units_offset(Encoding::UTF_16LE)
|
||||
assert_equal 4, location.start_code_units_offset(Encoding::UTF_32LE)
|
||||
|
||||
assert_equal 5, location.end_code_units_offset(Encoding::UTF_8)
|
||||
assert_equal 7, location.end_code_units_offset(Encoding::UTF_16LE)
|
||||
assert_equal 5, location.end_code_units_offset(Encoding::UTF_32LE)
|
||||
|
||||
assert_equal 4, location.start_code_units_column(Encoding::UTF_8)
|
||||
assert_equal 5, location.start_code_units_column(Encoding::UTF_16LE)
|
||||
assert_equal 4, location.start_code_units_column(Encoding::UTF_32LE)
|
||||
|
||||
assert_equal 5, location.end_code_units_column(Encoding::UTF_8)
|
||||
assert_equal 7, location.end_code_units_column(Encoding::UTF_16LE)
|
||||
assert_equal 5, location.end_code_units_column(Encoding::UTF_32LE)
|
||||
|
||||
# first 😍
|
||||
location = program.statements.body.last.name_loc
|
||||
|
||||
assert_equal 6, location.start_code_units_offset(Encoding::UTF_8)
|
||||
assert_equal 8, location.start_code_units_offset(Encoding::UTF_16LE)
|
||||
assert_equal 6, location.start_code_units_offset(Encoding::UTF_32LE)
|
||||
|
||||
assert_equal 7, location.end_code_units_offset(Encoding::UTF_8)
|
||||
assert_equal 10, location.end_code_units_offset(Encoding::UTF_16LE)
|
||||
assert_equal 7, location.end_code_units_offset(Encoding::UTF_32LE)
|
||||
|
||||
assert_equal 0, location.start_code_units_column(Encoding::UTF_8)
|
||||
assert_equal 0, location.start_code_units_column(Encoding::UTF_16LE)
|
||||
assert_equal 0, location.start_code_units_column(Encoding::UTF_32LE)
|
||||
|
||||
assert_equal 1, location.end_code_units_column(Encoding::UTF_8)
|
||||
assert_equal 2, location.end_code_units_column(Encoding::UTF_16LE)
|
||||
assert_equal 1, location.end_code_units_column(Encoding::UTF_32LE)
|
||||
|
||||
# second 😍
|
||||
location = program.statements.body.last.value.location
|
||||
|
||||
assert_equal 12, location.start_code_units_offset(Encoding::UTF_8)
|
||||
assert_equal 15, location.start_code_units_offset(Encoding::UTF_16LE)
|
||||
assert_equal 12, location.start_code_units_offset(Encoding::UTF_32LE)
|
||||
|
||||
assert_equal 13, location.end_code_units_offset(Encoding::UTF_8)
|
||||
assert_equal 17, location.end_code_units_offset(Encoding::UTF_16LE)
|
||||
assert_equal 13, location.end_code_units_offset(Encoding::UTF_32LE)
|
||||
|
||||
assert_equal 6, location.start_code_units_column(Encoding::UTF_8)
|
||||
assert_equal 7, location.start_code_units_column(Encoding::UTF_16LE)
|
||||
assert_equal 6, location.start_code_units_column(Encoding::UTF_32LE)
|
||||
|
||||
assert_equal 7, location.end_code_units_column(Encoding::UTF_8)
|
||||
assert_equal 9, location.end_code_units_column(Encoding::UTF_16LE)
|
||||
assert_equal 7, location.end_code_units_column(Encoding::UTF_32LE)
|
||||
end
|
||||
|
||||
def test_heredoc?
|
||||
refute parse_expression("\"foo\"").heredoc?
|
||||
refute parse_expression("\"foo \#{1}\"").heredoc?
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue