class Prism::Dispatcher

Die Dispatcher-Klasse löst Ereignisse für Knoten aus, die beim Durchlaufen eines AST gefunden werden, an alle registrierten Listener. Dies ist nützlich, um verschiedene Arten von Analysen am AST durchzuführen, während der Baum nur einmal durchlaufen werden muss.

Um den Dispatcher zu verwenden, instanziieren Sie ihn zuerst und registrieren Sie Listener für die Ereignisse, an denen Sie interessiert sind.

class OctalListener
  def on_integer_node_enter(node)
    if node.octal? && !node.slice.start_with?("0o")
      warn("Octal integers should be written with the 0o prefix")
    end
  end
end

listener = OctalListener.new
dispatcher = Prism::Dispatcher.new
dispatcher.register(listener, :on_integer_node_enter)

Anschließend können Sie beliebig viele Bäume durchlaufen und Ereignisse an die Listener dispatchieren.

result = Prism.parse("001 + 002 + 003")
dispatcher.dispatch(result.value)

Optional können Sie auch dispatch_once verwenden, um Ein- und Austrittsereignisse für einen einzelnen Knoten auszulösen, ohne weiter in den Baum hinabzusteigen. Dies kann in Situationen nützlich sein, in denen Sie die bereits registrierten Listener wiederverwenden möchten, aber das Durchlaufen des Baumes an einem bestimmten Punkt stoppen möchten.

integer = result.value.statements.body.first.receiver.receiver
dispatcher.dispatch_once(integer)