lib/haml_lint/tree/root_node.rb
# frozen_string_literal: true require_relative 'null_node' module HamlLint::Tree # Represents the root node of a HAML document that contains all other nodes. class RootNode < Node # The name of the file parsed to build this tree. # # @return [String] a file name def file @document.file end # Gets the node of the syntax tree for a given line number. # # @param line [Integer] the line number of the node # @return [HamlLint::Node] def node_for_line(line) # rubocop:disable Metrics each do |node| return node if node.line_numbers.cover?(line) && node != self end # Because HAML doesn't leave any trace in the nodes when it merges lines that # end with a comma, it's harder to assign a node to the second line here: # = some_call user, # foo, bar # So if the simple strategy (above) doesn't work, we try to see if we check if the last node # that was before the requested line was one that could have been merged. If so, we use that one. best_guess = nil each do |node| best_guess = node if node != self && node.line_numbers.end < line end # There are the cases were the merging without traces can happen return best_guess if best_guess && %i[script silent_script tag].include?(best_guess.type) HamlLint::Tree::NullNode.new end end end