lib/haml_lint/node_transformer.rb
# frozen_string_literal: true
module HamlLint
# Responsible for transforming {Haml::Parser::ParseNode} objects into
# corresponding {HamlLint::Tree::Node} objects.
#
# The parse tree generated by HAML has a number of strange cases where certain
# types of nodes are created that don't necessarily correspond to what one
# would expect. This class is intended to isolate and handle these cases so
# that linters don't have to deal with them.
class NodeTransformer
# Creates a node transformer for the given Haml document.
#
# @param document [HamlLint::Document]
def initialize(document)
@document = document
end
# Converts the given HAML parse node into its corresponding HAML-Lint parse
# node.
#
# @param haml_node [Haml::Parser::ParseNode]
# @return [HamlLint::Tree::Node]
def transform(haml_node)
node_class = "#{HamlLint::Utils.camel_case(haml_node.type.to_s)}Node"
HamlLint::Tree.const_get(node_class).new(@document, haml_node)
end
end
end