Class: Overrider::SexpTraverser

Inherits:
Object
  • Object
show all
Defined in:
lib/overrider.rb

Instance Method Summary collapse

Constructor Details

#initialize(sexp) ⇒ SexpTraverser

Returns a new instance of SexpTraverser.



18
19
20
# File 'lib/overrider.rb', line 18

def initialize(sexp)
  @sexp = sexp
end

Instance Method Details

#traverse(current_sexp = nil, parent = nil, &block) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/overrider.rb', line 22

def traverse(current_sexp = nil, parent = nil, &block)
  sexp = current_sexp || @sexp
  first = sexp[0]
  if first.is_a?(Symbol) # node
    yield sexp, parent
    args = Ripper::PARSER_EVENT_TABLE[first]
    return if args.nil? || args.zero?

    args.times do |i|
      param = sexp[i + 1]
      if param.is_a?(Array)
        traverse(param, sexp, &block)
      end
    end
  else # array
    sexp.each do |n|
      if n.is_a?(Array)
        traverse(n, sexp, &block)
      end
    end
  end
end