@openrewrite/rewrite 8.91.1 → 8.91.3

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 (160) hide show
  1. package/dist/execution.d.ts +8 -0
  2. package/dist/execution.d.ts.map +1 -1
  3. package/dist/execution.js +31 -0
  4. package/dist/execution.js.map +1 -1
  5. package/dist/javascript/add-import.d.ts +127 -38
  6. package/dist/javascript/add-import.d.ts.map +1 -1
  7. package/dist/javascript/add-import.js +684 -195
  8. package/dist/javascript/add-import.js.map +1 -1
  9. package/dist/javascript/amd.d.ts +148 -0
  10. package/dist/javascript/amd.d.ts.map +1 -0
  11. package/dist/javascript/amd.js +802 -0
  12. package/dist/javascript/amd.js.map +1 -0
  13. package/dist/javascript/binding.d.ts +102 -0
  14. package/dist/javascript/binding.d.ts.map +1 -0
  15. package/dist/javascript/binding.js +308 -0
  16. package/dist/javascript/binding.js.map +1 -0
  17. package/dist/javascript/comparator.d.ts +2 -0
  18. package/dist/javascript/comparator.d.ts.map +1 -1
  19. package/dist/javascript/comparator.js +5 -1
  20. package/dist/javascript/comparator.js.map +1 -1
  21. package/dist/javascript/format/format.d.ts +5 -2
  22. package/dist/javascript/format/format.d.ts.map +1 -1
  23. package/dist/javascript/format/format.js +51 -11
  24. package/dist/javascript/format/format.js.map +1 -1
  25. package/dist/javascript/format/minimum-viable-spacing-visitor.d.ts +19 -0
  26. package/dist/javascript/format/minimum-viable-spacing-visitor.d.ts.map +1 -1
  27. package/dist/javascript/format/minimum-viable-spacing-visitor.js +180 -7
  28. package/dist/javascript/format/minimum-viable-spacing-visitor.js.map +1 -1
  29. package/dist/javascript/format/prettier-format.d.ts +2 -1
  30. package/dist/javascript/format/prettier-format.d.ts.map +1 -1
  31. package/dist/javascript/format/prettier-format.js +33 -23
  32. package/dist/javascript/format/prettier-format.js.map +1 -1
  33. package/dist/javascript/index.d.ts +8 -1
  34. package/dist/javascript/index.d.ts.map +1 -1
  35. package/dist/javascript/index.js +46 -1
  36. package/dist/javascript/index.js.map +1 -1
  37. package/dist/javascript/parser-utils.d.ts.map +1 -1
  38. package/dist/javascript/parser-utils.js +7 -9
  39. package/dist/javascript/parser-utils.js.map +1 -1
  40. package/dist/javascript/parser.d.ts +7 -1
  41. package/dist/javascript/parser.d.ts.map +1 -1
  42. package/dist/javascript/parser.js +55 -4
  43. package/dist/javascript/parser.js.map +1 -1
  44. package/dist/javascript/print.d.ts +1 -0
  45. package/dist/javascript/print.d.ts.map +1 -1
  46. package/dist/javascript/print.js +9 -0
  47. package/dist/javascript/print.js.map +1 -1
  48. package/dist/javascript/recipes/change-import.d.ts +4 -3
  49. package/dist/javascript/recipes/change-import.d.ts.map +1 -1
  50. package/dist/javascript/recipes/change-import.js +12 -504
  51. package/dist/javascript/recipes/change-import.js.map +1 -1
  52. package/dist/javascript/remove-import.d.ts +2 -28
  53. package/dist/javascript/remove-import.d.ts.map +1 -1
  54. package/dist/javascript/remove-import.js +19 -57
  55. package/dist/javascript/remove-import.js.map +1 -1
  56. package/dist/javascript/rpc.js +2 -0
  57. package/dist/javascript/rpc.js.map +1 -1
  58. package/dist/javascript/scope.d.ts +82 -0
  59. package/dist/javascript/scope.d.ts.map +1 -0
  60. package/dist/javascript/scope.js +476 -0
  61. package/dist/javascript/scope.js.map +1 -0
  62. package/dist/javascript/templating/bindings.d.ts +0 -11
  63. package/dist/javascript/templating/bindings.d.ts.map +1 -1
  64. package/dist/javascript/templating/bindings.js +2 -49
  65. package/dist/javascript/templating/bindings.js.map +1 -1
  66. package/dist/javascript/templating/comparator.d.ts +12 -0
  67. package/dist/javascript/templating/comparator.d.ts.map +1 -1
  68. package/dist/javascript/templating/comparator.js +68 -14
  69. package/dist/javascript/templating/comparator.js.map +1 -1
  70. package/dist/javascript/templating/engine.d.ts +22 -4
  71. package/dist/javascript/templating/engine.d.ts.map +1 -1
  72. package/dist/javascript/templating/engine.js +68 -24
  73. package/dist/javascript/templating/engine.js.map +1 -1
  74. package/dist/javascript/templating/index.d.ts +1 -1
  75. package/dist/javascript/templating/index.d.ts.map +1 -1
  76. package/dist/javascript/templating/index.js.map +1 -1
  77. package/dist/javascript/templating/pattern.d.ts.map +1 -1
  78. package/dist/javascript/templating/pattern.js +2 -2
  79. package/dist/javascript/templating/pattern.js.map +1 -1
  80. package/dist/javascript/templating/placeholder-replacement.d.ts +2 -0
  81. package/dist/javascript/templating/placeholder-replacement.d.ts.map +1 -1
  82. package/dist/javascript/templating/placeholder-replacement.js +10 -5
  83. package/dist/javascript/templating/placeholder-replacement.js.map +1 -1
  84. package/dist/javascript/templating/precedence.d.ts +12 -4
  85. package/dist/javascript/templating/precedence.d.ts.map +1 -1
  86. package/dist/javascript/templating/precedence.js +18 -11
  87. package/dist/javascript/templating/precedence.js.map +1 -1
  88. package/dist/javascript/templating/rewrite.d.ts.map +1 -1
  89. package/dist/javascript/templating/rewrite.js +7 -1
  90. package/dist/javascript/templating/rewrite.js.map +1 -1
  91. package/dist/javascript/templating/template.d.ts +7 -1
  92. package/dist/javascript/templating/template.d.ts.map +1 -1
  93. package/dist/javascript/templating/template.js +54 -28
  94. package/dist/javascript/templating/template.js.map +1 -1
  95. package/dist/javascript/templating/types.d.ts +15 -18
  96. package/dist/javascript/templating/types.d.ts.map +1 -1
  97. package/dist/javascript/templating/utils.d.ts +1 -1
  98. package/dist/javascript/templating/utils.d.ts.map +1 -1
  99. package/dist/javascript/templating/utils.js +3 -2
  100. package/dist/javascript/templating/utils.js.map +1 -1
  101. package/dist/javascript/tree.d.ts +1 -0
  102. package/dist/javascript/tree.d.ts.map +1 -1
  103. package/dist/javascript/tree.js.map +1 -1
  104. package/dist/javascript/type-mapping.d.ts.map +1 -1
  105. package/dist/javascript/type-mapping.js +14 -0
  106. package/dist/javascript/type-mapping.js.map +1 -1
  107. package/dist/javascript/visitor.d.ts.map +1 -1
  108. package/dist/javascript/visitor.js +1 -0
  109. package/dist/javascript/visitor.js.map +1 -1
  110. package/dist/parser.d.ts +6 -0
  111. package/dist/parser.d.ts.map +1 -1
  112. package/dist/parser.js +23 -1
  113. package/dist/parser.js.map +1 -1
  114. package/dist/print.d.ts.map +1 -1
  115. package/dist/print.js +5 -2
  116. package/dist/print.js.map +1 -1
  117. package/dist/rewrite-javascript-version.txt +1 -1
  118. package/dist/rpc/request/parse-project.d.ts +11 -1
  119. package/dist/rpc/request/parse-project.d.ts.map +1 -1
  120. package/dist/rpc/request/parse-project.js +7 -2
  121. package/dist/rpc/request/parse-project.js.map +1 -1
  122. package/dist/rpc/request/parse.d.ts +13 -1
  123. package/dist/rpc/request/parse.d.ts.map +1 -1
  124. package/dist/rpc/request/parse.js +8 -2
  125. package/dist/rpc/request/parse.js.map +1 -1
  126. package/package.json +2 -2
  127. package/src/execution.ts +23 -0
  128. package/src/javascript/add-import.ts +753 -238
  129. package/src/javascript/amd.ts +954 -0
  130. package/src/javascript/binding.ts +435 -0
  131. package/src/javascript/comparator.ts +6 -1
  132. package/src/javascript/format/format.ts +56 -12
  133. package/src/javascript/format/minimum-viable-spacing-visitor.ts +196 -7
  134. package/src/javascript/format/prettier-format.ts +35 -25
  135. package/src/javascript/index.ts +19 -1
  136. package/src/javascript/parser-utils.ts +7 -11
  137. package/src/javascript/parser.ts +78 -6
  138. package/src/javascript/print.ts +10 -0
  139. package/src/javascript/recipes/change-import.ts +13 -593
  140. package/src/javascript/remove-import.ts +20 -56
  141. package/src/javascript/rpc.ts +2 -0
  142. package/src/javascript/scope.ts +517 -0
  143. package/src/javascript/templating/bindings.ts +2 -55
  144. package/src/javascript/templating/comparator.ts +81 -16
  145. package/src/javascript/templating/engine.ts +107 -38
  146. package/src/javascript/templating/index.ts +0 -1
  147. package/src/javascript/templating/pattern.ts +4 -2
  148. package/src/javascript/templating/placeholder-replacement.ts +16 -6
  149. package/src/javascript/templating/precedence.ts +21 -13
  150. package/src/javascript/templating/rewrite.ts +9 -1
  151. package/src/javascript/templating/template.ts +68 -29
  152. package/src/javascript/templating/types.ts +17 -18
  153. package/src/javascript/templating/utils.ts +4 -2
  154. package/src/javascript/tree.ts +1 -0
  155. package/src/javascript/type-mapping.ts +15 -0
  156. package/src/javascript/visitor.ts +1 -0
  157. package/src/parser.ts +24 -1
  158. package/src/print.ts +5 -2
  159. package/src/rpc/request/parse-project.ts +6 -2
  160. package/src/rpc/request/parse.ts +7 -2
