@openrewrite/rewrite 8.92.17 → 8.92.18

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.
Files changed (199) hide show
  1. package/README.md +48 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +2 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/java/formatting-utils.d.ts +2 -1
  6. package/dist/java/formatting-utils.d.ts.map +1 -1
  7. package/dist/java/formatting-utils.js +4 -3
  8. package/dist/java/formatting-utils.js.map +1 -1
  9. package/dist/java/rpc.d.ts.map +1 -1
  10. package/dist/java/rpc.js +2 -0
  11. package/dist/java/rpc.js.map +1 -1
  12. package/dist/java/tree.d.ts +8 -0
  13. package/dist/java/tree.d.ts.map +1 -1
  14. package/dist/java/tree.js +11 -1
  15. package/dist/java/tree.js.map +1 -1
  16. package/dist/java/type.d.ts +7 -1
  17. package/dist/java/type.d.ts.map +1 -1
  18. package/dist/java/type.js +16 -1
  19. package/dist/java/type.js.map +1 -1
  20. package/dist/javascript/add-import.d.ts +27 -21
  21. package/dist/javascript/add-import.d.ts.map +1 -1
  22. package/dist/javascript/add-import.js +303 -143
  23. package/dist/javascript/add-import.js.map +1 -1
  24. package/dist/javascript/amd.d.ts.map +1 -1
  25. package/dist/javascript/amd.js +25 -10
  26. package/dist/javascript/amd.js.map +1 -1
  27. package/dist/javascript/autodetect.js +36 -45
  28. package/dist/javascript/autodetect.js.map +1 -1
  29. package/dist/javascript/binding.d.ts +6 -4
  30. package/dist/javascript/binding.d.ts.map +1 -1
  31. package/dist/javascript/binding.js +54 -18
  32. package/dist/javascript/binding.js.map +1 -1
  33. package/dist/javascript/comparator.d.ts +22 -5
  34. package/dist/javascript/comparator.d.ts.map +1 -1
  35. package/dist/javascript/comparator.js +116 -38
  36. package/dist/javascript/comparator.js.map +1 -1
  37. package/dist/javascript/format/format.d.ts +2 -0
  38. package/dist/javascript/format/format.d.ts.map +1 -1
  39. package/dist/javascript/format/format.js +11 -1
  40. package/dist/javascript/format/format.js.map +1 -1
  41. package/dist/javascript/index.d.ts +4 -2
  42. package/dist/javascript/index.d.ts.map +1 -1
  43. package/dist/javascript/index.js +10 -1
  44. package/dist/javascript/index.js.map +1 -1
  45. package/dist/javascript/markers.d.ts.map +1 -1
  46. package/dist/javascript/markers.js +64 -0
  47. package/dist/javascript/markers.js.map +1 -1
  48. package/dist/javascript/method-matcher.d.ts +13 -2
  49. package/dist/javascript/method-matcher.d.ts.map +1 -1
  50. package/dist/javascript/method-matcher.js +32 -19
  51. package/dist/javascript/method-matcher.js.map +1 -1
  52. package/dist/javascript/package-name.d.ts +6 -0
  53. package/dist/javascript/package-name.d.ts.map +1 -0
  54. package/dist/javascript/package-name.js +47 -0
  55. package/dist/javascript/package-name.js.map +1 -0
  56. package/dist/javascript/preconditions.d.ts +4 -1
  57. package/dist/javascript/preconditions.d.ts.map +1 -1
  58. package/dist/javascript/preconditions.js +7 -4
  59. package/dist/javascript/preconditions.js.map +1 -1
  60. package/dist/javascript/recipes/change-method-target-to-import.d.ts +29 -0
  61. package/dist/javascript/recipes/change-method-target-to-import.d.ts.map +1 -0
  62. package/dist/javascript/recipes/change-method-target-to-import.js +164 -0
  63. package/dist/javascript/recipes/change-method-target-to-import.js.map +1 -0
  64. package/dist/javascript/recipes/index.d.ts +1 -0
  65. package/dist/javascript/recipes/index.d.ts.map +1 -1
  66. package/dist/javascript/recipes/index.js +1 -0
  67. package/dist/javascript/recipes/index.js.map +1 -1
  68. package/dist/javascript/scope.d.ts +60 -16
  69. package/dist/javascript/scope.d.ts.map +1 -1
  70. package/dist/javascript/scope.js +596 -131
  71. package/dist/javascript/scope.js.map +1 -1
  72. package/dist/javascript/search/uses-method.d.ts +1 -1
  73. package/dist/javascript/search/uses-method.d.ts.map +1 -1
  74. package/dist/javascript/search/uses-method.js +2 -2
  75. package/dist/javascript/search/uses-method.js.map +1 -1
  76. package/dist/javascript/search/uses-type.d.ts +14 -1
  77. package/dist/javascript/search/uses-type.d.ts.map +1 -1
  78. package/dist/javascript/search/uses-type.js +24 -9
  79. package/dist/javascript/search/uses-type.js.map +1 -1
  80. package/dist/javascript/templating/bindings.d.ts +1 -1
  81. package/dist/javascript/templating/bindings.d.ts.map +1 -1
  82. package/dist/javascript/templating/bindings.js +10 -50
  83. package/dist/javascript/templating/bindings.js.map +1 -1
  84. package/dist/javascript/templating/comparator.d.ts +8 -11
  85. package/dist/javascript/templating/comparator.d.ts.map +1 -1
  86. package/dist/javascript/templating/comparator.js +12 -110
  87. package/dist/javascript/templating/comparator.js.map +1 -1
  88. package/dist/javascript/templating/engine.d.ts +34 -24
  89. package/dist/javascript/templating/engine.d.ts.map +1 -1
  90. package/dist/javascript/templating/engine.js +200 -112
  91. package/dist/javascript/templating/engine.js.map +1 -1
  92. package/dist/javascript/templating/pattern.d.ts +11 -5
  93. package/dist/javascript/templating/pattern.d.ts.map +1 -1
  94. package/dist/javascript/templating/pattern.js +86 -20
  95. package/dist/javascript/templating/pattern.js.map +1 -1
  96. package/dist/javascript/templating/placeholder-replacement.d.ts +34 -3
  97. package/dist/javascript/templating/placeholder-replacement.d.ts.map +1 -1
  98. package/dist/javascript/templating/placeholder-replacement.js +126 -60
  99. package/dist/javascript/templating/placeholder-replacement.js.map +1 -1
  100. package/dist/javascript/templating/precedence.d.ts +3 -1
  101. package/dist/javascript/templating/precedence.d.ts.map +1 -1
  102. package/dist/javascript/templating/precedence.js +28 -8
  103. package/dist/javascript/templating/precedence.js.map +1 -1
  104. package/dist/javascript/templating/template.d.ts +7 -6
  105. package/dist/javascript/templating/template.d.ts.map +1 -1
  106. package/dist/javascript/templating/template.js +31 -28
  107. package/dist/javascript/templating/template.js.map +1 -1
  108. package/dist/javascript/templating/types.d.ts +6 -3
  109. package/dist/javascript/templating/types.d.ts.map +1 -1
  110. package/dist/javascript/templating/utils.d.ts +10 -1
  111. package/dist/javascript/templating/utils.d.ts.map +1 -1
  112. package/dist/javascript/templating/utils.js +22 -3
  113. package/dist/javascript/templating/utils.js.map +1 -1
  114. package/dist/javascript/tree-debug.d.ts +2 -0
  115. package/dist/javascript/tree-debug.d.ts.map +1 -1
  116. package/dist/javascript/tree-debug.js +6 -0
  117. package/dist/javascript/tree-debug.js.map +1 -1
  118. package/dist/javascript/tsconfig.d.ts.map +1 -1
  119. package/dist/javascript/tsconfig.js +7 -17
  120. package/dist/javascript/tsconfig.js.map +1 -1
  121. package/dist/javascript/type-mapping.d.ts +34 -16
  122. package/dist/javascript/type-mapping.d.ts.map +1 -1
  123. package/dist/javascript/type-mapping.js +253 -249
  124. package/dist/javascript/type-mapping.js.map +1 -1
  125. package/dist/javascript/type-report-cli.d.ts +7 -0
  126. package/dist/javascript/type-report-cli.d.ts.map +1 -0
  127. package/dist/javascript/type-report-cli.js +129 -0
  128. package/dist/javascript/type-report-cli.js.map +1 -0
  129. package/dist/javascript/type-report.d.ts +61 -0
  130. package/dist/javascript/type-report.d.ts.map +1 -0
  131. package/dist/javascript/type-report.js +488 -0
  132. package/dist/javascript/type-report.js.map +1 -0
  133. package/dist/markers.d.ts +4 -0
  134. package/dist/markers.d.ts.map +1 -1
  135. package/dist/markers.js +8 -0
  136. package/dist/markers.js.map +1 -1
  137. package/dist/recipe.d.ts +5 -0
  138. package/dist/recipe.d.ts.map +1 -1
  139. package/dist/recipe.js +5 -0
  140. package/dist/recipe.js.map +1 -1
  141. package/dist/rewrite-javascript-version.txt +1 -1
  142. package/dist/rpc/queue.d.ts +16 -0
  143. package/dist/rpc/queue.d.ts.map +1 -1
  144. package/dist/rpc/queue.js +27 -9
  145. package/dist/rpc/queue.js.map +1 -1
  146. package/dist/rpc/request/prepare-recipe.d.ts +3 -1
  147. package/dist/rpc/request/prepare-recipe.d.ts.map +1 -1
  148. package/dist/rpc/request/prepare-recipe.js +13 -6
  149. package/dist/rpc/request/prepare-recipe.js.map +1 -1
  150. package/dist/search/is-source-file.d.ts +1 -0
  151. package/dist/search/is-source-file.d.ts.map +1 -1
  152. package/dist/search/is-source-file.js +7 -2
  153. package/dist/search/is-source-file.js.map +1 -1
  154. package/dist/test/rewrite-test.d.ts +5 -0
  155. package/dist/test/rewrite-test.d.ts.map +1 -1
  156. package/dist/test/rewrite-test.js +14 -3
  157. package/dist/test/rewrite-test.js.map +1 -1
  158. package/package.json +4 -3
  159. package/src/index.ts +3 -1
  160. package/src/java/formatting-utils.ts +5 -4
  161. package/src/java/rpc.ts +2 -0
  162. package/src/java/tree.ts +15 -0
  163. package/src/java/type.ts +19 -2
  164. package/src/javascript/add-import.ts +338 -152
  165. package/src/javascript/amd.ts +28 -12
  166. package/src/javascript/autodetect.ts +32 -41
  167. package/src/javascript/binding.ts +64 -22
  168. package/src/javascript/comparator.ts +119 -43
  169. package/src/javascript/format/format.ts +9 -0
  170. package/src/javascript/index.ts +6 -3
  171. package/src/javascript/markers.ts +43 -1
  172. package/src/javascript/method-matcher.ts +34 -22
  173. package/src/javascript/package-name.ts +45 -0
  174. package/src/javascript/preconditions.ts +7 -4
  175. package/src/javascript/recipes/change-method-target-to-import.ts +178 -0
  176. package/src/javascript/recipes/index.ts +1 -0
  177. package/src/javascript/scope.ts +705 -169
  178. package/src/javascript/search/uses-method.ts +2 -2
  179. package/src/javascript/search/uses-type.ts +30 -9
  180. package/src/javascript/templating/bindings.ts +13 -38
  181. package/src/javascript/templating/comparator.ts +16 -127
  182. package/src/javascript/templating/engine.ts +229 -127
  183. package/src/javascript/templating/pattern.ts +107 -28
  184. package/src/javascript/templating/placeholder-replacement.ts +154 -62
  185. package/src/javascript/templating/precedence.ts +33 -11
  186. package/src/javascript/templating/template.ts +35 -30
  187. package/src/javascript/templating/types.ts +6 -3
  188. package/src/javascript/templating/utils.ts +24 -2
  189. package/src/javascript/tree-debug.ts +9 -0
  190. package/src/javascript/tsconfig.ts +7 -17
  191. package/src/javascript/type-mapping.ts +258 -252
  192. package/src/javascript/type-report-cli.ts +96 -0
  193. package/src/javascript/type-report.ts +575 -0
  194. package/src/markers.ts +8 -0
  195. package/src/recipe.ts +6 -0
  196. package/src/rpc/queue.ts +44 -5
  197. package/src/rpc/request/prepare-recipe.ts +16 -6
  198. package/src/search/is-source-file.ts +8 -3
  199. package/src/test/rewrite-test.ts +14 -3
