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