@@ -0,0 +1,476 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scopeOf = scopeOf;
4
+ exports.namesDeclaredIn = namesDeclaredIn;
5
+ exports.namesUsedIn = namesUsedIn;
6
+ exports.namesUsedWithin = namesUsedWithin;
7
+ exports.namesDeclaredWithin = namesDeclaredWithin;
8
+ exports.bindingNames = bindingNames;
9
+ exports.walk = walk;
10
+ exports.cursorOf = cursorOf;
11
+ exports.compilationUnitOf = compilationUnitOf;
12
+ exports.deconflict = deconflict;
13
+ exports.declarationsOf = declarationsOf;
14
+ exports.isValueReference = isValueReference;
15
+ /*
16
+ * Copyright 2025 the original author or authors.
17
+ * <p>
18
+ * Licensed under the Moderne Source Available License (the "License");
19
+ * you may not use this file except in compliance with the License.
20
+ * You may obtain a copy of the License at
21
+ * <p>
22
+ * https://docs.moderne.io/licensing/moderne-source-available-license
23
+ * <p>
24
+ * Unless required by applicable law or agreed to in writing, software
25
+ * distributed under the License is distributed on an "AS IS" BASIS,
26
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
27
+ * See the License for the specific language governing permissions and
28
+ * limitations under the License.
29
+ */
30
+ const tree_1 = require("../tree");
31
+ const java_1 = require("../java");
32
+ const tree_2 = require("./tree");
33
+ const noNames = new Set();
34
+ /**
35
+ * The innermost scope holding `cursor`, which a visitor's own cursor rarely is: it stands on
36
+ * whatever node it is visiting. Where a declaration's shape leaves its reach unreadable the answer
37
+ * counts it rather than miss it, so a name reported here may not truly reach the cursor.
38
+ */
39
+ function scopeOf(cursor) {
40
+ var _a;
41
+ return scopeAt((_a = enclosingScopeCursor(cursor)) !== null && _a !== void 0 ? _a : cursor);
42
+ }
43
+ function scopeAt(cursor) {
44
+ return {
45
+ names: () => { var _a; return frameBindings(cursor.value, (_a = cursor.parent) === null || _a === void 0 ? void 0 : _a.value); },
46
+ walk: visit => {
47
+ for (let c = cursor; c; c = enclosingScopeCursor(c.parent)) {
48
+ if (!visit(scopeAt(c))) {
49
+ return;
50
+ }
51
+ }
52
+ },
53
+ declares: name => declaringScopeOf(cursor, name) !== undefined,
54
+ declaringScope: name => declaringScopeOf(cursor, name)
55
+ };
56
+ }
57
+ function enclosingScopeCursor(from) {
58
+ var _a;
59
+ for (let c = from; c; c = c.parent) {
60
+ if (scopeKinds.has((_a = c.value) === null || _a === void 0 ? void 0 : _a.kind)) {
61
+ return c;
62
+ }
63
+ }
64
+ return undefined;
65
+ }
66
+ /** The nodes {@link readBindings} answers for; everything else binds nothing and is not a scope. */
67
+ const scopeKinds = new Set([
68
+ tree_2.JS.Kind.CompilationUnit, java_1.J.Kind.Block, java_1.J.Kind.MethodDeclaration, java_1.J.Kind.Lambda,
69
+ java_1.J.Kind.ClassDeclaration, java_1.J.Kind.TryCatch, java_1.J.Kind.ForLoop, java_1.J.Kind.ForEachLoop, tree_2.JS.Kind.ForInLoop
70
+ ]);
71
+ /**
72
+ * Every name the file declares, wherever it sits. A binding the whole file shares is referenced from
73
+ * sites that are not known when it is named, so it has to steer clear of every name that could
74
+ * shadow it at one of them.
75
+ */
76
+ function namesDeclaredIn(cu) {
77
+ return namesDeclaredWithin(cu);
78
+ }
79
+ /**
80
+ * Every name the file spells, declared or not — what a name has to be absent from to be free. An
81
+ * ambient global is spelled and declared nowhere, and binding over one would capture its uses.
82
+ */
83
+ function namesUsedIn(cu) {
84
+ return namesUsedWithin(cu);
85
+ }
86
+ /** As {@link namesUsedIn}, over one subtree, for a name that only has to be free across that much. */
87
+ function namesUsedWithin(node, cacheKey = node) {
88
+ if (cacheKey === null || typeof cacheKey !== 'object') {
89
+ return noNames;
90
+ }
91
+ const cached = used.get(cacheKey);
92
+ if (cached) {
93
+ return cached;
94
+ }
95
+ const names = new Set();
96
+ walk(node, node => {
97
+ if (node.kind === java_1.J.Kind.Identifier) {
98
+ names.add(node.simpleName);
99
+ }
100
+ return true;
101
+ });
102
+ used.set(cacheKey, names);
103
+ return names;
104
+ }
105
+ /** As {@link namesDeclaredIn}, over one subtree, for a binding shared across only that much of a file. */
106
+ function namesDeclaredWithin(node, cacheKey = node) {
107
+ if (cacheKey === null || typeof cacheKey !== 'object') {
108
+ return noNames;
109
+ }
110
+ const cached = declared.get(cacheKey);
111
+ if (cached) {
112
+ return cached;
113
+ }
114
+ const names = new Set();
115
+ const collect = (node) => {
116
+ var _a, _b;
117
+ declarationNames(node).forEach(name => names.add(name));
118
+ if (node.kind !== java_1.J.Kind.ClassDeclaration) {
119
+ return true;
120
+ }
121
+ // The walk ends at this branch, so the class's own type parameters are read here.
122
+ typeParameterNames(node).forEach(name => names.add(name));
123
+ // A member's name is not one the file binds, though the code inside one still declares names.
124
+ for (const member of (_b = (_a = node.body) === null || _a === void 0 ? void 0 : _a.statements) !== null && _b !== void 0 ? _b : []) {
125
+ const element = unwrap(member);
126
+ walk(element, node => node === element || collect(node));
127
+ }
128
+ return false;
129
+ };
130
+ walk(node, collect);
131
+ declared.set(cacheKey, names);
132
+ return names;
133
+ }
134
+ /**
135
+ * Every name a binding pattern introduces. `member` is the property a name takes its value from,
136
+ * which only a name an object pattern binds directly has: anything deeper reads a property of a
137
+ * property, an array element is chosen by position, and a rest name gathers what nothing claimed.
138
+ */
139
+ function bindingNames(pattern) {
140
+ var _a;
141
+ switch (pattern === null || pattern === void 0 ? void 0 : pattern.kind) {
142
+ case java_1.J.Kind.Identifier: {
143
+ const simpleName = pattern.simpleName;
144
+ return simpleName ? [{ name: simpleName }] : [];
145
+ }
146
+ case tree_2.JS.Kind.Spread:
147
+ return bindingNames(pattern.expression);
148
+ case tree_2.JS.Kind.ArrayBindingPattern:
149
+ return unnamedMembers(pattern.elements.elements
150
+ .flatMap(element => bindingNames(unwrap(element))));
151
+ case tree_2.JS.Kind.ObjectBindingPattern:
152
+ return pattern.bindings.elements
153
+ .flatMap(element => bindingNames(unwrap(element)));
154
+ case tree_2.JS.Kind.BindingElement: {
155
+ const element = pattern;
156
+ if (((_a = element.name) === null || _a === void 0 ? void 0 : _a.kind) !== java_1.J.Kind.Identifier) {
157
+ return unnamedMembers(bindingNames(element.name));
158
+ }
159
+ const name = element.name.simpleName;
160
+ const propertyName = unwrap(element.propertyName);
161
+ return [{
162
+ name,
163
+ member: (propertyName === null || propertyName === void 0 ? void 0 : propertyName.kind) === java_1.J.Kind.Identifier ? propertyName.simpleName : name
164
+ }];
165
+ }
166
+ default:
167
+ return [];
168
+ }
169
+ }
170
+ function unnamedMembers(bound) {
171
+ return bound.map(({ name }) => ({ name }));
172
+ }
173
+ function declaringScopeOf(cursor, name) {
174
+ var _a;
175
+ for (let c = cursor; c; c = c.parent) {
176
+ if (frameBindings(c.value, (_a = c.parent) === null || _a === void 0 ? void 0 : _a.value).has(name)) {
177
+ return c.value;
178
+ }
179
+ }
180
+ return undefined;
181
+ }
182
+ /**
183
+ * What one node on the cursor path binds, `parent` being the node it hangs from. Only these two
184
+ * answers turn on the parent; a node alone settles the rest, which is what makes them cacheable.
185
+ */
186
+ function frameBindings(node, parent) {
187
+ // A class body holds members, which are reached through an instance rather than by name.
188
+ if ((node === null || node === void 0 ? void 0 : node.kind) === java_1.J.Kind.Block && (parent === null || parent === void 0 ? void 0 : parent.kind) === java_1.J.Kind.ClassDeclaration) {
189
+ return noNames;
190
+ }
191
+ // A function expression is the only function whose own name its body reaches: a declaration's
192
+ // name belongs to the enclosing block, a method's to an instance.
193
+ if ((node === null || node === void 0 ? void 0 : node.kind) === java_1.J.Kind.MethodDeclaration && (parent === null || parent === void 0 ? void 0 : parent.kind) === tree_2.JS.Kind.StatementExpression) {
194
+ const self = bindingNames(node.name).map(bound => bound.name);
195
+ return new Set([...self, ...ownBindings(node)]);
196
+ }
197
+ return ownBindings(node);
198
+ }
199
+ function ownBindings(node) {
200
+ if (typeof node !== 'object' || node === null) {
201
+ return noNames;
202
+ }
203
+ let names = frames.get(node);
204
+ if (!names) {
205
+ frames.set(node, names = new Set(readBindings(node)));
206
+ }
207
+ return names;
208
+ }
209
+ function readBindings(node) {
210
+ switch (node.kind) {
211
+ case tree_2.JS.Kind.CompilationUnit: {
212
+ const statements = node.statements;
213
+ return [...declaredNames(statements), ...hoistedNames(statements)];
214
+ }
215
+ case java_1.J.Kind.Block:
216
+ return blockScopedNames(node.statements);
217
+ case java_1.J.Kind.MethodDeclaration: {
218
+ const method = node;
219
+ return [...declaredNames(method.parameters.elements), ...hoistedNames(method.body)];
220
+ }
221
+ case java_1.J.Kind.Lambda: {
222
+ const lambda = node;
223
+ return [...declaredNames(lambda.parameters.parameters), ...hoistedNames(lambda.body)];
224
+ }
225
+ case java_1.J.Kind.ClassDeclaration:
226
+ return bindingNames(node.name).map(bound => bound.name);
227
+ case java_1.J.Kind.TryCatch:
228
+ return declaredNames([node.parameter.tree]);
229
+ case java_1.J.Kind.ForLoop:
230
+ return declaredNames(node.control.init);
231
+ case java_1.J.Kind.ForEachLoop:
232
+ return declaredNames([node.control.variable]);
233
+ case tree_2.JS.Kind.ForInLoop:
234
+ return declaredNames([node.control.variable]);
235
+ default:
236
+ return [];
237
+ }
238
+ }
239
+ /**
240
+ * The names statements bind in the block holding them — the complement of what
241
+ * {@link hoistedNames} claims, so `function (x) { var x = 1; }` reads as one binding, not two.
242
+ */
243
+ function blockScopedNames(statements) {
244
+ return statements.flatMap(statement => {
245
+ const element = unwrap(statement);
246
+ switch (element === null || element === void 0 ? void 0 : element.kind) {
247
+ case java_1.J.Kind.MethodDeclaration:
248
+ return [];
249
+ case java_1.J.Kind.VariableDeclarations:
250
+ case tree_2.JS.Kind.ScopedVariableDeclarations:
251
+ return isBlockScoped(element) ? declarationNames(element) : [];
252
+ case java_1.J.Kind.Case:
253
+ return blockScopedNames(element.statements.elements);
254
+ default:
255
+ return declarationNames(element);
256
+ }
257
+ });
258
+ }
259
+ function isBlockScoped(declaration) {
260
+ var _a;
261
+ return ((_a = declaration.modifiers) !== null && _a !== void 0 ? _a : []).some(m => blockScoped.has(m.keyword));
262
+ }
263
+ /** The names statements declare directly in the scope holding them. */
264
+ function declaredNames(statements) {
265
+ return statements.flatMap(statement => declarationNames(unwrap(statement)));
266
+ }
267
+ function declarationNames(statement) {
268
+ switch (statement === null || statement === void 0 ? void 0 : statement.kind) {
269
+ case tree_2.JS.Kind.Import:
270
+ return importNames(statement);
271
+ case java_1.J.Kind.VariableDeclarations:
272
+ return statement.variables
273
+ .flatMap(variable => { var _a; return bindingNames((_a = unwrap(variable)) === null || _a === void 0 ? void 0 : _a.name); })
274
+ .map(bound => bound.name);
275
+ case tree_2.JS.Kind.ScopedVariableDeclarations:
276
+ return declaredNames(statement.variables);
277
+ case java_1.J.Kind.MethodDeclaration:
278
+ return bindingNames(statement.name).map(bound => bound.name);
279
+ case java_1.J.Kind.ClassDeclaration:
280
+ return bindingNames(statement.name).map(bound => bound.name);
281
+ case tree_2.JS.Kind.NamespaceDeclaration:
282
+ return bindingNames(unwrap(statement.name)).map(bound => bound.name);
283
+ case tree_2.JS.Kind.TypeDeclaration:
284
+ return bindingNames(unwrap(statement.name)).map(bound => bound.name);
285
+ case java_1.J.Kind.TypeParameter:
286
+ // Reached by namesDeclaredWithin's walk, never through a statement list: a type
287
+ // parameter binds across the declaration carrying it, not in the scope that one sits in.
288
+ return bindingNames(statement.name).map(bound => bound.name);
289
+ case java_1.J.Kind.Case:
290
+ // The cases of a switch share the block it opens, so each one's declarations bind in all.
291
+ return declaredNames(statement.statements.elements);
292
+ default:
293
+ return [];
294
+ }
295
+ }
296
+ /**
297
+ * The names a declaration's type parameters bind. A class keeps them in a container and everything
298
+ * else in a `J.TypeParameters`, and both hold the same right-padded list.
299
+ */
300
+ function typeParameterNames(node) {
301
+ const held = node === null || node === void 0 ? void 0 : node.typeParameters;
302
+ const parameters = (held === null || held === void 0 ? void 0 : held.kind) === java_1.J.Kind.TypeParameters
303
+ ? held.typeParameters
304
+ : held === null || held === void 0 ? void 0 : held.elements;
305
+ return (parameters !== null && parameters !== void 0 ? parameters : []).flatMap(parameter => declarationNames(unwrap(parameter)));
306
+ }
307
+ /** The names an import binds, which for an aliased or namespace specifier is the alias. */
308
+ function importNames(jsImport) {
309
+ const importClause = jsImport.importClause;
310
+ if (!importClause) {
311
+ return [];
312
+ }
313
+ const names = bindingNames(unwrap(importClause.name)).map(bound => bound.name);
314
+ const namedBindings = importClause.namedBindings;
315
+ if ((namedBindings === null || namedBindings === void 0 ? void 0 : namedBindings.kind) === tree_2.JS.Kind.NamedImports) {
316
+ for (const element of namedBindings.elements.elements) {
317
+ const specifier = unwrap(element);
318
+ if ((specifier === null || specifier === void 0 ? void 0 : specifier.kind) === tree_2.JS.Kind.ImportSpecifier) {
319
+ names.push(...aliasedName(specifier.specifier));
320
+ }
321
+ }
322
+ }
323
+ else {
324
+ names.push(...aliasedName(namedBindings));
325
+ }
326
+ return names;
327
+ }
328
+ function aliasedName(specifier) {
329
+ const name = (specifier === null || specifier === void 0 ? void 0 : specifier.kind) === tree_2.JS.Kind.Alias ? specifier.alias : specifier;
330
+ return bindingNames(name).map(bound => bound.name);
331
+ }
332
+ const blockScoped = new Set(['let', 'const', 'using']);
333
+ // A walk of an immutable subtree has one answer, so it runs once. Keyed on the subtree itself, a
334
+ // replaced one is walked afresh: every call site in a function asks what that body hoists, every
335
+ // import added to a file asks what that file declares, and every scope is asked what it binds by
336
+ // each of the call sites it encloses.
337
+ const hoisted = new WeakMap();
338
+ const declared = new WeakMap();
339
+ const used = new WeakMap();
340
+ const frames = new WeakMap();
341
+ /**
342
+ * The names blocks under `scope` hoist out to it. A `var` or function declaration reaches the whole
343
+ * function it sits in, so one nested in a block is in scope outside that block; only a `let`, `const`
344
+ * or `using` keyword says otherwise.
345
+ */
346
+ function hoistedNames(scope) {
347
+ if (typeof scope !== 'object' || scope === null) {
348
+ return [];
349
+ }
350
+ const cached = hoisted.get(scope);
351
+ if (cached) {
352
+ return cached;
353
+ }
354
+ const names = [];
355
+ const collect = (node) => {
356
+ switch (node.kind) {
357
+ case java_1.J.Kind.MethodDeclaration:
358
+ names.push(...declarationNames(node));
359
+ return false;
360
+ case java_1.J.Kind.VariableDeclarations:
361
+ case tree_2.JS.Kind.ScopedVariableDeclarations:
362
+ if (!isBlockScoped(node)) {
363
+ names.push(...declarationNames(node));
364
+ }
365
+ return false;
366
+ case java_1.J.Kind.TryCatch:
367
+ // A catch parameter carries no keyword to read, and binds only in the catch block.
368
+ walk(node.body, collect);
369
+ return false;
370
+ case tree_2.JS.Kind.StatementExpression:
371
+ // A function or class used as an expression names itself for its own body alone.
372
+ return false;
373
+ case java_1.J.Kind.Lambda:
374
+ case java_1.J.Kind.ClassDeclaration:
375
+ return false;
376
+ default:
377
+ return true;
378
+ }
379
+ };
380
+ walk(scope, collect);
381
+ hoisted.set(scope, names);
382
+ return names;
383
+ }
384
+ /**
385
+ * Visits every LST node under `node`, leaving a subtree unvisited where `visit` returns false.
386
+ * `visit` sees nodes, never the padding holding them. Only what `isTree` accepts is descended
387
+ * into, which a `JavaType` is not, so the walk stays in the tree the source spells rather than
388
+ * entering the type graph — cyclic and shared, where it would not terminate.
389
+ */
390
+ function walk(node, visit) {
391
+ if (Array.isArray(node)) {
392
+ node.forEach(child => walk(child, visit));
393
+ return;
394
+ }
395
+ const kind = node === null || node === void 0 ? void 0 : node.kind;
396
+ if (kind === java_1.J.Kind.RightPadded || kind === java_1.J.Kind.LeftPadded) {
397
+ walk(node.element, visit);
398
+ }
399
+ else if (kind === java_1.J.Kind.Container) {
400
+ walk(node.elements, visit);
401
+ }
402
+ else if ((0, tree_1.isTree)(node) && visit(node)) {
403
+ // Markers hang off a node rather than being part of the code it holds.
404
+ Object.entries(node).forEach(([key, value]) => key !== 'markers' && walk(value, visit));
405
+ }
406
+ }
407
+ /** The element a padding wrapper holds, or the node itself. */
408
+ function unwrap(node) {
409
+ return (node === null || node === void 0 ? void 0 : node.kind) === java_1.J.Kind.RightPadded || (node === null || node === void 0 ? void 0 : node.kind) === java_1.J.Kind.LeftPadded ? unwrap(node.element) : node;
410
+ }
411
+ /** `cursor` is protected on `TreeVisitor` and these APIs are free functions, so reaching it takes a cast. */
412
+ function cursorOf(visitor) {
413
+ return visitor.cursor;
414
+ }
415
+ /** The compilation unit a cursor sits in, or the one a visitor is currently positioned in. */
416
+ function compilationUnitOf(from) {
417
+ const cursor = from instanceof tree_1.Cursor ? from : cursorOf(from);
418
+ return cursor === null || cursor === void 0 ? void 0 : cursor.firstEnclosing((v) => (v === null || v === void 0 ? void 0 : v.kind) === tree_2.JS.Kind.CompilationUnit);
419
+ }
420
+ /** `preferred`, or the first `preferred_N` that `isTaken` rejects, so a new name never shadows one in scope. */
421
+ function deconflict(preferred, isTaken) {
422
+ if (!isTaken(preferred)) {
423
+ return preferred;
424
+ }
425
+ for (let suffix = 1;; suffix++) {
426
+ const candidate = `${preferred}_${suffix}`;
427
+ if (!isTaken(candidate)) {
428
+ return candidate;
429
+ }
430
+ }
431
+ }
432
+ /**
433
+ * The `J.VariableDeclarations` a statement declares — itself for a bare `const x = …`, one per
434
+ * declarator for `const a = …, b = …`, which the parser wraps in a `JS.ScopedVariableDeclarations`
435
+ * instead.
436
+ */
437
+ function declarationsOf(statement) {
438
+ if ((statement === null || statement === void 0 ? void 0 : statement.kind) === java_1.J.Kind.VariableDeclarations) {
439
+ return [statement];
440
+ }
441
+ if ((statement === null || statement === void 0 ? void 0 : statement.kind) === tree_2.JS.Kind.ScopedVariableDeclarations) {
442
+ return statement.variables
443
+ .map(v => v.element)
444
+ .filter((v) => (v === null || v === void 0 ? void 0 : v.kind) === java_1.J.Kind.VariableDeclarations);
445
+ }
446
+ return [];
447
+ }
448
+ /**
449
+ * Whether the identifier references a binding rather than naming one, which is what tells a rename
450
+ * which occurrences to follow. A name its parent introduces does not — a property, a method, a
451
+ * variable, a type parameter — nor one drawn from a namespace of its own: a statement label,
452
+ * declaring (`x:`) or referencing (`break x`), and a JSX attribute's prop. Position is all this
453
+ * reads: an import specifier's own name answers true, and a type position reads alike to a value.
454
+ */
455
+ function isValueReference(cursor, identifier) {
456
+ var _a;
457
+ let c = cursor.parent;
458
+ while (c && isPadding(c.value)) {
459
+ c = c.parent;
460
+ }
461
+ const parent = c === null || c === void 0 ? void 0 : c.value;
462
+ // A call names a member of whatever it selects from. With nothing selected there is no member,
463
+ // and its `name` is a reference to the function being called.
464
+ if ((parent === null || parent === void 0 ? void 0 : parent.kind) === java_1.J.Kind.MethodInvocation && !parent.select) {
465
+ return true;
466
+ }
467
+ // A JSX attribute keeps its prop name on `key`; the three label-bearing nodes keep theirs on
468
+ // `label`. Every other kind that names rather than references keeps it on `name`.
469
+ const named = (parent === null || parent === void 0 ? void 0 : parent.kind) === tree_2.JS.Kind.JsxAttribute ? parent.key : ((_a = parent === null || parent === void 0 ? void 0 : parent.name) !== null && _a !== void 0 ? _a : parent === null || parent === void 0 ? void 0 : parent.label);
470
+ return named !== identifier && (named === null || named === void 0 ? void 0 : named.element) !== identifier;
471
+ }
472
+ function isPadding(value) {
473
+ const kind = value === null || value === void 0 ? void 0 : value.kind;
474
+ return kind === java_1.J.Kind.RightPadded || kind === java_1.J.Kind.LeftPadded || kind === java_1.J.Kind.Container;
475
+ }
476
+ //# sourceMappingURL=scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/javascript/scope.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,4 @@
1
1
  import { J } from '../../java';
