/** * @fileoverview The event generator for AST nodes. * @author Toru Nagashima */ "use strict"; //------------------------------------------------------------------------------ // Public Interface //------------------------------------------------------------------------------ /** * The event generator for AST nodes. * This implements below interface. * * ```ts * interface EventGenerator { * emitter: EventEmitter; * enterNode(node: ASTNode): void; * leaveNode(node: ASTNode): void; * } * ``` */ class NodeEventGenerator { /** * @param {EventEmitter} emitter - An event emitter which is the destination of events. */ constructor(emitter) { this.emitter = emitter; } /** * Emits an event of entering AST node. * @param {ASTNode} node - A node which was entered. * @returns {void} */ enterNode(node) { this.emitter.emit(node.type, node); } /** * Emits an event of leaving AST node. * @param {ASTNode} node - A node which was left. * @returns {void} */ leaveNode(node) { this.emitter.emit(`${node.type}:exit`, node); } } module.exports = NodeEventGenerator;