whycq
2024-03-28 cb5354ffdce249a49213a0430316e607c6002da7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// @ts-check
/** @typedef { import('estree').BaseNode} BaseNode */
 
/** @typedef {{
    skip: () => void;
    remove: () => void;
    replace: (node: BaseNode) => void;
}} WalkerContext */
 
export class WalkerBase {
    constructor() {
        /** @type {boolean} */
        this.should_skip = false;
 
        /** @type {boolean} */
        this.should_remove = false;
 
        /** @type {BaseNode | null} */
        this.replacement = null;
 
        /** @type {WalkerContext} */
        this.context = {
            skip: () => (this.should_skip = true),
            remove: () => (this.should_remove = true),
            replace: (node) => (this.replacement = node)
        };
    }
 
    /**
     *
     * @param {any} parent
     * @param {string} prop
     * @param {number} index
     * @param {BaseNode} node
     */
    replace(parent, prop, index, node) {
        if (parent) {
            if (index !== null) {
                parent[prop][index] = node;
            } else {
                parent[prop] = node;
            }
        }
    }
 
    /**
     *
     * @param {any} parent
     * @param {string} prop
     * @param {number} index
     */
    remove(parent, prop, index) {
        if (parent) {
            if (index !== null) {
                parent[prop].splice(index, 1);
            } else {
                delete parent[prop];
            }
        }
    }
}