@babel/traverse 7.15.0 → 7.15.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of @babel/traverse might be problematic. Click here for more details.

package/lib/context.js CHANGED
@@ -7,7 +7,11 @@ exports.default = void 0;
7
7
 
8
8
  var _path = require("./path");
9
9
 
10
- var t = require("@babel/types");
10
+ var _t = require("@babel/types");
11
+
12
+ const {
13
+ VISITOR_KEYS
14
+ } = _t;
11
15
 
12
16
  class TraversalContext {
13
17
  constructor(scope, opts, state, parentPath) {
@@ -23,7 +27,7 @@ class TraversalContext {
23
27
  const opts = this.opts;
24
28
  if (opts.enter || opts.exit) return true;
25
29
  if (opts[node.type]) return true;
26
- const keys = t.VISITOR_KEYS[node.type];
30
+ const keys = VISITOR_KEYS[node.type];
27
31
  if (!(keys != null && keys.length)) return false;
28
32
 
29
33
  for (const key of keys) {
package/lib/index.js CHANGED
@@ -29,7 +29,7 @@ var visitors = require("./visitors");
29
29
 
30
30
  exports.visitors = visitors;
31
31
 
32
- var t = require("@babel/types");
32
+ var _t = require("@babel/types");
33
33
 
34
34
  var cache = require("./cache");
35
35
 
@@ -39,6 +39,12 @@ var _scope = require("./scope");
39
39
 
40
40
  var _hub = require("./hub");
41
41
 
42
+ const {
43
+ VISITOR_KEYS,
44
+ removeProperties,
45
+ traverseFast
46
+ } = _t;
47
+
42
48
  function traverse(parent, opts = {}, scope, state, parentPath) {
43
49
  if (!parent) return;
44
50
 
@@ -48,7 +54,7 @@ function traverse(parent, opts = {}, scope, state, parentPath) {
48
54
  }
49
55
  }
50
56
 
51
- if (!t.VISITOR_KEYS[parent.type]) {
57
+ if (!VISITOR_KEYS[parent.type]) {
52
58
  return;
53
59
  }
54
60
 
@@ -63,11 +69,11 @@ traverse.verify = visitors.verify;
63
69
  traverse.explode = visitors.explode;
64
70
 
65
71
  traverse.cheap = function (node, enter) {
66
- return t.traverseFast(node, enter);
72
+ return traverseFast(node, enter);
67
73
  };
68
74
 
69
75
  traverse.node = function (node, opts, scope, state, parentPath, skipKeys) {
70
- const keys = t.VISITOR_KEYS[node.type];
76
+ const keys = VISITOR_KEYS[node.type];
71
77
  if (!keys) return;
72
78
  const context = new _context.default(scope, opts, state, parentPath);
73
79
 
@@ -78,12 +84,12 @@ traverse.node = function (node, opts, scope, state, parentPath, skipKeys) {
78
84
  };
79
85
 
80
86
  traverse.clearNode = function (node, opts) {
81
- t.removeProperties(node, opts);
87
+ removeProperties(node, opts);
82
88
  cache.path.delete(node);
83
89
  };
84
90
 
85
91
  traverse.removeProperties = function (tree, opts) {
86
- t.traverseFast(tree, traverse.clearNode, opts);
92
+ traverseFast(tree, traverse.clearNode, opts);
87
93
  return tree;
88
94
  };
89
95
 
@@ -14,10 +14,14 @@ exports.isAncestor = isAncestor;
14
14
  exports.isDescendant = isDescendant;
15
15
  exports.inType = inType;
16
16
 
17
- var t = require("@babel/types");
17
+ var _t = require("@babel/types");
18
18
 
19
19
  var _index = require("./index");
20
20
 
21
+ const {
22
+ VISITOR_KEYS
23
+ } = _t;
24
+
21
25
  function findParent(callback) {
22
26
  let path = this;
23
27
 
@@ -63,7 +67,7 @@ function getStatementParent() {
63
67
  function getEarliestCommonAncestorFrom(paths) {
64
68
  return this.getDeepestCommonAncestorFrom(paths, function (deepest, i, ancestries) {
65
69
  let earliest;
66
- const keys = t.VISITOR_KEYS[deepest.type];
70
+ const keys = VISITOR_KEYS[deepest.type];
67
71
 
68
72
  for (const ancestry of ancestries) {
69
73
  const path = ancestry[i + 1];
@@ -7,7 +7,12 @@ exports.shareCommentsWithSiblings = shareCommentsWithSiblings;
7
7
  exports.addComment = addComment;
8
8
  exports.addComments = addComments;
9
9
 
10
- var t = require("@babel/types");
10
+ var _t = require("@babel/types");
11
+
12
+ const {
13
+ addComment: _addComment,
14
+ addComments: _addComments
15
+ } = _t;
11
16
 
12
17
  function shareCommentsWithSiblings() {
13
18
  if (typeof this.key === "string") return;
@@ -29,9 +34,9 @@ function shareCommentsWithSiblings() {
29
34
  }
30
35
 
31
36
  function addComment(type, content, line) {
32
- t.addComment(this.node, type, content, line);
37
+ _addComment(this.node, type, content, line);
33
38
  }
34
39
 
35
40
  function addComments(type, comments) {
36
- t.addComments(this.node, type, comments);
41
+ _addComments(this.node, type, comments);
37
42
  }
@@ -9,10 +9,35 @@ exports.arrowFunctionToShadowed = arrowFunctionToShadowed;
9
9
  exports.unwrapFunctionEnvironment = unwrapFunctionEnvironment;
10
10
  exports.arrowFunctionToExpression = arrowFunctionToExpression;
11
11
 
12
- var t = require("@babel/types");
12
+ var _t = require("@babel/types");
13
13
 
14
14
  var _helperFunctionName = require("@babel/helper-function-name");
15
15
 
16
+ const {
17
+ arrowFunctionExpression,
18
+ assignmentExpression,
19
+ binaryExpression,
20
+ blockStatement,
21
+ callExpression,
22
+ conditionalExpression,
23
+ expressionStatement,
24
+ identifier,
25
+ isIdentifier,
26
+ jsxIdentifier,
27
+ memberExpression,
28
+ metaProperty,
29
+ numericLiteral,
30
+ objectExpression,
31
+ restElement,
32
+ returnStatement,
33
+ sequenceExpression,
34
+ spreadElement,
35
+ stringLiteral,
36
+ super: _super,
37
+ thisExpression,
38
+ unaryExpression
39
+ } = _t;
40
+
16
41
  function toComputedKey() {
17
42
  let key;
18
43
 
@@ -25,7 +50,7 @@ function toComputedKey() {
25
50
  }
26
51
 
27
52
  if (!this.node.computed) {
28
- if (t.isIdentifier(key)) key = t.stringLiteral(key.name);
53
+ if (isIdentifier(key)) key = stringLiteral(key.name);
29
54
  }
30
55
 
31
56
  return key;
@@ -61,14 +86,14 @@ function ensureBlock() {
61
86
 
62
87
  if (this.isFunction()) {
63
88
  key = "argument";
64
- statements.push(t.returnStatement(body.node));
89
+ statements.push(returnStatement(body.node));
65
90
  } else {
66
91
  key = "expression";
67
- statements.push(t.expressionStatement(body.node));
92
+ statements.push(expressionStatement(body.node));
68
93
  }
69
94
  }
70
95
 
71
- this.node.body = t.blockStatement(statements);
96
+ this.node.body = blockStatement(statements);
72
97
  const parentPath = this.get(stringPath);
73
98
  body.setup(parentPath, listKey ? parentPath.node[listKey] : parentPath.node, listKey, key);
74
99
  return this.node;
@@ -106,12 +131,12 @@ function arrowFunctionToExpression({
106
131
  if (checkBinding) {
107
132
  this.parentPath.scope.push({
108
133
  id: checkBinding,
109
- init: t.objectExpression([])
134
+ init: objectExpression([])
110
135
  });
111
136
  }
112
137
 
113
- this.get("body").unshiftContainer("body", t.expressionStatement(t.callExpression(this.hub.addHelper("newArrowCheck"), [t.thisExpression(), checkBinding ? t.identifier(checkBinding.name) : t.identifier(thisBinding)])));
114
- this.replaceWith(t.callExpression(t.memberExpression((0, _helperFunctionName.default)(this, true) || this.node, t.identifier("bind")), [checkBinding ? t.identifier(checkBinding.name) : t.thisExpression()]));
138
+ this.get("body").unshiftContainer("body", expressionStatement(callExpression(this.hub.addHelper("newArrowCheck"), [thisExpression(), checkBinding ? identifier(checkBinding.name) : identifier(thisBinding)])));
139
+ this.replaceWith(callExpression(memberExpression((0, _helperFunctionName.default)(this, true) || this.node, identifier("bind")), [checkBinding ? identifier(checkBinding.name) : thisExpression()]));
115
140
  }
116
141
  }
117
142
 
@@ -159,7 +184,7 @@ function hoistFunctionEnvironment(fnPath, noNewArrows = true, allowInsertArrow =
159
184
  });
160
185
  const superBinding = getSuperBinding(thisEnvFn);
161
186
  allSuperCalls.forEach(superCall => {
162
- const callee = t.identifier(superBinding);
187
+ const callee = identifier(superBinding);
163
188
  callee.loc = superCall.node.callee.loc;
164
189
  superCall.get("callee").replaceWith(callee);
165
190
  });
@@ -167,25 +192,25 @@ function hoistFunctionEnvironment(fnPath, noNewArrows = true, allowInsertArrow =
167
192
 
168
193
  if (argumentsPaths.length > 0) {
169
194
  const argumentsBinding = getBinding(thisEnvFn, "arguments", () => {
170
- const args = () => t.identifier("arguments");
195
+ const args = () => identifier("arguments");
171
196
 
172
197
  if (thisEnvFn.scope.path.isProgram()) {
173
- return t.conditionalExpression(t.binaryExpression("===", t.unaryExpression("typeof", args()), t.stringLiteral("undefined")), thisEnvFn.scope.buildUndefinedNode(), args());
198
+ return conditionalExpression(binaryExpression("===", unaryExpression("typeof", args()), stringLiteral("undefined")), thisEnvFn.scope.buildUndefinedNode(), args());
174
199
  } else {
175
200
  return args();
176
201
  }
177
202
  });
178
203
  argumentsPaths.forEach(argumentsChild => {
179
- const argsRef = t.identifier(argumentsBinding);
204
+ const argsRef = identifier(argumentsBinding);
180
205
  argsRef.loc = argumentsChild.node.loc;
181
206
  argumentsChild.replaceWith(argsRef);
182
207
  });
183
208
  }
184
209
 
185
210
  if (newTargetPaths.length > 0) {
186
- const newTargetBinding = getBinding(thisEnvFn, "newtarget", () => t.metaProperty(t.identifier("new"), t.identifier("target")));
211
+ const newTargetBinding = getBinding(thisEnvFn, "newtarget", () => metaProperty(identifier("new"), identifier("target")));
187
212
  newTargetPaths.forEach(targetChild => {
188
- const targetRef = t.identifier(newTargetBinding);
213
+ const targetRef = identifier(newTargetBinding);
189
214
  targetRef.loc = targetChild.node.loc;
190
215
  targetChild.replaceWith(targetRef);
191
216
  });
@@ -217,11 +242,11 @@ function hoistFunctionEnvironment(fnPath, noNewArrows = true, allowInsertArrow =
217
242
  args.push(value);
218
243
  }
219
244
 
220
- const call = t.callExpression(t.identifier(superBinding), args);
245
+ const call = callExpression(identifier(superBinding), args);
221
246
 
222
247
  if (isCall) {
223
- superProp.parentPath.unshiftContainer("arguments", t.thisExpression());
224
- superProp.replaceWith(t.memberExpression(call, t.identifier("call")));
248
+ superProp.parentPath.unshiftContainer("arguments", thisExpression());
249
+ superProp.replaceWith(memberExpression(call, identifier("call")));
225
250
  thisPaths.push(superProp.parentPath.get("arguments.0"));
226
251
  } else if (isAssignment) {
227
252
  superProp.parentPath.replaceWith(call);
@@ -238,7 +263,7 @@ function hoistFunctionEnvironment(fnPath, noNewArrows = true, allowInsertArrow =
238
263
 
239
264
  if (noNewArrows || inConstructor && hasSuperClass(thisEnvFn)) {
240
265
  thisPaths.forEach(thisChild => {
241
- const thisRef = thisChild.isJSX() ? t.jsxIdentifier(thisBinding) : t.identifier(thisBinding);
266
+ const thisRef = thisChild.isJSX() ? jsxIdentifier(thisBinding) : identifier(thisBinding);
242
267
  thisRef.loc = thisChild.node.loc;
243
268
  thisChild.replaceWith(thisRef);
244
269
  });
@@ -258,11 +283,11 @@ function standardizeSuperProperty(superProp) {
258
283
 
259
284
  if (superProp.node.computed) {
260
285
  const tmp = superProp.scope.generateDeclaredUidIdentifier("tmp");
261
- assignmentPath.get("left").replaceWith(t.memberExpression(superProp.node.object, t.assignmentExpression("=", tmp, superProp.node.property), true));
262
- assignmentPath.get("right").replaceWith(t.binaryExpression(op, t.memberExpression(superProp.node.object, t.identifier(tmp.name), true), value));
286
+ assignmentPath.get("left").replaceWith(memberExpression(superProp.node.object, assignmentExpression("=", tmp, superProp.node.property), true));
287
+ assignmentPath.get("right").replaceWith(binaryExpression(op, memberExpression(superProp.node.object, identifier(tmp.name), true), value));
263
288
  } else {
264
- assignmentPath.get("left").replaceWith(t.memberExpression(superProp.node.object, superProp.node.property));
265
- assignmentPath.get("right").replaceWith(t.binaryExpression(op, t.memberExpression(superProp.node.object, t.identifier(superProp.node.property.name)), value));
289
+ assignmentPath.get("left").replaceWith(memberExpression(superProp.node.object, superProp.node.property));
290
+ assignmentPath.get("right").replaceWith(binaryExpression(op, memberExpression(superProp.node.object, identifier(superProp.node.property.name)), value));
266
291
  }
267
292
 
268
293
  return [assignmentPath.get("left"), assignmentPath.get("right").get("left")];
@@ -270,13 +295,13 @@ function standardizeSuperProperty(superProp) {
270
295
  const updateExpr = superProp.parentPath;
271
296
  const tmp = superProp.scope.generateDeclaredUidIdentifier("tmp");
272
297
  const computedKey = superProp.node.computed ? superProp.scope.generateDeclaredUidIdentifier("prop") : null;
273
- const parts = [t.assignmentExpression("=", tmp, t.memberExpression(superProp.node.object, computedKey ? t.assignmentExpression("=", computedKey, superProp.node.property) : superProp.node.property, superProp.node.computed)), t.assignmentExpression("=", t.memberExpression(superProp.node.object, computedKey ? t.identifier(computedKey.name) : superProp.node.property, superProp.node.computed), t.binaryExpression("+", t.identifier(tmp.name), t.numericLiteral(1)))];
298
+ const parts = [assignmentExpression("=", tmp, memberExpression(superProp.node.object, computedKey ? assignmentExpression("=", computedKey, superProp.node.property) : superProp.node.property, superProp.node.computed)), assignmentExpression("=", memberExpression(superProp.node.object, computedKey ? identifier(computedKey.name) : superProp.node.property, superProp.node.computed), binaryExpression("+", identifier(tmp.name), numericLiteral(1)))];
274
299
 
275
300
  if (!superProp.parentPath.node.prefix) {
276
- parts.push(t.identifier(tmp.name));
301
+ parts.push(identifier(tmp.name));
277
302
  }
278
303
 
279
- updateExpr.replaceWith(t.sequenceExpression(parts));
304
+ updateExpr.replaceWith(sequenceExpression(parts));
280
305
  const left = updateExpr.get("expressions.0.right");
281
306
  const right = updateExpr.get("expressions.1.left");
282
307
  return [left, right];
@@ -291,7 +316,7 @@ function hasSuperClass(thisEnvFn) {
291
316
 
292
317
  function getThisBinding(thisEnvFn, inConstructor) {
293
318
  return getBinding(thisEnvFn, "this", thisBinding => {
294
- if (!inConstructor || !hasSuperClass(thisEnvFn)) return t.thisExpression();
319
+ if (!inConstructor || !hasSuperClass(thisEnvFn)) return thisExpression();
295
320
  const supers = new WeakSet();
296
321
  thisEnvFn.traverse({
297
322
  Function(child) {
@@ -307,7 +332,7 @@ function getThisBinding(thisEnvFn, inConstructor) {
307
332
  if (!child.get("callee").isSuper()) return;
308
333
  if (supers.has(child.node)) return;
309
334
  supers.add(child.node);
310
- child.replaceWithMultiple([child.node, t.assignmentExpression("=", t.identifier(thisBinding), t.identifier("this"))]);
335
+ child.replaceWithMultiple([child.node, assignmentExpression("=", identifier(thisBinding), identifier("this"))]);
311
336
  }
312
337
 
313
338
  });
@@ -317,7 +342,7 @@ function getThisBinding(thisEnvFn, inConstructor) {
317
342
  function getSuperBinding(thisEnvFn) {
318
343
  return getBinding(thisEnvFn, "supercall", () => {
319
344
  const argsBinding = thisEnvFn.scope.generateUidIdentifier("args");
320
- return t.arrowFunctionExpression([t.restElement(argsBinding)], t.callExpression(t.super(), [t.spreadElement(t.identifier(argsBinding.name))]));
345
+ return arrowFunctionExpression([restElement(argsBinding)], callExpression(_super(), [spreadElement(identifier(argsBinding.name))]));
321
346
  });
322
347
  }
323
348
 
@@ -328,20 +353,20 @@ function getSuperPropBinding(thisEnvFn, isAssignment, propName) {
328
353
  let fnBody;
329
354
 
330
355
  if (propName) {
331
- fnBody = t.memberExpression(t.super(), t.identifier(propName));
356
+ fnBody = memberExpression(_super(), identifier(propName));
332
357
  } else {
333
358
  const method = thisEnvFn.scope.generateUidIdentifier("prop");
334
359
  argsList.unshift(method);
335
- fnBody = t.memberExpression(t.super(), t.identifier(method.name), true);
360
+ fnBody = memberExpression(_super(), identifier(method.name), true);
336
361
  }
337
362
 
338
363
  if (isAssignment) {
339
364
  const valueIdent = thisEnvFn.scope.generateUidIdentifier("value");
340
365
  argsList.push(valueIdent);
341
- fnBody = t.assignmentExpression("=", fnBody, t.identifier(valueIdent.name));
366
+ fnBody = assignmentExpression("=", fnBody, identifier(valueIdent.name));
342
367
  }
343
368
 
344
- return t.arrowFunctionExpression(argsList, fnBody);
369
+ return arrowFunctionExpression(argsList, fnBody);
345
370
  });
346
371
  }
347
372
 
@@ -20,8 +20,15 @@ exports.getOuterBindingIdentifierPaths = getOuterBindingIdentifierPaths;
20
20
 
21
21
  var _index = require("./index");
22
22
 
23
- var t = require("@babel/types");
24
-
23
+ var _t = require("@babel/types");
24
+
25
+ const {
26
+ getBindingIdentifiers: _getBindingIdentifiers,
27
+ getOuterBindingIdentifiers: _getOuterBindingIdentifiers,
28
+ isDeclaration,
29
+ numericLiteral,
30
+ unaryExpression
31
+ } = _t;
25
32
  const NORMAL_COMPLETION = 0;
26
33
  const BREAK_COMPLETION = 1;
27
34
 
@@ -50,7 +57,10 @@ function getOpposite() {
50
57
  }
51
58
 
52
59
  function addCompletionRecords(path, records, context) {
53
- if (path) return records.concat(_getCompletionRecords(path, context));
60
+ if (path) {
61
+ records.push(..._getCompletionRecords(path, context));
62
+ }
63
+
54
64
  return records;
55
65
  }
56
66
 
@@ -79,10 +89,10 @@ function completionRecordForSwitch(cases, records, context) {
79
89
  lastNormalCompletions = normalCompletions;
80
90
  }
81
91
 
82
- records = records.concat(breakCompletions);
92
+ records.push(...breakCompletions);
83
93
  }
84
94
 
85
- records = records.concat(lastNormalCompletions);
95
+ records.push(...lastNormalCompletions);
86
96
  return records;
87
97
  }
88
98
 
@@ -98,7 +108,7 @@ function replaceBreakStatementInBreakCompletion(completions, reachable) {
98
108
  label: null
99
109
  })) {
100
110
  if (reachable) {
101
- c.path.replaceWith(t.unaryExpression("void", t.numericLiteral(0)));
111
+ c.path.replaceWith(unaryExpression("void", numericLiteral(0)));
102
112
  } else {
103
113
  c.path.remove();
104
114
  }
@@ -107,7 +117,7 @@ function replaceBreakStatementInBreakCompletion(completions, reachable) {
107
117
  }
108
118
 
109
119
  function getStatementListCompletion(paths, context) {
110
- let completions = [];
120
+ const completions = [];
111
121
 
112
122
  if (context.canHaveBreak) {
113
123
  let lastNormalCompletions = [];
@@ -119,8 +129,8 @@ function getStatementListCompletion(paths, context) {
119
129
  });
120
130
 
121
131
  if (path.isBlockStatement() && (context.inCaseClause || context.shouldPopulateBreak)) {
122
- newContext.shouldPopulateBreak = true;
123
- } else {
132
+ newContext.shouldPopulateBreak = true;
133
+ } else {
124
134
  newContext.shouldPopulateBreak = false;
125
135
  }
126
136
 
@@ -131,16 +141,16 @@ function getStatementListCompletion(paths, context) {
131
141
  label: null
132
142
  }))) {
133
143
  normalCompletionToBreak(lastNormalCompletions);
134
- completions = completions.concat(lastNormalCompletions);
144
+ completions.push(...lastNormalCompletions);
135
145
 
136
146
  if (lastNormalCompletions.some(c => c.path.isDeclaration())) {
137
- completions = completions.concat(statementCompletions);
147
+ completions.push(...statementCompletions);
138
148
  replaceBreakStatementInBreakCompletion(statementCompletions, true);
139
149
  }
140
150
 
141
151
  replaceBreakStatementInBreakCompletion(statementCompletions, false);
142
152
  } else {
143
- completions = completions.concat(statementCompletions);
153
+ completions.push(...statementCompletions);
144
154
 
145
155
  if (!context.shouldPopulateBreak) {
146
156
  replaceBreakStatementInBreakCompletion(statementCompletions, true);
@@ -151,10 +161,21 @@ function getStatementListCompletion(paths, context) {
151
161
  }
152
162
 
153
163
  if (i === paths.length - 1) {
154
- completions = completions.concat(statementCompletions);
164
+ completions.push(...statementCompletions);
155
165
  } else {
156
- completions = completions.concat(statementCompletions.filter(c => c.type === BREAK_COMPLETION));
157
- lastNormalCompletions = statementCompletions.filter(c => c.type === NORMAL_COMPLETION);
166
+ lastNormalCompletions = [];
167
+
168
+ for (let i = 0; i < statementCompletions.length; i++) {
169
+ const c = statementCompletions[i];
170
+
171
+ if (c.type === BREAK_COMPLETION) {
172
+ completions.push(c);
173
+ }
174
+
175
+ if (c.type === NORMAL_COMPLETION) {
176
+ lastNormalCompletions.push(c);
177
+ }
178
+ }
158
179
  }
159
180
  }
160
181
  } else if (paths.length) {
@@ -162,7 +183,7 @@ function getStatementListCompletion(paths, context) {
162
183
  const pathCompletions = _getCompletionRecords(paths[i], context);
163
184
 
164
185
  if (pathCompletions.length > 1 || pathCompletions.length === 1 && !pathCompletions[0].path.isVariableDeclaration()) {
165
- completions = completions.concat(pathCompletions);
186
+ completions.push(...pathCompletions);
166
187
  break;
167
188
  }
168
189
  }
@@ -178,24 +199,24 @@ function _getCompletionRecords(path, context) {
178
199
  records = addCompletionRecords(path.get("consequent"), records, context);
179
200
  records = addCompletionRecords(path.get("alternate"), records, context);
180
201
  } else if (path.isDoExpression() || path.isFor() || path.isWhile() || path.isLabeledStatement()) {
181
- records = addCompletionRecords(path.get("body"), records, context);
202
+ return addCompletionRecords(path.get("body"), records, context);
182
203
  } else if (path.isProgram() || path.isBlockStatement()) {
183
- records = records.concat(getStatementListCompletion(path.get("body"), context));
204
+ return getStatementListCompletion(path.get("body"), context);
184
205
  } else if (path.isFunction()) {
185
206
  return _getCompletionRecords(path.get("body"), context);
186
207
  } else if (path.isTryStatement()) {
187
208
  records = addCompletionRecords(path.get("block"), records, context);
188
209
  records = addCompletionRecords(path.get("handler"), records, context);
189
210
  } else if (path.isCatchClause()) {
190
- records = addCompletionRecords(path.get("body"), records, context);
211
+ return addCompletionRecords(path.get("body"), records, context);
191
212
  } else if (path.isSwitchStatement()) {
192
- records = completionRecordForSwitch(path.get("cases"), records, context);
213
+ return completionRecordForSwitch(path.get("cases"), records, context);
193
214
  } else if (path.isSwitchCase()) {
194
- records = records.concat(getStatementListCompletion(path.get("consequent"), {
215
+ return getStatementListCompletion(path.get("consequent"), {
195
216
  canHaveBreak: true,
196
217
  shouldPopulateBreak: false,
197
218
  inCaseClause: true
198
- }));
219
+ });
199
220
  } else if (path.isBreakStatement()) {
200
221
  records.push(BreakCompletion(path));
201
222
  } else {
@@ -313,23 +334,23 @@ function _getPattern(parts, context) {
313
334
  }
314
335
 
315
336
  function getBindingIdentifiers(duplicates) {
316
- return t.getBindingIdentifiers(this.node, duplicates);
337
+ return _getBindingIdentifiers(this.node, duplicates);
317
338
  }
318
339
 
319
340
  function getOuterBindingIdentifiers(duplicates) {
320
- return t.getOuterBindingIdentifiers(this.node, duplicates);
341
+ return _getOuterBindingIdentifiers(this.node, duplicates);
321
342
  }
322
343
 
323
344
  function getBindingIdentifierPaths(duplicates = false, outerOnly = false) {
324
345
  const path = this;
325
- let search = [].concat(path);
346
+ const search = [path];
326
347
  const ids = Object.create(null);
327
348
 
328
349
  while (search.length) {
329
350
  const id = search.shift();
330
351
  if (!id) continue;
331
352
  if (!id.node) continue;
332
- const keys = t.getBindingIdentifiers.keys[id.node.type];
353
+ const keys = _getBindingIdentifiers.keys[id.node.type];
333
354
 
334
355
  if (id.isIdentifier()) {
335
356
  if (duplicates) {
@@ -346,7 +367,7 @@ function getBindingIdentifierPaths(duplicates = false, outerOnly = false) {
346
367
  if (id.isExportDeclaration()) {
347
368
  const declaration = id.get("declaration");
348
369
 
349
- if (declaration.isDeclaration()) {
370
+ if (isDeclaration(declaration)) {
350
371
  search.push(declaration);
351
372
  }
352
373
 
@@ -369,8 +390,10 @@ function getBindingIdentifierPaths(duplicates = false, outerOnly = false) {
369
390
  const key = keys[i];
370
391
  const child = id.get(key);
371
392
 
372
- if (Array.isArray(child) || child.node) {
373
- search = search.concat(child);
393
+ if (Array.isArray(child)) {
394
+ search.push(...child);
395
+ } else if (child.node) {
396
+ search.push(child);
374
397
  }
375
398
  }
376
399
  }
package/lib/path/index.js CHANGED
@@ -13,7 +13,9 @@ var _index = require("../index");
13
13
 
14
14
  var _scope = require("../scope");
15
15
 
16
- var t = require("@babel/types");
16
+ var _t = require("@babel/types");
17
+
18
+ var t = _t;
17
19
 
18
20
  var _cache = require("../cache");
19
21
 
@@ -41,6 +43,10 @@ var NodePath_family = require("./family");
41
43
 
42
44
  var NodePath_comments = require("./comments");
43
45
 
46
+ const {
47
+ validate
48
+ } = _t;
49
+
44
50
  const debug = _debug("babel");
45
51
 
46
52
  const REMOVED = 1 << 0;
@@ -138,7 +144,7 @@ class NodePath {
138
144
  }
139
145
 
140
146
  set(key, node) {
141
- t.validate(this.node, key, node);
147
+ validate(this.node, key, node);
142
148
  this.node[key] = node;
143
149
  }
144
150