fix: disable sparse output optimization when AST is requested #352
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
When AST output is requested via
--astflag, sparse output optimization must be disabled because AST node IDs are specific to each compilation unit.Problem
When compiling with
forge test --ast, if a test file imports a source file that hasn't changed (cache hit), the sparse output optimization would request empty output selection for that cached import. This causes:Fix
This PR adds:
OutputSelection::contains_ast()method to detect if AST is in the output selectionsparse_sourcesto skip sparse optimization when AST is requestedWhen AST is detected in the output selection, all files in the compilation unit get full output selection, ensuring consistent AST node IDs across all files.
Testing
Added unit test for
contains_ast()covering:ast_output_selection())*wildcard)Fixes foundry-rs/foundry#11056
Reproduction