Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
9739631
feat(path): add interned UstrPath type backed by ustr
stormslowly Jul 30, 2026
9b8aafa
fix(path): rename similar bindings in UstrPath test to satisfy clippy…
stormslowly Jul 30, 2026
6460055
feat(path): normalize windows path spellings at intern time
stormslowly Jul 30, 2026
2cba2e1
fix(path): fold windows drive letter case at intern time
stormslowly Jul 30, 2026
bd61675
feat(path): add ToUstrPath conversion trait
stormslowly Jul 30, 2026
908cb32
refactor(path): replace ResolverPath with interned UstrPath
stormslowly Jul 30, 2026
86a39c0
fix(path): take dependency by reference to preserve zero-cost no-cont…
stormslowly Jul 30, 2026
1554722
perf(cache): memoize interned dependency paths on CachedPathImpl
stormslowly Jul 30, 2026
41fde72
refactor(package-json): store path and realpath as UstrPath
stormslowly Jul 30, 2026
a57076b
refactor(resolution): store resolved path as UstrPath
stormslowly Jul 30, 2026
26553b3
perf(tsconfig): keep file dependencies as interned UstrPath
stormslowly Jul 30, 2026
1bfb943
refactor(pnp): store manifest path as UstrPath
stormslowly Jul 30, 2026
23e0b37
test: assert dependency paths are interned once end to end
stormslowly Jul 30, 2026
88b6694
test: guard interning test against a vacuously empty fixture
stormslowly Jul 30, 2026
738904d
perf(tsconfig): intern config_file once instead of on every cache lookup
stormslowly Jul 30, 2026
4d43582
docs(cache,ustr-path): correct stale comments, document doc(hidden) r…
stormslowly Jul 30, 2026
a22c346
test: make path assertions platform-aware
stormslowly Jul 31, 2026
b2d20c9
fix(path): intern paths verbatim instead of normalizing on Windows
stormslowly Jul 31, 2026
298220b
fix(path): align UstrPath hash and equality with std Path on Windows
stormslowly Jul 31, 2026
ef9defb
refactor(path): swap ustr for a refcounted interner so paths can be f…
stormslowly Aug 3, 2026
01eb426
fix(path): repair two CI breaks from the interner swap
stormslowly Aug 3, 2026
db5dea9
perf(interner): replace internment with a purpose-built refcounted in…
stormslowly Aug 3, 2026
07e41d6
Merge branch 'main' into refactor/interned-ustr-path
stormslowly Aug 3, 2026
cbe8468
perf(interner): drop refcounts without taking the shard lock
stormslowly Aug 3, 2026
850c908
perf(interner): reclaim entries by sweeping instead of freeing on drop
stormslowly Aug 4, 2026
1ff65c9
test(interner): pin the refcount an insert-triggered sweep depends on
stormslowly Aug 5, 2026
704b58c
refactor(path): rename UstrPath back to ResolverPath
stormslowly Aug 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,12 @@ indexmap = { version = "2.14.0", features = ["serde"] }
json-strip-comments = "3.1.1"
rustc-hash = { version = "2.1.2", default-features = false, features = ["std"] }
thiserror = "2.0.18"
# Backing table for `src/interner.rs`. `HashTable` is the piece that off-the-
# shelf interners cannot offer: it looks up by a caller-supplied hash, so the
# interner reuses the `FxHash` `ResolverPath` already computed instead of hashing
# every path a second time. Version tracks what `indexmap` resolves to, so no
# extra copy of hashbrown enters the graph.
hashbrown = { version = "0.17.0", default-features = false, features = ["inline-more"] }

pnp = { version = "0.12.9", optional = true }

Expand Down
3 changes: 2 additions & 1 deletion deny.toml
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,8 @@ allow = [
"MIT",
"Apache-2.0",
"BSD-2-Clause",
"Unicode-3.0",
"BSD-2-Clause-Patent",
"Unicode-3.0",
"Zlib"
#"Apache-2.0 WITH LLVM-exception",
]
Expand Down
4 changes: 2 additions & 2 deletions examples/resolver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,10 @@ async fn main() {
};

let mut sorted_file_deps = ctx.file_dependencies.iter().collect::<Vec<_>>();
sorted_file_deps.sort_by_key(|p| p.as_path());
sorted_file_deps.sort_by_key(|p| p.as_std_path());
println!("file_deps: {:#?}", sorted_file_deps);

let mut sorted_missing = ctx.missing_dependencies.iter().collect::<Vec<_>>();
sorted_missing.sort_by_key(|p| p.as_path());
sorted_missing.sort_by_key(|p| p.as_std_path());
println!("missing_deps: {:#?}", sorted_missing);
}
Loading
Loading