класс Prism::ParseResult::Newlines
Событие :line tracepoint срабатывает всякий раз, когда интерпретатор Ruby сталкивается с выражением на новой строке. Виды выражений, которые могут вызвать это событие:
-
условные операторы if
-
условные операторы unless
-
узлы, являющиеся дочерними узлами списков операторов
Для отслеживания новых строк у нас есть список смещений, возвращаемых парсером. Эти смещения присваиваются первым узлам в дереве, которые находятся на этих строках.
Обратите внимание, что логика в этом файле должна быть согласована с Java MarkNewlinesVisitor, поскольку этот посетитель отвечает за маркировку новых строк для JRuby/TruffleRuby.
Этот файл загружается автоматически только при вызове «mark_newlines!», поэтому повторное открытие различных узлов в этом файле будет выполняться только в этом случае. Это делается для того, чтобы не хранить дополнительную переменную экземпляра `@newline` в каждом узле, если она не нужна.
Публичные методы класса
Исходный код
# File lib/prism/parse_result/newlines.rb, line 27 def initialize(lines) # @type var lines: Integer @lines = Array.new(1 + lines, false) end
Создает нового посетителя Newlines с заданными смещениями новых строк.
Публичные методы экземпляра
Исходный код
# File lib/prism/parse_result/newlines.rb, line 33
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 47 def visit_if_node(node) node.newline_flag!(@lines) super(node) end
Помечать узлы if/unless как новые строки.
Исходный код
# File lib/prism/parse_result/newlines.rb, line 55
def visit_statements_node(node)
node.body.each do |child|
child.newline_flag!(@lines)
end
super(node)
end Разрешить спискам операторов маркировать новые строки внутри себя.
Ruby Core © 1993–2024 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.