fix(ast-grep): fix ast_grep_replace silent write failure #1708
+31
−2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
ast_grep_replacewithdryRun=falsesilently fails to write files because--json=compactand--update-allare passed in the same CLI invocation, and ast-grep ignores--update-allwhen--jsonmode is activeChanges
runSg()into two separate CLI invocations when bothrewriteandupdateAllare requested:--json=compact(without--update-all) to collect match results--update-all(without--json) to perform actual file writes{ ...jsonResult, error })Testing
Verified with real ast-grep binary (v0.40.5):
dryRun=true— reports matches, file unchanged ✅dryRun=false— reports matches, file modified ✅PR Checklist
bun run typecheckpassesbun run buildsucceedspackage.jsonRelated Issues
None found — this bug was not previously reported.
Summary by cubic
Fixes ast_grep_replace writing no changes when using rewrite+updateAll by separating read and write passes so file updates actually happen. Also preserves match results and surfaces write errors instead of reporting false success.
Written for commit fec12b6. Summary will update on new commits.