fix(ast-grep): fix ast_grep_replace silent write failure#1708
Open
jsl9208 wants to merge 1 commit intocode-yeongyu:devfrom
Open
fix(ast-grep): fix ast_grep_replace silent write failure#1708jsl9208 wants to merge 1 commit intocode-yeongyu:devfrom
jsl9208 wants to merge 1 commit intocode-yeongyu:devfrom
Conversation
ast-grep CLI silently ignores --update-all when --json=compact is present, causing replace operations to report success while never modifying files. Split into two separate CLI invocations.
There was a problem hiding this comment.
No issues found across 1 file
Confidence score: 5/5
- Automated review surfaced no issues in the provided summaries.
- No files require special attention.
Requires human review: The separate write pass logic introduces new async subprocess handling with timeout and error paths. While the fix addresses a real CLI quirk, the new code path (lines 163-179) hasn't been validated…
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.