2
- import { ModuleBinding } from './types';
3
- /**
4
- * Whether the template's dependencies bring a workspace that could resolve `module`.
5
- */
6
- export declare function isResolvable(module: string, dependencies: Record<string, string>): boolean;
7
- /**
8
- * What a declared binding's name is parsed against, ahead of the template and so out of its output.
9
- * An import is what carries attribution, and costs a module resolution to get it; a declaration
10
- * names the binding for a module no workspace could have resolved anyway.
11
- */
12
- export declare function bindingContextStatement(name: string, binding: ModuleBinding, dependencies: Record<string, string>): string;
13
2
  /**
14
3
  * Renames the identifiers a template uses for its declared bindings to the names the file
15
4
  * actually binds. Runs before parameter substitution, so only the template's own code is in
@@ -1 +1 @@
1
- {"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../../../src/javascript/templating/bindings.ts"],"names":[],"mappings":"AAeA,OAAO,EAAC,CAAC,EAAO,MAAM,YAAY,CAAC;AAGnC,OAAO,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AAEtC;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAI1F;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAa1H;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEvI"}
1
+ {"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../../../src/javascript/templating/bindings.ts"],"names":[],"mappings":"AAeA,OAAO,EAAC,CAAC,EAAO,MAAM,YAAY,CAAC;AAInC;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEvI"}
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isResolvable = isResolvable;
4
- exports.bindingContextStatement = bindingContextStatement;
5
3
  exports.renameBindings = renameBindings;
6
4
  /*
7
5
  * Copyright 2025 the original author or authors.
@@ -20,33 +18,7 @@ exports.renameBindings = renameBindings;
20
18
  */
