class Prism::ParseResult::Newlines
Das `:line` Tracepoint-Ereignis wird jedes Mal ausgelöst, wenn die Ruby VM einen Ausdruck in einer neuen Zeile erkennt. Die Arten von Ausdrücken, die dieses Ereignis auslösen können, sind:
-
if statements
-
unless statements
-
Knoten, die Kinder von Anweisungslisten sind
Um die Zeilenumbrüche im Auge zu behalten, haben wir eine Liste von Offsets, die vom Parser zurückgegeben werden. Wir weisen diese Offsets den ersten Knoten zu, die wir im Baum finden und die sich in diesen Zeilen befinden.
Beachten Sie, dass die Logik in dieser Datei mit dem Java MarkNewlinesVisitor synchron gehalten werden sollte, da dieser Visitor für das Markieren der Zeilenumbrüche für JRuby/TruffleRuby verantwortlich ist.
Diese Datei wird nur dann automatisch geladen, wenn mark_newlines! aufgerufen wird. Die Neueröffnung der verschiedenen Knoten in dieser Datei wird also nur in diesem Fall durchgeführt. Wir tun dies, um die zusätzliche Instanzvariable @newline auf jedem Knoten zu vermeiden, wenn wir sie nicht benötigen.
Öffentliche Klassenmethoden
Source
# File lib/prism/parse_result/newlines.rb, line 28 def initialize(lines) # @type var lines: Integer @lines = Array.new(1 + lines, false) end
Erzeugt einen neuen Newlines Visitor mit den gegebenen Zeilenumbruch-Offsets.
Öffentliche Instanzmethoden
Source
# 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
Ermöglicht Block/Lambda-Knoten, Zeilenumbrüche in sich selbst zu markieren.
Source
# File lib/prism/parse_result/newlines.rb, line 48 def visit_if_node(node) node.newline_flag!(@lines) super(node) end
Markiert if/unless-Knoten als Zeilenumbrüche.
Source
# 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
Ermöglicht Anweisungslisten, Zeilenumbrüche in sich selbst zu markieren.