Class: Sass::Tree::Visitors::Base Abstract

Inherits:
Object
  • Object
show all
Defined in:
/var/www/sass-pages/.sass/lib/sass/tree/visitors/base.rb

Overview

This class is abstract.

The abstract base class for Sass visitors. Visitors should extend this class, then implement visit_* methods for each node they care about (e.g. visit_rule for RuleNode or visit_for for ForNode). These methods take the node in question as argument. They may yield to visit the child nodes of the current node.

Note: due to the unusual nature of Sass::Tree::IfNode, special care must be taken to ensure that it is properly handled. In particular, there is no built-in scaffolding for dealing with the return value of @else nodes.

Direct Known Subclasses

CheckNesting, Convert, Cssize, DeepCopy, Perform, SetOptions, ToCss

Constant Summary

Class Method Summary

Instance Method Summary

Class Method Details

+ (Object) visit(root)

Runs the visitor on a tree.

Parameters:

  • (Tree::Node) root — The root node of the Sass tree.

Returns:

  • (Object) — The return value of #visit for the root node.


23
24
25
# File '/var/www/sass-pages/.sass/lib/sass/tree/visitors/base.rb', line 23

def self.visit(root)
  new.send(:visit, root)
end

Instance Method Details

- (String) node_name(node) (protected)

Returns the name of a node as used in the visit_* method.

Parameters:

Returns:

  • (String) — The name.


62
63
64
65
# File '/var/www/sass-pages/.sass/lib/sass/tree/visitors/base.rb', line 62

def node_name(node)
  @@node_names ||= {}
  @@node_names[node.class.name] ||= node.class.name.gsub(NODE_NAME_RE, '\\1').downcase
end

- (Object) visit(node) (protected)

Runs the visitor on the given node. This can be overridden by subclasses that need to do something for each node.

Parameters:

Returns:

  • (Object) — The return value of the visit_* method for this node.


34
35
36
37
38
39
40
41
# File '/var/www/sass-pages/.sass/lib/sass/tree/visitors/base.rb', line 34

def visit(node)
  method = "visit_#{node_name node}"
  if self.respond_to?(method, true)
    self.send(method, node) {visit_children(node)}
  else
    visit_children(node)
  end
end

- (Array<Object>) visit_children(parent) (protected)

Visit the child nodes for a given node. This can be overridden by subclasses that need to do something with the child nodes’ return values.

This method is run when visit_* methods yield, and its return value is returned from the yield.

Parameters:

  • (Tree::Node) parent — The parent node of the children to visit.

Returns:

  • (Array<Object>) — The return values of the visit_* methods for the children.


52
53
54
# File '/var/www/sass-pages/.sass/lib/sass/tree/visitors/base.rb', line 52

def visit_children(parent)
  parent.children.map {|c| visit(c)}
end

- visit_if(node) (protected)

yields, then runs the visitor on the @else clause if the node has one. This exists to ensure that the contents of the @else clause get visited.



69
70
71
72
73
# File '/var/www/sass-pages/.sass/lib/sass/tree/visitors/base.rb', line 69

def visit_if(node)
  yield
  visit(node.else) if node.else
  node
end