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_lambda_node(node)
别名为: visit_block_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
visit_unless_node(node)
别名为: visit_if_node