@openrewrite/rewrite 8.62.4 → 8.62.6
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/dist/java/tree.d.ts +12 -6
- package/dist/java/tree.d.ts.map +1 -1
- package/dist/java/tree.js +12 -5
- package/dist/java/tree.js.map +1 -1
- package/dist/java/type.d.ts +2 -0
- package/dist/java/type.d.ts.map +1 -1
- package/dist/java/type.js +12 -0
- package/dist/java/type.js.map +1 -1
- package/dist/java/visitor.d.ts +8 -0
- package/dist/java/visitor.d.ts.map +1 -1
- package/dist/java/visitor.js +23 -1
- package/dist/java/visitor.js.map +1 -1
- package/dist/javascript/index.d.ts +3 -0
- package/dist/javascript/index.d.ts.map +1 -1
- package/dist/javascript/index.js +3 -0
- package/dist/javascript/index.js.map +1 -1
- package/dist/javascript/method-matcher.d.ts +16 -0
- package/dist/javascript/method-matcher.d.ts.map +1 -0
- package/dist/javascript/method-matcher.js +222 -0
- package/dist/javascript/method-matcher.js.map +1 -0
- package/dist/javascript/parser.js +1 -1
- package/dist/javascript/parser.js.map +1 -1
- package/dist/javascript/preconditions.d.ts +6 -0
- package/dist/javascript/preconditions.d.ts.map +1 -0
- package/dist/javascript/preconditions.js +58 -0
- package/dist/javascript/preconditions.js.map +1 -0
- package/dist/javascript/remove-import.d.ts +56 -0
- package/dist/javascript/remove-import.d.ts.map +1 -0
- package/dist/javascript/remove-import.js +715 -0
- package/dist/javascript/remove-import.js.map +1 -0
- package/dist/javascript/rpc.js +2 -2
- package/dist/javascript/rpc.js.map +1 -1
- package/dist/javascript/search/index.d.ts +3 -0
- package/dist/javascript/search/index.d.ts.map +1 -0
- package/dist/javascript/search/index.js +19 -0
- package/dist/javascript/search/index.js.map +1 -0
- package/dist/javascript/search/uses-method.d.ts +8 -0
- package/dist/javascript/search/uses-method.d.ts.map +1 -0
- package/dist/javascript/search/uses-method.js +35 -0
- package/dist/javascript/search/uses-method.js.map +1 -0
- package/dist/javascript/search/uses-type.d.ts +8 -0
- package/dist/javascript/search/uses-type.d.ts.map +1 -0
- package/dist/javascript/search/uses-type.js +71 -0
- package/dist/javascript/search/uses-type.js.map +1 -0
- package/dist/javascript/templating.d.ts +1 -1
- package/dist/javascript/templating.d.ts.map +1 -1
- package/dist/javascript/templating.js +1 -1
- package/dist/javascript/templating.js.map +1 -1
- package/dist/javascript/tree.d.ts +3 -3
- package/dist/javascript/tree.d.ts.map +1 -1
- package/dist/javascript/tree.js +28 -0
- package/dist/javascript/tree.js.map +1 -1
- package/dist/javascript/type-mapping.d.ts +4 -0
- package/dist/javascript/type-mapping.d.ts.map +1 -1
- package/dist/javascript/type-mapping.js +92 -46
- package/dist/javascript/type-mapping.js.map +1 -1
- package/dist/javascript/visitor.js +1 -1
- package/dist/javascript/visitor.js.map +1 -1
- package/dist/print.d.ts +1 -0
- package/dist/print.d.ts.map +1 -1
- package/dist/print.js +6 -0
- package/dist/print.js.map +1 -1
- package/dist/rpc/rewrite-rpc.d.ts +1 -1
- package/dist/rpc/rewrite-rpc.d.ts.map +1 -1
- package/dist/rpc/rewrite-rpc.js +0 -3
- package/dist/rpc/rewrite-rpc.js.map +1 -1
- package/dist/search/index.d.ts +2 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +18 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/is-source-file.d.ts +8 -0
- package/dist/search/is-source-file.d.ts.map +1 -0
- package/dist/search/is-source-file.js +70 -0
- package/dist/search/is-source-file.js.map +1 -0
- package/dist/test/rewrite-test.d.ts.map +1 -1
- package/dist/test/rewrite-test.js +3 -0
- package/dist/test/rewrite-test.js.map +1 -1
- package/dist/util.d.ts +1 -0
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +13 -0
- package/dist/util.js.map +1 -1
- package/dist/version.txt +1 -1
- package/dist/visitor.d.ts +1 -1
- package/dist/visitor.d.ts.map +1 -1
- package/dist/visitor.js +3 -2
- package/dist/visitor.js.map +1 -1
- package/package.json +3 -1
- package/src/java/tree.ts +19 -11
- package/src/java/type.ts +14 -0
- package/src/java/visitor.ts +28 -8
- package/src/javascript/index.ts +4 -0
- package/src/javascript/method-matcher.ts +250 -0
- package/src/javascript/parser.ts +1 -1
- package/src/javascript/preconditions.ts +40 -0
- package/src/javascript/remove-import.ts +780 -0
- package/src/javascript/rpc.ts +2 -2
- package/src/javascript/search/index.ts +2 -0
- package/src/javascript/search/uses-method.ts +21 -0
- package/src/javascript/search/uses-type.ts +27 -0
- package/src/javascript/templating.ts +4 -3
- package/src/javascript/tree.ts +47 -3
- package/src/javascript/type-mapping.ts +113 -50
- package/src/javascript/visitor.ts +125 -125
- package/src/print.ts +9 -3
- package/src/rpc/rewrite-rpc.ts +1 -4
- package/src/search/index.ts +1 -0
- package/src/search/is-source-file.ts +26 -0
- package/src/test/rewrite-test.ts +4 -1
- package/src/util.ts +19 -4
- package/src/visitor.ts +3 -3
|
@@ -72,10 +72,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
72
72
|
|
|
73
73
|
protected async visitAlias(alias: JS.Alias, p: P): Promise<J | undefined> {
|
|
74
74
|
const expression = await this.visitExpression(alias, p);
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
75
|
+
if (!expression?.kind || expression.kind !== JS.Kind.Alias) {
|
|
76
|
+
return expression;
|
|
77
|
+
}
|
|
78
|
+
alias = expression as JS.Alias;
|
|
79
79
|
|
|
80
80
|
return this.produceJavaScript<JS.Alias>(alias, p, async draft => {
|
|
81
81
|
draft.propertyName = await this.visitRightPadded(alias.propertyName, p);
|
|
@@ -85,10 +85,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
85
85
|
|
|
86
86
|
protected async visitArrowFunction(arrowFunction: JS.ArrowFunction, p: P): Promise<J | undefined> {
|
|
87
87
|
const expression = await this.visitExpression(arrowFunction, p);
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
88
|
+
if (!expression?.kind || expression.kind !== JS.Kind.ArrowFunction) {
|
|
89
|
+
return expression;
|
|
90
|
+
}
|
|
91
|
+
arrowFunction = expression as JS.ArrowFunction;
|
|
92
92
|
|
|
93
93
|
const statement = await this.visitStatement(arrowFunction, p);
|
|
94
94
|
if (!statement?.kind || statement.kind !== JS.Kind.ArrowFunction) {
|
|
@@ -115,10 +115,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
115
115
|
|
|
116
116
|
protected async visitAwait(await_: JS.Await, p: P): Promise<J | undefined> {
|
|
117
117
|
const expression = await this.visitExpression(await_, p);
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
118
|
+
if (!expression?.kind || expression.kind !== JS.Kind.Await) {
|
|
119
|
+
return expression;
|
|
120
|
+
}
|
|
121
|
+
await_ = expression as JS.Await;
|
|
122
122
|
|
|
123
123
|
return this.produceJavaScript<JS.Await>(await_, p, async draft => {
|
|
124
124
|
draft.expression = await this.visitDefined<Expression>(await_.expression, p);
|
|
@@ -175,10 +175,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
175
175
|
|
|
176
176
|
protected async visitConditionalType(conditionalType: JS.ConditionalType, p: P): Promise<J | undefined> {
|
|
177
177
|
const expression = await this.visitExpression(conditionalType, p);
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
178
|
+
if (!expression?.kind || expression.kind !== JS.Kind.ConditionalType) {
|
|
179
|
+
return expression;
|
|
180
|
+
}
|
|
181
|
+
conditionalType = expression as JS.ConditionalType;
|
|
182
182
|
|
|
183
183
|
return this.produceJavaScript<JS.ConditionalType>(conditionalType, p, async draft => {
|
|
184
184
|
draft.checkType = await this.visitDefined<Expression>(conditionalType.checkType, p);
|
|
@@ -189,10 +189,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
189
189
|
|
|
190
190
|
protected async visitDelete(delete_: JS.Delete, p: P): Promise<J | undefined> {
|
|
191
191
|
const expression = await this.visitExpression(delete_, p);
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
192
|
+
if (!expression?.kind || expression.kind !== JS.Kind.Delete) {
|
|
193
|
+
return expression;
|
|
194
|
+
}
|
|
195
|
+
delete_ = expression as JS.Delete;
|
|
196
196
|
|
|
197
197
|
const statement = await this.visitStatement(delete_, p);
|
|
198
198
|
if (!statement?.kind || statement.kind !== JS.Kind.Delete) {
|
|
@@ -207,10 +207,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
207
207
|
|
|
208
208
|
protected async visitExpressionStatement(expressionStatement: JS.ExpressionStatement, p: P): Promise<J | undefined> {
|
|
209
209
|
const expression = await this.visitExpression(expressionStatement, p);
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
210
|
+
if (!expression?.kind || expression.kind !== JS.Kind.ExpressionStatement) {
|
|
211
|
+
return expression;
|
|
212
|
+
}
|
|
213
|
+
expressionStatement = expression as JS.ExpressionStatement;
|
|
214
214
|
|
|
215
215
|
const statement = await this.visitStatement(expressionStatement, p);
|
|
216
216
|
if (!statement?.kind || statement.kind !== JS.Kind.ExpressionStatement) {
|
|
@@ -225,10 +225,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
225
225
|
|
|
226
226
|
protected async visitExpressionWithTypeArguments(expressionWithTypeArguments: JS.ExpressionWithTypeArguments, p: P): Promise<J | undefined> {
|
|
227
227
|
const expression = await this.visitExpression(expressionWithTypeArguments, p);
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
228
|
+
if (!expression?.kind || expression.kind !== JS.Kind.ExpressionWithTypeArguments) {
|
|
229
|
+
return expression;
|
|
230
|
+
}
|
|
231
|
+
expressionWithTypeArguments = expression as JS.ExpressionWithTypeArguments;
|
|
232
232
|
|
|
233
233
|
return this.produceJavaScript<JS.ExpressionWithTypeArguments>(expressionWithTypeArguments, p, async draft => {
|
|
234
234
|
draft.clazz = await this.visitDefined<J>(expressionWithTypeArguments.clazz, p);
|
|
@@ -254,16 +254,16 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
254
254
|
draft.function = await this.visitOptionalRightPadded(functionCall.function, p);
|
|
255
255
|
draft.typeParameters = await this.visitOptionalContainer(functionCall.typeParameters, p);
|
|
256
256
|
draft.arguments = await this.visitContainer(functionCall.arguments, p);
|
|
257
|
-
draft.
|
|
257
|
+
draft.methodType = await this.visitType(functionCall.methodType, p) as Type.Method | undefined;
|
|
258
258
|
});
|
|
259
259
|
}
|
|
260
260
|
|
|
261
261
|
protected async visitFunctionType(functionType: JS.FunctionType, p: P): Promise<J | undefined> {
|
|
262
262
|
const expression = await this.visitExpression(functionType, p);
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
263
|
+
if (!expression?.kind || expression.kind !== JS.Kind.FunctionType) {
|
|
264
|
+
return expression;
|
|
265
|
+
}
|
|
266
|
+
functionType = expression as JS.FunctionType;
|
|
267
267
|
|
|
268
268
|
return this.produceJavaScript<JS.FunctionType>(functionType, p, async draft => {
|
|
269
269
|
draft.constructorType = await this.visitLeftPadded(functionType.constructorType, p);
|
|
@@ -275,10 +275,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
275
275
|
|
|
276
276
|
protected async visitInferType(inferType: JS.InferType, p: P): Promise<J | undefined> {
|
|
277
277
|
const expression = await this.visitExpression(inferType, p);
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
278
|
+
if (!expression?.kind || expression.kind !== JS.Kind.InferType) {
|
|
279
|
+
return expression;
|
|
280
|
+
}
|
|
281
|
+
inferType = expression as JS.InferType;
|
|
282
282
|
|
|
283
283
|
return this.produceJavaScript<JS.InferType>(inferType, p, async draft => {
|
|
284
284
|
draft.typeParameter = await this.visitLeftPadded(inferType.typeParameter, p);
|
|
@@ -288,10 +288,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
288
288
|
|
|
289
289
|
protected async visitImportType(importType: JS.ImportType, p: P): Promise<J | undefined> {
|
|
290
290
|
const expression = await this.visitExpression(importType, p);
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
291
|
+
if (!expression?.kind || expression.kind !== JS.Kind.ImportType) {
|
|
292
|
+
return expression;
|
|
293
|
+
}
|
|
294
|
+
importType = expression as JS.ImportType;
|
|
295
295
|
|
|
296
296
|
return this.produceJavaScript<JS.ImportType>(importType, p, async draft => {
|
|
297
297
|
draft.hasTypeof = await this.visitRightPadded(importType.hasTypeof, p);
|
|
@@ -327,10 +327,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
327
327
|
|
|
328
328
|
protected async visitNamedImports(namedImports: JS.NamedImports, p: P): Promise<J | undefined> {
|
|
329
329
|
const expression = await this.visitExpression(namedImports, p);
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
330
|
+
if (!expression?.kind || expression.kind !== JS.Kind.NamedImports) {
|
|
331
|
+
return expression;
|
|
332
|
+
}
|
|
333
|
+
namedImports = expression as JS.NamedImports;
|
|
334
334
|
|
|
335
335
|
return this.produceJavaScript<JS.NamedImports>(namedImports, p, async draft => {
|
|
336
336
|
draft.elements = await this.visitContainer(namedImports.elements, p);
|
|
@@ -340,10 +340,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
340
340
|
|
|
341
341
|
protected async visitImportSpecifier(importSpecifier: JS.ImportSpecifier, p: P): Promise<J | undefined> {
|
|
342
342
|
const expression = await this.visitExpression(importSpecifier, p);
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
343
|
+
if (!expression?.kind || expression.kind !== JS.Kind.ImportSpecifier) {
|
|
344
|
+
return expression;
|
|
345
|
+
}
|
|
346
|
+
importSpecifier = expression as JS.ImportSpecifier;
|
|
347
347
|
|
|
348
348
|
return this.produceJavaScript<JS.ImportSpecifier>(importSpecifier, p, async draft => {
|
|
349
349
|
draft.importType = await this.visitLeftPadded(importSpecifier.importType, p);
|
|
@@ -390,10 +390,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
390
390
|
|
|
391
391
|
protected async visitLiteralType(literalType: JS.LiteralType, p: P): Promise<J | undefined> {
|
|
392
392
|
const expression = await this.visitExpression(literalType, p);
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
393
|
+
if (!expression?.kind || expression.kind !== JS.Kind.LiteralType) {
|
|
394
|
+
return expression;
|
|
395
|
+
}
|
|
396
|
+
literalType = expression as JS.LiteralType;
|
|
397
397
|
|
|
398
398
|
return this.produceJavaScript<JS.LiteralType>(literalType, p, async draft => {
|
|
399
399
|
draft.literal = await this.visitDefined<Expression>(literalType.literal, p);
|
|
@@ -403,10 +403,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
403
403
|
|
|
404
404
|
protected async visitMappedType(mappedType: JS.MappedType, p: P): Promise<J | undefined> {
|
|
405
405
|
const expression = await this.visitExpression(mappedType, p);
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
406
|
+
if (!expression?.kind || expression.kind !== JS.Kind.MappedType) {
|
|
407
|
+
return expression;
|
|
408
|
+
}
|
|
409
|
+
mappedType = expression as JS.MappedType;
|
|
410
410
|
|
|
411
411
|
return this.produceJavaScript<JS.MappedType>(mappedType, p, async draft => {
|
|
412
412
|
draft.prefixToken = mappedType.prefixToken && await this.visitLeftPadded(mappedType.prefixToken, p);
|
|
@@ -435,10 +435,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
435
435
|
|
|
436
436
|
protected async visitObjectBindingPattern(objectBindingPattern: JS.ObjectBindingPattern, p: P): Promise<J | undefined> {
|
|
437
437
|
const expression = await this.visitExpression(objectBindingPattern, p);
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
438
|
+
if (!expression?.kind || expression.kind !== JS.Kind.ObjectBindingPattern) {
|
|
439
|
+
return expression;
|
|
440
|
+
}
|
|
441
|
+
objectBindingPattern = expression as JS.ObjectBindingPattern;
|
|
442
442
|
|
|
443
443
|
return this.produceJavaScript<JS.ObjectBindingPattern>(objectBindingPattern, p, async draft => {
|
|
444
444
|
draft.leadingAnnotations = await mapAsync(objectBindingPattern.leadingAnnotations, item => this.visitDefined<J.Annotation>(item, p));
|
|
@@ -464,10 +464,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
464
464
|
|
|
465
465
|
protected async visitSatisfiesExpression(satisfiesExpression: JS.SatisfiesExpression, p: P): Promise<J | undefined> {
|
|
466
466
|
const expression = await this.visitExpression(satisfiesExpression, p);
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
467
|
+
if (!expression?.kind || expression.kind !== JS.Kind.SatisfiesExpression) {
|
|
468
|
+
return expression;
|
|
469
|
+
}
|
|
470
|
+
satisfiesExpression = expression as JS.SatisfiesExpression;
|
|
471
471
|
|
|
472
472
|
return this.produceJavaScript<JS.SatisfiesExpression>(satisfiesExpression, p, async draft => {
|
|
473
473
|
draft.expression = await this.visitDefined<J>(satisfiesExpression.expression, p);
|
|
@@ -491,10 +491,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
491
491
|
|
|
492
492
|
protected async visitStatementExpression(statementExpression: JS.StatementExpression, p: P): Promise<J | undefined> {
|
|
493
493
|
const expression = await this.visitExpression(statementExpression, p);
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
494
|
+
if (!expression?.kind || expression.kind !== JS.Kind.StatementExpression) {
|
|
495
|
+
return expression;
|
|
496
|
+
}
|
|
497
|
+
statementExpression = expression as JS.StatementExpression;
|
|
498
498
|
|
|
499
499
|
const statement = await this.visitStatement(statementExpression, p);
|
|
500
500
|
if (!statement?.kind || statement.kind !== JS.Kind.StatementExpression) {
|
|
@@ -509,10 +509,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
509
509
|
|
|
510
510
|
protected async visitTaggedTemplateExpression(taggedTemplateExpression: JS.TaggedTemplateExpression, p: P): Promise<J | undefined> {
|
|
511
511
|
const expression = await this.visitExpression(taggedTemplateExpression, p);
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
512
|
+
if (!expression?.kind || expression.kind !== JS.Kind.TaggedTemplateExpression) {
|
|
513
|
+
return expression;
|
|
514
|
+
}
|
|
515
|
+
taggedTemplateExpression = expression as JS.TaggedTemplateExpression;
|
|
516
516
|
|
|
517
517
|
const statement = await this.visitStatement(taggedTemplateExpression, p);
|
|
518
518
|
if (!statement?.kind || statement.kind !== JS.Kind.TaggedTemplateExpression) {
|
|
@@ -530,10 +530,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
530
530
|
|
|
531
531
|
protected async visitTemplateExpression(templateExpression: JS.TemplateExpression, p: P): Promise<J | undefined> {
|
|
532
532
|
const expression = await this.visitExpression(templateExpression, p);
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
533
|
+
if (!expression?.kind || expression.kind !== JS.Kind.TemplateExpression) {
|
|
534
|
+
return expression;
|
|
535
|
+
}
|
|
536
|
+
templateExpression = expression as JS.TemplateExpression;
|
|
537
537
|
|
|
538
538
|
const statement = await this.visitStatement(templateExpression, p);
|
|
539
539
|
if (!statement?.kind || statement.kind !== JS.Kind.TemplateExpression) {
|
|
@@ -557,10 +557,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
557
557
|
|
|
558
558
|
protected async visitTuple(tuple: JS.Tuple, p: P): Promise<J | undefined> {
|
|
559
559
|
const expression = await this.visitExpression(tuple, p);
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
560
|
+
if (!expression?.kind || expression.kind !== JS.Kind.Tuple) {
|
|
561
|
+
return expression;
|
|
562
|
+
}
|
|
563
|
+
tuple = expression as JS.Tuple;
|
|
564
564
|
|
|
565
565
|
return this.produceJavaScript<JS.Tuple>(tuple, p, async draft => {
|
|
566
566
|
draft.elements = await this.visitContainer(tuple.elements, p);
|
|
@@ -586,10 +586,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
586
586
|
|
|
587
587
|
protected async visitTypeOf(typeOf: JS.TypeOf, p: P): Promise<J | undefined> {
|
|
588
588
|
const expression = await this.visitExpression(typeOf, p);
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
589
|
+
if (!expression?.kind || expression.kind !== JS.Kind.TypeOf) {
|
|
590
|
+
return expression;
|
|
591
|
+
}
|
|
592
|
+
typeOf = expression as JS.TypeOf;
|
|
593
593
|
|
|
594
594
|
return this.produceJavaScript<JS.TypeOf>(typeOf, p, async draft => {
|
|
595
595
|
draft.expression = await this.visitDefined<Expression>(typeOf.expression, p);
|
|
@@ -599,10 +599,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
599
599
|
|
|
600
600
|
protected async visitTypeTreeExpression(typeTreeExpression: JS.TypeTreeExpression, p: P): Promise<J | undefined> {
|
|
601
601
|
const expression = await this.visitExpression(typeTreeExpression, p);
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
602
|
+
if (!expression?.kind || expression.kind !== JS.Kind.TypeTreeExpression) {
|
|
603
|
+
return expression;
|
|
604
|
+
}
|
|
605
|
+
typeTreeExpression = expression as JS.TypeTreeExpression;
|
|
606
606
|
|
|
607
607
|
return this.produceJavaScript<JS.TypeTreeExpression>(typeTreeExpression, p, async draft => {
|
|
608
608
|
draft.expression = await this.visitDefined<Expression>(typeTreeExpression.expression, p);
|
|
@@ -620,10 +620,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
620
620
|
|
|
621
621
|
protected async visitIndexedAccessType(indexedAccessType: JS.IndexedAccessType, p: P): Promise<J | undefined> {
|
|
622
622
|
const expression = await this.visitExpression(indexedAccessType, p);
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
623
|
+
if (!expression?.kind || expression.kind !== JS.Kind.IndexedAccessType) {
|
|
624
|
+
return expression;
|
|
625
|
+
}
|
|
626
|
+
indexedAccessType = expression as JS.IndexedAccessType;
|
|
627
627
|
|
|
628
628
|
return this.produceJavaScript<JS.IndexedAccessType>(indexedAccessType, p, async draft => {
|
|
629
629
|
draft.objectType = await this.visitDefined<TypedTree>(indexedAccessType.objectType, p);
|
|
@@ -641,10 +641,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
641
641
|
|
|
642
642
|
protected async visitTypeQuery(typeQuery: JS.TypeQuery, p: P): Promise<J | undefined> {
|
|
643
643
|
const expression = await this.visitExpression(typeQuery, p);
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
644
|
+
if (!expression?.kind || expression.kind !== JS.Kind.TypeQuery) {
|
|
645
|
+
return expression;
|
|
646
|
+
}
|
|
647
|
+
typeQuery = expression as JS.TypeQuery;
|
|
648
648
|
|
|
649
649
|
return this.produceJavaScript<JS.TypeQuery>(typeQuery, p, async draft => {
|
|
650
650
|
draft.typeExpression = await this.visitDefined<TypedTree>(typeQuery.typeExpression, p);
|
|
@@ -655,10 +655,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
655
655
|
|
|
656
656
|
protected async visitTypeInfo(typeInfo: JS.TypeInfo, p: P): Promise<J | undefined> {
|
|
657
657
|
const expression = await this.visitExpression(typeInfo, p);
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
658
|
+
if (!expression?.kind || expression.kind !== JS.Kind.TypeInfo) {
|
|
659
|
+
return expression;
|
|
660
|
+
}
|
|
661
|
+
typeInfo = expression as JS.TypeInfo;
|
|
662
662
|
|
|
663
663
|
return this.produceJavaScript<JS.TypeInfo>(typeInfo, p, async draft => {
|
|
664
664
|
draft.typeIdentifier = await this.visitDefined<TypedTree>(typeInfo.typeIdentifier, p);
|
|
@@ -667,10 +667,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
667
667
|
|
|
668
668
|
protected async visitComputedPropertyName(computedPropertyName: JS.ComputedPropertyName, p: P): Promise<J | undefined> {
|
|
669
669
|
const expression = await this.visitExpression(computedPropertyName, p);
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
670
|
+
if (!expression?.kind || expression.kind !== JS.Kind.ComputedPropertyName) {
|
|
671
|
+
return expression;
|
|
672
|
+
}
|
|
673
|
+
computedPropertyName = expression as JS.ComputedPropertyName;
|
|
674
674
|
|
|
675
675
|
return this.produceJavaScript<JS.ComputedPropertyName>(computedPropertyName, p, async draft => {
|
|
676
676
|
draft.expression = await this.visitRightPadded(computedPropertyName.expression, p);
|
|
@@ -679,10 +679,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
679
679
|
|
|
680
680
|
protected async visitTypeOperator(typeOperator: JS.TypeOperator, p: P): Promise<J | undefined> {
|
|
681
681
|
const expression = await this.visitExpression(typeOperator, p);
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
682
|
+
if (!expression?.kind || expression.kind !== JS.Kind.TypeOperator) {
|
|
683
|
+
return expression;
|
|
684
|
+
}
|
|
685
|
+
typeOperator = expression as JS.TypeOperator;
|
|
686
686
|
|
|
687
687
|
return this.produceJavaScript<JS.TypeOperator>(typeOperator, p, async draft => {
|
|
688
688
|
draft.expression = await this.visitLeftPadded(typeOperator.expression, p);
|
|
@@ -691,10 +691,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
691
691
|
|
|
692
692
|
protected async visitTypePredicate(typePredicate: JS.TypePredicate, p: P): Promise<J | undefined> {
|
|
693
693
|
const expression = await this.visitExpression(typePredicate, p);
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
694
|
+
if (!expression?.kind || expression.kind !== JS.Kind.TypePredicate) {
|
|
695
|
+
return expression;
|
|
696
|
+
}
|
|
697
|
+
typePredicate = expression as JS.TypePredicate;
|
|
698
698
|
|
|
699
699
|
return this.produceJavaScript<JS.TypePredicate>(typePredicate, p, async draft => {
|
|
700
700
|
draft.asserts = await this.visitLeftPadded(typePredicate.asserts, p);
|
|
@@ -706,10 +706,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
706
706
|
|
|
707
707
|
protected async visitUnion(union: JS.Union, p: P): Promise<J | undefined> {
|
|
708
708
|
const expression = await this.visitExpression(union, p);
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
709
|
+
if (!expression?.kind || expression.kind !== JS.Kind.Union) {
|
|
710
|
+
return expression;
|
|
711
|
+
}
|
|
712
|
+
union = expression as JS.Union;
|
|
713
713
|
|
|
714
714
|
return this.produceJavaScript<JS.Union>(union, p, async draft => {
|
|
715
715
|
draft.types = await mapAsync(union.types, item => this.visitRightPadded(item, p));
|
|
@@ -719,10 +719,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
719
719
|
|
|
720
720
|
protected async visitIntersection(intersection: JS.Intersection, p: P): Promise<J | undefined> {
|
|
721
721
|
const expression = await this.visitExpression(intersection, p);
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
722
|
+
if (!expression?.kind || expression.kind !== JS.Kind.Intersection) {
|
|
723
|
+
return expression;
|
|
724
|
+
}
|
|
725
|
+
intersection = expression as JS.Intersection;
|
|
726
726
|
|
|
727
727
|
return this.produceJavaScript<JS.Intersection>(intersection, p, async draft => {
|
|
728
728
|
draft.types = await mapAsync(intersection.types, item => this.visitRightPadded(item, p));
|
|
@@ -732,10 +732,10 @@ export class JavaScriptVisitor<P> extends JavaVisitor<P> {
|
|
|
732
732
|
|
|
733
733
|
protected async visitVoid(void_: JS.Void, p: P): Promise<J | undefined> {
|
|
734
734
|
const expression = await this.visitExpression(void_, p);
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
735
|
+
if (!expression?.kind || expression.kind !== JS.Kind.Void) {
|
|
736
|
+
return expression;
|
|
737
|
+
}
|
|
738
|
+
void_ = expression as JS.Void;
|
|
739
739
|
|
|
740
740
|
return this.produceJavaScript<JS.Void>(void_, p, async draft => {
|
|
741
741
|
draft.expression = await this.visitDefined<Expression>(void_.expression, p);
|
package/src/print.ts
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
import {Marker, MarkersKind, SearchResult} from "./markers";
|
|
17
17
|
import {Cursor, isSourceFile, SourceFile, Tree} from "./tree";
|
|
18
18
|
import {TreeVisitor} from "./visitor";
|
|
19
|
+
import {trimIndent} from "./util";
|
|
19
20
|
|
|
20
21
|
type CommentWrapper = (input: string) => string;
|
|
21
22
|
|
|
@@ -134,7 +135,8 @@ export class TreePrinters {
|
|
|
134
135
|
const p = out || new PrintOutputCapture();
|
|
135
136
|
await printer().visit(tree, p);
|
|
136
137
|
return p.out;
|
|
137
|
-
}
|
|
138
|
+
}
|
|
139
|
+
})
|
|
138
140
|
}
|
|
139
141
|
|
|
140
142
|
/**
|
|
@@ -147,8 +149,8 @@ export class TreePrinters {
|
|
|
147
149
|
const sourceFileKind = typeof target === 'string' ?
|
|
148
150
|
target :
|
|
149
151
|
(isSourceFile(target) ?
|
|
150
|
-
|
|
151
|
-
|
|
152
|
+
target as SourceFile :
|
|
153
|
+
target.firstEnclosing(isSourceFile)
|
|
152
154
|
)!.kind
|
|
153
155
|
|
|
154
156
|
if (!this._registry.has(sourceFileKind)) {
|
|
@@ -160,6 +162,10 @@ export class TreePrinters {
|
|
|
160
162
|
static print(sourceFile: SourceFile): Promise<string> {
|
|
161
163
|
return this.printer(sourceFile).print(sourceFile);
|
|
162
164
|
}
|
|
165
|
+
|
|
166
|
+
static async printTrimmed(sourceFile: SourceFile): Promise<string> {
|
|
167
|
+
return trimIndent(await this.print(sourceFile));
|
|
168
|
+
}
|
|
163
169
|
}
|
|
164
170
|
|
|
165
171
|
export function printer(target: Cursor | SourceFile | string): TreePrinter {
|
package/src/rpc/rewrite-rpc.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './is-source-file'
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import {TreeVisitor} from "../visitor";
|
|
2
|
+
import {ExecutionContext} from "../execution";
|
|
3
|
+
import {isSourceFile} from "../tree";
|
|
4
|
+
import {foundSearchResult} from "../markers";
|
|
5
|
+
import * as picomatch from "picomatch";
|
|
6
|
+
|
|
7
|
+
export class IsSourceFile extends TreeVisitor<any, ExecutionContext> {
|
|
8
|
+
private readonly matcher: picomatch.Matcher;
|
|
9
|
+
|
|
10
|
+
constructor(filePattern: string) {
|
|
11
|
+
super();
|
|
12
|
+
// Create a picomatch matcher for the pattern
|
|
13
|
+
this.matcher = picomatch.default ? picomatch.default(filePattern) : (picomatch as any)(filePattern);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
protected async preVisit(tree: any, _: ExecutionContext): Promise<any> {
|
|
17
|
+
this.stopAfterPreVisit();
|
|
18
|
+
if (isSourceFile(tree) && tree.sourcePath) {
|
|
19
|
+
const path = tree.sourcePath.replace(/\\/g, '/'); // Normalize to Unix separators
|
|
20
|
+
if (this.matcher(path)) {
|
|
21
|
+
return foundSearchResult(tree);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return tree;
|
|
25
|
+
}
|
|
26
|
+
}
|
package/src/test/rewrite-test.ts
CHANGED
|
@@ -22,7 +22,7 @@ import {SourceFile} from "../tree";
|
|
|
22
22
|
import dedent from "dedent";
|
|
23
23
|
import {Result, scheduleRun} from "../run";
|
|
24
24
|
import {SnowflakeId} from "@akashrajpurohit/snowflake-id";
|
|
25
|
-
import {mapAsync} from "../util";
|
|
25
|
+
import {mapAsync, trimIndent} from "../util";
|
|
26
26
|
import {ParseErrorKind} from "../parse-error";
|
|
27
27
|
import {MarkersKind, ParseExceptionResult} from "../markers";
|
|
28
28
|
import {JavaScriptVisitor} from "../javascript";
|
|
@@ -158,6 +158,9 @@ export class RecipeSpec {
|
|
|
158
158
|
}
|
|
159
159
|
|
|
160
160
|
private async expectAfter(spec: SourceSpec<any>, after?: SourceFile) {
|
|
161
|
+
if (!after) {
|
|
162
|
+
throw new Error('Expected for recipe to have produced a change for file:\n' + trimIndent(spec.before))
|
|
163
|
+
}
|
|
161
164
|
expect(after).toBeDefined();
|
|
162
165
|
await new ValidateWhitespaceVisitor().visit(after!, this.executionContext);
|
|
163
166
|
const actualAfter = await TreePrinters.print(after!);
|
package/src/util.ts
CHANGED
|
@@ -15,15 +15,15 @@
|
|
|
15
15
|
*/
|
|
16
16
|
export async function mapAsync<T, U>(arr: T[], fn: (t: T, i: number) => Promise<U | undefined>): Promise<U[]> {
|
|
17
17
|
let results: U[] | undefined = undefined;
|
|
18
|
-
|
|
18
|
+
|
|
19
19
|
for (let i = 0; i < arr.length; i++) {
|
|
20
20
|
const result = await fn(arr[i], i);
|
|
21
|
-
|
|
21
|
+
|
|
22
22
|
if (result !== arr[i]) {
|
|
23
23
|
if (results === undefined) {
|
|
24
24
|
results = arr.slice(0, i) as unknown[] as U[];
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
if (result !== undefined) {
|
|
28
28
|
results.push(result);
|
|
29
29
|
}
|
|
@@ -31,6 +31,21 @@ export async function mapAsync<T, U>(arr: T[], fn: (t: T, i: number) => Promise<
|
|
|
31
31
|
results.push(result);
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
-
|
|
34
|
+
|
|
35
35
|
return results === undefined ? arr as unknown[] as U[] : results;
|
|
36
36
|
}
|
|
37
|
+
|
|
38
|
+
export function trimIndent(str: string | null | undefined): string {
|
|
39
|
+
if (!str) {
|
|
40
|
+
return "";
|
|
41
|
+
}
|
|
42
|
+
const lines = str.split("\n");
|
|
43
|
+
const nonEmpty = lines.filter(l => l.trim().length > 0);
|
|
44
|
+
const minIndent = Math.min(
|
|
45
|
+
...nonEmpty.map(l => l.match(/^(\s*)/)![0].length)
|
|
46
|
+
);
|
|
47
|
+
return lines
|
|
48
|
+
.map(l => l.slice(minIndent))
|
|
49
|
+
.join("\n")
|
|
50
|
+
.trim();
|
|
51
|
+
}
|
package/src/visitor.ts
CHANGED
|
@@ -40,7 +40,7 @@ const stopAfterPreVisit = Symbol("STOP_AFTER_PRE_VISIT")
|
|
|
40
40
|
export abstract class TreeVisitor<T extends Tree, P> {
|
|
41
41
|
protected cursor: Cursor = rootCursor();
|
|
42
42
|
private visitCount: number = 0;
|
|
43
|
-
|
|
43
|
+
public afterVisit: TreeVisitor<any, P>[] = [];
|
|
44
44
|
|
|
45
45
|
async visitDefined<R extends T>(tree: Tree, p: P, parent?: Cursor): Promise<R> {
|
|
46
46
|
return (await this.visit<R>(tree, p, parent))!;
|
|
@@ -80,14 +80,14 @@ export abstract class TreeVisitor<T extends Tree, P> {
|
|
|
80
80
|
|
|
81
81
|
if (topLevel) {
|
|
82
82
|
if (this.afterVisit) {
|
|
83
|
-
|
|
83
|
+
while (this.afterVisit.length > 0) {
|
|
84
|
+
const v = this.afterVisit.shift()!;
|
|
84
85
|
v.cursor = this.cursor;
|
|
85
86
|
if (t !== undefined) {
|
|
86
87
|
t = await v.visit(t, p);
|
|
87
88
|
}
|
|
88
89
|
}
|
|
89
90
|
}
|
|
90
|
-
this.afterVisit = undefined;
|
|
91
91
|
this.visitCount = 0;
|
|
92
92
|
}
|
|
93
93
|
} catch (e) {
|