class Prism::ParseResult::Newlines
当 Ruby VM 遇到新行上的表达式时,会触发 :line tracepoint 事件。可以触发此事件的表达式类型是
-
if 语句
-
unless 语句
-
语句列表的子节点
为了跟踪换行符,我们有一个来自解析器的偏移量列表。我们将这些偏移量分配给我们在树中找到的位于这些行的第一个节点。
请注意,此文件中的逻辑应与 Java MarkNewlinesVisitor 保持同步,因为该访问者负责为 JRuby/TruffleRuby 标记换行符。
此文件仅在调用 mark_newlines! 时自动加载,因此此文件中各种节点的重新打开仅在该情况下执行。我们这样做是为了避免在不需要时为每个节点存储额外的 @newline 实例变量。
Public Class Methods
Source
# File lib/prism/parse_result/newlines.rb, line 28 def initialize(lines) # @type var lines: Integer @lines = Array.new(1 + lines, false) end
使用给定的换行符偏移量创建一个新的 Newlines 访问者。
Public Instance Methods
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
允许块/lambda 节点在自身内部标记换行符。
调用超类方法
也别名为:visit_lambda_node
Source
# File lib/prism/parse_result/newlines.rb, line 48 def visit_if_node(node) node.newline_flag!(@lines) super(node) end
将 if/unless 节点标记为换行符。
调用超类方法
也别名为:visit_unless_node
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
允许语句列表在自身内部标记换行符。
调用超类方法