класс Prism::ParseResult::Newlines
Событие точки трассировки :line срабатывает каждый раз, когда виртуальная машина Ruby встречает выражение на новой строке. Типы выражений, которые могут вызвать это событие:
-
операторы if
-
операторы unless
-
узлы, являющиеся дочерними элементами списков операторов
Чтобы отслеживать новые строки, мы используем список смещений, возвращаемых парсером. Мы назначаем эти смещения первым узлам дерева, которые находятся на соответствующих строках.
Обратите внимание, что логика в этом файле должна синхронизироваться с Java-классом MarkNewlinesVisitor, поскольку этот посетитель отвечает за пометку новых строк для JRuby/TruffleRuby.
Этот файл загружается автоматически только при вызове mark_newlines!, поэтому повторное открытие различных узлов в этом файле будет выполняться только в этом случае. Это позволяет не хранить дополнительную переменную экземпляра @newline в каждом узле, если она не нужна.
Публичные методы класса
# File lib/prism/parse_result/newlines.rb, line 28 def initialize(lines) # @type var lines: Integer @lines = Array.new(1 + lines, false) end
Создаёт новый посетитель Newlines с заданными смещениями новых строк.
Публичные методы экземпляра
# File lib/prism/parse_result/newlines.rb, line 34
def visit_block_node(node)
old_lines = @lines
@lines = Array.new(old_lines.size, false)
begin
super(node)
ensure
@lines = old_lines
end
end Позволяет узлам блоков/лямбд помечать новые строки внутри себя.
# File lib/prism/parse_result/newlines.rb, line 48 def visit_if_node(node) node.newline_flag!(@lines) super(node) end
Помечает узлы if/unless как новые строки.
# File lib/prism/parse_result/newlines.rb, line 56
def visit_statements_node(node)
node.body.each do |child|
child.newline_flag!(@lines)
end
super(node)
end Позволяет спискам операторов помечать новые строки внутри себя.
Ruby Core © 1993–2025 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.