Repository navigation
perf(fmt): reuse compiled gitignore rules and release traversal state - #590
Merged
Merged
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
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.
Motivation
Monorepos often repeat the same
.gitignorecontents across packages.rs fmtcurrently compiles each copy independently and leaves native matcher cleanup to garbage collection.Changes
Share compiled rules by exact contents using
Arc<Gitignore>, while keeping each directory's matching state independent. Explicitly release compiled rules and directory caches after traversal, including failure paths, once all concurrent traversals have settled.Benchmarked on a large monorepo with 56,583 formatted files and 258
.gitignoresources (60 unique contents), using Node.js 22.16.0, 8 workers, no format cache, and the same patched Prettier 3.9.10 in both variants:Discovery is 14.9% faster; whole-repository timings are effectively unchanged within run-to-run variation. Allocation tracking confirms explicit cleanup releases matcher data to the same level as dropping the matcher. With 258 distinct contents, the cache adds about 114 KiB.
Validation: Rust and formatting-related tests passed, along with lint, type, and format checks. All 59,817 discovery requests, 38,556 replayed native call results, and existing benchmark diagnostics match the baseline.