module DrgDSL::Visitor

Mixin for Ast::Node visitors. Visits all child nodes and returns the visited node by default.

Public Class Methods

included(visitor) click to toggle source
# File lib/drgdsl/visitor.rb, line 8
def self.included(visitor)
  visitor.prepend Cache
  visitor.extend ClassMethods
end

Public Instance Methods

cache?() click to toggle source

Whether this visitor should cache visit results. Note that one might need to override cache_key(n) if a visit is not deterministic, e.g. when it depends on some instance variables.

@see PrettyPrinter#cache_key

@return [Boolean]

# File lib/drgdsl/visitor.rb, line 39
def cache?
  false
end
cache_key(n) click to toggle source

@param n [Ast::Node] @return [Integer] ideally an object hash

# File lib/drgdsl/visitor.rb, line 45
def cache_key(n)
  n.hash
end
visit(n) click to toggle source

@param n [Ast::Node]

# File lib/drgdsl/visitor.rb, line 50
def visit(n)
  return visit_nil if n.nil?
  send("visit_#{n.type}", n)
end
visit_AndExpression(n) click to toggle source
# File lib/drgdsl/visitor.rb, line 68
def visit_AndExpression(n)
  n.expressions.map { |e| visit(e) }
  n
end
visit_BasicExpression(n) click to toggle source
# File lib/drgdsl/visitor.rb, line 92
def visit_BasicExpression(n)
  visit(n.variable)
  visit(n.condition)
  n
end
visit_Comparison(n) click to toggle source
# File lib/drgdsl/visitor.rb, line 98
def visit_Comparison(n)
  visit(n.value)
  visit(n.table_condition)
  n
end
visit_Constant(n) click to toggle source
# File lib/drgdsl/visitor.rb, line 136
def visit_Constant(n)
  n
end
visit_DateExpression(n) click to toggle source
# File lib/drgdsl/visitor.rb, line 123
def visit_DateExpression(n)
  visit(n.left_variable)
  visit(n.left_condition)
  visit(n.right_variable)
  visit(n.right_condition)
  visit(n.comparison)
  n
end
visit_Empty(n) click to toggle source
# File lib/drgdsl/visitor.rb, line 109
def visit_Empty(n)
  n
end
visit_Expression(n) click to toggle source
# File lib/drgdsl/visitor.rb, line 63
def visit_Expression(n)
  n.expressions.map { |e| visit(e) }
  n
end
visit_FunctionCall(n) click to toggle source
# File lib/drgdsl/visitor.rb, line 83
def visit_FunctionCall(n)
  n
end
visit_NotExpression(n) click to toggle source
# File lib/drgdsl/visitor.rb, line 78
def visit_NotExpression(n)
  visit(n.expression)
  n
end
visit_ParenExpression(n) click to toggle source
# File lib/drgdsl/visitor.rb, line 73
def visit_ParenExpression(n)
  visit(n.expression)
  n
end
visit_SrglrbTableCondition(n) click to toggle source
# File lib/drgdsl/visitor.rb, line 118
def visit_SrglrbTableCondition(n)
  visit(n.condition)
  n
end
visit_TableCondition(n) click to toggle source
# File lib/drgdsl/visitor.rb, line 113
def visit_TableCondition(n)
  visit(n.comparison)
  n
end
visit_UnaryCondition(n) click to toggle source
# File lib/drgdsl/visitor.rb, line 104
def visit_UnaryCondition(n)
  visit(n.condition)
  n
end
visit_Variable(n) click to toggle source
# File lib/drgdsl/visitor.rb, line 132
def visit_Variable(n)
  n
end
visit_nil() click to toggle source

Override to define what should happen when one calls visit with nil (can occur on optional AST branches).

Does nothing by default. A string visitor might want to return an empty string here.

# File lib/drgdsl/visitor.rb, line 60
def visit_nil
end