Skip to content

Commit 12bef74

Browse files
committed
More explicit error when walking a tree and a node type isn't registered.
1 parent 9e12432 commit 12bef74

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

acorn-walk/src/index.js

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export function simple(node, visitors, baseVisitor, state, override) {
2020
if (!baseVisitor) baseVisitor = base
2121
;(function c(node, st, override) {
2222
let type = override || node.type
23-
baseVisitor[type](node, st, c)
23+
visitNode(baseVisitor, type, node, st, c)
2424
if (visitors[type]) visitors[type](node, st)
2525
})(node, state, override)
2626
}
@@ -35,7 +35,7 @@ export function ancestor(node, visitors, baseVisitor, state, override) {
3535
let type = override || node.type
3636
let isNew = node !== ancestors[ancestors.length - 1]
3737
if (isNew) ancestors.push(node)
38-
baseVisitor[type](node, st, c)
38+
visitNode(baseVisitor, type, node, st, c)
3939
if (visitors[type]) visitors[type](node, st || ancestors, ancestors)
4040
if (isNew) ancestors.pop()
4141
})(node, state, override)
@@ -72,7 +72,7 @@ export function full(node, callback, baseVisitor, state, override) {
7272
let last
7373
;(function c(node, st, override) {
7474
let type = override || node.type
75-
baseVisitor[type](node, st, c)
75+
visitNode(baseVisitor, type, node, st, c)
7676
if (last !== node) {
7777
callback(node, st, type)
7878
last = node
@@ -89,7 +89,7 @@ export function fullAncestor(node, callback, baseVisitor, state) {
8989
let type = override || node.type
9090
let isNew = node !== ancestors[ancestors.length - 1]
9191
if (isNew) ancestors.push(node)
92-
baseVisitor[type](node, st, c)
92+
visitNode(baseVisitor, type, node, st, c)
9393
if (last !== node) {
9494
callback(node, st || ancestors, ancestors, type)
9595
last = node
@@ -109,7 +109,7 @@ export function findNodeAt(node, start, end, test, baseVisitor, state) {
109109
let type = override || node.type
110110
if ((start == null || node.start <= start) &&
111111
(end == null || node.end >= end))
112-
baseVisitor[type](node, st, c)
112+
visitNode(baseVisitor, type, node, st, c)
113113
if ((start == null || node.start === start) &&
114114
(end == null || node.end === end) &&
115115
test(type, node))
@@ -130,7 +130,7 @@ export function findNodeAround(node, pos, test, baseVisitor, state) {
130130
(function c(node, st, override) {
131131
let type = override || node.type
132132
if (node.start > pos || node.end < pos) return
133-
baseVisitor[type](node, st, c)
133+
visitNode(baseVisitor, type, node, st, c)
134134
if (test(type, node)) throw new Found(node, st)
135135
})(node, state)
136136
} catch (e) {
@@ -148,7 +148,7 @@ export function findNodeAfter(node, pos, test, baseVisitor, state) {
148148
if (node.end < pos) return
149149
let type = override || node.type
150150
if (node.start >= pos && test(type, node)) throw new Found(node, st)
151-
baseVisitor[type](node, st, c)
151+
visitNode(baseVisitor, type, node, st, c)
152152
})(node, state)
153153
} catch (e) {
154154
if (e instanceof Found) return e
@@ -166,7 +166,7 @@ export function findNodeBefore(node, pos, test, baseVisitor, state) {
166166
let type = override || node.type
167167
if (node.end <= pos && (!max || max.node.end < node.end) && test(type, node))
168168
max = new Found(node, st)
169-
baseVisitor[type](node, st, c)
169+
visitNode(baseVisitor, type, node, st, c)
170170
})(node, state)
171171
return max
172172
}
@@ -180,7 +180,12 @@ export function make(funcs, baseVisitor) {
180180
}
181181

182182
function skipThrough(node, st, c) { c(node, st) }
183-
function ignore(_node, _st, _c) {}
183+
function ignore(_node, _st, _c) { }
184+
185+
function visitNode(baseVisitor, type, node, st, c) {
186+
if (baseVisitor[type] == null) throw `No walker function defined for node type ${type}`
187+
baseVisitor[type](node, st, c)
188+
}
184189

185190
// Node walkers.
186191

0 commit comments

Comments
 (0)