21
19
  const java_1 = require("../../java");
22
20
  const visitor_1 = require("../visitor");
23
- /**
24
- * Whether the template's dependencies bring a workspace that could resolve `module`.
25
- */
26
- function isResolvable(module, dependencies) {
27
- const segments = module.split('/');
28
- const pkg = module.startsWith('@') ? segments.slice(0, 2).join('/') : segments[0];
29
- return Object.prototype.hasOwnProperty.call(dependencies, pkg);
30
- }
31
- /**
32
- * What a declared binding's name is parsed against, ahead of the template and so out of its output.
33
- * An import is what carries attribution, and costs a module resolution to get it; a declaration
34
- * names the binding for a module no workspace could have resolved anyway.
35
- */
36
- function bindingContextStatement(name, binding, dependencies) {
37
- if (!isResolvable(binding.module, dependencies)) {
38
- return binding.typeOnly ? `type ${name} = any;` : `declare const ${name}: any;`;
39
- }
40
- const type = binding.typeOnly ? 'type ' : '';
41
- if (binding.member === '*') {
42
- return `import ${type}* as ${name} from '${binding.module}';`;
43
- }
44
- if (binding.member === undefined || binding.member === 'default') {
45
- return `import ${type}${name} from '${binding.module}';`;
46
- }
47
- const specifier = binding.member === name ? name : `${binding.member} as ${name}`;
48
- return `import ${type}{${specifier}} from '${binding.module}';`;
49
- }
21
+ const scope_1 = require("../scope");
50
22
  /**
51
23
  * Renames the identifiers a template uses for its declared bindings to the names the file
52
24
  * actually binds. Runs before parameter substitution, so only the template's own code is in
@@ -71,29 +43,10 @@ class RenameBindingsVisitor extends visitor_1.JavaScriptVisitor {
71
43
  const resolved = resolvedModule(identifier);
72
44
  const refersToBinding = resolved !== undefined
73
45
  ? resolved === this.modules[identifier.simpleName]
74
- : !namesItsParent(this.cursor, identifier);
46
+ : (0, scope_1.isValueReference)(this.cursor, identifier);
75
47
  return refersToBinding ? Object.assign(Object.assign({}, identifier), { simpleName: renamed }) : identifier;
76
48
  }
77
49
  }
78
- /** Whether the parent is naming this identifier — as a property, a method, a declaration — rather than referencing it. */
79
- function namesItsParent(cursor, identifier) {
80
- let c = cursor.parent;
81
- while (c && isPadding(c.value)) {
82
- c = c.parent;
83
- }
84
- const parent = c === null || c === void 0 ? void 0 : c.value;
85
- // A call names a member of whatever it selects from. With nothing selected there is no member,
86
- // and its `name` is a reference to the function being called.
87
- if ((parent === null || parent === void 0 ? void 0 : parent.kind) === java_1.J.Kind.MethodInvocation && !parent.select) {
88
- return false;
89
- }
90
- const name = parent === null || parent === void 0 ? void 0 : parent.name;
91
- return name === identifier || (name === null || name === void 0 ? void 0 : name.element) === identifier;
92
- }
93
- function isPadding(value) {
94
- const kind = value === null || value === void 0 ? void 0 : value.kind;
95
- return kind === java_1.J.Kind.RightPadded || kind === java_1.J.Kind.LeftPadded || kind === java_1.J.Kind.Container;
96
- }
97
50
  /** The module an identifier's attribution traces back to, following the owning-class chain to its root. */
