File tree Expand file tree Collapse file tree 6 files changed +35
-6
lines changed Expand file tree Collapse file tree 6 files changed +35
-6
lines changed Original file line number Diff line number Diff line change 1212jobs :
1313 cargo-test :
1414 runs-on : ubuntu-latest
15+ strategy :
16+ matrix :
17+ features :
18+ - default
19+ - rustc-hash
1520 steps :
1621 - uses : actions/checkout@v4
1722 - uses : dtolnay/rust-toolchain@stable
1823 - uses : Swatinem/rust-cache@v2
19- - run : cargo test
24+ - run : cargo test --no-default-features --features '${{ matrix.features }}'
Original file line number Diff line number Diff line change 1- 2e6f3bd1d32455e535de1d9ee154253c333aec73
1+ d1fa49b2e66c343210c413b68ed57f150b7b89d8
Original file line number Diff line number Diff line change @@ -9,6 +9,16 @@ repository = "https://github.com/rust-lang/rustdoc-types"
99
1010[dependencies ]
1111serde = {version =" 1" , features =[" derive" ]}
12+ rustc-hash = {version =" 2" , optional =true }
13+
14+ [features ]
15+ default = []
16+
17+ # Switch the hashmaps used in rustdoc-types to the FxHashMap from rustc-hash.
18+ #
19+ # This might improve performace if your are reading the rustdoc JSON from large
20+ # crates like aws_sdk_ec2
21+ rustc-hash = [" dep:rustc-hash" ]
1222
1323[dev-dependencies ]
1424bincode = " 1.3.3"
Original file line number Diff line number Diff line change @@ -13,6 +13,18 @@ let krate: rustdoc_types::Crate = serde_json::from_str(&json_string)?;
1313println! (" the index has {} items" , krate . index. len ());
1414```
1515
16+ For performance sensitive crates, consider turning on the ` rustc-hash `
17+ feature. This switches all data structures from ` std::collections::HashMap ` to
18+ ` rustc-hash::FxHashMap ` which improves performance when reading big JSON files
19+ (like ` aws_sdk_rs ` 's).
20+
21+ ` cargo-semver-checks ` benchmarked this change with ` aws_sdk_ec2 ` 's JSON and
22+ [ observed a -3% improvement to the runtime] [ csc benchmarks ] . The performance
23+ here depends on how much time you spend querying the ` HashMap ` s, so as always,
24+ measure first.
25+
26+ [ csc benchmarks ] : https://rust-lang.zulipchat.com/#narrow/channel/266220-t-rustdoc/topic/rustc-hash.20and.20performance.20of.20rustdoc-types/near/474855731
27+
1628## Contributing
1729
1830This repo is a reexport of
Original file line number Diff line number Diff line change 33//! These types are the public API exposed through the `--output-format json` flag. The [`Crate`]
44//! struct is the root of the JSON blob and all other items are contained within.
55
6+ #[ cfg( not( feature = "rustc-hash" ) ) ]
7+ use std:: collections:: HashMap ;
68use std:: path:: PathBuf ;
79
8- use std:: collections:: HashMap ;
10+ #[ cfg( feature = "rustc-hash" ) ]
11+ use rustc_hash:: FxHashMap as HashMap ;
912use serde:: { Deserialize , Serialize } ;
1013
14+
1115/// The version of JSON output that this crate represents.
1216///
1317/// This integer is incremented with every breaking change to the API,
Original file line number Diff line number Diff line change @@ -9,9 +9,7 @@ repo="rust"
99branch=" master"
1010
1111curl -# https://raw.githubusercontent.com/${user} /${repo} /${branch} /src/rustdoc-json-types/lib.rs \
12- | sed ' s/rustc_hash::/std::collections::/g' \
13- | sed ' s/FxHashMap/HashMap/g' \
14- | sed ' s/^pub use /use /' \
12+ | sed ' /^pub type FxHashMap.*$/d' \
1513 > src/lib.rs
1614
1715curl -# https://raw.githubusercontent.com/${user} /${repo} /${branch} /src/rustdoc-json-types/tests.rs > src/tests.rs
You can’t perform that action at this time.
0 commit comments