class Prism::ParseResult::Newlines
Событие :line tracepoint срабатывает всякий раз, когда виртуальная машина Ruby встречает выражение на новой строке. Типы выражений, которые могут вызвать это событие:
-
операторы if
-
операторы unless
-
узлы, являющиеся дочерними узлами списков операторов
Для отслеживания новых строк у нас есть список смещений, возвращаемых парсером. Мы присваиваем эти смещения первым узлам, которые мы находим в дереве на этих строках.
Обратите внимание, что логика в этом файле должна синхронизироваться с Java MarkNewlinesVisitor, так как этот посетитель отвечает за маркировку новых строк для JRuby/TruffleRuby.
Публичные методы класса
# File lib/prism/parse_result/newlines.rb, line 22 def initialize(newline_marked) @newline_marked = newline_marked end
Создать нового посетителя Newlines с заданными смещениями новых строк.
Публичные методы экземпляра
# File lib/prism/parse_result/newlines.rb, line 27
def visit_block_node(node)
old_newline_marked = @newline_marked
@newline_marked = Array.new(old_newline_marked.size, false)
begin
super(node)
ensure
@newline_marked = old_newline_marked
end
end Разрешить узлам блоков/лямбда-выражений помечать новые строки внутри себя.
# File lib/prism/parse_result/newlines.rb, line 41 def visit_if_node(node) node.set_newline_flag(@newline_marked) super(node) end
Помечать узлы if/unless как новые строки.
# File lib/prism/parse_result/newlines.rb, line 49
def visit_statements_node(node)
node.body.each do |child|
child.set_newline_flag(@newline_marked)
end
super(node)
end Разрешить спискам операторов помечать новые строки внутри себя.
Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.