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