class Lucid::AST::Walker
Attributes
context[RW]
runtime[R]
Public Class Methods
new(runtime, listeners = [], context = Lucid::Context.default)
click to toggle source
# File lib/lucid/ast/walker.rb, line 7 def initialize(runtime, listeners = [], context = Lucid::Context.default) @runtime, @listeners, @context = runtime, listeners, context end
Public Instance Methods
method_missing(message, *args, &block)
click to toggle source
This is being used to forward on messages from the AST
to the formatters.
# File lib/lucid/ast/walker.rb, line 13 def method_missing(message, *args, &block) send_message(message, *args, &block) end
visit_multiline_arg(multiline_arg)
click to toggle source
# File lib/lucid/ast/walker.rb, line 17 def visit_multiline_arg(multiline_arg) broadcast(multiline_arg) do multiline_arg.accept(self) end end
Private Instance Methods
broadcast(*args, &block)
click to toggle source
# File lib/lucid/ast/walker.rb, line 25 def broadcast(*args, &block) message = extract_method_name_from(caller[0]) send_message message, *args, &block self end
extract_method_name_from(call_stack)
click to toggle source
# File lib/lucid/ast/walker.rb, line 52 def extract_method_name_from(call_stack) match = call_stack.match(/in `(.*)'/) match.captures[0] end
send_message(message, *args) { || ... }
click to toggle source
# File lib/lucid/ast/walker.rb, line 31 def send_message(message, *args, &block) return self if Lucid.wants_to_quit message = message.to_s.gsub('visit_', '') if block_given? send_to_listeners("before_#{message}", *args) yield if block_given? send_to_listeners("after_#{message}", *args) else send_to_listeners(message, *args) end self end
send_to_listeners(message, *args)
click to toggle source
# File lib/lucid/ast/walker.rb, line 44 def send_to_listeners(message, *args) @listeners.each do |listener| if listener.respond_to?(message) listener.__send__(message, *args) end end end