package/src/index.ts CHANGED
@@ -40,12 +40,14 @@ export async function activate(marketplace: RecipeMarketplace): Promise<void> {
40
40
  AsyncCallbackInSyncArrayMethod,
41
41
  AutoFormat,
42
42
  OrderImports,
43
- ChangeImport
43
+ ChangeImport,
44
+ ChangeMethodTargetToImport
44
45
  } = await import("./javascript/recipes/index.js");
45
46
  await marketplace.install(AsyncCallbackInSyncArrayMethod, JavaScript);
46
47
  await marketplace.install(AutoFormat, JavaScript);
47
48
  await marketplace.install(OrderImports, JavaScript);
48
49
  await marketplace.install(ChangeImport, JavaScript);
50
+ await marketplace.install(ChangeMethodTargetToImport, JavaScript);
49
51
 
50
52
  const {FindDependency, Search} = await import("./javascript/search/index.js");
51
53
  await marketplace.install(FindDependency, Search);
@@ -64,17 +64,18 @@ export function replaceIndentAfterLastNewline(ws: string, newIndent: string): st
64
64
  return ws.substring(0, lastNewline + 1) + newIndent;
65
65
  }
66
66
 
67
+ const isTextComment = (comment: Comment): comment is TextComment => comment.kind === J.Kind.TextComment;
68
+
67
69
  /**
68
- * Checks if a Space contains any newlines (in whitespace or comment suffixes).
70
+ * Checks if a Space contains a line terminator. A block comment spanning lines counts as one, as it
71
+ * does for automatic semicolon insertion.
69
72
  */