98
51
  function resolvedModule(identifier) {
99
52
  const fieldType = identifier.fieldType;
@@ -1 +1 @@
1
- {"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../../src/javascript/templating/bindings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../../src/javascript/templating/bindings.ts"],"names":[],"mappings":";;AAwBA,wCAEC;AA1BD;;;;;;;;;;;;;;GAcG;AACH,qCAAmC;AACnC,wCAA6C;AAC7C,oCAA0C;AAE1C;;;;GAIG;AACI,KAAK,UAAU,cAAc,CAAc,IAAO,EAAE,OAA+B,EAAE,OAA+B;IACvH,OAAO,IAAI,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAe,CAAC;AAC5F,CAAC;AAED,MAAM,qBAAsB,SAAQ,2BAA4B;IAC5D,YAA6B,OAA+B,EAC/B,OAA+B;QACxD,KAAK,EAAE,CAAC;QAFiB,YAAO,GAAP,OAAO,CAAwB;QAC/B,YAAO,GAAP,OAAO,CAAwB;IAE5D,CAAC;IAEQ,KAAK,CAAC,eAAe,CAAC,UAAwB,EAAE,CAAY;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,UAAU,CAAC,UAAU,EAAE,CAAC;YAC7D,OAAO,UAAU,CAAC;QACtB,CAAC;QAED,0FAA0F;QAC1F,wEAAwE;QACxE,MAAM,QAAQ,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,eAAe,GAAG,QAAQ,KAAK,SAAS;YAC1C,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC;YAClD,CAAC,CAAC,IAAA,wBAAgB,EAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAEhD,OAAO,eAAe,CAAC,CAAC,CAAC,gCAAI,UAAU,KAAE,UAAU,EAAE,OAAO,GAAiB,CAAC,CAAC,CAAC,UAAU,CAAC;IAC/F,CAAC;CACJ;AAED,2GAA2G;AAC3G,SAAS,cAAc,CAAC,UAAwB;IAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;IACvC,IAAI,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,MAAK,WAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACzC,MAAM,KAAK,GAAI,SAA2B,CAAC,KAAK,CAAC;QACjD,OAAO,KAAK,IAAI,WAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAmB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpF,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;IAC7B,IAAI,IAAI,IAAI,WAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAI,IAAoB,CAAC,aAAa,CAAC;QACtD,OAAO,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAuB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,CAAC;IACD,IAAI,IAAI,IAAI,WAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,QAAQ,CAAC,IAAkB,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,SAAS,QAAQ,CAAC,SAAqB;IACnC,IAAI,OAAO,GAAe,SAAS,CAAC;IACpC,OAAO,OAAO,CAAC,WAAW,IAAI,WAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9D,OAAO,GAAG,OAAO,CAAC,WAAyB,CAAC;IAChD,CAAC;IACD,OAAO,WAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC9D,CAAC"}
@@ -41,6 +41,11 @@ export interface MatcherCallbacks {
41
41
  restoreState: (state: MatcherState) => void;
42
42
  debug?: DebugCallbacks;
43
43
  }
