class HamlLint::Tree::RootNode

Represents the root node of a HAML document that contains all other nodes.

Public Instance Methods

file() click to toggle source

The name of the file parsed to build this tree.

@return [String] a file name

# File lib/haml_lint/tree/root_node.rb, line 11
def file
  @document.file
end
node_for_line(line) click to toggle source

Gets the node of the syntax tree for a given line number.

@param line [Integer] the line number of the node @return [HamlLint::Node]

# File lib/haml_lint/tree/root_node.rb, line 19
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