Spec-Zone.ru › Ruby 3.3

класс Prism::Source

Родитель:
Объект

Представляет собой источник кода Ruby, который был проанализирован. Используется совместно с местоположениями для разрешения номеров строк и диапазонов исходного кода.

Атрибуты

offsets[R]

Список смещений байтов новой строки в исходном коде.

source[R]

Исходный код, который представляет этот объект источника.

start_line[RW]

Номер строки, с которой начинается этот источник.

Публичные методы класса

new(source, start_line = 1, offsets = compute_offsets(source)) Показать исходный код
# 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

Создать новый объект источника с заданным исходным кодом и смещениями байтов новой строки. Если смещения байтов новой строки не указаны, они будут вычислены из исходного кода.

Публичные методы экземпляра

character_column(byte_offset) Показать исходный код
# File lib/prism/parse_result.rb, line 55
def character_column(byte_offset)
  character_offset(byte_offset) - character_offset(line_start(byte_offset))
end

Возвращает номер столбца в символах для заданного смещения байта.

character_offset(byte_offset) Показать исходный код
# File lib/prism/parse_result.rb, line 50
def character_offset(byte_offset)
  source.byteslice(0, byte_offset).length
end

Возвращает смещение символа для заданного смещения байта.

column(byte_offset) Показать исходный код
# File lib/prism/parse_result.rb, line 45
def column(byte_offset)
  byte_offset - line_start(byte_offset)
end

Возвращает номер столбца для заданного смещения байта.

line(byte_offset) Показать исходный код
# File lib/prism/parse_result.rb, line 34
def line(byte_offset)
  start_line + find_line(byte_offset)
end

Бинарный поиск по смещениям для поиска номера строки для заданного смещения байта.

line_start(byte_offset) Показать исходный код
# File lib/prism/parse_result.rb, line 40
def line_start(byte_offset)
  offsets[find_line(byte_offset)]
end

Возвращает смещение байта начала строки, соответствующей заданному смещению байта.

slice(byte_offset, length) Показать исходный код
# File lib/prism/parse_result.rb, line 28
def slice(byte_offset, length)
  source.byteslice(byte_offset, length)
end

Выполнить byteslice исходного кода с помощью заданного смещения байта и длины байта.

Приватные методы экземпляра

compute_offsets(code) Показать исходный код
# File lib/prism/parse_result.rb, line 83
def compute_offsets(code)
  offsets = [0]
  code.b.scan("\n") { offsets << $~.end(0) }
  offsets
end

Find все символы новой строки в исходном коде и возвращает их смещения байтов от начала строки в виде массива.

find_line(byte_offset) Показать исходный код
# 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API