класс Prism::Source
Представляет собой источник кода Ruby, который был проанализирован. Используется совместно с местоположениями для разрешения номеров строк и диапазонов исходного кода.
Атрибуты
Список смещений байтов новой строки в исходном коде.
Исходный код, который представляет этот объект источника.
Номер строки, с которой начинается этот источник.
Публичные методы класса
# File lib/prism/parse_result.rb, line 20 def initialize(source, start_line = 1, offsets = compute_offsets(source)) @source = source @start_line = start_line @offsets = offsets end
Создать новый объект источника с заданным исходным кодом и смещениями байтов новой строки. Если смещения байтов новой строки не указаны, они будут вычислены из исходного кода.
Публичные методы экземпляра
# File lib/prism/parse_result.rb, line 55 def character_column(byte_offset) character_offset(byte_offset) - character_offset(line_start(byte_offset)) end
Возвращает номер столбца в символах для заданного смещения байта.
# File lib/prism/parse_result.rb, line 50 def character_offset(byte_offset) source.byteslice(0, byte_offset).length end
Возвращает смещение символа для заданного смещения байта.
# File lib/prism/parse_result.rb, line 45 def column(byte_offset) byte_offset - line_start(byte_offset) end
Возвращает номер столбца для заданного смещения байта.
# File lib/prism/parse_result.rb, line 34 def line(byte_offset) start_line + find_line(byte_offset) end
Бинарный поиск по смещениям для поиска номера строки для заданного смещения байта.
# File lib/prism/parse_result.rb, line 40 def line_start(byte_offset) offsets[find_line(byte_offset)] end
Возвращает смещение байта начала строки, соответствующей заданному смещению байта.
# File lib/prism/parse_result.rb, line 28 def slice(byte_offset, length) source.byteslice(byte_offset, length) end
Выполнить byteslice исходного кода с помощью заданного смещения байта и длины байта.
Приватные методы экземпляра
# File lib/prism/parse_result.rb, line 83
def compute_offsets(code)
offsets = [0]
code.b.scan("\n") { offsets << $~.end(0) }
offsets
end Find все символы новой строки в исходном коде и возвращает их смещения байтов от начала строки в виде массива.
# File lib/prism/parse_result.rb, line 63
def find_line(byte_offset)
left = 0
right = offsets.length - 1
while left <= right
mid = left + (right - left) / 2
return mid if offsets[mid] == byte_offset
if offsets[mid] < byte_offset
left = mid + 1
else
right = mid - 1
end
end
left - 1
end Бинарный поиск по смещениям для поиска номера строки для заданного смещения байта.
Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.