@openrewrite/rewrite 8.69.0-20251205-210445 → 8.69.0-20251207-092603
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/cli/cli-utils.d.ts +12 -2
- package/dist/cli/cli-utils.d.ts.map +1 -1
- package/dist/cli/cli-utils.js +53 -13
- package/dist/cli/cli-utils.js.map +1 -1
- package/dist/cli/rewrite.d.ts.map +1 -1
- package/dist/cli/rewrite.js +230 -82
- package/dist/cli/rewrite.js.map +1 -1
- package/dist/cli/validate-parsing-recipe.d.ts +23 -0
- package/dist/cli/validate-parsing-recipe.d.ts.map +1 -0
- package/dist/cli/validate-parsing-recipe.js +149 -0
- package/dist/cli/validate-parsing-recipe.js.map +1 -0
- package/dist/javascript/format.d.ts.map +1 -1
- package/dist/javascript/format.js +7 -2
- package/dist/javascript/format.js.map +1 -1
- package/dist/javascript/parser.d.ts.map +1 -1
- package/dist/javascript/parser.js +4 -2
- package/dist/javascript/parser.js.map +1 -1
- package/dist/javascript/tabs-and-indents-visitor.d.ts.map +1 -1
- package/dist/javascript/tabs-and-indents-visitor.js +32 -4
- package/dist/javascript/tabs-and-indents-visitor.js.map +1 -1
- package/dist/json/parser.js +35 -20
- package/dist/json/parser.js.map +1 -1
- package/dist/run.d.ts +8 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +78 -21
- package/dist/run.js.map +1 -1
- package/dist/version.txt +1 -1
- package/package.json +1 -1
- package/src/cli/cli-utils.ts +28 -9
- package/src/cli/rewrite.ts +244 -85
- package/src/cli/validate-parsing-recipe.ts +114 -0
- package/src/javascript/format.ts +7 -2
- package/src/javascript/parser.ts +6 -2
- package/src/javascript/tabs-and-indents-visitor.ts +33 -3
- package/src/json/parser.ts +35 -20
- package/src/run.ts +61 -25
package/dist/cli/rewrite.js
CHANGED
|
@@ -67,6 +67,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
67
67
|
* limitations under the License.
|
|
68
68
|
*/
|
|
69
69
|
const commander_1 = require("commander");
|
|
70
|
+
const fs = __importStar(require("fs"));
|
|
70
71
|
const fsp = __importStar(require("fs/promises"));
|
|
71
72
|
const path = __importStar(require("path"));
|
|
72
73
|
const child_process_1 = require("child_process");
|
|
@@ -76,6 +77,7 @@ const run_1 = require("../run");
|
|
|
76
77
|
const print_1 = require("../print");
|
|
77
78
|
const index_1 = require("../index");
|
|
78
79
|
const cli_utils_1 = require("./cli-utils");
|
|
80
|
+
const validate_parsing_recipe_1 = require("./validate-parsing-recipe");
|
|
79
81
|
const isTTY = (_a = process.stdout.isTTY) !== null && _a !== void 0 ? _a : false;
|
|
80
82
|
const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
81
83
|
class Spinner {
|
|
@@ -120,22 +122,74 @@ require("../javascript");
|
|
|
120
122
|
// Set stack size for complex parsing
|
|
121
123
|
require('v8').setFlagsFromString('--stack-size=8000');
|
|
122
124
|
const DEFAULT_RECIPE_DIR = path.join(process.env.HOME || '', '.rewrite', 'javascript', 'recipes');
|
|
125
|
+
/**
|
|
126
|
+
* Check if a directory is a git repository root.
|
|
127
|
+
*/
|
|
128
|
+
function isGitRoot(dir) {
|
|
129
|
+
return fs.existsSync(path.join(dir, '.git'));
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Find the project root by scanning upward for a directory containing package.json.
|
|
133
|
+
* Stops at git repository root or filesystem root.
|
|
134
|
+
* Returns the starting directory if no package.json is found.
|
|
135
|
+
*/
|
|
136
|
+
function findProjectRoot(startDir) {
|
|
137
|
+
let dir = path.resolve(startDir);
|
|
138
|
+
while (true) {
|
|
139
|
+
const packageJsonPath = path.join(dir, 'package.json');
|
|
140
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
141
|
+
return dir;
|
|
142
|
+
}
|
|
143
|
+
// Stop at git root - don't scan beyond the repository
|
|
144
|
+
if (isGitRoot(dir)) {
|
|
145
|
+
return dir;
|
|
146
|
+
}
|
|
147
|
+
const parent = path.dirname(dir);
|
|
148
|
+
if (parent === dir) {
|
|
149
|
+
// Reached filesystem root, return original directory
|
|
150
|
+
return path.resolve(startDir);
|
|
151
|
+
}
|
|
152
|
+
dir = parent;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Convert a project-root-relative path to a CWD-relative path for display.
|
|
157
|
+
*/
|
|
158
|
+
function toCwdRelative(sourcePath, projectRoot) {
|
|
159
|
+
const absolutePath = path.join(projectRoot, sourcePath);
|
|
160
|
+
return path.relative(process.cwd(), absolutePath) || '.';
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Transform diff output to use CWD-relative paths in headers.
|
|
164
|
+
*/
|
|
165
|
+
function transformDiffPaths(diff, projectRoot) {
|
|
166
|
+
return diff.replace(/^(---|\+\+\+) (.+)$/gm, (_match, prefix, filePath) => {
|
|
167
|
+
if (filePath) {
|
|
168
|
+
const cwdRelative = toCwdRelative(filePath, projectRoot);
|
|
169
|
+
return `${prefix} ${cwdRelative}`;
|
|
170
|
+
}
|
|
171
|
+
return _match;
|
|
172
|
+
});
|
|
173
|
+
}
|
|
123
174
|
function main() {
|
|
124
175
|
return __awaiter(this, void 0, void 0, function* () {
|
|
125
176
|
var _a, e_1, _b, _c;
|
|
126
|
-
var _d, _e, _f, _g;
|
|
177
|
+
var _d, _e, _f, _g, _h, _j, _k, _l;
|
|
127
178
|
const program = new commander_1.Command();
|
|
128
179
|
program
|
|
129
180
|
.name('rewrite')
|
|
130
181
|
.description('Run OpenRewrite recipes on your codebase')
|
|
131
182
|
.argument('<recipe>', 'Recipe to run in format "package:recipe" (e.g., "@openrewrite/recipes-nodejs:replace-deprecated-slice")')
|
|
132
|
-
.
|
|
183
|
+
.argument('[paths...]', 'Files or directories to process (defaults to project root)')
|
|
184
|
+
.option('--apply', 'Apply changes to files (default is dry-run showing diffs)', false)
|
|
185
|
+
.option('-l, --list', 'Only list paths of files that would be changed', false)
|
|
133
186
|
.option('-d, --recipe-dir <dir>', 'Directory for recipe installation', DEFAULT_RECIPE_DIR)
|
|
134
187
|
.option('-o, --option <option...>', 'Recipe options in format "key=value"', [])
|
|
135
188
|
.option('-v, --verbose', 'Enable verbose output', false)
|
|
136
189
|
.option('--debug', 'Start with Node.js debugger (--inspect-brk)', false)
|
|
137
190
|
.parse();
|
|
138
191
|
const recipeArg = program.args[0];
|
|
192
|
+
const pathArgs = program.args.slice(1);
|
|
139
193
|
const opts = program.opts();
|
|
140
194
|
opts.option = opts.option || [];
|
|
141
195
|
// Handle --debug by re-spawning with --inspect-brk
|
|
@@ -147,98 +201,157 @@ function main() {
|
|
|
147
201
|
child.on('exit', (code) => process.exit(code !== null && code !== void 0 ? code : 0));
|
|
148
202
|
return;
|
|
149
203
|
}
|
|
150
|
-
//
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
204
|
+
// Handle special built-in recipes
|
|
205
|
+
let recipe;
|
|
206
|
+
let validateParsingRecipe;
|
|
207
|
+
if (recipeArg === 'validate-parsing') {
|
|
208
|
+
// Special recipe to validate parsing and check idempotence
|
|
209
|
+
validateParsingRecipe = new validate_parsing_recipe_1.ValidateParsingRecipe();
|
|
210
|
+
recipe = validateParsingRecipe;
|
|
156
211
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
212
|
+
else {
|
|
213
|
+
// Parse recipe specification
|
|
214
|
+
const recipeSpec = (0, cli_utils_1.parseRecipeSpec)(recipeArg);
|
|
215
|
+
if (!recipeSpec) {
|
|
216
|
+
console.error(`Invalid recipe format: ${recipeArg}`);
|
|
217
|
+
console.error('Expected format: "package:recipe" (e.g., "@openrewrite/recipes-nodejs:replace-deprecated-slice")');
|
|
218
|
+
console.error('Or use "validate-parsing" to check for parse errors and idempotence.');
|
|
219
|
+
process.exit(1);
|
|
220
|
+
}
|
|
221
|
+
if (opts.verbose) {
|
|
222
|
+
console.log(`Package: ${recipeSpec.packageName}`);
|
|
223
|
+
console.log(`Recipe: ${recipeSpec.recipeName}`);
|
|
224
|
+
}
|
|
225
|
+
// Parse recipe options
|
|
226
|
+
const recipeOptions = (0, cli_utils_1.parseRecipeOptions)(opts.option);
|
|
227
|
+
if (opts.verbose && Object.keys(recipeOptions).length > 0) {
|
|
228
|
+
console.log(`Options: ${JSON.stringify(recipeOptions)}`);
|
|
229
|
+
}
|
|
230
|
+
// Set up recipe registry
|
|
231
|
+
const registry = new recipe_1.RecipeRegistry();
|
|
232
|
+
// Register built-in recipes
|
|
233
|
+
yield (0, index_1.activate)(registry);
|
|
234
|
+
// Load recipes from local path or install from NPM
|
|
235
|
+
try {
|
|
236
|
+
if (recipeSpec.isLocalPath) {
|
|
237
|
+
yield (0, cli_utils_1.loadLocalRecipes)(recipeSpec.packageName, registry, opts.verbose);
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
yield (0, cli_utils_1.installRecipePackage)(recipeSpec.packageName, opts.recipeDir || DEFAULT_RECIPE_DIR, registry, opts.verbose);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
catch (e) {
|
|
244
|
+
console.error(`Failed to load recipes: ${e.message}`);
|
|
245
|
+
process.exit(1);
|
|
246
|
+
}
|
|
247
|
+
// Find the recipe
|
|
248
|
+
const foundRecipe = (0, cli_utils_1.findRecipe)(registry, recipeSpec.recipeName, recipeOptions);
|
|
249
|
+
if (!foundRecipe) {
|
|
250
|
+
process.exit(1);
|
|
251
|
+
}
|
|
252
|
+
recipe = foundRecipe;
|
|
160
253
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
if (opts.verbose && Object.keys(recipeOptions).length > 0) {
|
|
164
|
-
console.log(`Options: ${JSON.stringify(recipeOptions)}`);
|
|
254
|
+
if (opts.verbose) {
|
|
255
|
+
console.log(`Running recipe: ${recipe.name}`);
|
|
165
256
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
257
|
+
const spinner = new Spinner();
|
|
258
|
+
// Determine paths to process and project root
|
|
259
|
+
let targetPaths;
|
|
260
|
+
let projectRoot;
|
|
261
|
+
if (pathArgs.length > 0) {
|
|
262
|
+
// Explicit paths provided - find project root and validate they're all in the same project
|
|
263
|
+
targetPaths = pathArgs.map(p => path.resolve(p));
|
|
264
|
+
const projectRoots = new Set();
|
|
265
|
+
for (const targetPath of targetPaths) {
|
|
266
|
+
const pathDir = fs.statSync(targetPath).isDirectory() ? targetPath : path.dirname(targetPath);
|
|
267
|
+
projectRoots.add(findProjectRoot(pathDir));
|
|
268
|
+
}
|
|
269
|
+
if (projectRoots.size > 1) {
|
|
270
|
+
console.error('Error: Specified paths belong to different projects:');
|
|
271
|
+
for (const root of projectRoots) {
|
|
272
|
+
console.error(` - ${root}`);
|
|
273
|
+
}
|
|
274
|
+
console.error('\nAll paths must be within the same project (share a common package.json root).');
|
|
275
|
+
process.exit(1);
|
|
174
276
|
}
|
|
175
|
-
|
|
176
|
-
|
|
277
|
+
projectRoot = projectRoots.values().next().value;
|
|
278
|
+
if (opts.verbose) {
|
|
279
|
+
if (targetPaths.length > 1) {
|
|
280
|
+
console.log(`Processing ${targetPaths.length} paths`);
|
|
281
|
+
}
|
|
282
|
+
console.log(`Project root: ${projectRoot}`);
|
|
177
283
|
}
|
|
178
284
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
process.
|
|
285
|
+
else {
|
|
286
|
+
// No paths provided - find project root from CWD and process entire project
|
|
287
|
+
projectRoot = findProjectRoot(process.cwd());
|
|
288
|
+
targetPaths = [projectRoot];
|
|
289
|
+
if (opts.verbose) {
|
|
290
|
+
console.log(`Processing entire project: ${projectRoot}`);
|
|
291
|
+
}
|
|
182
292
|
}
|
|
183
|
-
//
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
process.exit(1);
|
|
293
|
+
// Discover source files from all specified paths
|
|
294
|
+
if (!opts.verbose) {
|
|
295
|
+
spinner.start('Discovering source files...');
|
|
187
296
|
}
|
|
188
|
-
|
|
189
|
-
|
|
297
|
+
const sourceFiles = [];
|
|
298
|
+
for (const targetPath of targetPaths) {
|
|
299
|
+
const stat = yield fsp.stat(targetPath);
|
|
300
|
+
if (stat.isDirectory()) {
|
|
301
|
+
const files = yield (0, cli_utils_1.discoverFiles)(targetPath, opts.verbose);
|
|
302
|
+
sourceFiles.push(...files);
|
|
303
|
+
}
|
|
304
|
+
else if (stat.isFile() && (0, cli_utils_1.isAcceptedFile)(targetPath)) {
|
|
305
|
+
sourceFiles.push(targetPath);
|
|
306
|
+
}
|
|
190
307
|
}
|
|
191
|
-
|
|
192
|
-
const
|
|
193
|
-
// Discover source files
|
|
194
|
-
spinner.start('Discovering source files...');
|
|
195
|
-
const sourceFiles = yield (0, cli_utils_1.discoverFiles)(projectRoot, opts.verbose);
|
|
308
|
+
// Remove duplicates (in case of overlapping paths)
|
|
309
|
+
const uniqueSourceFiles = [...new Set(sourceFiles)];
|
|
196
310
|
spinner.stop();
|
|
197
|
-
if (
|
|
311
|
+
if (uniqueSourceFiles.length === 0) {
|
|
198
312
|
console.log('No source files found to process.');
|
|
199
313
|
return;
|
|
200
314
|
}
|
|
201
315
|
if (opts.verbose) {
|
|
202
|
-
console.log(`Found ${
|
|
316
|
+
console.log(`Found ${uniqueSourceFiles.length} source files`);
|
|
203
317
|
}
|
|
204
|
-
//
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
spinner.update(`Parsing [${current}/${total}] ${filePath}`);
|
|
208
|
-
});
|
|
209
|
-
spinner.stop();
|
|
210
|
-
if (parsedFiles.length === 0) {
|
|
211
|
-
console.log('No files could be parsed.');
|
|
212
|
-
return;
|
|
318
|
+
// Set project root for validate-parsing recipe if active
|
|
319
|
+
if (validateParsingRecipe) {
|
|
320
|
+
validateParsingRecipe.setProjectRoot(projectRoot);
|
|
213
321
|
}
|
|
214
|
-
//
|
|
322
|
+
// Create streaming parser - files are parsed on-demand as they're consumed
|
|
323
|
+
const totalFiles = uniqueSourceFiles.length;
|
|
324
|
+
const sourceFileStream = (0, cli_utils_1.parseFilesStreaming)(uniqueSourceFiles, projectRoot, {
|
|
325
|
+
verbose: opts.verbose
|
|
326
|
+
});
|
|
327
|
+
// Run the recipe with streaming output - for non-scanning recipes,
|
|
328
|
+
// parsing and processing happen concurrently without collecting all files first
|
|
215
329
|
const ctx = new execution_1.ExecutionContext();
|
|
216
330
|
let changeCount = 0;
|
|
217
331
|
let processedCount = 0;
|
|
218
|
-
|
|
219
|
-
|
|
332
|
+
// Progress callback for spinner updates during all phases (disabled in verbose mode)
|
|
333
|
+
const onProgress = opts.verbose ? undefined : (phase, current, total, sourcePath) => {
|
|
334
|
+
const totalStr = total > 0 ? total : totalFiles;
|
|
335
|
+
const phaseLabel = phase.charAt(0).toUpperCase() + phase.slice(1);
|
|
336
|
+
spinner.update(`${phaseLabel} [${current}/${totalStr}] ${sourcePath}`);
|
|
337
|
+
};
|
|
338
|
+
if (!opts.verbose) {
|
|
339
|
+
spinner.start(`Processing ${totalFiles} files...`);
|
|
340
|
+
}
|
|
220
341
|
try {
|
|
221
|
-
for (var
|
|
222
|
-
_c =
|
|
223
|
-
|
|
342
|
+
for (var _m = true, _o = __asyncValues((0, run_1.scheduleRunStreaming)(recipe, sourceFileStream, ctx, onProgress)), _p; _p = yield _o.next(), _a = _p.done, !_a; _m = true) {
|
|
343
|
+
_c = _p.value;
|
|
344
|
+
_m = false;
|
|
224
345
|
const result = _c;
|
|
225
346
|
processedCount++;
|
|
226
347
|
const currentPath = (_g = (_e = (_d = result.after) === null || _d === void 0 ? void 0 : _d.sourcePath) !== null && _e !== void 0 ? _e : (_f = result.before) === null || _f === void 0 ? void 0 : _f.sourcePath) !== null && _g !== void 0 ? _g : '';
|
|
227
|
-
spinner.update(`Processing [${processedCount}/${totalFiles}] ${currentPath}`);
|
|
228
348
|
const statusMsg = `Processing [${processedCount}/${totalFiles}] ${currentPath}`;
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
!line.startsWith('+++') && !line.startsWith('---'));
|
|
234
|
-
if (hasChanges) {
|
|
235
|
-
changeCount++;
|
|
236
|
-
spinner.stop();
|
|
237
|
-
console.log((0, cli_utils_1.colorizeDiff)(diff));
|
|
238
|
-
spinner.start(statusMsg);
|
|
239
|
-
}
|
|
349
|
+
// Skip unchanged files - first check object identity (fast path),
|
|
350
|
+
// then check actual diff content for files where visitor returned new object
|
|
351
|
+
if (result.before === result.after) {
|
|
352
|
+
continue; // Definitely unchanged
|
|
240
353
|
}
|
|
241
|
-
|
|
354
|
+
if (opts.apply) {
|
|
242
355
|
// Apply changes immediately
|
|
243
356
|
if (result.after) {
|
|
244
357
|
const filePath = path.join(projectRoot, result.after.sourcePath);
|
|
@@ -247,22 +360,49 @@ function main() {
|
|
|
247
360
|
yield fsp.mkdir(path.dirname(filePath), { recursive: true });
|
|
248
361
|
yield fsp.writeFile(filePath, content);
|
|
249
362
|
changeCount++;
|
|
250
|
-
|
|
363
|
+
if (!opts.verbose)
|
|
364
|
+
spinner.stop();
|
|
365
|
+
const displayPath = toCwdRelative(result.after.sourcePath, projectRoot);
|
|
251
366
|
if (result.before) {
|
|
252
|
-
console.log(` Modified: ${
|
|
367
|
+
console.log(` Modified: ${displayPath}`);
|
|
253
368
|
}
|
|
254
369
|
else {
|
|
255
|
-
console.log(` Created: ${
|
|
370
|
+
console.log(` Created: ${displayPath}`);
|
|
256
371
|
}
|
|
257
|
-
|
|
372
|
+
if (!opts.verbose)
|
|
373
|
+
spinner.start(statusMsg);
|
|
258
374
|
}
|
|
259
375
|
else if (result.before) {
|
|
260
376
|
const filePath = path.join(projectRoot, result.before.sourcePath);
|
|
261
377
|
yield fsp.unlink(filePath);
|
|
262
378
|
changeCount++;
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
379
|
+
if (!opts.verbose)
|
|
380
|
+
spinner.stop();
|
|
381
|
+
console.log(` Deleted: ${toCwdRelative(result.before.sourcePath, projectRoot)}`);
|
|
382
|
+
if (!opts.verbose)
|
|
383
|
+
spinner.start(statusMsg);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
// Dry-run mode: show diff or just list paths
|
|
388
|
+
const diff = yield result.diff();
|
|
389
|
+
const hasChanges = diff.split('\n').some(line => (line.startsWith('+') || line.startsWith('-')) &&
|
|
390
|
+
!line.startsWith('+++') && !line.startsWith('---'));
|
|
391
|
+
if (hasChanges) {
|
|
392
|
+
changeCount++;
|
|
393
|
+
if (!opts.verbose)
|
|
394
|
+
spinner.stop();
|
|
395
|
+
if (opts.list) {
|
|
396
|
+
// Just list the path
|
|
397
|
+
const displayPath = toCwdRelative((_l = (_j = (_h = result.after) === null || _h === void 0 ? void 0 : _h.sourcePath) !== null && _j !== void 0 ? _j : (_k = result.before) === null || _k === void 0 ? void 0 : _k.sourcePath) !== null && _l !== void 0 ? _l : '', projectRoot);
|
|
398
|
+
console.log(displayPath);
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
// Show the diff with CWD-relative paths
|
|
402
|
+
console.log((0, cli_utils_1.colorizeDiff)(transformDiffPaths(diff, projectRoot)));
|
|
403
|
+
}
|
|
404
|
+
if (!opts.verbose)
|
|
405
|
+
spinner.start(statusMsg);
|
|
266
406
|
}
|
|
267
407
|
}
|
|
268
408
|
}
|
|
@@ -270,20 +410,28 @@ function main() {
|
|
|
270
410
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
271
411
|
finally {
|
|
272
412
|
try {
|
|
273
|
-
if (!
|
|
413
|
+
if (!_m && !_a && (_b = _o.return)) yield _b.call(_o);
|
|
274
414
|
}
|
|
275
415
|
finally { if (e_1) throw e_1.error; }
|
|
276
416
|
}
|
|
277
|
-
|
|
417
|
+
if (!opts.verbose)
|
|
418
|
+
spinner.stop();
|
|
419
|
+
// For validate-parsing recipe, check for errors and exit accordingly
|
|
420
|
+
if (validateParsingRecipe) {
|
|
421
|
+
if (!validateParsingRecipe.hasErrors) {
|
|
422
|
+
console.log('All files parsed successfully.');
|
|
423
|
+
}
|
|
424
|
+
process.exit(validateParsingRecipe.hasErrors ? 1 : 0);
|
|
425
|
+
}
|
|
278
426
|
if (changeCount === 0) {
|
|
279
427
|
console.log('No changes to make.');
|
|
280
428
|
}
|
|
281
|
-
else if (opts.
|
|
282
|
-
console.log(`\n${changeCount} file(s) would be changed.`);
|
|
283
|
-
}
|
|
284
|
-
else {
|
|
429
|
+
else if (opts.apply) {
|
|
285
430
|
console.log(`\n${changeCount} file(s) changed.`);
|
|
286
431
|
}
|
|
432
|
+
else if (!opts.list) {
|
|
433
|
+
console.log(`\n${changeCount} file(s) would be changed. Run with --apply to apply changes.`);
|
|
434
|
+
}
|
|
287
435
|
});
|
|
288
436
|
}
|
|
289
437
|
main().catch((err) => {
|
package/dist/cli/rewrite.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rewrite.js","sourceRoot":"","sources":["../../src/cli/rewrite.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rewrite.js","sourceRoot":"","sources":["../../src/cli/rewrite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Recipe } from '../recipe';
|
|
2
|
+
import { TreeVisitor } from '../visitor';
|
|
3
|
+
import { ExecutionContext } from '../execution';
|
|
4
|
+
/**
|
|
5
|
+
* A recipe that validates parsing by:
|
|
6
|
+
* 1. Reporting parse errors to stderr
|
|
7
|
+
* 2. Checking parse-to-print idempotence and showing diffs for failures
|
|
8
|
+
*
|
|
9
|
+
* Use this recipe to validate that the parser correctly handles your codebase.
|
|
10
|
+
*/
|
|
11
|
+
export declare class ValidateParsingRecipe extends Recipe {
|
|
12
|
+
name: string;
|
|
13
|
+
displayName: string;
|
|
14
|
+
description: string;
|
|
15
|
+
private projectRoot;
|
|
16
|
+
private parseErrorCount;
|
|
17
|
+
private idempotenceFailureCount;
|
|
18
|
+
setProjectRoot(root: string): this;
|
|
19
|
+
editor(): Promise<TreeVisitor<any, ExecutionContext>>;
|
|
20
|
+
onComplete(_ctx: ExecutionContext): Promise<void>;
|
|
21
|
+
get hasErrors(): boolean;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=validate-parsing-recipe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-parsing-recipe.d.ts","sourceRoot":"","sources":["../../src/cli/validate-parsing-recipe.ts"],"names":[],"mappings":"AAeA,OAAO,EAAC,MAAM,EAAC,MAAM,WAAW,CAAC;AACjC,OAAO,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AACvC,OAAO,EAAC,gBAAgB,EAAC,MAAM,cAAc,CAAC;AAS9C;;;;;;GAMG;AACH,qBAAa,qBAAsB,SAAQ,MAAM;IAC7C,IAAI,SAAsC;IAC1C,WAAW,SAAsB;IACjC,WAAW,SAA2J;IAEtK,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,uBAAuB,CAAK;IAEpC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK5B,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAmDrD,UAAU,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvD,IAAI,SAAS,IAAI,OAAO,CAEvB;CACJ"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.ValidateParsingRecipe = void 0;
|
|
46
|
+
/*
|
|
47
|
+
* Copyright 2025 the original author or authors.
|
|
48
|
+
* <p>
|
|
49
|
+
* Licensed under the Moderne Source Available License (the "License");
|
|
50
|
+
* you may not use this file except in compliance with the License.
|
|
51
|
+
* You may obtain a copy of the License at
|
|
52
|
+
* <p>
|
|
53
|
+
* https://docs.moderne.io/licensing/moderne-source-available-license
|
|
54
|
+
* <p>
|
|
55
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
56
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
57
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
58
|
+
* See the License for the specific language governing permissions and
|
|
59
|
+
* limitations under the License.
|
|
60
|
+
*/
|
|
61
|
+
const recipe_1 = require("../recipe");
|
|
62
|
+
const visitor_1 = require("../visitor");
|
|
63
|
+
const parse_error_1 = require("../parse-error");
|
|
64
|
+
const markers_1 = require("../markers");
|
|
65
|
+
const print_1 = require("../print");
|
|
66
|
+
const diff_1 = require("diff");
|
|
67
|
+
const fs = __importStar(require("fs"));
|
|
68
|
+
const path = __importStar(require("path"));
|
|
69
|
+
/**
|
|
70
|
+
* A recipe that validates parsing by:
|
|
71
|
+
* 1. Reporting parse errors to stderr
|
|
72
|
+
* 2. Checking parse-to-print idempotence and showing diffs for failures
|
|
73
|
+
*
|
|
74
|
+
* Use this recipe to validate that the parser correctly handles your codebase.
|
|
75
|
+
*/
|
|
76
|
+
class ValidateParsingRecipe extends recipe_1.Recipe {
|
|
77
|
+
constructor() {
|
|
78
|
+
super(...arguments);
|
|
79
|
+
this.name = 'org.openrewrite.validate-parsing';
|
|
80
|
+
this.displayName = 'Validate parsing';
|
|
81
|
+
this.description = 'Validates that all source files parse correctly and that parse-to-print is idempotent. Reports parse errors and shows diffs for idempotence failures.';
|
|
82
|
+
this.projectRoot = process.cwd();
|
|
83
|
+
this.parseErrorCount = 0;
|
|
84
|
+
this.idempotenceFailureCount = 0;
|
|
85
|
+
}
|
|
86
|
+
setProjectRoot(root) {
|
|
87
|
+
this.projectRoot = root;
|
|
88
|
+
return this;
|
|
89
|
+
}
|
|
90
|
+
editor() {
|
|
91
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
92
|
+
const recipe = this;
|
|
93
|
+
return new class extends visitor_1.TreeVisitor {
|
|
94
|
+
visit(tree, ctx) {
|
|
95
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
96
|
+
var _a;
|
|
97
|
+
if (!tree)
|
|
98
|
+
return undefined;
|
|
99
|
+
const sourceFile = tree;
|
|
100
|
+
// Check for parse errors
|
|
101
|
+
if ((0, parse_error_1.isParseError)(sourceFile)) {
|
|
102
|
+
const parseException = sourceFile.markers.markers.find(m => m.kind === markers_1.MarkersKind.ParseExceptionResult);
|
|
103
|
+
const message = (_a = parseException === null || parseException === void 0 ? void 0 : parseException.message) !== null && _a !== void 0 ? _a : 'Unknown parse error';
|
|
104
|
+
console.error(`Parse error in ${sourceFile.sourcePath}: ${message}`);
|
|
105
|
+
recipe.parseErrorCount++;
|
|
106
|
+
return tree;
|
|
107
|
+
}
|
|
108
|
+
// Check parse-to-print idempotence
|
|
109
|
+
try {
|
|
110
|
+
const printed = yield print_1.TreePrinters.print(sourceFile);
|
|
111
|
+
const originalPath = path.join(recipe.projectRoot, sourceFile.sourcePath);
|
|
112
|
+
const original = fs.readFileSync(originalPath, 'utf-8');
|
|
113
|
+
if (printed !== original) {
|
|
114
|
+
recipe.idempotenceFailureCount++;
|
|
115
|
+
console.error(`Parse-to-print idempotence failure in ${sourceFile.sourcePath}:`);
|
|
116
|
+
// Generate and print diff
|
|
117
|
+
const diff = (0, diff_1.createTwoFilesPatch)(sourceFile.sourcePath, sourceFile.sourcePath, original, printed, 'original', 'printed', { context: 3 });
|
|
118
|
+
console.error(diff);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (e) {
|
|
122
|
+
recipe.idempotenceFailureCount++;
|
|
123
|
+
console.error(`Failed to check idempotence for ${sourceFile.sourcePath}: ${e.message}`);
|
|
124
|
+
}
|
|
125
|
+
return tree;
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
onComplete(_ctx) {
|
|
132
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
133
|
+
if (this.parseErrorCount > 0 || this.idempotenceFailureCount > 0) {
|
|
134
|
+
console.error('');
|
|
135
|
+
if (this.parseErrorCount > 0) {
|
|
136
|
+
console.error(`${this.parseErrorCount} file(s) had parse errors.`);
|
|
137
|
+
}
|
|
138
|
+
if (this.idempotenceFailureCount > 0) {
|
|
139
|
+
console.error(`${this.idempotenceFailureCount} file(s) had parse-to-print idempotence failures.`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
get hasErrors() {
|
|
145
|
+
return this.parseErrorCount > 0 || this.idempotenceFailureCount > 0;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
exports.ValidateParsingRecipe = ValidateParsingRecipe;
|
|
149
|
+
//# sourceMappingURL=validate-parsing-recipe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-parsing-recipe.js","sourceRoot":"","sources":["../../src/cli/validate-parsing-recipe.ts"],"names":[],"mappings":"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"}
|