70
73
  export function spaceContainsNewline(space: J.Space | undefined): boolean {
71
74
  if (!space) return false;
72
75
  if (space.whitespace.includes("\n")) return true;
73
- return space.comments.some(c => c.suffix.includes("\n"));
76
+ return space.comments.some(c => c.suffix.includes("\n") || (isTextComment(c) && c.text.includes("\n")));
74
77
  }
75
78
 
76
- const isTextComment = (comment: Comment): comment is TextComment => comment.kind === J.Kind.TextComment;
77
-
78
79
  /**
79
80
  * Re-indents a line's leading whitespace when the enclosing construct moves from `oldMargin` to
80
81
  * `newMargin`, preserving whatever indentation the line adds beyond the margin.
package/src/java/rpc.ts CHANGED
@@ -43,6 +43,7 @@ class TypeSender extends TypeVisitor<RpcSendQueue> {
43
43
  }
44
44
 
45
45
  protected async visitVariable(variable: Type.Variable, q: RpcSendQueue): Promise<Type | undefined> {
46
+ await q.getAndSend(variable, v => v.flags);
46
47
  await q.getAndSend(variable, v => v.name);
47
48
  await q.getAndSend(variable, v => v.owner ? asRef(v.owner) : undefined, owner => this.visit(owner, q));
48
49
  await q.getAndSend(variable, v => asRef(v.type), t => this.visit(t, q));
@@ -169,6 +170,7 @@ class TypeReceiver extends TypeVisitor<RpcReceiveQueue> {
169
170
  }
170
171
 
171
172
  protected async visitVariable(variable: Type.Variable, q: RpcReceiveQueue): Promise<Type | undefined> {
173
+ variable.flags = await q.receive(variable.flags);
172
174
  variable.name = await q.receive(variable.name);
173
175
  variable.owner = await q.receive(variable.owner, owner => this.visit(owner, q));
174
176
  variable.type = await q.receive(variable.type, t => this.visit(t, q));
package/src/java/tree.ts CHANGED
@@ -40,6 +40,21 @@ export interface Expression extends J {
40
40
  readonly type?: Type;
41
41
  }
42
42
 
43
+ export namespace Expression {
44
+ /**
45
+ * Returns the first expression inside any number of nested parentheses, or the expression itself
46
+ * when it is not parenthesized.
47
+ */
48
+ export function unwrap(expr: Expression): Expression;
49
+ export function unwrap(expr: Expression | undefined): Expression | undefined;
50
+ export function unwrap(expr: Expression | undefined): Expression | undefined {
51
+ while (expr?.kind === J.Kind.Parentheses) {
52
+ expr = (expr as J.Parentheses<Expression>).tree.element;
53
+ }
54
+ return expr;
55
+ }
56
+ }
57
+
43
58
  export interface MethodCall extends Expression {
44
59
  readonly methodType?: Type.Method;
45
60
  }