44
+ /** A capture found in a pattern, and the target node it binds to. */
45
+ interface CaptureAt {
46
+ marker: CaptureMarker;
47
+ target: J;
48
+ }
44
49
  /**
45
50
  * A comparator for pattern matching that is lenient about optional properties.
46
51
  * Allows patterns without type annotations to match actual code with type annotations.
@@ -55,7 +60,13 @@ export declare class PatternMatchingComparator extends JavaScriptSemanticCompara
55
60
  * @returns The constraint context for evaluating capture constraints
56
61
  */
57
62
  protected buildConstraintContext(cursor: Cursor): CaptureConstraintContext;
63
+ /** The capture this pattern node stands for, paired with the target node it should bind to. */
64
+ protected captureAt(j: Tree, p: J): CaptureAt | undefined;
65
+ /** The marker `attachCaptureMarkers` moved onto a parenthesized capture's `J.RightPadded`, which `unwrap()` skips past. */
66
+ private captureBehindParentheses;
58
67
  visit<R extends J>(j: Tree, p: J, parent?: Cursor): Promise<R | undefined>;
68
+ /** A capture in the receiver has to bind, so a matching `methodType` cannot stand in for it. */
69
+ protected selectMustBeVisited(method: J.MethodInvocation): boolean;
59
70
  protected hasSameKind(j: J, other: J): boolean;
60
71
  /**
61
72
  * Additional specialized abort methods for pattern matching scenarios.
@@ -174,4 +185,5 @@ export declare class DebugPatternMatchingComparator extends PatternMatchingCompa
174
185
  protected visitSequenceElement(patternWrapper: J.RightPadded<J>, targetWrapper: J.RightPadded<J>, targetIdx: number): Promise<boolean>;
175
186
  protected matchSequenceOptimized(patternElements: J.RightPadded<J>[], targetElements: J.RightPadded<J>[], patternIdx: number, targetIdx: number, filterEmpty: boolean): Promise<boolean>;
176
187
  }
188
+ export {};
177
189
  //# sourceMappingURL=comparator.d.ts.map