UNPKG

1.32 kBJavaScriptView Raw
1/**
2 * @fileoverview The event generator for AST nodes.
3 * @author Toru Nagashima
4 */
5
6"use strict";
7
8//------------------------------------------------------------------------------
9// Public Interface
10//------------------------------------------------------------------------------
11
12/**
13 * The event generator for AST nodes.
14 * This implements below interface.
15 *
16 * ```ts
17 * interface EventGenerator {
18 * emitter: EventEmitter;
19 * enterNode(node: ASTNode): void;
20 * leaveNode(node: ASTNode): void;
21 * }
22 * ```
23 *
24 * @param {EventEmitter} emitter - An event emitter which is the destination of events.
25 * @returns {NodeEventGenerator} new instance.
26 */
27function NodeEventGenerator(emitter) {
28 this.emitter = emitter;
29}
30
31NodeEventGenerator.prototype = {
32 constructor: NodeEventGenerator,
33
34 /**
35 * Emits an event of entering AST node.
36 * @param {ASTNode} node - A node which was entered.
37 * @returns {void}
38 */
39 enterNode: function enterNode(node) {
40 this.emitter.emit(node.type, node);
41 },
42
43 /**
44 * Emits an event of leaving AST node.
45 * @param {ASTNode} node - A node which was left.
46 * @returns {void}
47 */
48 leaveNode: function leaveNode(node) {
49 this.emitter.emit(node.type + ":exit", node);
50 }
51};
52
53module.exports = NodeEventGenerator;