Skip to content
This repository was archived by the owner on Apr 10, 2023. It is now read-only.

Commit 138b0c9

Browse files
committed
feat(traverse.js): ✨Add parent node to visitor function
1 parent 7437a9b commit 138b0c9

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

lib/traverse.js

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,50 +8,50 @@ const astTypes = require('../helpers/ast-types.js');
88
const traverseTypes = {
99
[astTypes.PROGRAM](ast, visitor) {
1010
ast.body.forEach((child) => {
11-
traverse(child, visitor);
11+
traverse(child, visitor, ast);
1212
});
1313
},
1414
[astTypes.EXPRESSION_STATEMENT](ast, visitor) {
15-
traverse(ast.expression, visitor);
15+
traverse(ast.expression, visitor, ast);
1616
},
1717
[astTypes.LITERAL](ast, visitor) {},
1818
[astTypes.BINARY_EXPRESSION](ast, visitor) {
19-
traverse(ast.left, visitor);
20-
traverse(ast.right, visitor);
19+
traverse(ast.left, visitor, ast);
20+
traverse(ast.right, visitor, ast);
2121
},
2222
[astTypes.UNARY_EXPRESSION](ast, visitor) {
23-
traverse(ast.argument, visitor);
23+
traverse(ast.argument, visitor, ast);
2424
},
2525
[astTypes.LOGICAL_EXPRESSION](ast, visitor) {
26-
traverse(ast.left, visitor);
27-
traverse(ast.right, visitor);
26+
traverse(ast.left, visitor, ast);
27+
traverse(ast.right, visitor, ast);
2828
},
2929
[astTypes.IDENTIFIER](ast, visitor) {},
3030
[astTypes.SEQUENCE_EXPRESSION](ast, visitor) {
3131
ast.expressions.forEach((child) => {
32-
traverse(child, visitor);
32+
traverse(child, visitor, ast);
3333
});
3434
},
3535
[astTypes.CONDITIONAL_EXPRESSION](ast, visitor) {
36-
traverse(ast.test, visitor);
37-
traverse(ast.consequent, visitor);
38-
traverse(ast.alternate, visitor);
36+
traverse(ast.test, visitor, ast);
37+
traverse(ast.consequent, visitor, ast);
38+
traverse(ast.alternate, visitor, ast);
3939
},
4040
[astTypes.MEMBER_EXPRESSION](ast, visitor) {
41-
traverse(ast.object, visitor);
42-
traverse(ast.property, visitor);
41+
traverse(ast.object, visitor, ast);
42+
traverse(ast.property, visitor, ast);
4343
},
4444
[astTypes.UPDATE_EXPRESSION](ast, visitor) {
45-
traverse(ast.argument, visitor);
45+
traverse(ast.argument, visitor, ast);
4646
},
4747
};
4848

49-
function traverse(ast, visitor) {
50-
visitor(ast);
49+
function traverse(ast, visitor, parent = null) {
50+
visitor(ast, parent);
5151
if (!traverseTypes[ast.type]) {
5252
throw new Error('Unexpected ast.type: ' + ast.type);
5353
}
54-
return traverseTypes[ast.type](ast, visitor);
54+
return traverseTypes[ast.type](ast, visitor, parent);
5555
}
5656

5757
module.exports = traverse;

0 commit comments

Comments
 (0)