package/src/java/type.ts CHANGED
@@ -108,6 +108,7 @@ export namespace Type {
108
108
 
109
109
  export interface Variable extends Type {
110
110
  readonly kind: typeof Kind.Variable;
111
+ flags: number;
111
112
  name: string;
112
113
  owner?: Type;
113
114
  type: Type;
@@ -137,7 +138,7 @@ export namespace Type {
137
138
  }
138
139
  }
139
140
 
140
- export interface Array extends Type, FullyQualified {
141
+ export interface Array extends Type {
141
142
  readonly kind: typeof Kind.Array;
142
143
  elemType: Type;
143
144
  annotations: Type.Annotation[];
@@ -290,7 +291,6 @@ export namespace Type {
290
291
  type.kind === Type.Kind.Class ||
291
292
  type.kind === Type.Kind.Annotation ||
292
293
  type.kind === Type.Kind.Parameterized ||
293
- type.kind === Type.Kind.Array ||
294
294
  type.kind === Type.Kind.ShallowClass
295
295
  );
296
296
  }
@@ -316,6 +316,23 @@ export namespace Type {
316
316
  }
317
317
  }
318
318
 
319
+ /**
320
+ * Whether `matches` accepts the fully qualified name of `type` or, with `matchOverride`, of a
321
+ * class or interface it extends.
322
+ */
323
+ export function isOfTypeWithName(type: Type | undefined, matchOverride: boolean,
324
+ matches: (fullyQualifiedName: string) => boolean): boolean {
325
+ if (!isFullyQualified(type)) {
326
+ return false;
327
+ }
328
+ if (matches(FullyQualified.getFullyQualifiedName(type))) {
329
+ return true;
330
+ }
331
+ const c = isParameterized(type) ? type.type : type;
332
+ return matchOverride && isClass(c) &&
333
+ (isOfTypeWithName(c.supertype, true, matches) || c.interfaces.some(i => isOfTypeWithName(i, true, matches)));
334
+ }
335
+
319
336
  // Track type variable names and parameterized types to prevent infinite recursion
320
337
  let typeVariableNameStack: Set<string> | null = null;
321
338
  let parameterizedStack: Set<Type> | null = null;