Module: HamlLint::HamlVisitor

Included in:
Linter, RubyExtractor
Defined in:
lib/haml_lint/haml_visitor.rb

Overview

Provides an interface which when included allows a class to visit nodes in the parse tree of a HAML document.

Instance Method Summary collapse

Instance Method Details

#visit(node) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/haml_lint/haml_visitor.rb', line 5

def visit(node)
  # Keep track of whether this block was consumed by the visitor. This
  # allows us to visit all nodes by default, but can override the behavior
  # by specifying `yield false` in a visit method, indicating that no
  # further visiting should occur for the current node's children.
  block_called = false

  block = ->(descend = :children) do
    block_called = true
    visit_children(node) if descend == :children
  end

  safe_send("visit_#{node_name(node)}", node, &block)

  # Visit all children by default unless the block was invoked (indicating
  # the user intends to not recurse further, or wanted full control over
  # when the children were visited).
  visit_children(node) unless block_called

  safe_send("after_visit_#{node_name(node)}", node, &block)
end

#visit_children(parent) ⇒ Object



27
28
29
# File 'lib/haml_lint/haml_visitor.rb', line 27

def visit_children(parent)
  parent.children.each { |node| visit(node) }
end