@babel/traverse 7.17.9 → 7.23.2
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.
- package/README.md +1 -1
- package/lib/cache.js +27 -7
- package/lib/cache.js.map +1 -0
- package/lib/context.js +9 -31
- package/lib/context.js.map +1 -0
- package/lib/hub.js +2 -6
- package/lib/hub.js.map +1 -0
- package/lib/index.js +17 -33
- package/lib/index.js.map +1 -0
- package/lib/path/ancestry.js +3 -42
- package/lib/path/ancestry.js.map +1 -0
- package/lib/path/comments.js +23 -11
- package/lib/path/comments.js.map +1 -0
- package/lib/path/context.js +24 -65
- package/lib/path/context.js.map +1 -0
- package/lib/path/conversion.js +37 -100
- package/lib/path/conversion.js.map +1 -0
- package/lib/path/evaluation.js +69 -123
- package/lib/path/evaluation.js.map +1 -0
- package/lib/path/family.js +5 -76
- package/lib/path/family.js.map +1 -0
- package/lib/path/index.js +26 -90
- package/lib/path/index.js.map +1 -0
- package/lib/path/inference/index.js +26 -33
- package/lib/path/inference/index.js.map +1 -0
- package/lib/path/inference/inferer-reference.js +6 -61
- package/lib/path/inference/inferer-reference.js.map +1 -0
- package/lib/path/inference/inferers.js +32 -86
- package/lib/path/inference/inferers.js.map +1 -0
- package/lib/path/inference/util.js +30 -0
- package/lib/path/inference/util.js.map +1 -0
- package/lib/path/introspection.js +54 -105
- package/lib/path/introspection.js.map +1 -0
- package/lib/path/lib/hoister.js +2 -37
- package/lib/path/lib/hoister.js.map +1 -0
- package/lib/path/lib/removal-hooks.js +4 -4
- package/lib/path/lib/removal-hooks.js.map +1 -0
- package/lib/path/lib/virtual-types-validator.js +161 -0
- package/lib/path/lib/virtual-types-validator.js.map +1 -0
- package/lib/path/lib/virtual-types.js +20 -206
- package/lib/path/lib/virtual-types.js.map +1 -0
- package/lib/path/modification.js +17 -61
- package/lib/path/modification.js.map +1 -0
- package/lib/path/removal.js +9 -22
- package/lib/path/removal.js.map +1 -0
- package/lib/path/replacement.js +17 -72
- package/lib/path/replacement.js.map +1 -0
- package/lib/scope/binding.js +20 -12
- package/lib/scope/binding.js.map +1 -0
- package/lib/scope/index.js +115 -245
- package/lib/scope/index.js.map +1 -0
- package/lib/scope/lib/renamer.js +41 -74
- package/lib/scope/lib/renamer.js.map +1 -0
- package/lib/traverse-node.js +10 -11
- package/lib/traverse-node.js.map +1 -0
- package/lib/types.js +1 -3
- package/lib/types.js.map +1 -0
- package/lib/visitors.js +59 -83
- package/lib/visitors.js.map +1 -0
- package/package.json +13 -11
- package/lib/path/generated/asserts.js +0 -5
- package/lib/path/generated/validators.js +0 -5
- package/lib/path/generated/virtual-types.js +0 -3
- package/scripts/generators/asserts.js +0 -25
- package/scripts/generators/validators.js +0 -42
- package/scripts/generators/virtual-types.js +0 -24
- package/scripts/package.json +0 -1
package/lib/path/family.js
CHANGED
@@ -17,11 +17,8 @@ exports.getOuterBindingIdentifierPaths = getOuterBindingIdentifierPaths;
|
|
17
17
|
exports.getOuterBindingIdentifiers = getOuterBindingIdentifiers;
|
18
18
|
exports.getPrevSibling = getPrevSibling;
|
19
19
|
exports.getSibling = getSibling;
|
20
|
-
|
21
|
-
var _index = require("./index");
|
22
|
-
|
20
|
+
var _index = require("./index.js");
|
23
21
|
var _t = require("@babel/types");
|
24
|
-
|
25
22
|
const {
|
26
23
|
getBindingIdentifiers: _getBindingIdentifiers,
|
27
24
|
getOuterBindingIdentifiers: _getOuterBindingIdentifiers,
|
@@ -31,77 +28,60 @@ const {
|
|
31
28
|
} = _t;
|
32
29
|
const NORMAL_COMPLETION = 0;
|
33
30
|
const BREAK_COMPLETION = 1;
|
34
|
-
|
35
31
|
function NormalCompletion(path) {
|
36
32
|
return {
|
37
33
|
type: NORMAL_COMPLETION,
|
38
34
|
path
|
39
35
|
};
|
40
36
|
}
|
41
|
-
|
42
37
|
function BreakCompletion(path) {
|
43
38
|
return {
|
44
39
|
type: BREAK_COMPLETION,
|
45
40
|
path
|
46
41
|
};
|
47
42
|
}
|
48
|
-
|
49
43
|
function getOpposite() {
|
50
44
|
if (this.key === "left") {
|
51
45
|
return this.getSibling("right");
|
52
46
|
} else if (this.key === "right") {
|
53
47
|
return this.getSibling("left");
|
54
48
|
}
|
55
|
-
|
56
49
|
return null;
|
57
50
|
}
|
58
|
-
|
59
51
|
function addCompletionRecords(path, records, context) {
|
60
52
|
if (path) {
|
61
53
|
records.push(..._getCompletionRecords(path, context));
|
62
54
|
}
|
63
|
-
|
64
55
|
return records;
|
65
56
|
}
|
66
|
-
|
67
57
|
function completionRecordForSwitch(cases, records, context) {
|
68
58
|
let lastNormalCompletions = [];
|
69
|
-
|
70
59
|
for (let i = 0; i < cases.length; i++) {
|
71
60
|
const casePath = cases[i];
|
72
|
-
|
73
61
|
const caseCompletions = _getCompletionRecords(casePath, context);
|
74
|
-
|
75
62
|
const normalCompletions = [];
|
76
63
|
const breakCompletions = [];
|
77
|
-
|
78
64
|
for (const c of caseCompletions) {
|
79
65
|
if (c.type === NORMAL_COMPLETION) {
|
80
66
|
normalCompletions.push(c);
|
81
67
|
}
|
82
|
-
|
83
68
|
if (c.type === BREAK_COMPLETION) {
|
84
69
|
breakCompletions.push(c);
|
85
70
|
}
|
86
71
|
}
|
87
|
-
|
88
72
|
if (normalCompletions.length) {
|
89
73
|
lastNormalCompletions = normalCompletions;
|
90
74
|
}
|
91
|
-
|
92
75
|
records.push(...breakCompletions);
|
93
76
|
}
|
94
|
-
|
95
77
|
records.push(...lastNormalCompletions);
|
96
78
|
return records;
|
97
79
|
}
|
98
|
-
|
99
80
|
function normalCompletionToBreak(completions) {
|
100
81
|
completions.forEach(c => {
|
101
82
|
c.type = BREAK_COMPLETION;
|
102
83
|
});
|
103
84
|
}
|
104
|
-
|
105
85
|
function replaceBreakStatementInBreakCompletion(completions, reachable) {
|
106
86
|
completions.forEach(c => {
|
107
87
|
if (c.path.isBreakStatement({
|
@@ -115,63 +95,49 @@ function replaceBreakStatementInBreakCompletion(completions, reachable) {
|
|
115
95
|
}
|
116
96
|
});
|
117
97
|
}
|
118
|
-
|
119
98
|
function getStatementListCompletion(paths, context) {
|
120
99
|
const completions = [];
|
121
|
-
|
122
100
|
if (context.canHaveBreak) {
|
123
101
|
let lastNormalCompletions = [];
|
124
|
-
|
125
102
|
for (let i = 0; i < paths.length; i++) {
|
126
103
|
const path = paths[i];
|
127
104
|
const newContext = Object.assign({}, context, {
|
128
105
|
inCaseClause: false
|
129
106
|
});
|
130
|
-
|
131
107
|
if (path.isBlockStatement() && (context.inCaseClause || context.shouldPopulateBreak)) {
|
132
108
|
newContext.shouldPopulateBreak = true;
|
133
109
|
} else {
|
134
110
|
newContext.shouldPopulateBreak = false;
|
135
111
|
}
|
136
|
-
|
137
112
|
const statementCompletions = _getCompletionRecords(path, newContext);
|
138
|
-
|
139
113
|
if (statementCompletions.length > 0 && statementCompletions.every(c => c.type === BREAK_COMPLETION)) {
|
140
114
|
if (lastNormalCompletions.length > 0 && statementCompletions.every(c => c.path.isBreakStatement({
|
141
115
|
label: null
|
142
116
|
}))) {
|
143
117
|
normalCompletionToBreak(lastNormalCompletions);
|
144
118
|
completions.push(...lastNormalCompletions);
|
145
|
-
|
146
119
|
if (lastNormalCompletions.some(c => c.path.isDeclaration())) {
|
147
120
|
completions.push(...statementCompletions);
|
148
121
|
replaceBreakStatementInBreakCompletion(statementCompletions, true);
|
149
122
|
}
|
150
|
-
|
151
123
|
replaceBreakStatementInBreakCompletion(statementCompletions, false);
|
152
124
|
} else {
|
153
125
|
completions.push(...statementCompletions);
|
154
|
-
|
155
126
|
if (!context.shouldPopulateBreak) {
|
156
127
|
replaceBreakStatementInBreakCompletion(statementCompletions, true);
|
157
128
|
}
|
158
129
|
}
|
159
|
-
|
160
130
|
break;
|
161
131
|
}
|
162
|
-
|
163
132
|
if (i === paths.length - 1) {
|
164
133
|
completions.push(...statementCompletions);
|
165
134
|
} else {
|
166
135
|
lastNormalCompletions = [];
|
167
|
-
|
168
136
|
for (let i = 0; i < statementCompletions.length; i++) {
|
169
137
|
const c = statementCompletions[i];
|
170
|
-
|
171
138
|
if (c.type === BREAK_COMPLETION) {
|
172
139
|
completions.push(c);
|
173
140
|
}
|
174
|
-
|
175
141
|
if (c.type === NORMAL_COMPLETION) {
|
176
142
|
lastNormalCompletions.push(c);
|
177
143
|
}
|
@@ -181,20 +147,16 @@ function getStatementListCompletion(paths, context) {
|
|
181
147
|
} else if (paths.length) {
|
182
148
|
for (let i = paths.length - 1; i >= 0; i--) {
|
183
149
|
const pathCompletions = _getCompletionRecords(paths[i], context);
|
184
|
-
|
185
150
|
if (pathCompletions.length > 1 || pathCompletions.length === 1 && !pathCompletions[0].path.isVariableDeclaration()) {
|
186
151
|
completions.push(...pathCompletions);
|
187
152
|
break;
|
188
153
|
}
|
189
154
|
}
|
190
155
|
}
|
191
|
-
|
192
156
|
return completions;
|
193
157
|
}
|
194
|
-
|
195
158
|
function _getCompletionRecords(path, context) {
|
196
159
|
let records = [];
|
197
|
-
|
198
160
|
if (path.isIfStatement()) {
|
199
161
|
records = addCompletionRecords(path.get("consequent"), records, context);
|
200
162
|
records = addCompletionRecords(path.get("alternate"), records, context);
|
@@ -222,20 +184,16 @@ function _getCompletionRecords(path, context) {
|
|
222
184
|
} else {
|
223
185
|
records.push(NormalCompletion(path));
|
224
186
|
}
|
225
|
-
|
226
187
|
return records;
|
227
188
|
}
|
228
|
-
|
229
189
|
function getCompletionRecords() {
|
230
190
|
const records = _getCompletionRecords(this, {
|
231
191
|
canHaveBreak: false,
|
232
192
|
shouldPopulateBreak: false,
|
233
193
|
inCaseClause: false
|
234
194
|
});
|
235
|
-
|
236
195
|
return records.map(r => r.path);
|
237
196
|
}
|
238
|
-
|
239
197
|
function getSibling(key) {
|
240
198
|
return _index.default.get({
|
241
199
|
parentPath: this.parentPath,
|
@@ -245,56 +203,44 @@ function getSibling(key) {
|
|
245
203
|
key: key
|
246
204
|
}).setContext(this.context);
|
247
205
|
}
|
248
|
-
|
249
206
|
function getPrevSibling() {
|
250
207
|
return this.getSibling(this.key - 1);
|
251
208
|
}
|
252
|
-
|
253
209
|
function getNextSibling() {
|
254
210
|
return this.getSibling(this.key + 1);
|
255
211
|
}
|
256
|
-
|
257
212
|
function getAllNextSiblings() {
|
258
213
|
let _key = this.key;
|
259
214
|
let sibling = this.getSibling(++_key);
|
260
215
|
const siblings = [];
|
261
|
-
|
262
216
|
while (sibling.node) {
|
263
217
|
siblings.push(sibling);
|
264
218
|
sibling = this.getSibling(++_key);
|
265
219
|
}
|
266
|
-
|
267
220
|
return siblings;
|
268
221
|
}
|
269
|
-
|
270
222
|
function getAllPrevSiblings() {
|
271
223
|
let _key = this.key;
|
272
224
|
let sibling = this.getSibling(--_key);
|
273
225
|
const siblings = [];
|
274
|
-
|
275
226
|
while (sibling.node) {
|
276
227
|
siblings.push(sibling);
|
277
228
|
sibling = this.getSibling(--_key);
|
278
229
|
}
|
279
|
-
|
280
230
|
return siblings;
|
281
231
|
}
|
282
|
-
|
283
232
|
function get(key, context = true) {
|
284
233
|
if (context === true) context = this.context;
|
285
234
|
const parts = key.split(".");
|
286
|
-
|
287
235
|
if (parts.length === 1) {
|
288
236
|
return this._getKey(key, context);
|
289
237
|
} else {
|
290
238
|
return this._getPattern(parts, context);
|
291
239
|
}
|
292
240
|
}
|
293
|
-
|
294
241
|
function _getKey(key, context) {
|
295
242
|
const node = this.node;
|
296
243
|
const container = node[key];
|
297
|
-
|
298
244
|
if (Array.isArray(container)) {
|
299
245
|
return container.map((_, i) => {
|
300
246
|
return _index.default.get({
|
@@ -314,10 +260,8 @@ function _getKey(key, context) {
|
|
314
260
|
}).setContext(context);
|
315
261
|
}
|
316
262
|
}
|
317
|
-
|
318
263
|
function _getPattern(parts, context) {
|
319
264
|
let path = this;
|
320
|
-
|
321
265
|
for (const part of parts) {
|
322
266
|
if (part === ".") {
|
323
267
|
path = path.parentPath;
|
@@ -329,67 +273,52 @@ function _getPattern(parts, context) {
|
|
329
273
|
}
|
330
274
|
}
|
331
275
|
}
|
332
|
-
|
333
276
|
return path;
|
334
277
|
}
|
335
|
-
|
336
278
|
function getBindingIdentifiers(duplicates) {
|
337
279
|
return _getBindingIdentifiers(this.node, duplicates);
|
338
280
|
}
|
339
|
-
|
340
281
|
function getOuterBindingIdentifiers(duplicates) {
|
341
282
|
return _getOuterBindingIdentifiers(this.node, duplicates);
|
342
283
|
}
|
343
|
-
|
344
284
|
function getBindingIdentifierPaths(duplicates = false, outerOnly = false) {
|
345
285
|
const path = this;
|
346
286
|
const search = [path];
|
347
287
|
const ids = Object.create(null);
|
348
|
-
|
349
288
|
while (search.length) {
|
350
289
|
const id = search.shift();
|
351
290
|
if (!id) continue;
|
352
291
|
if (!id.node) continue;
|
353
292
|
const keys = _getBindingIdentifiers.keys[id.node.type];
|
354
|
-
|
355
293
|
if (id.isIdentifier()) {
|
356
294
|
if (duplicates) {
|
357
295
|
const _ids = ids[id.node.name] = ids[id.node.name] || [];
|
358
|
-
|
359
296
|
_ids.push(id);
|
360
297
|
} else {
|
361
298
|
ids[id.node.name] = id;
|
362
299
|
}
|
363
|
-
|
364
300
|
continue;
|
365
301
|
}
|
366
|
-
|
367
302
|
if (id.isExportDeclaration()) {
|
368
303
|
const declaration = id.get("declaration");
|
369
|
-
|
370
304
|
if (isDeclaration(declaration)) {
|
371
305
|
search.push(declaration);
|
372
306
|
}
|
373
|
-
|
374
307
|
continue;
|
375
308
|
}
|
376
|
-
|
377
309
|
if (outerOnly) {
|
378
310
|
if (id.isFunctionDeclaration()) {
|
379
311
|
search.push(id.get("id"));
|
380
312
|
continue;
|
381
313
|
}
|
382
|
-
|
383
314
|
if (id.isFunctionExpression()) {
|
384
315
|
continue;
|
385
316
|
}
|
386
317
|
}
|
387
|
-
|
388
318
|
if (keys) {
|
389
319
|
for (let i = 0; i < keys.length; i++) {
|
390
320
|
const key = keys[i];
|
391
321
|
const child = id.get(key);
|
392
|
-
|
393
322
|
if (Array.isArray(child)) {
|
394
323
|
search.push(...child);
|
395
324
|
} else if (child.node) {
|
@@ -398,10 +327,10 @@ function getBindingIdentifierPaths(duplicates = false, outerOnly = false) {
|
|
398
327
|
}
|
399
328
|
}
|
400
329
|
}
|
401
|
-
|
402
330
|
return ids;
|
403
331
|
}
|
404
|
-
|
405
|
-
function getOuterBindingIdentifierPaths(duplicates) {
|
332
|
+
function getOuterBindingIdentifierPaths(duplicates = false) {
|
406
333
|
return this.getBindingIdentifierPaths(duplicates, true);
|
407
|
-
}
|
334
|
+
}
|
335
|
+
|
336
|
+
//# sourceMappingURL=family.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["_index","require","_t","getBindingIdentifiers","_getBindingIdentifiers","getOuterBindingIdentifiers","_getOuterBindingIdentifiers","isDeclaration","numericLiteral","unaryExpression","NORMAL_COMPLETION","BREAK_COMPLETION","NormalCompletion","path","type","BreakCompletion","getOpposite","key","getSibling","addCompletionRecords","records","context","push","_getCompletionRecords","completionRecordForSwitch","cases","lastNormalCompletions","i","length","casePath","caseCompletions","normalCompletions","breakCompletions","c","normalCompletionToBreak","completions","forEach","replaceBreakStatementInBreakCompletion","reachable","isBreakStatement","label","replaceWith","remove","getStatementListCompletion","paths","canHaveBreak","newContext","Object","assign","inCaseClause","isBlockStatement","shouldPopulateBreak","statementCompletions","every","some","pathCompletions","isVariableDeclaration","isIfStatement","get","isDoExpression","isFor","isWhile","isLabeledStatement","isProgram","isFunction","isTryStatement","isCatchClause","isSwitchStatement","isSwitchCase","getCompletionRecords","map","r","NodePath","parentPath","parent","container","listKey","setContext","getPrevSibling","getNextSibling","getAllNextSiblings","_key","sibling","siblings","node","getAllPrevSiblings","parts","split","_getKey","_getPattern","Array","isArray","_","part","duplicates","getBindingIdentifierPaths","outerOnly","search","ids","create","id","shift","keys","isIdentifier","_ids","name","isExportDeclaration","declaration","isFunctionDeclaration","isFunctionExpression","child","getOuterBindingIdentifierPaths"],"sources":["../../src/path/family.ts"],"sourcesContent":["// This file contains methods responsible for dealing with/retrieving children or siblings.\n\nimport type TraversalContext from \"../context.ts\";\nimport NodePath from \"./index.ts\";\nimport {\n getBindingIdentifiers as _getBindingIdentifiers,\n getOuterBindingIdentifiers as _getOuterBindingIdentifiers,\n isDeclaration,\n numericLiteral,\n unaryExpression,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\nconst NORMAL_COMPLETION = 0 as const;\nconst BREAK_COMPLETION = 1 as const;\n\ntype Completion = {\n path: NodePath;\n type: 0 | 1;\n};\n\ntype CompletionContext = {\n // whether the current context allows `break` statement. When it allows, we have\n // to search all the statements for potential `break`\n canHaveBreak: boolean;\n // whether the statement is an immediate descendant of a switch case clause\n inCaseClause: boolean;\n // whether the `break` statement record should be populated to upper level\n // when a `break` statement is an immediate descendant of a block statement, e.g.\n // `{ break }`, it can influence the control flow in the upper levels.\n shouldPopulateBreak: boolean;\n};\n\nfunction NormalCompletion(path: NodePath) {\n return { type: NORMAL_COMPLETION, path };\n}\n\nfunction BreakCompletion(path: NodePath) {\n return { type: BREAK_COMPLETION, path };\n}\n\nexport function getOpposite(this: NodePath): NodePath | null {\n if (this.key === \"left\") {\n return this.getSibling(\"right\");\n } else if (this.key === \"right\") {\n return this.getSibling(\"left\");\n }\n return null;\n}\n\nfunction addCompletionRecords(\n path: NodePath | null | undefined,\n records: Completion[],\n context: CompletionContext,\n): Completion[] {\n if (path) {\n records.push(..._getCompletionRecords(path, context));\n }\n return records;\n}\n\nfunction completionRecordForSwitch(\n cases: NodePath<t.SwitchCase>[],\n records: Completion[],\n context: CompletionContext,\n): Completion[] {\n // https://tc39.es/ecma262/#sec-runtime-semantics-caseblockevaluation\n let lastNormalCompletions: Completion[] = [];\n for (let i = 0; i < cases.length; i++) {\n const casePath = cases[i];\n const caseCompletions = _getCompletionRecords(casePath, context);\n const normalCompletions = [];\n const breakCompletions = [];\n for (const c of caseCompletions) {\n if (c.type === NORMAL_COMPLETION) {\n normalCompletions.push(c);\n }\n if (c.type === BREAK_COMPLETION) {\n breakCompletions.push(c);\n }\n }\n if (normalCompletions.length) {\n lastNormalCompletions = normalCompletions;\n }\n records.push(...breakCompletions);\n }\n records.push(...lastNormalCompletions);\n return records;\n}\n\nfunction normalCompletionToBreak(completions: Completion[]) {\n completions.forEach(c => {\n c.type = BREAK_COMPLETION;\n });\n}\n\n/**\n * Determine how we should handle the break statement for break completions\n *\n * @param {Completion[]} completions\n * @param {boolean} reachable Whether the break statement is reachable after\n we mark the normal completions _before_ the given break completions as the final\n completions. For example,\n `{ 0 }; break;` is transformed to `{ return 0 }; break;`, the `break` here is unreachable\n and thus can be removed without consequences. We may in the future reserve them instead since\n we do not consistently remove unreachable statements _after_ break\n `{ var x = 0 }; break;` is transformed to `{ var x = 0 }; return void 0;`, the `break` is reachable\n because we can not wrap variable declaration under a return statement\n */\nfunction replaceBreakStatementInBreakCompletion(\n completions: Completion[],\n reachable: boolean,\n) {\n completions.forEach(c => {\n if (c.path.isBreakStatement({ label: null })) {\n if (reachable) {\n c.path.replaceWith(unaryExpression(\"void\", numericLiteral(0)));\n } else {\n c.path.remove();\n }\n }\n });\n}\n\nfunction getStatementListCompletion(\n paths: NodePath[],\n context: CompletionContext,\n): Completion[] {\n const completions = [];\n if (context.canHaveBreak) {\n let lastNormalCompletions = [];\n for (let i = 0; i < paths.length; i++) {\n const path = paths[i];\n const newContext = { ...context, inCaseClause: false };\n if (\n path.isBlockStatement() &&\n (context.inCaseClause || // case test: { break }\n context.shouldPopulateBreak) // case test: { { break } }\n ) {\n newContext.shouldPopulateBreak = true;\n } else {\n newContext.shouldPopulateBreak = false;\n }\n const statementCompletions = _getCompletionRecords(path, newContext);\n if (\n statementCompletions.length > 0 &&\n // we can stop search `paths` when we have seen a `path` that is\n // effectively a `break` statement. Examples are\n // - `break`\n // - `if (true) { 1; break } else { 2; break }`\n // - `{ break }```\n // In other words, the paths after this `path` are unreachable\n statementCompletions.every(c => c.type === BREAK_COMPLETION)\n ) {\n if (\n lastNormalCompletions.length > 0 &&\n statementCompletions.every(c =>\n c.path.isBreakStatement({ label: null }),\n )\n ) {\n // when a break completion has a path as BreakStatement, it must be `{ break }`\n // whose completion value we can not determine, otherwise it would have been\n // replaced by `replaceBreakStatementInBreakCompletion`\n // When we have seen normal completions from the last statement\n // it is safe to stop populating break and mark normal completions as break\n normalCompletionToBreak(lastNormalCompletions);\n completions.push(...lastNormalCompletions);\n // Declarations have empty completion record, however they can not be nested\n // directly in return statement, i.e. `return (var a = 1)` is invalid.\n if (lastNormalCompletions.some(c => c.path.isDeclaration())) {\n completions.push(...statementCompletions);\n replaceBreakStatementInBreakCompletion(\n statementCompletions,\n /* reachable */ true,\n );\n }\n replaceBreakStatementInBreakCompletion(\n statementCompletions,\n /* reachable */ false,\n );\n } else {\n completions.push(...statementCompletions);\n if (!context.shouldPopulateBreak) {\n replaceBreakStatementInBreakCompletion(\n statementCompletions,\n /* reachable */ true,\n );\n }\n }\n break;\n }\n if (i === paths.length - 1) {\n completions.push(...statementCompletions);\n } else {\n lastNormalCompletions = [];\n for (let i = 0; i < statementCompletions.length; i++) {\n const c = statementCompletions[i];\n if (c.type === BREAK_COMPLETION) {\n completions.push(c);\n }\n if (c.type === NORMAL_COMPLETION) {\n lastNormalCompletions.push(c);\n }\n }\n }\n }\n } else if (paths.length) {\n // When we are in a context where `break` must not exist, we can skip linear\n // search on statement lists and assume that the last\n // non-variable-declaration statement determines the completion.\n for (let i = paths.length - 1; i >= 0; i--) {\n const pathCompletions = _getCompletionRecords(paths[i], context);\n if (\n pathCompletions.length > 1 ||\n (pathCompletions.length === 1 &&\n !pathCompletions[0].path.isVariableDeclaration())\n ) {\n completions.push(...pathCompletions);\n break;\n }\n }\n }\n return completions;\n}\n\nfunction _getCompletionRecords(\n path: NodePath,\n context: CompletionContext,\n): Completion[] {\n let records: Completion[] = [];\n if (path.isIfStatement()) {\n records = addCompletionRecords(path.get(\"consequent\"), records, context);\n records = addCompletionRecords(path.get(\"alternate\"), records, context);\n } else if (\n path.isDoExpression() ||\n path.isFor() ||\n path.isWhile() ||\n path.isLabeledStatement()\n ) {\n // @ts-expect-error(flow->ts): todo\n return addCompletionRecords(path.get(\"body\"), records, context);\n } else if (path.isProgram() || path.isBlockStatement()) {\n // @ts-expect-error(flow->ts): todo\n return getStatementListCompletion(path.get(\"body\"), context);\n } else if (path.isFunction()) {\n return _getCompletionRecords(path.get(\"body\"), context);\n } else if (path.isTryStatement()) {\n records = addCompletionRecords(path.get(\"block\"), records, context);\n records = addCompletionRecords(path.get(\"handler\"), records, context);\n } else if (path.isCatchClause()) {\n return addCompletionRecords(path.get(\"body\"), records, context);\n } else if (path.isSwitchStatement()) {\n return completionRecordForSwitch(path.get(\"cases\"), records, context);\n } else if (path.isSwitchCase()) {\n return getStatementListCompletion(path.get(\"consequent\"), {\n canHaveBreak: true,\n shouldPopulateBreak: false,\n inCaseClause: true,\n });\n } else if (path.isBreakStatement()) {\n records.push(BreakCompletion(path));\n } else {\n records.push(NormalCompletion(path));\n }\n\n return records;\n}\n\n/**\n * Retrieve the completion records of a given path.\n * Note: to ensure proper support on `break` statement, this method\n * will manipulate the AST around the break statement. Do not call the method\n * twice for the same path.\n *\n * @export\n * @param {NodePath} this\n * @returns {NodePath[]} Completion records\n */\nexport function getCompletionRecords(this: NodePath): NodePath[] {\n const records = _getCompletionRecords(this, {\n canHaveBreak: false,\n shouldPopulateBreak: false,\n inCaseClause: false,\n });\n return records.map(r => r.path);\n}\n\nexport function getSibling(this: NodePath, key: string | number): NodePath {\n return NodePath.get({\n parentPath: this.parentPath,\n parent: this.parent,\n container: this.container,\n listKey: this.listKey,\n key: key,\n }).setContext(this.context);\n}\n\nexport function getPrevSibling(this: NodePath): NodePath {\n // @ts-expect-error todo(flow->ts) this.key could be a string\n return this.getSibling(this.key - 1);\n}\n\nexport function getNextSibling(this: NodePath): NodePath {\n // @ts-expect-error todo(flow->ts) this.key could be a string\n return this.getSibling(this.key + 1);\n}\n\nexport function getAllNextSiblings(this: NodePath): NodePath[] {\n // @ts-expect-error todo(flow->ts) this.key could be a string\n let _key: number = this.key;\n let sibling = this.getSibling(++_key);\n const siblings = [];\n while (sibling.node) {\n siblings.push(sibling);\n sibling = this.getSibling(++_key);\n }\n return siblings;\n}\n\nexport function getAllPrevSiblings(this: NodePath): NodePath[] {\n // @ts-expect-error todo(flow->ts) this.key could be a string\n let _key: number = this.key;\n let sibling = this.getSibling(--_key);\n const siblings = [];\n while (sibling.node) {\n siblings.push(sibling);\n sibling = this.getSibling(--_key);\n }\n return siblings;\n}\n\n// convert \"1\" to 1 (string index to number index)\ntype MaybeToIndex<T extends string> = T extends `${bigint}` ? number : T;\n\ntype Pattern<Obj extends string, Prop extends string> = `${Obj}.${Prop}`;\n\n// split \"body.body.1\" to [\"body\", \"body\", 1]\ntype Split<P extends string> = P extends Pattern<infer O, infer U>\n ? [MaybeToIndex<O>, ...Split<U>]\n : [MaybeToIndex<P>];\n\n// get all K with Node[K] is t.Node | t.Node[]\ntype NodeKeyOf<Node extends t.Node | t.Node[]> = keyof Pick<\n Node,\n {\n [Key in keyof Node]-?: Node[Key] extends t.Node | t.Node[] ? Key : never;\n }[keyof Node]\n>;\n\n// traverse the Node with tuple path [\"body\", \"body\", 1]\n// Path should be created with Split\ntype Trav<\n Node extends t.Node | t.Node[],\n Path extends unknown[],\n> = Path extends [infer K, ...infer R]\n ? K extends NodeKeyOf<Node>\n ? R extends []\n ? Node[K]\n : // @ts-expect-error ignore since TS is not smart enough\n Trav<Node[K], R>\n : never\n : never;\n\ntype ToNodePath<T> = T extends Array<t.Node | null | undefined>\n ? Array<NodePath<T[number]>>\n : T extends t.Node | null | undefined\n ? NodePath<T>\n : never;\n\nfunction get<T extends t.Node, K extends keyof T>(\n this: NodePath<T>,\n key: K,\n context?: boolean | TraversalContext,\n): T[K] extends Array<t.Node | null | undefined>\n ? Array<NodePath<T[K][number]>>\n : T[K] extends t.Node | null | undefined\n ? NodePath<T[K]>\n : never;\n\nfunction get<T extends t.Node, K extends string>(\n this: NodePath<T>,\n key: K,\n context?: boolean | TraversalContext,\n): ToNodePath<Trav<T, Split<K>>>;\n\nfunction get<T extends t.Node>(\n this: NodePath<T>,\n key: string,\n context?: true | TraversalContext,\n): NodePath | NodePath[];\n\nfunction get<T extends t.Node>(\n this: NodePath<T>,\n key: string,\n context: true | TraversalContext = true,\n): NodePath | NodePath[] {\n if (context === true) context = this.context;\n const parts = key.split(\".\");\n if (parts.length === 1) {\n // \"foo\"\n // @ts-expect-error key may not index T\n return this._getKey(key, context);\n } else {\n // \"foo.bar\"\n return this._getPattern(parts, context);\n }\n}\n\nexport { get };\n\nexport function _getKey<T extends t.Node>(\n this: NodePath<T>,\n key: keyof T & string,\n context?: TraversalContext,\n): NodePath | NodePath[] {\n const node = this.node;\n const container = node[key];\n\n if (Array.isArray(container)) {\n // requested a container so give them all the paths\n return container.map((_, i) => {\n return NodePath.get({\n listKey: key,\n parentPath: this,\n parent: node,\n container: container,\n key: i,\n }).setContext(context);\n });\n } else {\n return NodePath.get({\n parentPath: this,\n parent: node,\n container: node,\n key: key,\n }).setContext(context);\n }\n}\n\nexport function _getPattern(\n this: NodePath,\n parts: string[],\n context?: TraversalContext,\n): NodePath | NodePath[] {\n let path: NodePath | NodePath[] = this;\n for (const part of parts) {\n if (part === \".\") {\n // @ts-expect-error todo(flow-ts): Can path be an array here?\n path = path.parentPath;\n } else {\n if (Array.isArray(path)) {\n // @ts-expect-error part may not index path\n path = path[part];\n } else {\n path = path.get(part, context);\n }\n }\n }\n return path;\n}\n\nfunction getBindingIdentifiers(\n duplicates: true,\n): Record<string, t.Identifier[]>;\nfunction getBindingIdentifiers(\n duplicates?: false,\n): Record<string, t.Identifier>;\nfunction getBindingIdentifiers(\n duplicates: boolean,\n): Record<string, t.Identifier[] | t.Identifier>;\n\nfunction getBindingIdentifiers(\n this: NodePath,\n duplicates?: boolean,\n): Record<string, t.Identifier[] | t.Identifier> {\n return _getBindingIdentifiers(this.node, duplicates);\n}\n\nexport { getBindingIdentifiers };\n\nfunction getOuterBindingIdentifiers(\n duplicates: true,\n): Record<string, t.Identifier[]>;\nfunction getOuterBindingIdentifiers(\n duplicates?: false,\n): Record<string, t.Identifier>;\nfunction getOuterBindingIdentifiers(\n duplicates: boolean,\n): Record<string, t.Identifier[] | t.Identifier>;\n\nfunction getOuterBindingIdentifiers(\n this: NodePath,\n duplicates?: boolean,\n): Record<string, t.Identifier[] | t.Identifier> {\n return _getOuterBindingIdentifiers(this.node, duplicates);\n}\n\nexport { getOuterBindingIdentifiers };\n\nfunction getBindingIdentifierPaths(\n duplicates: true,\n outerOnly?: boolean,\n): Record<string, NodePath<t.Identifier>[]>;\nfunction getBindingIdentifierPaths(\n duplicates: false,\n outerOnly?: boolean,\n): Record<string, NodePath<t.Identifier>>;\nfunction getBindingIdentifierPaths(\n duplicates?: boolean,\n outerOnly?: boolean,\n): Record<string, NodePath<t.Identifier> | NodePath<t.Identifier>[]>;\n\n// original source - https://github.com/babel/babel/blob/main/packages/babel-types/src/retrievers/getBindingIdentifiers.js\n// path.getBindingIdentifiers returns nodes where the following re-implementation returns paths\nfunction getBindingIdentifierPaths(\n this: NodePath,\n duplicates: boolean = false,\n outerOnly: boolean = false,\n): Record<string, NodePath<t.Identifier> | NodePath<t.Identifier>[]> {\n const path = this;\n const search = [path];\n const ids = Object.create(null);\n\n while (search.length) {\n const id = search.shift();\n if (!id) continue;\n if (!id.node) continue;\n\n const keys =\n // @ts-expect-error _getBindingIdentifiers.keys do not cover all node types\n _getBindingIdentifiers.keys[id.node.type];\n\n if (id.isIdentifier()) {\n if (duplicates) {\n const _ids = (ids[id.node.name] = ids[id.node.name] || []);\n _ids.push(id);\n } else {\n ids[id.node.name] = id;\n }\n continue;\n }\n\n if (id.isExportDeclaration()) {\n const declaration = id.get(\"declaration\");\n if (isDeclaration(declaration)) {\n search.push(declaration);\n }\n continue;\n }\n\n if (outerOnly) {\n if (id.isFunctionDeclaration()) {\n search.push(id.get(\"id\"));\n continue;\n }\n if (id.isFunctionExpression()) {\n continue;\n }\n }\n\n if (keys) {\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const child = id.get(key);\n if (Array.isArray(child)) {\n search.push(...child);\n } else if (child.node) {\n search.push(child);\n }\n }\n }\n }\n\n return ids;\n}\n\nexport { getBindingIdentifierPaths };\n\nfunction getOuterBindingIdentifierPaths(\n duplicates: true,\n): Record<string, NodePath<t.Identifier>[]>;\nfunction getOuterBindingIdentifierPaths(\n duplicates?: false,\n): Record<string, NodePath<t.Identifier>>;\nfunction getOuterBindingIdentifierPaths(\n duplicates?: boolean,\n): Record<string, NodePath<t.Identifier> | NodePath<t.Identifier>[]>;\n\nfunction getOuterBindingIdentifierPaths(\n this: NodePath,\n duplicates: boolean = false,\n) {\n return this.getBindingIdentifierPaths(duplicates, true);\n}\n\nexport { getOuterBindingIdentifierPaths };\n"],"mappings":"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"}
|
package/lib/path/index.js
CHANGED
@@ -4,58 +4,36 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.default = exports.SHOULD_STOP = exports.SHOULD_SKIP = exports.REMOVED = void 0;
|
7
|
-
|
8
|
-
var virtualTypes = require("./lib/virtual-types");
|
9
|
-
|
7
|
+
var virtualTypes = require("./lib/virtual-types.js");
|
10
8
|
var _debug = require("debug");
|
11
|
-
|
12
|
-
var
|
13
|
-
|
14
|
-
var _scope = require("../scope");
|
15
|
-
|
9
|
+
var _index = require("../index.js");
|
10
|
+
var _index2 = require("../scope/index.js");
|
16
11
|
var _t = require("@babel/types");
|
17
|
-
|
18
12
|
var t = _t;
|
19
|
-
|
20
|
-
var _cache = require("../cache");
|
21
|
-
|
13
|
+
var cache = require("../cache.js");
|
22
14
|
var _generator = require("@babel/generator");
|
23
|
-
|
24
|
-
var
|
25
|
-
|
26
|
-
var
|
27
|
-
|
28
|
-
var
|
29
|
-
|
30
|
-
var
|
31
|
-
|
32
|
-
var
|
33
|
-
|
34
|
-
var
|
35
|
-
|
36
|
-
var NodePath_context = require("./context");
|
37
|
-
|
38
|
-
var NodePath_removal = require("./removal");
|
39
|
-
|
40
|
-
var NodePath_modification = require("./modification");
|
41
|
-
|
42
|
-
var NodePath_family = require("./family");
|
43
|
-
|
44
|
-
var NodePath_comments = require("./comments");
|
45
|
-
|
15
|
+
var NodePath_ancestry = require("./ancestry.js");
|
16
|
+
var NodePath_inference = require("./inference/index.js");
|
17
|
+
var NodePath_replacement = require("./replacement.js");
|
18
|
+
var NodePath_evaluation = require("./evaluation.js");
|
19
|
+
var NodePath_conversion = require("./conversion.js");
|
20
|
+
var NodePath_introspection = require("./introspection.js");
|
21
|
+
var NodePath_context = require("./context.js");
|
22
|
+
var NodePath_removal = require("./removal.js");
|
23
|
+
var NodePath_modification = require("./modification.js");
|
24
|
+
var NodePath_family = require("./family.js");
|
25
|
+
var NodePath_comments = require("./comments.js");
|
26
|
+
var NodePath_virtual_types_validator = require("./lib/virtual-types-validator.js");
|
46
27
|
const {
|
47
28
|
validate
|
48
29
|
} = _t;
|
49
|
-
|
50
30
|
const debug = _debug("babel");
|
51
|
-
|
52
31
|
const REMOVED = 1 << 0;
|
53
32
|
exports.REMOVED = REMOVED;
|
54
33
|
const SHOULD_STOP = 1 << 1;
|
55
34
|
exports.SHOULD_STOP = SHOULD_STOP;
|
56
35
|
const SHOULD_SKIP = 1 << 2;
|
57
36
|
exports.SHOULD_SKIP = SHOULD_SKIP;
|
58
|
-
|
59
37
|
class NodePath {
|
60
38
|
constructor(hub, parent) {
|
61
39
|
this.contexts = [];
|
@@ -75,7 +53,6 @@ class NodePath {
|
|
75
53
|
this.context = null;
|
76
54
|
this.scope = null;
|
77
55
|
}
|
78
|
-
|
79
56
|
static get({
|
80
57
|
hub,
|
81
58
|
parentPath,
|
@@ -87,111 +64,80 @@ class NodePath {
|
|
87
64
|
if (!hub && parentPath) {
|
88
65
|
hub = parentPath.hub;
|
89
66
|
}
|
90
|
-
|
91
67
|
if (!parent) {
|
92
68
|
throw new Error("To get a node path the parent needs to exist");
|
93
69
|
}
|
94
|
-
|
95
70
|
const targetNode = container[key];
|
96
|
-
|
97
|
-
let paths = _cache.path.get(parent);
|
98
|
-
|
99
|
-
if (!paths) {
|
100
|
-
paths = new Map();
|
101
|
-
|
102
|
-
_cache.path.set(parent, paths);
|
103
|
-
}
|
104
|
-
|
71
|
+
const paths = cache.getOrCreateCachedPaths(hub, parent);
|
105
72
|
let path = paths.get(targetNode);
|
106
|
-
|
107
73
|
if (!path) {
|
108
74
|
path = new NodePath(hub, parent);
|
109
75
|
if (targetNode) paths.set(targetNode, path);
|
110
76
|
}
|
111
|
-
|
112
77
|
path.setup(parentPath, container, listKey, key);
|
113
78
|
return path;
|
114
79
|
}
|
115
|
-
|
116
80
|
getScope(scope) {
|
117
|
-
return this.isScope() ? new
|
81
|
+
return this.isScope() ? new _index2.default(this) : scope;
|
118
82
|
}
|
119
|
-
|
120
83
|
setData(key, val) {
|
121
84
|
if (this.data == null) {
|
122
85
|
this.data = Object.create(null);
|
123
86
|
}
|
124
|
-
|
125
87
|
return this.data[key] = val;
|
126
88
|
}
|
127
|
-
|
128
89
|
getData(key, def) {
|
129
90
|
if (this.data == null) {
|
130
91
|
this.data = Object.create(null);
|
131
92
|
}
|
132
|
-
|
133
93
|
let val = this.data[key];
|
134
94
|
if (val === undefined && def !== undefined) val = this.data[key] = def;
|
135
95
|
return val;
|
136
96
|
}
|
137
|
-
|
138
97
|
hasNode() {
|
139
98
|
return this.node != null;
|
140
99
|
}
|
141
|
-
|
142
100
|
buildCodeFrameError(msg, Error = SyntaxError) {
|
143
101
|
return this.hub.buildError(this.node, msg, Error);
|
144
102
|
}
|
145
|
-
|
146
103
|
traverse(visitor, state) {
|
147
104
|
(0, _index.default)(this.node, visitor, this.scope, state, this);
|
148
105
|
}
|
149
|
-
|
150
106
|
set(key, node) {
|
151
107
|
validate(this.node, key, node);
|
152
108
|
this.node[key] = node;
|
153
109
|
}
|
154
|
-
|
155
110
|
getPathLocation() {
|
156
111
|
const parts = [];
|
157
112
|
let path = this;
|
158
|
-
|
159
113
|
do {
|
160
114
|
let key = path.key;
|
161
115
|
if (path.inList) key = `${path.listKey}[${key}]`;
|
162
116
|
parts.unshift(key);
|
163
117
|
} while (path = path.parentPath);
|
164
|
-
|
165
118
|
return parts.join(".");
|
166
119
|
}
|
167
|
-
|
168
120
|
debug(message) {
|
169
121
|
if (!debug.enabled) return;
|
170
122
|
debug(`${this.getPathLocation()} ${this.type}: ${message}`);
|
171
123
|
}
|
172
|
-
|
173
124
|
toString() {
|
174
125
|
return (0, _generator.default)(this.node).code;
|
175
126
|
}
|
176
|
-
|
177
127
|
get inList() {
|
178
128
|
return !!this.listKey;
|
179
129
|
}
|
180
|
-
|
181
130
|
set inList(inList) {
|
182
131
|
if (!inList) {
|
183
132
|
this.listKey = null;
|
184
133
|
}
|
185
134
|
}
|
186
|
-
|
187
135
|
get parentKey() {
|
188
136
|
return this.listKey || this.key;
|
189
137
|
}
|
190
|
-
|
191
138
|
get shouldSkip() {
|
192
139
|
return !!(this._traverseFlags & SHOULD_SKIP);
|
193
140
|
}
|
194
|
-
|
195
141
|
set shouldSkip(v) {
|
196
142
|
if (v) {
|
197
143
|
this._traverseFlags |= SHOULD_SKIP;
|
@@ -199,11 +145,9 @@ class NodePath {
|
|
199
145
|
this._traverseFlags &= ~SHOULD_SKIP;
|
200
146
|
}
|
201
147
|
}
|
202
|
-
|
203
148
|
get shouldStop() {
|
204
149
|
return !!(this._traverseFlags & SHOULD_STOP);
|
205
150
|
}
|
206
|
-
|
207
151
|
set shouldStop(v) {
|
208
152
|
if (v) {
|
209
153
|
this._traverseFlags |= SHOULD_STOP;
|
@@ -211,11 +155,9 @@ class NodePath {
|
|
211
155
|
this._traverseFlags &= ~SHOULD_STOP;
|
212
156
|
}
|
213
157
|
}
|
214
|
-
|
215
158
|
get removed() {
|
216
159
|
return !!(this._traverseFlags & REMOVED);
|
217
160
|
}
|
218
|
-
|
219
161
|
set removed(v) {
|
220
162
|
if (v) {
|
221
163
|
this._traverseFlags |= REMOVED;
|
@@ -223,35 +165,29 @@ class NodePath {
|
|
223
165
|
this._traverseFlags &= ~REMOVED;
|
224
166
|
}
|
225
167
|
}
|
226
|
-
|
227
168
|
}
|
228
|
-
|
229
169
|
Object.assign(NodePath.prototype, NodePath_ancestry, NodePath_inference, NodePath_replacement, NodePath_evaluation, NodePath_conversion, NodePath_introspection, NodePath_context, NodePath_removal, NodePath_modification, NodePath_family, NodePath_comments);
|
230
|
-
|
170
|
+
{
|
171
|
+
NodePath.prototype._guessExecutionStatusRelativeToDifferentFunctions = NodePath_introspection._guessExecutionStatusRelativeTo;
|
172
|
+
}
|
231
173
|
for (const type of t.TYPES) {
|
232
174
|
const typeKey = `is${type}`;
|
233
175
|
const fn = t[typeKey];
|
234
|
-
|
235
176
|
NodePath.prototype[typeKey] = function (opts) {
|
236
177
|
return fn(this.node, opts);
|
237
178
|
};
|
238
|
-
|
239
179
|
NodePath.prototype[`assert${type}`] = function (opts) {
|
240
180
|
if (!fn(this.node, opts)) {
|
241
181
|
throw new TypeError(`Expected node path of type ${type}`);
|
242
182
|
}
|
243
183
|
};
|
244
184
|
}
|
245
|
-
|
185
|
+
Object.assign(NodePath.prototype, NodePath_virtual_types_validator);
|
246
186
|
for (const type of Object.keys(virtualTypes)) {
|
247
187
|
if (type[0] === "_") continue;
|
248
|
-
if (t.TYPES.
|
249
|
-
const virtualType = virtualTypes[type];
|
250
|
-
|
251
|
-
NodePath.prototype[`is${type}`] = function (opts) {
|
252
|
-
return virtualType.checkPath(this, opts);
|
253
|
-
};
|
188
|
+
if (!t.TYPES.includes(type)) t.TYPES.push(type);
|
254
189
|
}
|
255
|
-
|
256
190
|
var _default = NodePath;
|
257
|
-
exports.default = _default;
|
191
|
+
exports.default = _default;
|
192
|
+
|
193
|
+
//# sourceMappingURL=index.js.map
|