Full Code of guppy-rs/guppy for AI

main a9d960078c1e cached
578 files
21.3 MB
5.6M tokens
2092 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (22,487K chars total). Download the full file to get everything.
Repository: guppy-rs/guppy
Branch: main
Commit: a9d960078c1e
Files: 578
Total size: 21.3 MB

Directory structure:
gitextract_922wtfg2/

├── .cargo/
│   ├── config.toml
│   └── nightly-config.toml
├── .claude/
│   ├── .gitignore
│   └── settings.json
├── .config/
│   └── hakari.toml
├── .git-blame-ignore-revs
├── .gitattributes
├── .github/
│   ├── renovate.json
│   └── workflows/
│       ├── ci.yml
│       ├── docs.yml
│       ├── hakari.yml
│       └── release.yml
├── .gitignore
├── .ignore
├── .vscode/
│   └── launch.json
├── CLAUDE.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Cargo.toml
├── Cross.toml
├── Justfile
├── LICENSE-APACHE
├── LICENSE-MIT
├── README.md
├── cargo-guppy/
│   ├── Cargo.toml
│   ├── README.md
│   ├── README.tpl
│   └── src/
│       ├── core.rs
│       ├── diff.rs
│       ├── lib.rs
│       ├── main.rs
│       └── mv.rs
├── clippy.toml
├── fixtures/
│   ├── Cargo.toml
│   ├── README.md
│   ├── determinator-paths/
│   │   ├── README.md
│   │   ├── git-diff.out
│   │   ├── guppy-linux.json
│   │   └── guppy-win.json
│   ├── guppy/
│   │   ├── hakari/
│   │   │   ├── metadata_guppy_44b62fa-0.toml
│   │   │   ├── metadata_guppy_44b62fa-1.toml
│   │   │   ├── metadata_guppy_44b62fa-2.toml
│   │   │   ├── metadata_guppy_44b62fa-3.toml
│   │   │   ├── metadata_guppy_78cb7e8-0.toml
│   │   │   ├── metadata_guppy_78cb7e8-1.toml
│   │   │   ├── metadata_guppy_78cb7e8-2.toml
│   │   │   ├── metadata_guppy_78cb7e8-3.toml
│   │   │   ├── metadata_guppy_869476c-0.toml
│   │   │   ├── metadata_guppy_869476c-1.toml
│   │   │   ├── metadata_guppy_869476c-2.toml
│   │   │   ├── metadata_guppy_869476c-3.toml
│   │   │   ├── metadata_guppy_c9b4f76-0.toml
│   │   │   ├── metadata_guppy_c9b4f76-1.toml
│   │   │   ├── metadata_guppy_c9b4f76-2.toml
│   │   │   └── metadata_guppy_c9b4f76-3.toml
│   │   ├── metadata_guppy_44b62fa.json
│   │   ├── metadata_guppy_78cb7e8.json
│   │   ├── metadata_guppy_869476c.json
│   │   ├── metadata_guppy_c9b4f76.json
│   │   ├── package-rules.toml
│   │   ├── path-rules.toml
│   │   └── summaries/
│   │       ├── metadata_guppy_44b62fa-0.toml
│   │       ├── metadata_guppy_44b62fa-1.toml
│   │       ├── metadata_guppy_44b62fa-2.toml
│   │       ├── metadata_guppy_44b62fa-3.toml
│   │       ├── metadata_guppy_44b62fa-4.toml
│   │       ├── metadata_guppy_44b62fa-5.toml
│   │       ├── metadata_guppy_44b62fa-6.toml
│   │       ├── metadata_guppy_44b62fa-7.toml
│   │       ├── metadata_guppy_78cb7e8-0.toml
│   │       ├── metadata_guppy_78cb7e8-1.toml
│   │       ├── metadata_guppy_78cb7e8-2.toml
│   │       ├── metadata_guppy_78cb7e8-3.toml
│   │       ├── metadata_guppy_78cb7e8-4.toml
│   │       ├── metadata_guppy_78cb7e8-5.toml
│   │       ├── metadata_guppy_78cb7e8-6.toml
│   │       ├── metadata_guppy_78cb7e8-7.toml
│   │       ├── metadata_guppy_869476c-0.toml
│   │       ├── metadata_guppy_869476c-1.toml
│   │       ├── metadata_guppy_869476c-2.toml
│   │       ├── metadata_guppy_869476c-3.toml
│   │       ├── metadata_guppy_869476c-4.toml
│   │       ├── metadata_guppy_869476c-5.toml
│   │       ├── metadata_guppy_869476c-6.toml
│   │       ├── metadata_guppy_869476c-7.toml
│   │       ├── metadata_guppy_c9b4f76-0.toml
│   │       ├── metadata_guppy_c9b4f76-1.toml
│   │       ├── metadata_guppy_c9b4f76-2.toml
│   │       ├── metadata_guppy_c9b4f76-3.toml
│   │       ├── metadata_guppy_c9b4f76-4.toml
│   │       ├── metadata_guppy_c9b4f76-5.toml
│   │       ├── metadata_guppy_c9b4f76-6.toml
│   │       └── metadata_guppy_c9b4f76-7.toml
│   ├── invalid/
│   │   ├── build_targets_duplicate_lib.json
│   │   ├── build_targets_empty_kinds.json
│   │   ├── build_targets_non_bin.json
│   │   ├── duplicate_workspace_names.json
│   │   ├── invalid_default_member.json
│   │   ├── named_feature_self_loop.json
│   │   ├── optional_dev_dep.json
│   │   └── workspace_member_different_drive.json
│   ├── large/
│   │   ├── hakari/
│   │   │   ├── hyper_util_7afb1ed-0.toml
│   │   │   ├── hyper_util_7afb1ed-1.toml
│   │   │   ├── hyper_util_7afb1ed-2.toml
│   │   │   ├── hyper_util_7afb1ed-3.toml
│   │   │   ├── metadata_libra-0.toml
│   │   │   ├── metadata_libra-1.toml
│   │   │   ├── metadata_libra-2.toml
│   │   │   ├── metadata_libra-3.toml
│   │   │   ├── metadata_libra_9ffd93b-0.toml
│   │   │   ├── metadata_libra_9ffd93b-1.toml
│   │   │   ├── metadata_libra_9ffd93b-2.toml
│   │   │   ├── metadata_libra_9ffd93b-3.toml
│   │   │   ├── metadata_libra_f0091a4-0.toml
│   │   │   ├── metadata_libra_f0091a4-1.toml
│   │   │   ├── metadata_libra_f0091a4-2.toml
│   │   │   ├── metadata_libra_f0091a4-3.toml
│   │   │   ├── mnemos_b3b4da9-0.toml
│   │   │   ├── mnemos_b3b4da9-1.toml
│   │   │   ├── mnemos_b3b4da9-2.toml
│   │   │   └── mnemos_b3b4da9-3.toml
│   │   ├── hyper_util_7afb1ed.json
│   │   ├── metadata_libra.json
│   │   ├── metadata_libra_9ffd93b.json
│   │   ├── metadata_libra_f0091a4.json
│   │   ├── mnemos_b3b4da9.json
│   │   └── summaries/
│   │       ├── hyper_util_7afb1ed-0.toml
│   │       ├── hyper_util_7afb1ed-1.toml
│   │       ├── hyper_util_7afb1ed-2.toml
│   │       ├── hyper_util_7afb1ed-3.toml
│   │       ├── hyper_util_7afb1ed-4.toml
│   │       ├── hyper_util_7afb1ed-5.toml
│   │       ├── hyper_util_7afb1ed-6.toml
│   │       ├── hyper_util_7afb1ed-7.toml
│   │       ├── metadata_libra-0.toml
│   │       ├── metadata_libra-1.toml
│   │       ├── metadata_libra-2.toml
│   │       ├── metadata_libra-3.toml
│   │       ├── metadata_libra-4.toml
│   │       ├── metadata_libra-5.toml
│   │       ├── metadata_libra-6.toml
│   │       ├── metadata_libra-7.toml
│   │       ├── metadata_libra_9ffd93b-0.toml
│   │       ├── metadata_libra_9ffd93b-1.toml
│   │       ├── metadata_libra_9ffd93b-2.toml
│   │       ├── metadata_libra_9ffd93b-3.toml
│   │       ├── metadata_libra_9ffd93b-4.toml
│   │       ├── metadata_libra_9ffd93b-5.toml
│   │       ├── metadata_libra_9ffd93b-6.toml
│   │       ├── metadata_libra_9ffd93b-7.toml
│   │       ├── metadata_libra_f0091a4-0.toml
│   │       ├── metadata_libra_f0091a4-1.toml
│   │       ├── metadata_libra_f0091a4-2.toml
│   │       ├── metadata_libra_f0091a4-3.toml
│   │       ├── metadata_libra_f0091a4-4.toml
│   │       ├── metadata_libra_f0091a4-5.toml
│   │       ├── metadata_libra_f0091a4-6.toml
│   │       ├── metadata_libra_f0091a4-7.toml
│   │       ├── mnemos_b3b4da9-0.toml
│   │       ├── mnemos_b3b4da9-1.toml
│   │       ├── mnemos_b3b4da9-2.toml
│   │       ├── mnemos_b3b4da9-3.toml
│   │       ├── mnemos_b3b4da9-4.toml
│   │       ├── mnemos_b3b4da9-5.toml
│   │       ├── mnemos_b3b4da9-6.toml
│   │       └── mnemos_b3b4da9-7.toml
│   ├── small/
│   │   ├── alternate-registries.json
│   │   ├── builddep.json
│   │   ├── hakari/
│   │   │   ├── metadata1-0.toml
│   │   │   ├── metadata1-1.toml
│   │   │   ├── metadata1-2.toml
│   │   │   ├── metadata1-3.toml
│   │   │   ├── metadata2-0.toml
│   │   │   ├── metadata2-1.toml
│   │   │   ├── metadata2-2.toml
│   │   │   ├── metadata2-3.toml
│   │   │   ├── metadata_alternate_registries-0.toml
│   │   │   ├── metadata_alternate_registries-1.toml
│   │   │   ├── metadata_alternate_registries-2.toml
│   │   │   ├── metadata_alternate_registries-3.toml
│   │   │   ├── metadata_build_targets1-0.toml
│   │   │   ├── metadata_build_targets1-1.toml
│   │   │   ├── metadata_build_targets1-2.toml
│   │   │   ├── metadata_build_targets1-3.toml
│   │   │   ├── metadata_builddep-0.toml
│   │   │   ├── metadata_builddep-1.toml
│   │   │   ├── metadata_builddep-2.toml
│   │   │   ├── metadata_builddep-3.toml
│   │   │   ├── metadata_cycle1-0.toml
│   │   │   ├── metadata_cycle1-1.toml
│   │   │   ├── metadata_cycle1-2.toml
│   │   │   ├── metadata_cycle1-3.toml
│   │   │   ├── metadata_cycle2-0.toml
│   │   │   ├── metadata_cycle2-1.toml
│   │   │   ├── metadata_cycle2-2.toml
│   │   │   ├── metadata_cycle2-3.toml
│   │   │   ├── metadata_cycle_features-0.toml
│   │   │   ├── metadata_cycle_features-1.toml
│   │   │   ├── metadata_cycle_features-2.toml
│   │   │   ├── metadata_cycle_features-3.toml
│   │   │   ├── metadata_dups-0.toml
│   │   │   ├── metadata_dups-1.toml
│   │   │   ├── metadata_dups-2.toml
│   │   │   ├── metadata_dups-3.toml
│   │   │   ├── metadata_proc_macro1-0.toml
│   │   │   ├── metadata_proc_macro1-1.toml
│   │   │   ├── metadata_proc_macro1-2.toml
│   │   │   ├── metadata_proc_macro1-3.toml
│   │   │   ├── metadata_targets1-0.toml
│   │   │   ├── metadata_targets1-1.toml
│   │   │   ├── metadata_targets1-2.toml
│   │   │   ├── metadata_targets1-3.toml
│   │   │   ├── metadata_weak_namespaced_features-0.toml
│   │   │   ├── metadata_weak_namespaced_features-1.toml
│   │   │   ├── metadata_weak_namespaced_features-2.toml
│   │   │   └── metadata_weak_namespaced_features-3.toml
│   │   ├── metadata1.json
│   │   ├── metadata2.json
│   │   ├── metadata_build_targets1.json
│   │   ├── metadata_cycle1.json
│   │   ├── metadata_cycle1_windows.json
│   │   ├── metadata_cycle1_windows_different_drives.json
│   │   ├── metadata_cycle2.json
│   │   ├── metadata_cycle_features.json
│   │   ├── metadata_default_members.json
│   │   ├── metadata_dups.json
│   │   ├── metadata_proc_macro1.json
│   │   ├── metadata_targets1.json
│   │   ├── summaries/
│   │   │   ├── metadata1-0.toml
│   │   │   ├── metadata1-1.toml
│   │   │   ├── metadata1-2.toml
│   │   │   ├── metadata1-3.toml
│   │   │   ├── metadata1-4.toml
│   │   │   ├── metadata1-5.toml
│   │   │   ├── metadata1-6.toml
│   │   │   ├── metadata1-7.toml
│   │   │   ├── metadata2-0.toml
│   │   │   ├── metadata2-1.toml
│   │   │   ├── metadata2-2.toml
│   │   │   ├── metadata2-3.toml
│   │   │   ├── metadata2-4.toml
│   │   │   ├── metadata2-5.toml
│   │   │   ├── metadata2-6.toml
│   │   │   ├── metadata2-7.toml
│   │   │   ├── metadata_alternate_registries-0.toml
│   │   │   ├── metadata_alternate_registries-1.toml
│   │   │   ├── metadata_alternate_registries-2.toml
│   │   │   ├── metadata_alternate_registries-3.toml
│   │   │   ├── metadata_alternate_registries-4.toml
│   │   │   ├── metadata_alternate_registries-5.toml
│   │   │   ├── metadata_alternate_registries-6.toml
│   │   │   ├── metadata_alternate_registries-7.toml
│   │   │   ├── metadata_build_targets1-0.toml
│   │   │   ├── metadata_build_targets1-1.toml
│   │   │   ├── metadata_build_targets1-2.toml
│   │   │   ├── metadata_build_targets1-3.toml
│   │   │   ├── metadata_build_targets1-4.toml
│   │   │   ├── metadata_build_targets1-5.toml
│   │   │   ├── metadata_build_targets1-6.toml
│   │   │   ├── metadata_build_targets1-7.toml
│   │   │   ├── metadata_builddep-0.toml
│   │   │   ├── metadata_builddep-1.toml
│   │   │   ├── metadata_builddep-2.toml
│   │   │   ├── metadata_builddep-3.toml
│   │   │   ├── metadata_builddep-4.toml
│   │   │   ├── metadata_builddep-5.toml
│   │   │   ├── metadata_builddep-6.toml
│   │   │   ├── metadata_builddep-7.toml
│   │   │   ├── metadata_cycle1-0.toml
│   │   │   ├── metadata_cycle1-1.toml
│   │   │   ├── metadata_cycle1-2.toml
│   │   │   ├── metadata_cycle1-3.toml
│   │   │   ├── metadata_cycle1-4.toml
│   │   │   ├── metadata_cycle1-5.toml
│   │   │   ├── metadata_cycle1-6.toml
│   │   │   ├── metadata_cycle1-7.toml
│   │   │   ├── metadata_cycle2-0.toml
│   │   │   ├── metadata_cycle2-1.toml
│   │   │   ├── metadata_cycle2-2.toml
│   │   │   ├── metadata_cycle2-3.toml
│   │   │   ├── metadata_cycle2-4.toml
│   │   │   ├── metadata_cycle2-5.toml
│   │   │   ├── metadata_cycle2-6.toml
│   │   │   ├── metadata_cycle2-7.toml
│   │   │   ├── metadata_cycle_features-0.toml
│   │   │   ├── metadata_cycle_features-1.toml
│   │   │   ├── metadata_cycle_features-2.toml
│   │   │   ├── metadata_cycle_features-3.toml
│   │   │   ├── metadata_cycle_features-4.toml
│   │   │   ├── metadata_cycle_features-5.toml
│   │   │   ├── metadata_cycle_features-6.toml
│   │   │   ├── metadata_cycle_features-7.toml
│   │   │   ├── metadata_dups-0.toml
│   │   │   ├── metadata_dups-1.toml
│   │   │   ├── metadata_dups-2.toml
│   │   │   ├── metadata_dups-3.toml
│   │   │   ├── metadata_dups-4.toml
│   │   │   ├── metadata_dups-5.toml
│   │   │   ├── metadata_dups-6.toml
│   │   │   ├── metadata_dups-7.toml
│   │   │   ├── metadata_proc_macro1-0.toml
│   │   │   ├── metadata_proc_macro1-1.toml
│   │   │   ├── metadata_proc_macro1-2.toml
│   │   │   ├── metadata_proc_macro1-3.toml
│   │   │   ├── metadata_proc_macro1-4.toml
│   │   │   ├── metadata_proc_macro1-5.toml
│   │   │   ├── metadata_proc_macro1-6.toml
│   │   │   ├── metadata_proc_macro1-7.toml
│   │   │   ├── metadata_targets1-0.toml
│   │   │   ├── metadata_targets1-1.toml
│   │   │   ├── metadata_targets1-2.toml
│   │   │   ├── metadata_targets1-3.toml
│   │   │   ├── metadata_targets1-4.toml
│   │   │   ├── metadata_targets1-5.toml
│   │   │   ├── metadata_targets1-6.toml
│   │   │   ├── metadata_targets1-7.toml
│   │   │   ├── metadata_weak_namespaced_features-0.toml
│   │   │   ├── metadata_weak_namespaced_features-1.toml
│   │   │   ├── metadata_weak_namespaced_features-2.toml
│   │   │   ├── metadata_weak_namespaced_features-3.toml
│   │   │   ├── metadata_weak_namespaced_features-4.toml
│   │   │   ├── metadata_weak_namespaced_features-5.toml
│   │   │   ├── metadata_weak_namespaced_features-6.toml
│   │   │   └── metadata_weak_namespaced_features-7.toml
│   │   └── weak-namespaced-features.json
│   ├── src/
│   │   ├── dep_helpers.rs
│   │   ├── details.rs
│   │   ├── json.rs
│   │   └── lib.rs
│   └── workspace/
│       └── inside-outside/
│           ├── aarch64-active/
│           │   ├── .gitignore
│           │   ├── Cargo.toml
│           │   └── src/
│           │       └── lib.rs
│           ├── external/
│           │   ├── .gitignore
│           │   ├── Cargo.toml
│           │   ├── examples/
│           │   │   └── external3.rs
│           │   └── src/
│           │       └── lib.rs
│           ├── inactive/
│           │   ├── .gitignore
│           │   ├── Cargo.toml
│           │   └── src/
│           │       └── lib.rs
│           ├── transitive/
│           │   ├── .gitignore
│           │   ├── Cargo.toml
│           │   └── src/
│           │       └── lib.rs
│           ├── workspace/
│           │   ├── .gitignore
│           │   ├── Cargo.toml
│           │   ├── internal/
│           │   │   ├── Cargo.toml
│           │   │   └── src/
│           │   │       └── lib.rs
│           │   ├── internal-macro/
│           │   │   ├── Cargo.toml
│           │   │   ├── build.rs
│           │   │   └── src/
│           │   │       └── lib.rs
│           │   ├── main/
│           │   │   ├── Cargo.toml
│           │   │   ├── build.rs
│           │   │   └── src/
│           │   │       └── lib.rs
│           │   ├── side/
│           │   │   ├── Cargo.toml
│           │   │   └── src/
│           │   │       └── lib.rs
│           │   └── src/
│           │       └── lib.rs
│           └── x86-active/
│               ├── .gitignore
│               ├── Cargo.toml
│               └── src/
│                   └── lib.rs
├── guppy/
│   ├── CHANGELOG.md
│   ├── Cargo.toml
│   ├── README.md
│   ├── README.tpl
│   ├── examples/
│   │   ├── cargo_set_link_filter.rs
│   │   ├── deps.rs
│   │   ├── print_by_level.rs
│   │   ├── print_dot.rs
│   │   ├── remove_dev_only.rs
│   │   └── topo_sort.rs
│   ├── proptest-regressions/
│   │   └── petgraph_support/
│   │       └── topo.txt
│   ├── src/
│   │   ├── debug_ignore.rs
│   │   ├── dependency_kind.rs
│   │   ├── errors.rs
│   │   ├── graph/
│   │   │   ├── build.rs
│   │   │   ├── build_targets.rs
│   │   │   ├── cargo/
│   │   │   │   ├── build.rs
│   │   │   │   ├── cargo_api.rs
│   │   │   │   └── mod.rs
│   │   │   ├── cycles.rs
│   │   │   ├── feature/
│   │   │   │   ├── build.rs
│   │   │   │   ├── cycles.rs
│   │   │   │   ├── feature_list.rs
│   │   │   │   ├── graph_impl.rs
│   │   │   │   ├── mod.rs
│   │   │   │   ├── proptest_helpers.rs
│   │   │   │   ├── query.rs
│   │   │   │   ├── resolve.rs
│   │   │   │   └── weak.rs
│   │   │   ├── graph_impl.rs
│   │   │   ├── mod.rs
│   │   │   ├── proptest_helpers.rs
│   │   │   ├── query.rs
│   │   │   ├── query_core.rs
│   │   │   ├── resolve.rs
│   │   │   ├── resolve_core.rs
│   │   │   ├── summaries/
│   │   │   │   └── package_set.rs
│   │   │   └── summaries.rs
│   │   ├── lib.rs
│   │   ├── macros.rs
│   │   ├── metadata_command.rs
│   │   ├── package_id.rs
│   │   ├── petgraph_support/
│   │   │   ├── dfs.rs
│   │   │   ├── dot.rs
│   │   │   ├── edge_ref.rs
│   │   │   ├── mod.rs
│   │   │   ├── scc.rs
│   │   │   ├── topo.rs
│   │   │   └── walk.rs
│   │   ├── platform/
│   │   │   ├── mod.rs
│   │   │   ├── platform_eval.rs
│   │   │   ├── platform_spec.rs
│   │   │   ├── proptest_helpers.rs
│   │   │   └── summaries.rs
│   │   ├── sorted_set.rs
│   │   └── unit_tests/
│   │       ├── dot_tests.rs
│   │       └── mod.rs
│   └── tests/
│       └── graph-tests/
│           ├── cargo_set_tests.rs
│           ├── feature_helpers.rs
│           ├── graph_tests.rs
│           ├── invalid_tests.rs
│           ├── main.rs
│           ├── proptest_helpers.rs
│           └── weak_namespaced.rs
├── guppy-cmdlib/
│   ├── Cargo.toml
│   └── src/
│       ├── lib.rs
│       └── proptest.rs
├── guppy-summaries/
│   ├── CHANGELOG.md
│   ├── Cargo.toml
│   ├── README.md
│   ├── README.tpl
│   └── src/
│       ├── diff.rs
│       ├── lib.rs
│       ├── report.rs
│       ├── summary.rs
│       └── unit_tests/
│           ├── basic_tests.rs
│           └── mod.rs
├── internal-tools/
│   ├── benchmarks/
│   │   ├── .gitignore
│   │   ├── Cargo.toml
│   │   └── benches/
│   │       └── package_graph.rs
│   ├── cargo-compare/
│   │   ├── Cargo.toml
│   │   ├── proptest-regressions/
│   │   │   └── tests/
│   │   │       └── workspace_tests.txt
│   │   └── src/
│   │       ├── check.rs
│   │       ├── common.rs
│   │       ├── diff.rs
│   │       ├── lib.rs
│   │       ├── main.rs
│   │       ├── tests/
│   │       │   ├── fixtures.rs
│   │       │   ├── mod.rs
│   │       │   ├── proptest_helpers.rs
│   │       │   └── workspace_tests.rs
│   │       └── type_conversions.rs
│   ├── fixture-manager/
│   │   ├── Cargo.toml
│   │   ├── src/
│   │   │   ├── context.rs
│   │   │   ├── hakari_toml.rs
│   │   │   ├── lib.rs
│   │   │   ├── main.rs
│   │   │   └── summaries.rs
│   │   └── tests/
│   │       └── unchanged_tests.rs
│   └── proptest-ext/
│       ├── Cargo.toml
│       └── src/
│           └── lib.rs
├── release.toml
├── rustfmt.toml
├── scripts/
│   ├── fix-readmes.awk
│   └── renovate-post-upgrade.sh
├── target-spec/
│   ├── CHANGELOG.md
│   ├── Cargo.toml
│   ├── README.md
│   ├── README.tpl
│   ├── build.rs
│   └── src/
│       ├── custom.rs
│       ├── custom_cfg.rs
│       ├── errors.rs
│       ├── lib.rs
│       ├── platform.rs
│       ├── proptest_helpers.rs
│       ├── simple_eval.rs
│       ├── spec.rs
│       ├── summaries.rs
│       └── triple.rs
├── target-spec-miette/
│   ├── CHANGELOG.md
│   ├── Cargo.toml
│   ├── README.md
│   ├── README.tpl
│   ├── src/
│   │   ├── fixtures.rs
│   │   ├── imp.rs
│   │   └── lib.rs
│   └── tests/
│       ├── datatest-snapshot/
│       │   ├── cfg.rs
│       │   ├── custom.rs
│       │   ├── expr.rs
│       │   ├── helpers.rs
│       │   ├── main.rs
│       │   └── snapshots/
│       │       ├── cfg-invalid/
│       │       │   ├── invalid-has-atomic.ansi
│       │       │   ├── invalid-pointer-width.ansi
│       │       │   ├── missing-arch.ansi
│       │       │   ├── unknown-endian.ansi
│       │       │   └── unquoted-value.ansi
│       │       ├── custom-invalid/
│       │       │   ├── invalid-arch.ansi
│       │       │   ├── invalid-endian.ansi
│       │       │   ├── invalid-family.ansi
│       │       │   ├── invalid-target-pointer-width.ansi
│       │       │   ├── missing-arch.ansi
│       │       │   └── syntax-error.ansi
│       │       └── expr-invalid/
│       │           ├── multiline-output.ansi
│       │           ├── unclosed-delimiter.ansi
│       │           └── unquoted-value.ansi
│       ├── fixtures/
│       │   ├── cfg-invalid/
│       │   │   ├── invalid-has-atomic.cfg
│       │   │   ├── invalid-pointer-width.cfg
│       │   │   ├── missing-arch.cfg
│       │   │   ├── unknown-endian.cfg
│       │   │   └── unquoted-value.cfg
│       │   ├── custom-invalid/
│       │   │   ├── invalid-arch.json
│       │   │   ├── invalid-endian.json
│       │   │   ├── invalid-family.json
│       │   │   ├── invalid-target-pointer-width.json
│       │   │   ├── missing-arch.json
│       │   │   └── syntax-error.json
│       │   └── expr-invalid/
│       │       ├── multiline-output
│       │       ├── unclosed-delimiter
│       │       └── unquoted-value
│       └── integration/
│           ├── main.rs
│           └── snapshots/
│               └── unavailable.ansi
├── tools/
│   ├── cargo-hakari/
│   │   ├── CHANGELOG.md
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   ├── README.tpl
│   │   └── src/
│   │       ├── cargo_cli.rs
│   │       ├── command.rs
│   │       ├── docs/
│   │       │   ├── about.rs
│   │       │   ├── config.rs
│   │       │   ├── mod.rs
│   │       │   ├── patch_directive.rs
│   │       │   └── publishing.rs
│   │       ├── helpers.rs
│   │       ├── lib.rs
│   │       ├── main.rs
│   │       ├── output.rs
│   │       └── publish.rs
│   ├── determinator/
│   │   ├── CHANGELOG.md
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   ├── README.tpl
│   │   ├── default-rules.toml
│   │   ├── src/
│   │   │   ├── determinator.rs
│   │   │   ├── errors.rs
│   │   │   ├── lib.rs
│   │   │   ├── paths0.rs
│   │   │   └── rules.rs
│   │   └── tests/
│   │       └── determinator_tests.rs
│   └── hakari/
│       ├── CHANGELOG.md
│       ├── Cargo.toml
│       ├── README.md
│       ├── README.tpl
│       ├── src/
│       │   ├── cargo_toml.rs
│       │   ├── cli_ops/
│       │   │   ├── initialize.rs
│       │   │   ├── manage_deps.rs
│       │   │   ├── mod.rs
│       │   │   └── workspace_ops.rs
│       │   ├── explain/
│       │   │   ├── display.rs
│       │   │   ├── mod.rs
│       │   │   └── simplify.rs
│       │   ├── hakari.rs
│       │   ├── helpers.rs
│       │   ├── lib.rs
│       │   ├── proptest_helpers.rs
│       │   ├── registry.rs
│       │   ├── summaries.rs
│       │   ├── toml_out.rs
│       │   └── verify/
│       │       ├── display.rs
│       │       └── mod.rs
│       └── templates/
│           ├── crate/
│           │   ├── .gitattributes
│           │   ├── Cargo.toml-in
│           │   ├── build.rs
│           │   └── src/
│           │       └── lib.rs
│           └── hakari.toml-in
└── workspace-hack/
    ├── .gitattributes
    ├── Cargo.toml
    ├── README.md
    ├── build.rs
    └── src/
        └── lib.rs

================================================
FILE CONTENTS
================================================

================================================
FILE: .cargo/config.toml
================================================
[alias]
xfmt = "fmt -- --config imports_granularity=Crate"


================================================
FILE: .cargo/nightly-config.toml
================================================
# Extra configuration for nightly Rust.
#
# Use manually by passing this path into `--config`, or via the Justfile: `just
# nightly check` or `just bootstrap check`.

[build]
# Detect if non-exhaustive patterns are missing:
# https://github.com/rust-lang/rust/issues/89554
#
# To allow this lint for some statements, use
# `#[cfg_attr(guppy_nightly, expect(non_exhaustive_omitted_patterns))]`.
rustflags = [
    "--warn",
    "non_exhaustive_omitted_patterns",
    "-Zcrate-attr=feature(non_exhaustive_omitted_patterns_lint)",
    "--cfg",
    "guppy_nightly",
]


================================================
FILE: .claude/.gitignore
================================================
/settings.local.json


================================================
FILE: .claude/settings.json
================================================
{
  "permissions": {
    "allow": [
      "Bash(cargo build:*)",
      "Bash(cargo check:*)",
      "Bash(cargo doc:*)",
      "Bash(cargo hakari:*)",
      "Bash(cargo metadata:*)",
      "Bash(cargo nextest:*)",
      "Bash(cargo xfmt:*)",
      "Bash(git show:*)",
      "Bash(jj diff:*)",
      "Bash(jj show:*)",
      "Bash(ls:*)",
      "WebFetch(domain:docs.rs)",
      "WebFetch(domain:github.com)"
    ],
    "deny": [],
    "ask": []
  }
}


================================================
FILE: .config/hakari.toml
================================================
# This file contains settings for `cargo hakari`.
# See https://docs.rs/cargo-hakari/latest/cargo_hakari/config for a full list of options.

hakari-package = "guppy-workspace-hack"

# Setting workspace.resolver = "2" in the root Cargo.toml is HIGHLY recommended.
# Hakari works much better with the new feature resolver.
# For more about the new feature resolver, see:
# https://blog.rust-lang.org/2021/03/25/Rust-1.51.0.html#cargos-new-feature-resolver
resolver = "2"

# Format version for cargo-hakari's output.
# See https://docs.rs/cargo-hakari/latest/cargo_hakari/config#dep-format-version for more.
dep-format-version = "4"
workspace-hack-line-style = "workspace-dotted"

# Add triples corresponding to platforms commonly used by developers here.
# https://doc.rust-lang.org/rustc/platform-support.html
platforms = [
    "x86_64-unknown-linux-gnu",
    "x86_64-apple-darwin",
    "aarch64-apple-darwin",
    "x86_64-pc-windows-msvc",
]

exact-versions = true

[traversal-excludes]
workspace-members = [
    # Exclude the "cargo-compare" package from consideration because it is only used
    # for some test runs in CI.
    "cargo-compare",
]


================================================
FILE: .git-blame-ignore-revs
================================================
# Update style_version to 2024
4722ab31392e622ec6373ef133e3956e3a2851c7


================================================
FILE: .gitattributes
================================================
# Disable all CRLF conversions throughout the repo.
* -text


================================================
FILE: .github/renovate.json
================================================
{
    "extends": [
        "github>nextest-rs/renovate",
        "github>nextest-rs/renovate:post-upgrade"
    ]
}


================================================
FILE: .github/workflows/ci.yml
================================================
on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

name: CI

jobs:
  lint:
    name: Lint
    runs-on: ubuntu-latest
    env:
      RUSTFLAGS: -D warnings
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt, clippy
      - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2
      - name: Install just
        uses: taiki-e/install-action@just
      - name: Lint (clippy)
        run: just bootstrap clippy
      - name: Install cargo-hack
        uses: taiki-e/install-action@cargo-hack
      - name: Lint (rustfmt)
        run: cargo xfmt --check
      - name: Install cargo readme
        uses: taiki-e/install-action@650c5ca14212efbbf3e580844b04bdccf68dac31 # v2
        with:
          tool: cargo-readme
      - name: Generate readmes
        run: just generate-readmes
      - name: Check for differences
        run: git diff --exit-code
      # cargo hack might cause changes to Cargo.lock which can cause the git diff above to fail. Put
      # this at the end.
      - name: target-spec-powerset clippy
        run: just target-spec-powerset clippy

  build:
    name: Build and test core crates
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-14, windows-latest]
        rust-version: ["1.86", stable]
      fail-fast: false
    env:
      RUSTFLAGS: -D warnings
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.rust-version }}
      - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2
      - name: Install tools
        uses: taiki-e/install-action@e7ef886cf8f69c25ecef6bbc2858a42e273496ec # v2.62.28
        with:
          tool: cargo-hack,just,nextest

      # Build all packages we care about one by one to ensure feature unification
      # doesn't happen.
      # Build all targets to ensure examples are built as well.
      - name: Build target-spec
        run: cargo build --all-targets --package target-spec
      - name: Build guppy-summaries
        run: cargo build --all-targets --package guppy-summaries
      - name: Build guppy
        run: cargo build --all-targets --package guppy
      - name: Build determinator
        run: cargo build --all-targets --package determinator
      - name: Build hakari
        run: cargo build --all-targets --package hakari
      - name: Run tests for core crates
        run: cargo nextest run --package target-spec --package guppy-summaries --package guppy --package determinator --package hakari
      - name: target-spec-powerset nextest run
        run: just target-spec-powerset nextest run

  build-all-features:
    name: Build and test (all features)
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-14, windows-latest]
        rust-version: ["1.86", stable]
      fail-fast: false
    env:
      RUSTFLAGS: -D warnings
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.rust-version }}
      - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2
      - name: Build
        # Build all targets to ensure examples are built as well.
        # Exclude cargo-compare: it runs as part of test-extended below.
        run: cargo test --no-run --all-targets --all-features --workspace --exclude cargo-compare
      - name: Run doctests
        run: cargo test --doc --all-features --workspace --exclude cargo-compare
      - name: Install latest nextest release
        uses: taiki-e/install-action@nextest
      - name: Run all other tests
        run: cargo nextest run --all-targets --all-features --workspace --exclude cargo-compare

  build-rustdoc:
    name: Build documentation
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest]
      fail-fast: false
    env:
      RUSTDOCFLAGS: -D warnings
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
      - uses: dtolnay/rust-toolchain@stable
      # Note: caching doesn't appear to work for rustdoc as of 2022-12-04, and we're exceeding cache
      # sizes anyway
      - name: Build rustdoc
        # cargo-compare currently pulls in cargo which bloats build times massively
        run: cargo doc --all-features --workspace --exclude cargo-compare

  test-extended:
    name: cargo-compare extended tests
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        # Don't run cargo-compare tests on Windows for now. See
        # https://github.com/facebookincubator/cargo-guppy/issues/265.
        os: [ubuntu-latest, macos-14]
      fail-fast: false
    env:
      RUSTFLAGS: -D warnings
      PROPTEST_MULTIPLIER: 64
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
      # This matches the cfg-expr version.
      - uses: dtolnay/rust-toolchain@1.93.0
      - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2
      - name: Build and test
        run: cargo test --package cargo-compare --release

  aarch64-build:
    runs-on: ubuntu-latest
    name: Cross-compile to aarch64
    env:
      RUSTFLAGS: -D warnings
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: aarch64-unknown-linux-gnu
      - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2
      - name: Build
        uses: actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # v1
        with:
          use-cross: true
          command: build
          # * Exclude cargo-compare because it depends on cargo, which in turn
          #   depends on openssl, and getting *that* to cross-compile is a
          #   headache.
          # * Build all targets to ensure examples are built as well.
          args: --target aarch64-unknown-linux-gnu --workspace --exclude cargo-compare --all-targets
      # TODO: run tests somehow? possibly through cross/qemu


================================================
FILE: .github/workflows/docs.yml
================================================
on:
  push:
    branches:
      - main
    workflow_dispatch:

name: Docs

# Sets permissions to allow deployment to GitHub Pages
permissions:
  contents: read
  pages: write
  id-token: write

# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:
  build-docs:
    name: Build documentation
    concurrency: ci-${{ github.ref }}
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
      - uses: dtolnay/rust-toolchain@nightly
      # Note: caching doesn't appear to work for rustdoc as of 2022-12-04, and we're exceeding cache
      # sizes anyway

      - uses: taiki-e/install-action@just
      - name: Setup Pages
        id: pages
        uses: actions/configure-pages@v5.0.0
      - name: Build rustdoc
        run: just rustdoc
      - name: Organize
        run: |
          rm -rf target/gh-pages
          mkdir target/gh-pages
          mv target/doc target/gh-pages/rustdoc
      - name: Upload to GitHub Pages
        uses: actions/upload-pages-artifact@v3.0.1
        with:
          path: target/gh-pages

  deploy-docs:
    name: Deploy documentation
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: build-docs
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4.0.5


================================================
FILE: .github/workflows/hakari.yml
================================================
# This workflow file serves as an example for cargo-hakari CI integration.

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

name: cargo hakari

jobs:
  workspace-hack-check:
    name: Check workspace-hack
    runs-on: ubuntu-latest
    env:
      RUSTFLAGS: -D warnings
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
      - uses: dtolnay/rust-toolchain@stable
      - name: Install cargo-hakari
        uses: taiki-e/install-action@650c5ca14212efbbf3e580844b04bdccf68dac31 # v2
        with:
          tool: cargo-hakari
      - name: Check workspace-hack Cargo.toml is up-to-date
        run: cargo hakari generate --diff
      - name: Check all crates depend on workspace-hack
        run: cargo hakari manage-deps --dry-run


================================================
FILE: .github/workflows/release.yml
================================================
# adapted from https://github.com/taiki-e/cargo-hack/blob/main/.github/workflows/release.yml

name: Publish releases to GitHub
on:
  push:
    tags:
      - "*"

jobs:
  target-spec-release:
    # There's no regex filtering in if conditionals, so we need to use the first component of the version number.
    if: github.repository_owner == 'guppy-rs' && startsWith(github.ref_name, 'target-spec-3')
    runs-on: ubuntu-latest
    environment: release
    permissions:
      id-token: write     # Required for OIDC token exchange
      contents: write     # Required for creating releases
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
        with:
          persist-credentials: false
      - uses: rust-lang/crates-io-auth-action@v1
        id: auth
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
      - name: Install cargo release
        uses: taiki-e/install-action@650c5ca14212efbbf3e580844b04bdccf68dac31 # v2
        with:
          tool: cargo-release@0.25.17,just
      - uses: taiki-e/create-gh-release-action@56a8b3f8449593aa02b91f7b84da564f476e94f0 # v1
        with:
          prefix: target-spec
          changelog: target-spec/CHANGELOG.md
          title: $prefix $version
          branch: main
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - run: just ci-cargo-release target-spec
        env:
          CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}

  target-spec-miette-release:
    if: github.repository_owner == 'guppy-rs' && startsWith(github.ref_name, 'target-spec-miette-')
    runs-on: ubuntu-latest
    environment: release
    permissions:
      id-token: write     # Required for OIDC token exchange
      contents: write     # Required for creating releases
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
        with:
          persist-credentials: false
      - uses: rust-lang/crates-io-auth-action@v1
        id: auth
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
      - name: Install cargo release
        uses: taiki-e/install-action@650c5ca14212efbbf3e580844b04bdccf68dac31 # v2
        with:
          tool: cargo-release@0.25.17,just
      - uses: taiki-e/create-gh-release-action@56a8b3f8449593aa02b91f7b84da564f476e94f0 # v1
        with:
          prefix: target-spec-miette
          changelog: target-spec-miette/CHANGELOG.md
          title: $prefix $version
          branch: main
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - run: just ci-cargo-release target-spec-miette
        env:
          CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}

  guppy-summaries-release:
    if: github.repository_owner == 'guppy-rs' && startsWith(github.ref_name, 'guppy-summaries-')
    runs-on: ubuntu-latest
    environment: release
    permissions:
      id-token: write     # Required for OIDC token exchange
      contents: write     # Required for creating releases
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
        with:
          persist-credentials: false
      - uses: rust-lang/crates-io-auth-action@v1
        id: auth
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
      - name: Install cargo release
        uses: taiki-e/install-action@650c5ca14212efbbf3e580844b04bdccf68dac31 # v2
        with:
          tool: cargo-release@0.25.17,just
      - uses: taiki-e/create-gh-release-action@56a8b3f8449593aa02b91f7b84da564f476e94f0 # v1
        with:
          prefix: guppy-summaries
          changelog: guppy-summaries/CHANGELOG.md
          title: $prefix $version
          branch: main
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - run: just ci-cargo-release guppy-summaries
        env:
          CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}

  guppy-release:
    # There's no regex filtering in if conditionals, so we need to use the first component of the version number.
    if: github.repository_owner == 'guppy-rs' && startsWith(github.ref_name, 'guppy-0')
    runs-on: ubuntu-latest
    environment: release
    permissions:
      id-token: write     # Required for OIDC token exchange
      contents: write     # Required for creating releases
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
        with:
          persist-credentials: false
      - uses: rust-lang/crates-io-auth-action@v1
        id: auth
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
      - name: Install cargo release
        uses: taiki-e/install-action@650c5ca14212efbbf3e580844b04bdccf68dac31 # v2
        with:
          tool: cargo-release@0.25.17,just
      - uses: taiki-e/create-gh-release-action@56a8b3f8449593aa02b91f7b84da564f476e94f0 # v1
        with:
          prefix: guppy
          changelog: guppy/CHANGELOG.md
          title: $prefix $version
          branch: main
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - run: just ci-cargo-release guppy
        env:
          CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}

  determinator-release:
    if: github.repository_owner == 'guppy-rs' && startsWith(github.ref_name, 'determinator-')
    runs-on: ubuntu-latest
    environment: release
    permissions:
      id-token: write     # Required for OIDC token exchange
      contents: write     # Required for creating releases
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
        with:
          persist-credentials: false
      - uses: rust-lang/crates-io-auth-action@v1
        id: auth
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
      - name: Install cargo release
        uses: taiki-e/install-action@650c5ca14212efbbf3e580844b04bdccf68dac31 # v2
        with:
          tool: cargo-release@0.25.17,just
      - uses: taiki-e/create-gh-release-action@56a8b3f8449593aa02b91f7b84da564f476e94f0 # v1
        with:
          prefix: determinator
          changelog: tools/determinator/CHANGELOG.md
          title: $prefix $version
          branch: main
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - run: just ci-cargo-release determinator
        env:
          CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}

  hakari-release:
    if: github.repository_owner == 'guppy-rs' && startsWith(github.ref_name, 'hakari-')
    runs-on: ubuntu-latest
    environment: release
    permissions:
      id-token: write     # Required for OIDC token exchange
      contents: write     # Required for creating releases
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
        with:
          persist-credentials: false
      - uses: rust-lang/crates-io-auth-action@v1
        id: auth
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
      - name: Install cargo release
        uses: taiki-e/install-action@650c5ca14212efbbf3e580844b04bdccf68dac31 # v2
        with:
          tool: cargo-release@0.25.17,just
      - uses: taiki-e/create-gh-release-action@56a8b3f8449593aa02b91f7b84da564f476e94f0 # v1
        with:
          prefix: hakari
          changelog: tools/hakari/CHANGELOG.md
          title: $prefix $version
          branch: main
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - run: just ci-cargo-release hakari
        env:
          CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}

  cargo-hakari-release:
    if: github.repository_owner == 'guppy-rs' && startsWith(github.ref_name, 'cargo-hakari-')
    runs-on: ubuntu-latest
    permissions:
      contents: write     # Required for creating releases
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
        with:
          persist-credentials: false
      # Note: do not publish this to crates.io until binaries are built and uploaded below. This is
      # so that `cargo binstall` keeps working.
      - uses: taiki-e/create-gh-release-action@56a8b3f8449593aa02b91f7b84da564f476e94f0 # v1
        id: create-gh-release
        with:
          prefix: cargo-hakari
          changelog: tools/cargo-hakari/CHANGELOG.md
          title: $prefix $version
          branch: main
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    outputs:
      version: ${{ steps.create-gh-release.outputs.version }}

  build-cargo-hakari-binaries:
    name: Build cargo-hakari binaries for ${{ matrix.target }}
    if: github.repository_owner == 'guppy-rs' && startsWith(github.ref_name, 'cargo-hakari-')
    needs:
      - cargo-hakari-release
    permissions:
      contents: write     # Required for uploading release assets
    strategy:
      matrix:
        include:
          # Native builds
          - target: x86_64-unknown-linux-gnu
            os: ubuntu-22.04
            # On Linux, we use glibc 2.27, as the minimum of
            # - Ubuntu 18.04 (glibc 2.27)
            # - CentOS 8 (glibc 2.28)
            # - Debian 10 (glibc 2.28)
            #
            # See https://repology.org/project/glibc/versions.
            #
            # We used to use an Ubuntu 18.04 container, but that became untenable over time:
            # https://github.com/nextest-rs/nextest/issues/1055
            build-target: x86_64-unknown-linux-gnu.2.27
            build-tool: cargo-zigbuild
          - target: x86_64-pc-windows-msvc
            os: windows-latest
            build-target: x86_64-pc-windows-msvc
            build-tool: cargo
          - target: i686-pc-windows-msvc
            os: windows-latest
            build-target: i686-pc-windows-msvc
            build-tool: cargo
          - target: universal-apple-darwin
            os: macos-14
            build-target: universal-apple-darwin
            build-tool: cargo

          # Builds using cross
          - target: x86_64-unknown-linux-musl
            os: ubuntu-22.04
            build-target: x86_64-unknown-linux-musl
            # musl is statically linked and uses cross
            build-tool: cross
          - target: aarch64-unknown-linux-gnu
            os: ubuntu-22.04
            build-target: aarch64-unknown-linux-gnu
            build-tool: cross
          - target: x86_64-unknown-freebsd
            os: ubuntu-22.04
            build-target: x86_64-unknown-freebsd
            build-tool: cross
          - target: x86_64-unknown-illumos
            os: ubuntu-22.04
            build-target: x86_64-unknown-illumos
            build-tool: cross
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
      - uses: taiki-e/upload-rust-binary-action@3962470d6e7f1993108411bc3f75a135ec67fc8c # v1
        with:
          bin: cargo-hakari
          # The tag name contains the binary name so just use that.
          archive: $tag-$target
          build-tool: ${{ matrix.build-tool }}
          target: ${{ matrix.build-target }}
          tar: all
          zip: windows
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          CARGO_PROFILE_RELEASE_LTO: true
      - name: Set archive output variable
        id: archive-output
        shell: bash
        run: |
          if [[ ${{ matrix.target }} == "x86_64-pc-windows-msvc" || ${{ matrix.target }} == "i686-pc-windows-msvc" ]]; then
            echo "${{ matrix.target }}-tar=${{ github.ref_name }}-${{ matrix.target }}".tar.gz >> $GITHUB_OUTPUT
            echo "${{ matrix.target }}-zip=${{ github.ref_name }}-${{ matrix.target }}".zip >> $GITHUB_OUTPUT
          else
            echo "${{ matrix.target }}-tar=${{ github.ref_name }}-${{ matrix.target }}".tar.gz >> $GITHUB_OUTPUT
          fi
    outputs:
      x86_64-linux-tar: ${{ steps.archive-output.outputs.x86_64-unknown-linux-gnu-tar }}
      x86_64-linux-musl-tar: ${{ steps.archive-output.outputs.x86_64-unknown-linux-musl-tar }}
      aarch64-linux-tar: ${{ steps.archive-output.outputs.aarch64-unknown-linux-gnu-tar }}
      x86_64-windows-tar: ${{ steps.archive-output.outputs.x86_64-pc-windows-msvc-tar }}
      x86_64-windows-zip: ${{ steps.archive-output.outputs.x86_64-pc-windows-msvc-zip }}
      i686-windows-tar: ${{ steps.archive-output.outputs.i686-pc-windows-msvc-tar }}
      i686-windows-zip: ${{ steps.archive-output.outputs.i686-pc-windows-msvc-zip }}
      mac-tar: ${{ steps.archive-output.outputs.universal-apple-darwin-tar }}
      x86_64-unknown-freebsd-tar: ${{ steps.archive-output.outputs.x86_64-unknown-freebsd-tar }}
      x86_64-unknown-illumos-tar: ${{ steps.archive-output.outputs.x86_64-unknown-illumos-tar }}

  publish-cargo-hakari:
    name: Publish cargo-hakari to crates.io
    if: github.repository_owner == 'guppy-rs' && startsWith(github.ref_name, 'cargo-hakari-')
    needs:
      - cargo-hakari-release
      - build-cargo-hakari-binaries
    runs-on: ubuntu-latest
    environment: release
    permissions:
      id-token: write     # Required for OIDC token exchange
    steps:
      - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
        with:
          persist-credentials: false
      - uses: rust-lang/crates-io-auth-action@v1
        id: auth
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
      - name: Install cargo release
        uses: taiki-e/install-action@650c5ca14212efbbf3e580844b04bdccf68dac31 # v2
        with:
          tool: cargo-release@0.25.17,just
      - run: just ci-cargo-release cargo-hakari
        env:
          CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}


================================================
FILE: .gitignore
================================================
/target
**/*.rs.bk


================================================
FILE: .ignore
================================================
/fixtures/


================================================
FILE: .vscode/launch.json
================================================
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "lldb",
            "request": "launch",
            "name": "Debug guppy against workspace",
            "cargo": {
                "args": [
                    "build",
                    "-p",
                    "cargo-guppy",
                ],
                "filter": {
                    "name": "cargo-guppy",
                    "kind": "bin"
                }
            },
            "args": ["cycles", "--manifest-path", "${input:workspaceDir}/Cargo.toml"],
            "cwd": "${workspaceFolder}"
        },
    ],
    "inputs": [
        {
            "id": "workspaceDir",
            "description": "Workspace directory",
            "default": "${workspaceFolder}",
            "type": "promptString"
        },
    ]
}


================================================
FILE: CLAUDE.md
================================================
# Instructions for dropshot-api-manager

## General instructions

* Always use `cargo nextest run` to run tests. Never use `cargo test`.
* Wrap comments to 80 characters.
* Always end comments with a period.
* Before finishing up a task, run `cargo xfmt` to ensure that documents are formatted.


================================================
FILE: CODE_OF_CONDUCT.md
================================================

# Contributor Covenant Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual
identity and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:

* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
  and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall
  community

Examples of unacceptable behavior include:

* The use of sexualized language or imagery, and sexual attention or advances of
  any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address,
  without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.

Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
[guppy-coc@sunshowers.io](mailto:guppy-coc@sunshowers.io).
All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the
reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.

**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.

### 2. Warning

**Community Impact**: A violation through a single incident or series of
actions.

**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.

### 3. Temporary Ban

**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.

**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.

**Consequence**: A permanent ban from any sort of public interaction within the
community.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].

Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].

For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
[https://www.contributor-covenant.org/translations][translations].

[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to cargo-guppy

## Pull Requests

We actively welcome your pull requests. If you have a new feature in mind, please discuss the feature in an issue to
ensure that your contributions will be accepted.

1. Fork the repo and create your branch from `main`.
2. If you've added code that should be tested, add tests.
3. If you've changed APIs, update the documentation.
4. Ensure the test suite passes:
  a. Install [cargo nextest](https://nexte.st/book/pre-built-binaries) if you haven't already.
  b. Run `cargo nextest run --all-features`.
  c. Run `cargo test --doc --all-features` to run doctests.
5. Run `cargo xfmt` to automatically format your changes (CI will let you know if you missed this).

## Issues

We use GitHub issues to track public bugs. Please ensure your description is clear and has sufficient instructions to be
able to reproduce the issue.

## License

By contributing to `cargo-guppy`, you agree that your contributions will be dual-licensed under the terms of the
[`LICENSE-MIT`](LICENSE-MIT) and [`LICENSE-APACHE`](LICENSE-APACHE) files in the root directory of this source
tree.


================================================
FILE: Cargo.toml
================================================
[workspace]
resolver = "2"
members = [
    "cargo-guppy",
    "fixtures",
    "guppy",
    "guppy-cmdlib",
    "guppy-summaries",
    "internal-tools/benchmarks",
    "internal-tools/cargo-compare",
    "internal-tools/fixture-manager",
    "internal-tools/proptest-ext",
    "target-spec",
    "target-spec-miette",
    "tools/cargo-hakari",
    "tools/determinator",
    "tools/hakari",
    "workspace-hack",
]

[workspace.dependencies]
ahash = "0.8.12"
cargo_metadata = "0.23.1"
cfg-expr = "0.20.6"
datatest-stable = { version = "0.3.3", features = ["include-dir"] }
guppy-workspace-hack = "0.1.0"
iddqd = "0.3.17"
include_dir = "0.7.4"
miette = "7.6.0"
snapbox = { version = "0.6.21", features = ["term-svg"] }
twox-hash = { version = "2.1.2", default-features = false, features = ["xxhash64"] }

[workspace.package]
# Note: we commit to supporting the last 6 months of Rust releases. This
# typically means N-4 to 5, unless a dependency requires a newer version.
rust-version = "1.86"

[workspace.lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = [
    'cfg(doc_cfg)',
    'cfg(guppy_nightly)',
] }

[patch.crates-io.guppy-workspace-hack]
path = "workspace-hack"

# Recommended for color-eyre
[profile.dev.package.backtrace]
opt-level = 3

# Build guppy in opt mode for tests, speeding up test runs
[profile.test.package.guppy]
opt-level = 3

[profile.profiling]
inherits = "release"
debug = true


================================================
FILE: Cross.toml
================================================
[build.env]
passthrough = ["CARGO_PROFILE_RELEASE_LTO"]

[target.x86_64-unknown-freebsd]
# The current cross 0.2.4 docker image doesn't have the memstat library on FreeBSD.
# https://github.com/cross-rs/cross/pull/1166
image = "ghcr.io/cross-rs/x86_64-unknown-freebsd:edge"


================================================
FILE: Justfile
================================================
# Note: help messages should be 1 line long as required by just.

# Print a help message.
help:
    just --list

# Run the nightly check command: `just nightly check` or `just nightly clippy --fix`
nightly arg1 *args:
    cargo +nightly {{arg1}} {{args}} --all-features --all-targets --config .cargo/nightly-config.toml

# Run with nightly features enabled: `just bootstrap check`, `just bootstrap +beta clippy`
bootstrap arg1 *args:
    RUSTC_BOOTSTRAP=1 cargo {{arg1}} {{args}} --all-features --all-targets --config .cargo/nightly-config.toml

# Run `cargo hack --feature-powerset` on target-spec crates
target-spec-powerset *args:
    cargo hack --feature-powerset -p target-spec -p target-spec-miette {{args}}

# Build docs for crates and direct dependencies
rustdoc:
    @# Ignore clap since we currently depend on both clap 2, 3, and 4 -- we
    @# should really fix this at some point.
    @
    @# Also, cargo-compare currently pulls in cargo which bloats build times massively.
    @cargo tree --depth 1 -e normal --prefix none --workspace --exclude cargo-compare \
        | grep -v '^clap v[23].' \
        | grep -v '^cargo-compare v' \
        | gawk '{ gsub(" v", "@", $0); printf("%s\n", $1); }' \
        | xargs printf -- '-p %s\n' \
        | RUSTC_BOOTSTRAP=1 RUSTDOCFLAGS='--cfg=doc_cfg' xargs cargo doc --no-deps --lib --all-features

# Run cargo release in CI for a specific crate.
ci-cargo-release crate:
    # cargo-release requires a release off a branch.
    git checkout -B to-release
    cargo release publish --publish --execute --no-confirm -p {{crate}}
    git checkout -
    git branch -D to-release

# Generate README.md files from README.tpl and lib.rs files
generate-readmes:
    #!/usr/bin/env bash
    set -eo pipefail

    git ls-files | grep README.tpl$ | while read -r readme; do
        echo "Generating README for $readme"
        dir=$(dirname "$readme")
        cargo readme --project-root "$dir" > "$dir/README.md.tmp"
        gawk -f "scripts/fix-readmes.awk" "$dir/README.md.tmp" > "$dir/README.md"
        rm "$dir/README.md.tmp"
    done


================================================
FILE: LICENSE-APACHE
================================================
                              Apache License
                        Version 2.0, January 2004
                     http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

   "License" shall mean the terms and conditions for use, reproduction,
   and distribution as defined by Sections 1 through 9 of this document.

   "Licensor" shall mean the copyright owner or entity authorized by
   the copyright owner that is granting the License.

   "Legal Entity" shall mean the union of the acting entity and all
   other entities that control, are controlled by, or are under common
   control with that entity. For the purposes of this definition,
   "control" means (i) the power, direct or indirect, to cause the
   direction or management of such entity, whether by contract or
   otherwise, or (ii) ownership of fifty percent (50%) or more of the
   outstanding shares, or (iii) beneficial ownership of such entity.

   "You" (or "Your") shall mean an individual or Legal Entity
   exercising permissions granted by this License.

   "Source" form shall mean the preferred form for making modifications,
   including but not limited to software source code, documentation
   source, and configuration files.

   "Object" form shall mean any form resulting from mechanical
   transformation or translation of a Source form, including but
   not limited to compiled object code, generated documentation,
   and conversions to other media types.

   "Work" shall mean the work of authorship, whether in Source or
   Object form, made available under the License, as indicated by a
   copyright notice that is included in or attached to the work
   (an example is provided in the Appendix below).

   "Derivative Works" shall mean any work, whether in Source or Object
   form, that is based on (or derived from) the Work and for which the
   editorial revisions, annotations, elaborations, or other modifications
   represent, as a whole, an original work of authorship. For the purposes
   of this License, Derivative Works shall not include works that remain
   separable from, or merely link (or bind by name) to the interfaces of,
   the Work and Derivative Works thereof.

   "Contribution" shall mean any work of authorship, including
   the original version of the Work and any modifications or additions
   to that Work or Derivative Works thereof, that is intentionally
   submitted to Licensor for inclusion in the Work by the copyright owner
   or by an individual or Legal Entity authorized to submit on behalf of
   the copyright owner. For the purposes of this definition, "submitted"
   means any form of electronic, verbal, or written communication sent
   to the Licensor or its representatives, including but not limited to
   communication on electronic mailing lists, source code control systems,
   and issue tracking systems that are managed by, or on behalf of, the
   Licensor for the purpose of discussing and improving the Work, but
   excluding communication that is conspicuously marked or otherwise
   designated in writing by the copyright owner as "Not a Contribution."

   "Contributor" shall mean Licensor and any individual or Legal Entity
   on behalf of whom a Contribution has been received by Licensor and
   subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   copyright license to reproduce, prepare Derivative Works of,
   publicly display, publicly perform, sublicense, and distribute the
   Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
   this License, each Contributor hereby grants to You a perpetual,
   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
   (except as stated in this section) patent license to make, have made,
   use, offer to sell, sell, import, and otherwise transfer the Work,
   where such license applies only to those patent claims licensable
   by such Contributor that are necessarily infringed by their
   Contribution(s) alone or by combination of their Contribution(s)
   with the Work to which such Contribution(s) was submitted. If You
   institute patent litigation against any entity (including a
   cross-claim or counterclaim in a lawsuit) alleging that the Work
   or a Contribution incorporated within the Work constitutes direct
   or contributory patent infringement, then any patent licenses
   granted to You under this License for that Work shall terminate
   as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
   Work or Derivative Works thereof in any medium, with or without
   modifications, and in Source or Object form, provided that You
   meet the following conditions:

   (a) You must give any other recipients of the Work or
       Derivative Works a copy of this License; and

   (b) You must cause any modified files to carry prominent notices
       stating that You changed the files; and

   (c) You must retain, in the Source form of any Derivative Works
       that You distribute, all copyright, patent, trademark, and
       attribution notices from the Source form of the Work,
       excluding those notices that do not pertain to any part of
       the Derivative Works; and

   (d) If the Work includes a "NOTICE" text file as part of its
       distribution, then any Derivative Works that You distribute must
       include a readable copy of the attribution notices contained
       within such NOTICE file, excluding those notices that do not
       pertain to any part of the Derivative Works, in at least one
       of the following places: within a NOTICE text file distributed
       as part of the Derivative Works; within the Source form or
       documentation, if provided along with the Derivative Works; or,
       within a display generated by the Derivative Works, if and
       wherever such third-party notices normally appear. The contents
       of the NOTICE file are for informational purposes only and
       do not modify the License. You may add Your own attribution
       notices within Derivative Works that You distribute, alongside
       or as an addendum to the NOTICE text from the Work, provided
       that such additional attribution notices cannot be construed
       as modifying the License.

   You may add Your own copyright statement to Your modifications and
   may provide additional or different license terms and conditions
   for use, reproduction, or distribution of Your modifications, or
   for any such Derivative Works as a whole, provided Your use,
   reproduction, and distribution of the Work otherwise complies with
   the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
   any Contribution intentionally submitted for inclusion in the Work
   by You to the Licensor shall be under the terms and conditions of
   this License, without any additional terms or conditions.
   Notwithstanding the above, nothing herein shall supersede or modify
   the terms of any separate license agreement you may have executed
   with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
   names, trademarks, service marks, or product names of the Licensor,
   except as required for reasonable and customary use in describing the
   origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
   agreed to in writing, Licensor provides the Work (and each
   Contributor provides its Contributions) on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   implied, including, without limitation, any warranties or conditions
   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
   PARTICULAR PURPOSE. You are solely responsible for determining the
   appropriateness of using or redistributing the Work and assume any
   risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
   whether in tort (including negligence), contract, or otherwise,
   unless required by applicable law (such as deliberate and grossly
   negligent acts) or agreed to in writing, shall any Contributor be
   liable to You for damages, including any direct, indirect, special,
   incidental, or consequential damages of any character arising as a
   result of this License or out of the use or inability to use the
   Work (including but not limited to damages for loss of goodwill,
   work stoppage, computer failure or malfunction, or any and all
   other commercial damages or losses), even if such Contributor
   has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
   the Work or Derivative Works thereof, You may choose to offer,
   and charge a fee for, acceptance of support, warranty, indemnity,
   or other liability obligations and/or rights consistent with this
   License. However, in accepting such obligations, You may act only
   on Your own behalf and on Your sole responsibility, not on behalf
   of any other Contributor, and only if You agree to indemnify,
   defend, and hold each Contributor harmless for any liability
   incurred by, or claims asserted against, such Contributor by reason
   of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

   To apply the Apache License to your work, attach the following
   boilerplate notice, with the fields enclosed by brackets "[]"
   replaced with your own identifying information. (Don't include
   the brackets!)  The text should be enclosed in the appropriate
   comment syntax for the file format. We also recommend that a
   file or class name and description of purpose be included on the
   same "printed page" as the copyright notice for easier
   identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

	http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


================================================
FILE: LICENSE-MIT
================================================
Copyright (c) The cargo-guppy Contributors

Permission is hereby granted, free of charge, to any
person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the
Software without restriction, including without
limitation the rights to use, copy, modify, merge,
publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software
is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice
shall be included in all copies or substantial portions
of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.


================================================
FILE: README.md
================================================
# cargo-guppy: track and query dependency graphs

[![Build Status](https://github.com/guppy-rs/guppy/workflows/CI/badge.svg?branch=main)](<(https://github.com/guppy-rs/guppy/actions?query=workflow%3ACI+branch%3Amain)>)
[![License](https://img.shields.io/badge/license-Apache-green.svg)](LICENSE-APACHE) [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE-MIT)

This repository contains the source code for:

- [`guppy`](guppy): a library for performing queries on Cargo dependency graphs [![guppy on crates.io](https://img.shields.io/crates/v/guppy)](https://crates.io/crates/guppy) [![Documentation (latest release)](https://docs.rs/guppy/badge.svg)](https://docs.rs/guppy/) [![Documentation (main)](https://img.shields.io/badge/docs-main-59f)](https://guppy-rs.github.io/guppy/rustdoc/guppy/)
- libraries used by guppy:
  - [`guppy-summaries`](guppy-summaries): a library for managing build summaries listing packages and features [![guppy-summaries on crates.io](https://img.shields.io/crates/v/guppy-summaries)](https://crates.io/crates/guppy-summaries) [![Documentation (latest release)](https://docs.rs/guppy-summaries/badge.svg)](https://docs.rs/guppy-summaries/) [![Documentation (main)](https://img.shields.io/badge/docs-main-59f)](https://guppy-rs.github.io/guppy/rustdoc/guppy_summaries/)
  - [`target-spec`](target-spec): an evaluator for `Cargo.toml` target specifications [![target-spec on crates.io](https://img.shields.io/crates/v/target-spec)](https://crates.io/crates/target-spec) [![Documentation (latest release)](https://docs.rs/target-spec/badge.svg)](https://docs.rs/target-spec/) [![Documentation (main)](https://img.shields.io/badge/docs-main-59f)](https://guppy-rs.github.io/guppy/rustdoc/target_spec/)
- integrations for target-spec:

  - [`target-spec-miette`](target-spec-miette): allows converting target-spec errors to [miette](https://docs.rs/miette) diagnostics [![target-spec-miette on crates.io](https://img.shields.io/crates/v/target-spec-miette)](https://crates.io/crates/target-spec-miette) [![Documentation (latest release)](https://docs.rs/target-spec-miette/badge.svg)](https://docs.rs/target-spec-miette/) [![Documentation (main)](https://img.shields.io/badge/docs-main-59f)](https://guppy-rs.github.io/guppy/rustdoc/target_spec_miette/)

- tools built on top of guppy:
  - [`determinator`](tools/determinator): figure out what packages changed between two revisions [![determinator on crates.io](https://img.shields.io/crates/v/determinator)](https://crates.io/crates/determinator) [![Documentation (latest release)](https://docs.rs/determinator/badge.svg)](https://docs.rs/determinator/) [![Documentation (main)](https://img.shields.io/badge/docs-main-59f)](https://guppy-rs.github.io/guppy/rustdoc/determinator/)
  - [`cargo-hakari`](tools/cargo-hakari): a command-line tool to manage workspace-hack packages [![cargo-hakari on crates.io](https://img.shields.io/crates/v/cargo-hakari)](https://crates.io/crates/cargo-hakari) [![Documentation (latest release)](https://docs.rs/cargo-hakari/badge.svg)](https://docs.rs/cargo-hakari/) [![Documentation (main)](https://img.shields.io/badge/docs-main-59f)](https://guppy-rs.github.io/guppy/rustdoc/cargo_hakari/)
    - available in library form as [`hakari`](tools/hakari) [![hakari on crates.io](https://img.shields.io/crates/v/hakari)](https://crates.io/crates/hakari) [![Documentation (latest release)](https://docs.rs/hakari/badge.svg)](https://docs.rs/hakari/) [![Documentation (main)](https://img.shields.io/badge/docs-main-59f)](https://guppy-rs.github.io/guppy/rustdoc/hakari/)
  - [`cargo-guppy`](cargo-guppy): an experimental command-line frontend for `guppy` [![Documentation (main)](https://img.shields.io/badge/docs-main-59f)](https://guppy-rs.github.io/guppy/rustdoc/cargo_guppy/)
- and a number of [internal tools](internal-tools) and [test fixtures](fixtures) used to verify that `guppy` behaves correctly.

## Use cases

`guppy` and `cargo-guppy` can be used to solve many practical problems related to dependency graphs in large Rust
codebases. Some examples -- all of these are available through the `guppy` library, and will eventually be supported in
the `cargo-guppy` CLI as well:

- track existing dependencies for a crate or workspace
- query direct or transitive dependencies of a subset of packages — useful when some packages have greater assurance or
  reliability requirements
- figure out what's causing a particular crate to be included as a dependency
- iterate over reverse dependencies of a crate in [topological order](https://en.wikipedia.org/wiki/Topological_sorting)
- iterate over some or all links (edges) in a dependency graph, querying if the link is a build, dev or regular
  dependency
- filter out dev-only dependencies while performing queries
- perform queries based on [Cargo features](https://doc.rust-lang.org/cargo/reference/features.html)
- simulate Cargo builds and return what packages and features would be built by it
- evaluate target specs for [platform-specific dependencies](https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#platform-specific-dependencies)
- generate _summary files_ for Cargo builds, which can be used to:
  - receive CI feedback if a dependency is added, updated or removed, or if new features are added
  - receive CI feedback if a package is added to a high-assurance subset, or if any new features are enabled in
    an existing package in that subset. This can be used to flag those changes for extra scrutiny.
- print out a `dot` graph for a subset of crates, for formatting with [graphviz](https://www.graphviz.org/)

Still to come:

- a command-line query language

## Development status

The core `guppy` code in this repository is considered **mostly complete** and the API is mostly stable.

`guppy`'s simulation of Cargo builds is [extensively tested](https://github.com/guppy-rs/guppy/blob/main/internal-tools/cargo-compare/src/lib.rs) against upstream Cargo, and there are no known differences.
Comparison testing has found a number of bugs in upstream Cargo, for example:

- [v2 resolver: different handling for inactive, optional dependencies based on how they're specified](https://github.com/rust-lang/cargo/issues/8316)
- [v2 resolver: a proc macro being specified with the key "proc_macro" vs "proc-macro" causes different results](https://github.com/rust-lang/cargo/issues/8315)
- [specifying different versions in unconditional and target-specific dependency sections causes "multiple rmeta candidates" error](https://github.com/rust-lang/cargo/issues/8032)

## Design

`guppy` is written on top of the excellent [petgraph](https://github.com/petgraph/petgraph) library. It is a separate
codebase from `cargo`, depending only on the stable [`cargo
metadata`](https://doc.rust-lang.org/cargo/commands/cargo-metadata.html) format. (Some other tools in this space like
[`cargo-tree`](https://github.com/sfackler/cargo-tree) use cargo internals directly.)

## Minimum supported Rust version

The minimum supported Rust version (MSRV) is **Rust 1.86**.

While a crate is pre-release status (0.x.x) it may have its MSRV bumped in a patch release. Once a crate has reached
1.x, any MSRV bump will be accompanied with a new minor version.

At any given time, at least the last 3 versions of Rust will be supported. For `target-spec`, at least
the last 6 months of stable Rust releases will be supported.

## Contributing

See the [CONTRIBUTING](CONTRIBUTING.md) file for how to help out.

## License

This project is available under the terms of either the [Apache 2.0 license](LICENSE-APACHE) or the [MIT
license](LICENSE-MIT).


================================================
FILE: cargo-guppy/Cargo.toml
================================================
[package]
name = "cargo-guppy"
version = "0.1.0"
authors = ["Rain <rain1@fb.com>", "Brandon Williams <bmwill@fb.com>"]
license = "MIT OR Apache-2.0"
edition = "2024"
rust-version.workspace = true

[dependencies]
ahash.workspace = true
camino = "1.2.1"
# disable tracing integration since we don't use it
color-eyre = { version = "0.6.5", default-features = false }
clap = { version = "4.5.49", features = ["derive"] }
dialoguer = "0.11.0"
guppy = { version = "0.17.25", path = "../guppy", features = ["summaries"] }
guppy-cmdlib = { path = "../guppy-cmdlib" }
itertools = "0.14.0"
pathdiff = { version = "0.2.3", features = ["camino"] }
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.145"
toml_edit = "0.22.26"
guppy-workspace-hack.workspace = true


================================================
FILE: cargo-guppy/README.md
================================================
# cargo-guppy

[![Documentation (main)](https://img.shields.io/badge/docs-main-brightgreen)](https://guppy-rs.github.io/guppy/rustdoc/cargo_guppy/)
[![License](https://img.shields.io/badge/license-Apache-green.svg)](../LICENSE-APACHE)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](../LICENSE-MIT)

A command-line frontend for `guppy`.

`cargo-guppy` provides a frontend for running `guppy` queries.

## Installing

`cargo-guppy` is currently a work in progress, and not yet on `crates.io`. To install it, ensure
you have `cargo` installed (preferably through [rustup](https://rustup.rs/)), then run:

```bash
cargo install --git https://github.com/guppy-rs/guppy --branch main cargo-guppy
```

This will make the `cargo guppy` command available.

## Commands

The list of commands is not currently stable and is subject to change.

### Query commands

* `select`: query packages and their transitive dependencies
* `resolve-cargo`: query packages and features as would be built by cargo
* `subtree-size`: print dependencies along with their unique subtree size
* `dups`: print duplicate packages

### Diff commands

* `diff`: perform a diff of two `cargo metadata` JSON outputs
* `diff-summaries`: perform a diff of two [summaries](https://github.com/guppy-rs/guppy/tree/main/guppy-summaries)

### Workspace manipulations

* `mv`: move crates to a new location in a workspace, updating paths along the way

## Contributing

See the [CONTRIBUTING](../CONTRIBUTING.md) file for how to help out.

## License

This project is available under the terms of either the [Apache 2.0 license](../LICENSE-APACHE) or the [MIT
license](../LICENSE-MIT).

<!--
README.md is generated from README.tpl by cargo readme. To regenerate:

cargo install cargo-readme
cargo readme > README.md
-->


================================================
FILE: cargo-guppy/README.tpl
================================================
# {{crate}}

[![Documentation (main)](https://img.shields.io/badge/docs-main-brightgreen)](https://guppy-rs.github.io/guppy/rustdoc/cargo_guppy/)
[![License](https://img.shields.io/badge/license-Apache-green.svg)](../LICENSE-APACHE)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](../LICENSE-MIT)

{{readme}}

## Contributing

See the [CONTRIBUTING](../CONTRIBUTING.md) file for how to help out.

## License

This project is available under the terms of either the [Apache 2.0 license](../LICENSE-APACHE) or the [MIT
license](../LICENSE-MIT).

<!--
README.md is generated from README.tpl by cargo readme. To regenerate:

cargo install cargo-readme
cargo readme > README.md
-->


================================================
FILE: cargo-guppy/src/core.rs
================================================
// Copyright (c) The cargo-guppy Contributors
// SPDX-License-Identifier: MIT OR Apache-2.0

//! Implementations for options shared by commands.

use clap::{Parser, ValueEnum};
use color_eyre::eyre::{Result, WrapErr, ensure, eyre};
use guppy::{
    PackageId,
    graph::{DependencyDirection, DependencyReq, PackageGraph, PackageLink, PackageQuery},
    platform::EnabledTernary,
};
use guppy_cmdlib::string_to_platform_spec;
use std::collections::HashSet;

#[derive(ValueEnum, Copy, Clone, Debug)]
pub enum Kind {
    All,
    Workspace,
    DirectThirdParty,
    ThirdParty,
}

impl Kind {
    /// Returns true if this link should be traversed.
    pub fn should_traverse(self, link: &PackageLink<'_>) -> bool {
        // NOTE: We always retain all workspace deps in the graph, otherwise
        // we'll get a disconnected graph.
        match self {
            Kind::All | Kind::ThirdParty => true,
            Kind::DirectThirdParty => link.from().in_workspace(),
            Kind::Workspace => link.from().in_workspace() && link.to().in_workspace(),
        }
    }
}

#[derive(Debug, Parser)]
pub struct QueryOptions {
    /// Query reverse transitive dependencies (default: forward)
    #[clap(long = "query-reverse", action = clap::ArgAction::SetTrue)]
    reverse: bool,

    #[clap(rename_all = "screaming_snake_case")]
    /// The root packages to start the query from
    roots: Vec<String>,
}

impl QueryOptions {
    fn direction(&self) -> DependencyDirection {
        if self.reverse {
            DependencyDirection::Reverse
        } else {
            DependencyDirection::Forward
        }
    }

    /// Constructs a `PackageQuery` based on these options.
    pub fn apply<'g>(&self, pkg_graph: &'g PackageGraph) -> Result<PackageQuery<'g>> {
        if !self.roots.is_empty() {
            // NOTE: The root set packages are specified by name. The tool currently
            // does not handle multiple version of the same package as the current use
            // cases are passing workspace members as the root set, which won't be
            // duplicated.
            let root_set = self.roots.iter().map(|s| s.as_str()).collect();
            Ok(pkg_graph.query_directed(names_to_ids(pkg_graph, root_set), self.direction())?)
        } else {
            ensure!(
                self.direction() == DependencyDirection::Forward,
                eyre!("--query-reverse requires roots to be specified")
            );
            Ok(pkg_graph.query_workspace())
        }
    }
}

#[derive(Debug, Parser)]
pub struct BaseFilterOptions {
    #[clap(long, rename_all = "kebab-case", name = "package")]
    /// Omit edges that point into a given package; useful for seeing how
    /// removing a dependency affects the graph
    pub omit_edges_into: Vec<String>,

    #[clap(long, short, value_enum, default_value = "all")]
    /// Kind of crates to select
    pub kind: Kind,
}

impl BaseFilterOptions {
    /// Return the set of omitted package IDs.
    pub fn omitted_package_ids<'g: 'a, 'a>(
        &'a self,
        pkg_graph: &'g PackageGraph,
    ) -> impl Iterator<Item = &'g PackageId> + 'a {
        let omitted_set: HashSet<&str> = self.omit_edges_into.iter().map(|s| s.as_str()).collect();
        names_to_ids(pkg_graph, omitted_set)
    }
}

#[derive(Debug, Parser)]
pub struct FilterOptions {
    #[clap(flatten)]
    pub base_opts: BaseFilterOptions,

    #[clap(long, rename_all = "kebab-case")]
    /// Include dev dependencies
    pub include_dev: bool,

    #[clap(long, rename_all = "kebab-case")]
    /// Include build dependencies
    pub include_build: bool,

    #[clap(long)]
    /// Target to filter, "current", "any" or "always" [default: any]
    pub target: Option<String>,
}

impl FilterOptions {
    /// Construct a package resolver based on the filter options.
    pub fn make_resolver<'g>(
        &'g self,
        pkg_graph: &'g PackageGraph,
    ) -> Result<impl Fn(&PackageQuery<'g>, PackageLink<'g>) -> bool + 'g> {
        let omitted_package_ids: HashSet<_> =
            self.base_opts.omitted_package_ids(pkg_graph).collect();

        let platform_spec = string_to_platform_spec(self.target.as_deref())
            .wrap_err_with(|| "target platform isn't known")?;

        let ret = move |_: &PackageQuery<'g>, link| {
            // filter by the kind of dependency (--kind)
            let include_kind = self.base_opts.kind.should_traverse(&link);

            let include_type = self.eval(link, |req| {
                req.status().enabled_on(&platform_spec.clone()) != EnabledTernary::Disabled
            });

            // filter out provided edge targets (--omit-edges-into)
            let include_edge = !omitted_package_ids.contains(link.to().id());

            include_kind && include_type && include_edge
        };
        Ok(ret)
    }

    /// Select normal, dev, or build dependencies as requested (--include-build, --include-dev), and
    /// apply `pred_fn` to whatever's selected.
    fn eval(
        &self,
        link: PackageLink<'_>,
        mut pred_fn: impl FnMut(DependencyReq<'_>) -> bool,
    ) -> bool {
        pred_fn(link.normal())
            || self.include_dev && pred_fn(link.dev())
            || self.include_build && pred_fn(link.build())
    }
}

pub(crate) fn names_to_ids<'g: 'a, 'a>(
    pkg_graph: &'g PackageGraph,
    names: HashSet<&'a str>,
) -> impl Iterator<Item = &'g PackageId> + 'a {
    pkg_graph.packages().filter_map(move |metadata| {
        if names.contains(metadata.name()) {
            Some(metadata.id())
        } else {
            None
        }
    })
}


================================================
FILE: cargo-guppy/src/diff.rs
================================================
// Copyright (c) The cargo-guppy Contributors
// SPDX-License-Identifier: MIT OR Apache-2.0

use guppy::{PackageId, graph::PackageMetadata};
use serde::{Serialize, Serializer, ser::SerializeStruct};
use std::{collections::HashMap, ops::Deref};

#[derive(Debug, Default)]
pub struct DiffOptions;

impl DiffOptions {
    pub fn diff<'a>(
        &self,
        old_packages: &'a [PackageMetadata<'a>],
        new_packages: &'a [PackageMetadata<'a>],
    ) -> Diff<'a> {
        let mut new: HashMap<&PackageId, Package> =
            new_packages.iter().map(|p| (p.id(), Package(p))).collect();

        let mut removed = old_packages
            .iter()
            .filter_map(|package| {
                if new.remove(package.id()).is_none() {
                    Some(Package(package))
                } else {
                    None
                }
            })
            .map(|removed_package| {
                let remaining_packages = new_packages
                    .iter()
                    .filter_map(|package| {
                        if (package.id() != removed_package.id())
                            && (package.name() == removed_package.name())
                        {
                            Some(Package(package))
                        } else {
                            None
                        }
                    })
                    .collect::<Vec<_>>();

                if remaining_packages.is_empty() {
                    (removed_package.id().clone(), (removed_package, None))
                } else {
                    (
                        removed_package.id().clone(),
                        (removed_package, Some(remaining_packages)),
                    )
                }
            })
            .collect::<HashMap<_, _>>();

        let mut added = new
            .into_iter()
            .map(|(added_package_id, added_package)| {
                let existing_packages = new_packages
                    .iter()
                    .filter_map(|package| {
                        if (package.id() != added_package_id)
                            && (package.name() == added_package.name())
                        {
                            Some(Package(package))
                        } else {
                            None
                        }
                    })
                    .collect::<Vec<_>>();

                if existing_packages.is_empty() {
                    (added_package_id, (added_package, None))
                } else {
                    (added_package_id, (added_package, Some(existing_packages)))
                }
            })
            .collect::<HashMap<_, _>>();

        let mut updated = removed
            .iter()
            .filter_map(|(_, (removed_package, _remaining_packages))| {
                if let Some((_updated_package_id, (updated_package, _))) =
                    added
                        .iter()
                        .find(|(_added_package_id, (added_package, _))| {
                            removed_package.name() == added_package.name()
                        })
                {
                    Some((removed_package.clone(), updated_package.clone()))
                } else {
                    None
                }
            })
            .collect::<Vec<_>>();
        updated.sort_by(|a, b| a.1.name().cmp(b.1.name()));

        // Remove entries from Added and Removed
        for (removed_pkg, added_pkg) in &updated {
            removed.remove(removed_pkg.id());
            added.remove(added_pkg.id());
        }

        let mut removed = removed.into_iter().map(|x| x.1).collect::<Vec<_>>();
        removed.sort_by(|(a, _), (b, _)| a.name().cmp(b.name()));
        let mut added = added.into_iter().map(|x| x.1).collect::<Vec<_>>();
        added.sort_by(|(a, _), (b, _)| a.name().cmp(b.name()));

        Diff {
            updated,
            removed,
            added,
        }
    }
}

#[derive(Clone, Debug)]
struct Package<'a>(pub &'a PackageMetadata<'a>);

impl<'a> Deref for Package<'a> {
    type Target = PackageMetadata<'a>;

    fn deref(&self) -> &Self::Target {
        self.0
    }
}

impl Serialize for Package<'_> {
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: Serializer,
    {
        let mut state = serializer.serialize_struct("Package", 3)?;
        state.serialize_field("id", self.0.id().repr())?;
        state.serialize_field("name", self.0.name())?;
        state.serialize_field("version", self.0.version())?;
        state.end()
    }
}

#[derive(Debug, Serialize)]
pub struct Diff<'a> {
    updated: Vec<(Package<'a>, Package<'a>)>,
    removed: Vec<(Package<'a>, Option<Vec<Package<'a>>>)>,
    added: Vec<(Package<'a>, Option<Vec<Package<'a>>>)>,
}

impl ::std::fmt::Display for Diff<'_> {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        fn write_dups(
            f: &mut ::std::fmt::Formatter<'_>,
            dups: &Option<Vec<Package>>,
        ) -> ::std::fmt::Result {
            if let Some(dups) = dups {
                write!(f, " ({}", dups[0].version())?;
                for p in &dups[1..] {
                    write!(f, ", {}", p.version())?;
                }
                write!(f, ")")?;
            }

            Ok(())
        }

        if !self.added.is_empty() {
            writeln!(f, "Added Packages (Duplicate versions in '()'):")?;
            for (added, dups) in &self.added {
                write!(f, "\t{} {}", added.name(), added.version(),)?;

                write_dups(f, dups)?;
                writeln!(f)?;
            }
            writeln!(f)?;
        }

        if !self.removed.is_empty() {
            writeln!(f, "Removed Packages (Remaining versions in '()'):")?;
            for (removed, dups) in &self.removed {
                write!(f, "\t{} {}", removed.name(), removed.version(),)?;

                write_dups(f, dups)?;
                writeln!(f)?;
            }
            writeln!(f)?;
        }

        if !self.updated.is_empty() {
            writeln!(f, "Updated Packages:")?;
            for (removed, added) in &self.updated {
                writeln!(
                    f,
                    "\t{}: {} -> {}",
                    removed.name(),
                    removed.version(),
                    added.version(),
                )?;
            }
            writeln!(f)?;
        }

        Ok(())
    }
}


================================================
FILE: cargo-guppy/src/lib.rs
================================================
// Copyright (c) The cargo-guppy Contributors
// SPDX-License-Identifier: MIT OR Apache-2.0

//! A command-line frontend for `guppy`.
//!
//! `cargo-guppy` provides a frontend for running `guppy` queries.
//!
//! # Installing
//!
//! `cargo-guppy` is currently a work in progress, and not yet on `crates.io`. To install it, ensure
//! you have `cargo` installed (preferably through [rustup](https://rustup.rs/)), then run:
//!
//! ```bash
//! cargo install --git https://github.com/guppy-rs/guppy --branch main cargo-guppy
//! ```
//!
//! This will make the `cargo guppy` command available.
//!
//! # Commands
//!
//! The list of commands is not currently stable and is subject to change.
//!
//! ## Query commands
//!
//! * `select`: query packages and their transitive dependencies
//! * `resolve-cargo`: query packages and features as would be built by cargo
//! * `subtree-size`: print dependencies along with their unique subtree size
//! * `dups`: print duplicate packages
//!
//! ## Diff commands
//!
//! * `diff`: perform a diff of two `cargo metadata` JSON outputs
//! * `diff-summaries`: perform a diff of two [summaries](https://github.com/guppy-rs/guppy/tree/main/guppy-summaries)
//!
//! ## Workspace manipulations
//!
//! * `mv`: move crates to a new location in a workspace, updating paths along the way

mod core;
mod diff;
mod mv;

pub use crate::{core::*, mv::*};

use ahash::AHashMap;
use camino::Utf8PathBuf;
use clap::{Parser, ValueEnum};
use color_eyre::eyre::{Result, WrapErr, bail};
use guppy::{
    PackageId,
    graph::{
        DependencyDirection, DotWrite, PackageDotVisitor, PackageGraph, PackageLink,
        PackageMetadata,
        cargo::{CargoOptions, CargoSet},
        feature::{FeatureSet, StandardFeatures},
        summaries::Summary,
    },
};
use guppy_cmdlib::{
    CargoMetadataOptions, CargoResolverOpts, PackagesAndFeatures, string_to_platform_spec,
};
use std::{borrow::Cow, cmp, collections::HashSet, fmt, fs, io::Write, iter, path::PathBuf};

pub fn cmd_cycles(metadata_opts: CargoMetadataOptions, features: bool) -> Result<()> {
    let command = metadata_opts.make_command();
    let pkg_graph = command.build_graph()?;

    if features {
        let feature_graph = pkg_graph.feature_graph();
        let cycles = feature_graph.cycles();

        let mut any_cycles = false;
        for cycle in cycles.all_cycles() {
            any_cycles = true;

            for (n, feature_id) in cycle.iter().enumerate() {
                if n > 0 {
                    print!(" -> ");
                }
                println!("{feature_id}");
            }
            println!(" -> {}", cycle[0]);
        }
        if !any_cycles {
            println!("no feature cycles found");
        }
    } else {
        let cycles = pkg_graph.cycles();

        let mut any_cycles = false;
        for cycle in cycles.all_cycles() {
            any_cycles = true;

            for (n, package_id) in cycle.iter().enumerate() {
                if n > 0 {
                    print!(" -> ");
                }
                println!("{package_id}");
            }
            println!(" -> {}", cycle[0]);
        }

        if !any_cycles {
            println!("no cycles found");
        }
    }

    Ok(())
}

pub fn cmd_diff(json: bool, old: &str, new: &str) -> Result<()> {
    let old_json = fs::read_to_string(old)?;
    let new_json = fs::read_to_string(new)?;

    let old_graph = PackageGraph::from_json(old_json)?;
    let new_graph = PackageGraph::from_json(new_json)?;

    let old_packages: Vec<_> = old_graph.packages().collect();
    let new_packages: Vec<_> = new_graph.packages().collect();

    let diff = diff::DiffOptions.diff(&old_packages, &new_packages);

    if json {
        println!("{}", serde_json::to_string_pretty(&diff).unwrap());
    } else {
        print!("{diff}");
    }

    Ok(())
}

#[derive(Debug, Parser)]
pub struct DiffSummariesOptions {
    /// The old summary
    #[clap(name = "OLD")]
    pub old: Utf8PathBuf,

    /// The new summary
    #[clap(name = "NEW")]
    pub new: Utf8PathBuf,
}

impl DiffSummariesOptions {
    pub fn exec(&self) -> Result<()> {
        let old_summary = fs::read_to_string(&self.old)
            .wrap_err_with(|| format!("reading old summary {} failed", self.old))?;
        let old_summary = Summary::parse(&old_summary)
            .wrap_err_with(|| format!("parsing old summary {} failed", self.old))?;

        let new_summary = fs::read_to_string(&self.new)
            .wrap_err_with(|| format!("reading new summary {} failed", self.new))?;
        let new_summary = Summary::parse(&new_summary)
            .wrap_err_with(|| format!("parsing new summary {} failed", self.new))?;

        let diff = old_summary.diff(&new_summary);

        println!("{}", diff.report());

        // TODO: different error codes for non-empty diff and failure, similar to git/hg
        if diff.is_changed() {
            bail!("non-empty diff");
        }
        Ok(())
    }
}

#[derive(Debug, Parser)]
pub struct DupsOptions {
    #[clap(flatten)]
    filter_opts: FilterOptions,

    #[clap(flatten)]
    metadata_opts: CargoMetadataOptions,
}

pub fn cmd_dups(opts: &DupsOptions) -> Result<()> {
    let command = opts.metadata_opts.make_command();
    let pkg_graph = command.build_graph()?;

    let resolver = opts.filter_opts.make_resolver(&pkg_graph)?;
    let selection = pkg_graph.query_workspace();

    let mut dupe_map: AHashMap<_, Vec<_>> = AHashMap::new();
    for package in selection
        .resolve_with_fn(resolver)
        .packages(DependencyDirection::Forward)
    {
        dupe_map.entry(package.name()).or_default().push(package);
    }

    for (name, dupes) in dupe_map {
        if dupes.len() <= 1 {
            continue;
        }

        let output = itertools::join(dupes.iter().map(|p| p.version()), ", ");

        println!("{name} ({output})");
    }

    Ok(())
}

#[derive(ValueEnum, Copy, Clone, Debug)]
pub enum BuildKind {
    All,
    Target,
    ProcMacro,
    TargetAndProcMacro,
    Host,
}

#[derive(Debug, Parser)]
pub struct ResolveCargoOptions {
    #[clap(flatten)]
    pf: PackagesAndFeatures,

    #[clap(flatten)]
    resolver_opts: CargoResolverOpts,

    #[clap(flatten)]
    base_filter_opts: BaseFilterOptions,

    #[clap(long = "target-platform")]
    /// Evaluate against target platform, "current" or "any" (default: any)
    target_platform: Option<String>,

    #[clap(long = "host-platform")]
    /// Evaluate against host platform, "current" or "any" (default: any)
    host_platform: Option<String>,

    #[clap(long, value_enum, default_value = "all")]
    /// Print packages built on target, host or both
    build_kind: BuildKind,

    #[clap(long, value_parser)]
    /// Write summary file
    summary: Option<PathBuf>,

    #[clap(flatten)]
    metadata_opts: CargoMetadataOptions,
}

pub fn cmd_resolve_cargo(opts: &ResolveCargoOptions) -> Result<()> {
    let target_platform = string_to_platform_spec(opts.target_platform.as_deref())?;
    let host_platform = string_to_platform_spec(opts.host_platform.as_deref())?;
    let command = opts.metadata_opts.make_command();
    let pkg_graph = command.build_graph()?;

    let mut cargo_opts = CargoOptions::new();
    cargo_opts
        .set_include_dev(opts.resolver_opts.include_dev)
        .set_resolver(opts.resolver_opts.resolver_version.to_guppy())
        .set_initials_platform(opts.resolver_opts.initials_platform.to_guppy())
        .set_target_platform(target_platform)
        .set_host_platform(host_platform)
        .add_omitted_packages(opts.base_filter_opts.omitted_package_ids(&pkg_graph));

    let (initials, features_only) = opts.pf.make_feature_sets(&pkg_graph)?;
    let cargo_set = CargoSet::new(initials, features_only, &cargo_opts)?;

    // Note that for the target+proc macro case, we unify direct deps here. This means that
    // direct deps of workspace proc macros (e.g. quote) will be included. This feels like it's
    // what's desired for this request.
    let direct_deps = match opts.build_kind {
        BuildKind::All | BuildKind::TargetAndProcMacro => Cow::Owned(
            cargo_set
                .host_direct_deps()
                .union(cargo_set.target_direct_deps()),
        ),
        BuildKind::Target => Cow::Borrowed(cargo_set.target_direct_deps()),
        BuildKind::Host | BuildKind::ProcMacro => Cow::Borrowed(cargo_set.host_direct_deps()),
    };

    let print_packages = |feature_set: &FeatureSet| {
        for feature_list in feature_set.packages_with_features(DependencyDirection::Forward) {
            let package = feature_list.package();
            let show_package = match opts.base_filter_opts.kind {
                Kind::All => true,
                Kind::Workspace => package.in_workspace(),
                Kind::DirectThirdParty => {
                    !package.in_workspace()
                        && direct_deps.contains(package.id()).expect("valid package")
                }
                Kind::ThirdParty => !package.in_workspace(),
            };
            if show_package {
                println!(
                    "{} {}: {}",
                    package.name(),
                    package.version(),
                    feature_list.display_features()
                );
            }
        }
    };

    let proc_macro_features = || {
        let proc_macro_ids = cargo_set.proc_macro_links().map(|link| link.to().id());
        let package_set = pkg_graph.resolve_ids(proc_macro_ids).expect("valid IDs");
        let feature_set = package_set.to_feature_set(StandardFeatures::All);
        cargo_set.host_features().intersection(&feature_set)
    };
    match opts.build_kind {
        BuildKind::All => {
            print_packages(&cargo_set.target_features().union(cargo_set.host_features()))
        }
        BuildKind::Target => print_packages(cargo_set.target_features()),
        BuildKind::ProcMacro => print_packages(&proc_macro_features()),
        BuildKind::TargetAndProcMacro => {
            print_packages(&cargo_set.target_features().union(&proc_macro_features()))
        }
        BuildKind::Host => print_packages(cargo_set.host_features()),
    }

    if let Some(summary_path) = &opts.summary {
        let summary = cargo_set.to_summary(&cargo_opts)?;
        let mut out = "# This summary file was @generated by cargo-guppy.\n\n".to_string();
        summary.write_to_string(&mut out)?;

        fs::write(summary_path, out)?;
    }

    Ok(())
}

struct NameVisitor;

impl PackageDotVisitor for NameVisitor {
    fn visit_package(&self, package: PackageMetadata<'_>, f: &mut DotWrite<'_, '_>) -> fmt::Result {
        write!(f, "{}", package.name())
    }

    fn visit_link(&self, _link: PackageLink<'_>, f: &mut DotWrite<'_, '_>) -> fmt::Result {
        write!(f, "")
    }
}

#[derive(Debug, Parser)]
pub struct CmdSelectOptions {
    #[clap(flatten)]
    filter_opts: FilterOptions,

    #[clap(long = "output-reverse", action = clap::ArgAction::SetTrue)]
    /// Output results in reverse topological order (default: forward)
    output_reverse: bool,

    #[clap(long, rename_all = "kebab-case")]
    /// Save selection graph in .dot format
    output_dot: Option<String>,

    #[clap(flatten)]
    query_opts: QueryOptions,

    #[clap(flatten)]
    metadata_opts: CargoMetadataOptions,
}

impl CmdSelectOptions {
    fn output_direction(&self) -> DependencyDirection {
        if self.output_reverse {
            DependencyDirection::Reverse
        } else {
            DependencyDirection::Forward
        }
    }
}

pub fn cmd_select(options: &CmdSelectOptions) -> Result<()> {
    let command = options.metadata_opts.make_command();
    let pkg_graph = command.build_graph()?;

    let query = options.query_opts.apply(&pkg_graph)?;
    let resolver = options.filter_opts.make_resolver(&pkg_graph)?;
    let package_set = query.resolve_with_fn(resolver);

    for package_id in package_set.package_ids(options.output_direction()) {
        let package = pkg_graph.metadata(package_id).unwrap();
        let in_workspace = package.in_workspace();
        let direct_dep = package
            .reverse_direct_links()
            .any(|link| link.from().in_workspace() && !link.to().in_workspace());
        let show_package = match options.filter_opts.base_opts.kind {
            Kind::All => true,
            Kind::Workspace => in_workspace,
            Kind::DirectThirdParty => direct_dep,
            Kind::ThirdParty => !in_workspace,
        };
        if show_package {
            println!("{package_id}");
        }
    }

    if let Some(ref output_file) = options.output_dot {
        let dot = package_set.display_dot(NameVisitor);
        let mut f = fs::File::create(output_file)?;
        write!(f, "{dot}")?;
    }

    Ok(())
}

#[derive(Debug, Parser)]
pub struct SubtreeSizeOptions {
    #[clap(flatten)]
    filter_opts: FilterOptions,

    // TODO: potentially replace this with SelectOptions
    #[clap(rename_all = "screaming_snake_case")]
    /// The root packages to start the selection from
    root: Option<String>,

    #[clap(flatten)]
    metadata_opts: CargoMetadataOptions,
}

pub fn cmd_subtree_size(options: &SubtreeSizeOptions) -> Result<()> {
    let command = options.metadata_opts.make_command();
    let pkg_graph = command.build_graph()?;

    let resolver = options.filter_opts.make_resolver(&pkg_graph)?;

    let mut dep_cache = pkg_graph.new_depends_cache();

    let root_id = options
        .root
        .as_ref()
        .and_then(|root_name| {
            pkg_graph
                .packages()
                .find(|metadata| root_name == metadata.name())
        })
        .map(|metadata| metadata.id());
    let selection = if options.root.is_some() {
        pkg_graph.query_forward(iter::once(root_id.unwrap()))?
    } else {
        pkg_graph.query_workspace()
    };

    let mut unique_deps: AHashMap<&PackageId, HashSet<&PackageId>> = AHashMap::new();
    for package_id in selection
        .resolve_with_fn(&resolver)
        .package_ids(DependencyDirection::Forward)
    {
        let subtree_package_set: HashSet<&PackageId> = pkg_graph
            .query_forward(iter::once(package_id))?
            .resolve_with_fn(&resolver)
            .package_ids(DependencyDirection::Forward)
            .collect();
        let mut nonunique_deps_set: HashSet<&PackageId> = HashSet::new();
        for dep_package_id in &subtree_package_set {
            // don't count ourself
            if *dep_package_id == package_id {
                continue;
            }

            let mut unique = true;
            let dep_package = pkg_graph.metadata(dep_package_id).unwrap();
            for link in dep_package.reverse_direct_links() {
                // skip build and dev dependencies
                if link.dev_only() {
                    continue;
                }
                let from_id = link.from().id();

                if !subtree_package_set.contains(from_id) || nonunique_deps_set.contains(from_id) {
                    // if the from is from outside the subtree rooted at root_id, we ignore it
                    if let Some(root_id) = root_id {
                        if !dep_cache.depends_on(root_id, from_id)? {
                            continue;
                        }
                    }

                    unique = false;
                    nonunique_deps_set.insert(dep_package_id);
                    break;
                }
            }

            let unique_list = unique_deps.entry(package_id).or_default();
            if unique {
                unique_list.insert(dep_package_id);
            }
        }
    }

    let mut sorted_unique_deps = unique_deps.into_iter().collect::<Vec<_>>();
    sorted_unique_deps.sort_by_key(|a| cmp::Reverse(a.1.len()));

    for (package_id, deps) in sorted_unique_deps.iter() {
        if !deps.is_empty() {
            println!("{} {}", deps.len(), package_id);
        }
        for dep in deps {
            println!("    {dep}");
        }
    }

    Ok(())
}


================================================
FILE: cargo-guppy/src/main.rs
================================================
// Copyright (c) The cargo-guppy Contributors
// SPDX-License-Identifier: MIT OR Apache-2.0

use cargo_guppy::{
    CmdSelectOptions, DiffSummariesOptions, DupsOptions, MvOptions, ResolveCargoOptions,
    SubtreeSizeOptions,
};
use clap::Parser;
use color_eyre::Result;
use guppy_cmdlib::CargoMetadataOptions;

#[derive(Debug, Parser)]
#[clap(about = "Cargo.lock file analysis")]
struct Args {
    #[clap(subcommand)]
    cmd: Command,
}

// Ensure this list is kept up to date with the doc comment in lib.rs.
#[derive(Debug, Parser)]
enum Command {
    #[clap(name = "cycles")]
    /// Print cycles in the dependency graph
    Cycles {
        #[clap(flatten)]
        metadata_opts: CargoMetadataOptions,

        #[clap(long)]
        /// Print cycles in the feature graph
        features: bool,
    },
    #[clap(name = "diff")]
    /// Perform a diff of two cargo metadata JSON files
    Diff {
        #[clap(long)]
        json: bool,
        old: String,
        new: String,
    },
    #[clap(name = "diff-summaries")]
    /// Diff two guppy summaries
    DiffSummaries(DiffSummariesOptions),
    #[clap(name = "dups")]
    /// Print the number of duplicate packages
    Duplicates(DupsOptions),
    #[clap(name = "resolve-cargo")]
    /// Return packages and features that would be built by Cargo
    ResolveCargo(ResolveCargoOptions),
    #[clap(name = "select")]
    /// Select packages and their transitive dependencies
    Select(CmdSelectOptions),
    #[clap(name = "subtree-size")]
    /// Print a list of dependencies along with their unique subtree size
    SubtreeSize(SubtreeSizeOptions),
    #[clap(name = "mv")]
    /// Move packages to another location, fixing up workspace paths
    ///
    /// The source directories must be crates, and the destination must be within the same
    /// workspace.
    Mv(MvOptions),
}

// On Unix-like operating systems, the executable name of the Cargo subcommand usually doesn't have
// a file extension, while on Windows, executables usually have a ".exe" extension.
fn executable_name(subcommand: &str) -> String {
    #[cfg(target_os = "windows")]
    {
        format!("cargo-{}.exe", subcommand)
    }

    #[cfg(not(target_os = "windows"))]
    {
        format!("cargo-{subcommand}")
    }
}

// When invoked as a cargo subcommand, cargo passes too many arguments so we need to filter out
// arg[1] if it matches the end of arg[0], e.i. "cargo-X X foo" should become "cargo-X foo".
fn args() -> impl Iterator<Item = String> {
    let mut args: Vec<String> = ::std::env::args().collect();

    if args.len() >= 2 && args[0].ends_with(&executable_name(&args[1])) {
        args.remove(1);
    }

    args.into_iter()
}

fn main() -> Result<()> {
    color_eyre::install()?;

    let args = Args::parse_from(args());

    match args.cmd {
        Command::Cycles {
            metadata_opts,
            features,
        } => cargo_guppy::cmd_cycles(metadata_opts, features),
        Command::Diff { json, old, new } => cargo_guppy::cmd_diff(json, &old, &new),
        Command::DiffSummaries(options) => options.exec(),
        Command::Duplicates(ref options) => cargo_guppy::cmd_dups(options),
        Command::ResolveCargo(ref options) => cargo_guppy::cmd_resolve_cargo(options),
        Command::Select(ref options) => cargo_guppy::cmd_select(options),
        Command::SubtreeSize(ref options) => cargo_guppy::cmd_subtree_size(options),
        Command::Mv(ref options) => options.exec(),
    }
}


================================================
FILE: cargo-guppy/src/mv.rs
================================================
// Copyright (c) The cargo-guppy Contributors
// SPDX-License-Identifier: MIT OR Apache-2.0

use camino::{Utf8Path, Utf8PathBuf};
use clap::Parser;
use color_eyre::eyre::{Result, WrapErr, bail, eyre};
use dialoguer::Confirm;
use guppy::graph::{PackageGraph, PackageLink, PackageMetadata};
use guppy_cmdlib::CargoMetadataOptions;
use pathdiff::diff_utf8_paths;
use std::{
    collections::{BTreeMap, HashSet, btree_map::Entry},
    fmt, fs,
    io::{self, Write},
    mem,
    path::{MAIN_SEPARATOR, Path},
};
use toml_edit::{DocumentMut, Item, Table, Value};

#[derive(Debug, Parser)]
pub struct MvOptions {
    /// Source directories to move
    #[clap(name = "DIR", required = true)]
    src_dirs: Vec<Utf8PathBuf>,

    /// Destination directory to move to
    #[clap(name = "DEST")]
    dest_dir: Utf8PathBuf,

    /// Print out operations instead of performing them
    #[clap(long)]
    dry_run: bool,

    #[clap(flatten)]
    metadata_opts: CargoMetadataOptions,
}

impl MvOptions {
    pub fn exec(&self) -> Result<()> {
        // Construct a package graph.
        let command = self.metadata_opts.make_command();
        let pkg_graph = command.build_graph()?;
        let workspace_root = pkg_graph.workspace().root();

        let dest_dir = DestDir::new(&pkg_graph, &self.dest_dir)?;

        if dest_dir.is_create() && self.src_dirs.len() > 1 {
            bail!("multiple sources specified with a destination that doesn't exist");
        }

        // Each source directory maps to one or more packages.
        let mut src_moves = BTreeMap::new();
        for src_dir in &self.src_dirs {
            let src_dir = canonicalize_dir(&pkg_graph, src_dir)?;
            for (workspace_path, package_move) in moves_for(&pkg_graph, &src_dir, &dest_dir)? {
                match src_moves.entry(workspace_path) {
                    // This disallows, e.g. "cargo guppy mv foo foo/bar dest"
                    Entry::Occupied(_) => bail!(
                        "workspace path '{}' specified multiple times in source",
                        workspace_path
                    ),
                    Entry::Vacant(v) => {
                        v.insert(package_move);
                    }
                }
            }
        }

        // Build a map of edits to perform (manifest path to a list of edits).
        let mut manifest_edits: BTreeMap<&Utf8Path, Vec<_>> = BTreeMap::new();

        for package_move in src_moves.values() {
            for link in package_move.package.direct_links() {
                let (from, to) = link.endpoints();
                let old_path = if let Some(path) = to.source().workspace_path() {
                    path
                } else {
                    continue;
                };

                // If the 'to' moves as well, let the below loop deal with it.
                if src_moves.contains_key(old_path) {
                    continue;
                }

                let edit_path = diff_utf8_paths(old_path, &package_move.new_path)
                    .expect("paths are all relative so diff_paths can never return None");

                manifest_edits
                    .entry(from.manifest_path())
                    .or_default()
                    .push(ManifestEdit { link, edit_path });
            }

            for link in package_move.package.reverse_direct_links() {
                let from = link.from();
                let old_path = from
                    .source()
                    .workspace_path()
                    .expect("reverse deps of workspace packages must be in workspace");
                // If the 'from' moves as well, compute the new path based on that.
                let edit_path = if let Some(from_move) = src_moves.get(old_path) {
                    diff_utf8_paths(&package_move.new_path, &from_move.new_path)
                } else {
                    diff_utf8_paths(&package_move.new_path, old_path)
                }
                .expect("paths are all relative so diff_paths can never return None");

                manifest_edits
                    .entry(from.manifest_path())
                    .or_default()
                    .push(ManifestEdit { link, edit_path });
            }
        }

        println!("Will perform edits:");
        for (manifest_path, edits) in &manifest_edits {
            println!(
                "manifest: {}",
                diff_utf8_paths(manifest_path, workspace_root).unwrap()
            );
            for edit in edits {
                println!("  * {edit}");
            }
        }

        println!("\nMoves:");
        for (src_dir, package_move) in &src_moves {
            println!("  * move {} to {}", src_dir, package_move.new_path,);
        }

        println!();

        if self.dry_run {
            return Ok(());
        }

        let perform = Confirm::new()
            .with_prompt("Continue?")
            .show_default(true)
            .interact()?;

        if perform {
            // First perform the edits so that manifest paths are still valid.
            for (manifest_path, edits) in &manifest_edits {
                apply_edits(manifest_path, edits)?;
            }

            // Next, update the root manifest. Do this before moving directories because this relies
            // on the old directories existing.
            update_root_toml(workspace_root, &src_moves)
                .wrap_err_with(|| eyre!("error while updating root toml at {}", workspace_root))?;

            // Finally, move directories into their new spots.
            // Rely on the fact that BTreeMap is sorted so that "foo" always shows up before
            // "foo/bar".
            // TODO: this would be better modeled as a trie.
            let mut done = HashSet::new();
            for (src_dir, package_move) in &src_moves {
                if src_dir.ancestors().any(|ancestor| done.contains(&ancestor)) {
                    // If we need to move both foo and foo/bar, and foo has already been moved,
                    // skip foo/bar.
                    continue;
                }
                let abs_src = workspace_root.join(src_dir);
                let abs_dest = workspace_root.join(&package_move.new_path);
                assert!(
                    !abs_dest.exists(),
                    "expected destination {abs_dest} not to exist"
                );
                // fs::rename behaves differently on Unix and Windows if the destination exists.
                // But we don't expect it to, as the assertion above checks.
                fs::rename(abs_src, &abs_dest).wrap_err_with(|| {
                    eyre!("renaming {} to {} failed", src_dir, package_move.new_path)
                })?;
                done.insert(src_dir);
            }
        }

        Ok(())
    }
}

enum DestDir {
    Exists(Utf8PathBuf),
    Create(Utf8PathBuf),
}

impl DestDir {
    fn new(pkg_graph: &PackageGraph, dest_dir: &Utf8Path) -> Result<Self> {
        let workspace = pkg_graph.workspace();
        let workspace_root = workspace.root();

        match dest_dir.canonicalize() {
            Ok(dest_dir) => {
                if !dest_dir.is_dir() {
                    bail!("destination {} is not a directory", dest_dir.display());
                }

                // The destination directory exists.
                Ok(DestDir::Exists(
                    rel_path(&dest_dir, workspace_root)?.to_path_buf(),
                ))
            }
            Err(err) if err.kind() == io::ErrorKind::NotFound => {
                // The destination directory doesn't exist and needs to be created.
                // Canonicalize the parent, then glue the last component to it.
                let last_component = dest_dir
                    .file_name()
                    .ok_or_else(|| eyre!("destination {} cannot end with ..", dest_dir))?;
                let parent = dest_dir
                    .parent()
                    .ok_or_else(|| eyre!("destination {} cannot end with ..", dest_dir))?;
                let parent = if parent.as_os_str() == "" {
                    Utf8Path::new(".")
                } else {
                    parent
                };

                let parent = canonicalize_dir(pkg_graph, parent)?;
                Ok(DestDir::Create(parent.join(last_component)))
            }
            Err(err) => Err(err).wrap_err_with(|| eyre!("reading destination {} failed", dest_dir)),
        }
    }

    fn is_create(&self) -> bool {
        match self {
            DestDir::Create(_) => true,
            DestDir::Exists(_) => false,
        }
    }

    fn join(&self, workspace_path: &Utf8Path, src_dir: &Utf8Path) -> Result<Utf8PathBuf> {
        // Consider e.g. workspace path = foo/bar, src dir = foo, dest dir = quux.
        let new_path = match self {
            DestDir::Exists(dest_dir) => {
                // quux exists, so the new path would be quux/foo/bar, not quux/bar. So look at the
                // src dir's parent.
                let trailing = workspace_path
                    .strip_prefix(src_dir.parent().expect("src dir should have a parent"))
                    .expect("workspace path is inside src dir");
                dest_dir.join(trailing)
            }
            DestDir::Create(dest_dir) => {
                // quux does not exist, so the new path would be quux/bar.
                let trailing = workspace_path
                    .strip_prefix(src_dir)
                    .expect("workspace path is inside src dir");
                dest_dir.join(trailing)
            }
        };

        // If the new path is inside (or the same as) the source directory, it's a problem.
        if new_path.starts_with(src_dir) {
            bail!("invalid move: {} -> {}", src_dir, new_path);
        }

        Ok(new_path)
    }
}

/// Return the workspace path for a given directory (relative to cwd).
fn canonicalize_dir(pkg_graph: &PackageGraph, path: impl AsRef<Utf8Path>) -> Result<Utf8PathBuf> {
    let workspace = pkg_graph.workspace();
    let workspace_root = workspace.root();

    let path = path.as_ref();
    let canonical_path = path
        .canonicalize()
        .wrap_err_with(|| eyre!("reading path {} failed", path))?;
    if !canonical_path.is_dir() {
        bail!("path {} is not a directory", canonical_path.display());
    }

    Ok(rel_path(&canonical_path, workspace_root)?.to_path_buf())
}

fn rel_path<'a>(path: &'a Path, workspace_root: &Utf8Path) -> Result<&'a Utf8Path> {
    let rel_path = path.strip_prefix(workspace_root).wrap_err_with(|| {
        eyre!(
            "path {} not in workspace root {}",
            path.display(),
            workspace_root
        )
    })?;
    Utf8Path::from_path(rel_path)
        .ok_or_else(|| eyre!("rel path {} is invalid UTF-8", rel_path.display()))
}

fn moves_for<'g: 'a, 'a>(
    pkg_graph: &'g PackageGraph,
    src_dir: &'a Utf8Path,
    dest_dir: &'a DestDir,
) -> Result<Vec<(&'g Utf8Path, PackageMove<'g>)>> {
    // TODO: speed this up using a trie in guppy? Probably not that important.
    let workspace = pkg_graph.workspace();
    let workspace_root = workspace.root();
    // Ensure that the path refers to a package.
    let _package = workspace.member_by_path(src_dir)?;

    // Now look for all paths that start with the package.
    workspace
        .iter_by_path()
        .filter_map(move |(workspace_path, package)| {
            if workspace_path.starts_with(src_dir) {
                let pair = dest_dir.join(workspace_path, src_dir).and_then(|new_path| {
                    // Check that the new path doesn't exist already.
                    let abs_new_path = workspace_root.join(&new_path);
                    if abs_new_path.exists() {
                        bail!(
                            "attempted to move {} to {}, which already exists",
                            workspace_path,
                            new_path
                        );
                    }

                    // new_path can sometimes have a trailing slash -- remove it if it does.
                    let mut new_path = new_path.into_string();
                    if new_path.ends_with(MAIN_SEPARATOR) {
                        new_path.pop();
                    }
                    let new_path = new_path.into();

                    Ok((workspace_path, PackageMove { package, new_path }))
                });
                Some(pair)
            } else {
                None
            }
        })
        .collect()
}

#[derive(Clone, Debug)]
struct PackageMove<'g> {
    package: PackageMetadata<'g>,
    new_path: Utf8PathBuf,
}

#[derive(Clone, Debug)]
struct ManifestEdit<'g> {
    link: PackageLink<'g>,
    edit_path: Utf8PathBuf,
}

impl fmt::Display for ManifestEdit<'_> {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(
            f,
            "update {} to path {}",
            self.link.dep_name(),
            self.edit_path,
        )
    }
}

fn apply_edits(manifest_path: &Utf8Path, edits: &[ManifestEdit<'_>]) -> Result<()> {
    let mut document = read_toml(manifest_path)?;
    let table = document.as_table_mut();

    // Grab the list of target specs.
    let all_targets = match table.get("target") {
        Some(target_section) => match target_section.as_table() {
            Some(table) => table.iter().map(|(target, _)| target.to_string()).collect(),
            None => {
                bail!("in {}, [target] is not a table", manifest_path);
            }
        },
        None => {
            // There's no 'target' section in the manifest.
            Vec::new()
        }
    };

    // Search through:
    // * dependencies, build-dependencies, dev-dependencies
    // * [target.'foo'.dependencies], .build-dependencies and .dev-dependencies
    for edit in edits {
        apply_edit(table, edit)
            .wrap_err_with(|| eyre!("error while applying edits to {}", manifest_path))?;
        for target in &all_targets {
            let target_table = match &mut table["target"][target] {
                Item::Table(target_table) => target_table,
                _ => {
                    // Not a table, skip it.
                    continue;
                }
            };
            apply_edit(target_table, edit).wrap_err_with(|| {
                eyre!(
                    "error while applying edits to {}, section [target.'{}']",
                    manifest_path,
                    target
                )
            })?;
        }
    }

    fs::write(manifest_path, document.to_string())
        .wrap_err_with(|| eyre!("error while writing manifest {}", manifest_path))?;

    Ok(())
}

fn apply_edit(table: &mut Table, edit: &ManifestEdit<'_>) -> Result<()> {
    static SECTION_NAMES: &[&str] = &["dependencies", "build-dependencies", "dev-dependencies"];

    let dep_name = edit.link.dep_name();

    for &section_name in SECTION_NAMES {
        let section = &mut table[section_name];
        let section_table = match section {
            Item::None => {
                // This section is empty -- skip it.
                continue;
            }
            Item::Table(table) => table,
            Item::Value(_) | Item::ArrayOfTables(_) => {
                bail!("section [{}] is not a table", section_name);
            }
        };

        match section_table.get_mut(dep_name) {
            Some(item) => {
                let dep_table = item.as_table_like_mut().ok_or_else(|| {
                    eyre!("in section [{}], {} is not a table", section_name, dep_name)
                })?;
                // The dep table should have a path entry.
                match dep_table.get_mut("path") {
                    Some(Item::Value(value)) => {
                        replace_decorated(value, edit.edit_path.as_str());
                    }
                    _ => {
                        bail!(
                            "in section [{}], {}.path is not a string",
                            section_name,
                            dep_name
                        );
                    }
                }
            }
            None => continue,
        }
    }

    Ok(())
}

fn update_root_toml(
    workspace_root: &Utf8Path,
    src_moves: &BTreeMap<&Utf8Path, PackageMove<'_>>,
) -> Result<()> {
    let root_manifest_path = workspace_root.join("Cargo.toml");
    let mut document = read_toml(&root_manifest_path)?;

    // Fix up paths in workspace.members or workspace.default-members.
    let workspace_table = match document.as_table_mut().get_mut("workspace") {
        Some(item) => item
            .as_table_mut()
            .ok_or_else(|| eyre!("[workspace] is not a table"))?,
        None => {
            // No [workspace] section -- possibly a single-crate manifest?
            return Ok(());
        }
    };

    static TO_UPDATE: &[&str] = &["members", "default-members"];

    for to_update in TO_UPDATE {
        let members = match workspace_table.get_mut(to_update) {
            Some(item) => item
                .as_array_mut()
                .ok_or_else(|| eyre!("in [workspace], {} is not an array", to_update))?,
            None => {
                // default-members may not always exist.
                continue;
            }
        };

        for idx in 0..members.len() {
            let member = members.get(idx).expect("valid idx");
            match member.as_str() {
                Some(path) => {
                    let abs_member_dir = workspace_root.join(path);
                    // The workspace path saved in the TOML may not be in canonical form.
                    let abs_member_dir = abs_member_dir.canonicalize().wrap_err_with(|| {
                        eyre!(
                            "in [workspace] {}, error while canonicalizing path {}",
                            to_update,
                            path
                        )
                    })?;
                    // member dir is the canonical dir relative to the root.
                    let member_dir = rel_path(&abs_member_dir, workspace_root)?;

                    if let Some(package_move) = src_moves.get(member_dir) {
                        // This path was moved.
                        members.replace(idx, package_move.new_path.as_str());
                    }
                }
                None => bail!("in [workspace], {} contains non-strings", to_update),
            }
        }
    }

    let mut out = fs::File::create(&root_manifest_path)
        .wrap_err_with(|| eyre!("Error while opening {}", root_manifest_path))?;
    write!(out, "{document}")?;

    Ok(())
}

fn read_toml(manifest_path: &Utf8Path) -> Result<DocumentMut> {
    let toml = fs::read_to_string(manifest_path)
        .wrap_err_with(|| eyre!("error while reading manifest {}", manifest_path))?;
    toml.parse::<DocumentMut>()
        .wrap_err_with(|| eyre!("error while parsing manifest {}", manifest_path))
}

/// Replace the value while retaining the decor.
fn replace_decorated(dest: &mut Value, new_value: impl Into<Value>) -> Value {
    let decor = dest.decor();
    let mut new_value = new_value.into();
    // Copy over the decor from dest into new_value.
    let new_decor = new_value.decor_mut();
    if let Some(prefix) = decor.prefix() {
        new_decor.set_prefix(prefix.clone());
    }
    if let Some(suffix) = decor.suffix() {
        new_decor.set_suffix(suffix.clone());
    }

    mem::replace(dest, new_value)
}


================================================
FILE: clippy.toml
================================================
disallowed-methods = [
    # use ahash everywhere instead
    "std::collections::hash::map::HashMap::new",
    "std::collections::hash::map::HashMap::with_capacity",
]


================================================
FILE: fixtures/Cargo.toml
================================================
[package]
name = "fixtures"
version = "0.1.0"
authors = ["Rain <rain1@fb.com>"]
publish = false
edition = "2024"

[dependencies]
ahash.workspace = true
camino = "1.2.1"
guppy = { path = "../guppy" }
once_cell = "1.20.3"
pathdiff = "0.2.3"
pretty_assertions = "1.4.1"
guppy-workspace-hack.workspace = true


================================================
FILE: fixtures/README.md
================================================
# Fixtures for cargo-guppy

This directory contains interesting test corpuses used within the cargo-guppy codebase.

The fixtures are organized into several folders.

## `cargo metadata` output

* `determinator-paths`: determinator path matching across platforms.
* `small`: relatively simple examples that cover basic and some edge case functionality
* `large`: complex examples pulled from real-world Rust repositories, that test a variety of edge cases
* `invalid`: examples that are [*representable*](https://oleb.net/blog/2018/03/making-illegal-states-unrepresentable/)
  as cargo metadata (i.e. they are valid JSON and follow the general schema) but are *invalid* in some way; `cargo
  metadata` should never be able to generate these
* `workspace`: real workspaces, used for comparison testing with Cargo


================================================
FILE: fixtures/determinator-paths/README.md
================================================
# determinator paths fixtures

This fixture is used to test that path matching works correctly across platforms.

* `git-diff.out`: The output of `git diff -z --name-only f9ddae14671073f9fe847f8c6190de596f87a119^ f9ddae14671073f9fe847f8c6190de596f87a119`, identical on Windows and Linux.
* `guppy-win.json`: `cargo metadata` output on Windows.
* `guppy-linux.json`: `cargo metadata` output on Linux.


================================================
FILE: fixtures/determinator-paths/guppy-linux.json
================================================
{"packages":[{"name":"adler","version":"0.2.3","id":"adler 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)","license":"0BSD OR MIT OR Apache-2.0","license_file":null,"description":"A simple clean-room implementation of the Adler-32 checksum","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"compiler_builtins","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.1.2","kind":null,"rename":null,"optional":true,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"rustc-std-workspace-core","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.0","kind":null,"rename":"core","optional":true,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"criterion","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3.2","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"adler","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/adler-0.2.3/src/lib.rs","edition":"2015","doctest":true,"test":true},{"kind":["bench"],"crate_types":["bin"],"name":"bench","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/adler-0.2.3/benches/bench.rs","edition":"2015","doctest":false,"test":false}],"features":{"default":["std"],"rustc-dep-of-std":["core","compiler_builtins"],"std":[]},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/adler-0.2.3/Cargo.toml","metadata":{"docs":{"rs":{"rustdoc-args":["--cfg docsrs"]}},"release":{"no-dev-version":true,"pre-release-commit-message":"Release {{version}}","tag-message":"{{version}}","pre-release-replacements":[{"file":"CHANGELOG.md","replace":"## Unreleased\n\nNo changes.\n\n## [{{version}} - {{date}}](https://github.com/jonas-schievink/adler/releases/tag/v{{version}})\n","search":"## Unreleased\n"},{"file":"README.md","replace":"adler = \"{{version}}\"","search":"adler = \"[a-z0-9\\\\.-]+\""},{"file":"src/lib.rs","replace":"https://docs.rs/adler/{{version}}","search":"https://docs.rs/adler/[a-z0-9\\.-]+"}]}},"publish":null,"authors":["Jonas Schievink <jonasschievink@gmail.com>"],"categories":["algorithms"],"keywords":["checksum","integrity","hash","adler32"],"readme":"README.md","repository":"https://github.com/jonas-schievink/adler.git","homepage":null,"documentation":"https://docs.rs/adler/","edition":"2015","links":null},{"name":"aho-corasick","version":"0.7.15","id":"aho-corasick 0.7.15 (registry+https://github.com/rust-lang/crates.io-index)","license":"Unlicense/MIT","license_file":null,"description":"Fast multiple substring searching.","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"memchr","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^2.2.0","kind":null,"rename":null,"optional":false,"uses_default_features":false,"features":[],"target":null,"registry":null},{"name":"doc-comment","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3.1","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"aho_corasick","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/aho-corasick-0.7.15/src/lib.rs","edition":"2015","doctest":true,"test":true}],"features":{"default":["std"],"std":["memchr/use_std"]},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/aho-corasick-0.7.15/Cargo.toml","metadata":null,"publish":null,"authors":["Andrew Gallant <jamslam@gmail.com>"],"categories":["text-processing"],"keywords":["string","search","text","aho","multi"],"readme":"README.md","repository":"https://github.com/BurntSushi/aho-corasick","homepage":"https://github.com/BurntSushi/aho-corasick","documentation":null,"edition":"2015","links":null},{"name":"ansi_term","version":"0.11.0","id":"ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)","license":"MIT","license_file":null,"description":"Library for ANSI terminal colours and styles (bold, underline)","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"winapi","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3.4","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":["errhandlingapi","consoleapi","processenv"],"target":"cfg(target_os = \"windows\")","registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"ansi_term","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/ansi_term-0.11.0/src/lib.rs","edition":"2015","doctest":true,"test":true},{"kind":["example"],"crate_types":["bin"],"name":"colours","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/ansi_term-0.11.0/examples/colours.rs","edition":"2015","doctest":false,"test":false}],"features":{},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/ansi_term-0.11.0/Cargo.toml","metadata":null,"publish":null,"authors":["ogham@bsago.me","Ryan Scheel (Havvy) <ryan.havvy@gmail.com>","Josh Triplett <josh@joshtriplett.org>"],"categories":[],"keywords":[],"readme":"README.md","repository":null,"homepage":"https://github.com/ogham/rust-ansi-term","documentation":"https://docs.rs/ansi_term","edition":"2015","links":null},{"name":"ansi_term","version":"0.12.1","id":"ansi_term 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)","license":"MIT","license_file":null,"description":"Library for ANSI terminal colours and styles (bold, underline)","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"serde","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.90","kind":null,"rename":null,"optional":true,"uses_default_features":true,"features":["derive"],"target":null,"registry":null},{"name":"doc-comment","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"regex","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.1.9","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"serde_json","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.39","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"winapi","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3.4","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":["consoleapi","errhandlingapi","fileapi","handleapi","processenv"],"target":"cfg(target_os = \"windows\")","registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"ansi_term","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/ansi_term-0.12.1/src/lib.rs","edition":"2015","doctest":true,"test":true},{"kind":["example"],"crate_types":["bin"],"name":"basic_colours","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/ansi_term-0.12.1/examples/basic_colours.rs","edition":"2015","doctest":false,"test":false},{"kind":["example"],"crate_types":["bin"],"name":"256_colours","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/ansi_term-0.12.1/examples/256_colours.rs","edition":"2015","doctest":false,"test":false},{"kind":["example"],"crate_types":["bin"],"name":"rgb_colours","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/ansi_term-0.12.1/examples/rgb_colours.rs","edition":"2015","doctest":false,"test":false}],"features":{"derive_serde_style":["serde"]},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/ansi_term-0.12.1/Cargo.toml","metadata":null,"publish":null,"authors":["ogham@bsago.me","Ryan Scheel (Havvy) <ryan.havvy@gmail.com>","Josh Triplett <josh@joshtriplett.org>"],"categories":[],"keywords":[],"readme":"README.md","repository":"https://github.com/ogham/rust-ansi-term","homepage":"https://github.com/ogham/rust-ansi-term","documentation":"https://docs.rs/ansi_term","edition":"2015","links":null},{"name":"anyhow","version":"1.0.38","id":"anyhow 1.0.38 (registry+https://github.com/rust-lang/crates.io-index)","license":"MIT OR Apache-2.0","license_file":null,"description":"Flexible concrete Error type built on std::error::Error","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"futures","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3","kind":"dev","rename":null,"optional":false,"uses_default_features":false,"features":[],"target":null,"registry":null},{"name":"rustversion","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"syn","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":["full"],"target":null,"registry":null},{"name":"thiserror","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"trybuild","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.19","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":["diff"],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"anyhow","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/anyhow-1.0.38/src/lib.rs","edition":"2018","doctest":true,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"test_fmt","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/anyhow-1.0.38/tests/test_fmt.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"test_macros","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/anyhow-1.0.38/tests/test_macros.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"test_autotrait","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/anyhow-1.0.38/tests/test_autotrait.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"test_chain","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/anyhow-1.0.38/tests/test_chain.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"test_ffi","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/anyhow-1.0.38/tests/test_ffi.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"test_context","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/anyhow-1.0.38/tests/test_context.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"compiletest","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/anyhow-1.0.38/tests/compiletest.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"test_downcast","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/anyhow-1.0.38/tests/test_downcast.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"test_convert","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/anyhow-1.0.38/tests/test_convert.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"test_source","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/anyhow-1.0.38/tests/test_source.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"test_repr","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/anyhow-1.0.38/tests/test_repr.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"test_boxed","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/anyhow-1.0.38/tests/test_boxed.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"test_backtrace","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/anyhow-1.0.38/tests/test_backtrace.rs","edition":"2018","doctest":false,"test":true},{"kind":["custom-build"],"crate_types":["bin"],"name":"build-script-build","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/anyhow-1.0.38/build.rs","edition":"2018","doctest":false,"test":false}],"features":{"default":["std"],"std":[]},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/anyhow-1.0.38/Cargo.toml","metadata":{"docs":{"rs":{"rustdoc-args":["--cfg","doc_cfg"],"targets":["x86_64-unknown-linux-gnu"]}}},"publish":null,"authors":["David Tolnay <dtolnay@gmail.com>"],"categories":["rust-patterns"],"keywords":[],"readme":"README.md","repository":"https://github.com/dtolnay/anyhow","homepage":null,"documentation":"https://docs.rs/anyhow","edition":"2018","links":null},{"name":"ascii","version":"0.9.3","id":"ascii 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)","license":"Apache-2.0 / MIT","license_file":null,"description":"ASCII-only equivalents to `char`, `str` and `String`.","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"quickcheck","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.6","kind":null,"rename":null,"optional":true,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"serde","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.25","kind":null,"rename":null,"optional":true,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"serde_test","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0","kind":null,"rename":null,"optional":true,"uses_default_features":true,"features":[],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"ascii","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/ascii-0.9.3/src/lib.rs","edition":"2015","doctest":true,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"tests","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/ascii-0.9.3/tests.rs","edition":"2015","doctest":false,"test":true}],"features":{"default":["std"],"std":[]},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/ascii-0.9.3/Cargo.toml","metadata":null,"publish":null,"authors":["Thomas Bahn <thomas@thomas-bahn.net>","Torbjørn Birch Moltu <t.b.moltu@lyse.net>","Simon Sapin <simon.sapin@exyr.org>"],"categories":[],"keywords":[],"readme":"README.md","repository":"https://github.com/tomprogrammer/rust-ascii","homepage":null,"documentation":"https://docs.rs/ascii","edition":"2015","links":null},{"name":"assert_matches","version":"1.4.0","id":"assert_matches 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)","license":"MIT/Apache-2.0","license_file":null,"description":"Asserts that a value matches a pattern","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"assert_matches","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/assert_matches-1.4.0/src/lib.rs","edition":"2015","doctest":true,"test":true}],"features":{},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/assert_matches-1.4.0/Cargo.toml","metadata":null,"publish":null,"authors":["Murarth <murarth@gmail.com>"],"categories":["no-std"],"keywords":["assert","match","pattern"],"readme":"README.md","repository":"https://github.com/murarth/assert_matches","homepage":"https://github.com/murarth/assert_matches","documentation":"https://docs.rs/assert_matches/","edition":"2015","links":null},{"name":"atomicwrites","version":"0.2.5","id":"atomicwrites 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)","license":"MIT","license_file":null,"description":"Atomic file-writes.","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"tempdir","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"nix","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.14.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":"cfg(unix)","registry":null},{"name":"winapi","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":["winbase"],"target":"cfg(windows)","registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"atomicwrites","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/atomicwrites-0.2.5/src/lib.rs","edition":"2015","doctest":true,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"lib","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/atomicwrites-0.2.5/tests/lib.rs","edition":"2015","doctest":false,"test":true}],"features":{},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/atomicwrites-0.2.5/Cargo.toml","metadata":null,"publish":null,"authors":["Markus Unterwaditzer <markus@unterwaditzer.net>"],"categories":[],"keywords":["filesystem","posix"],"readme":"README.md","repository":"https://github.com/untitaker/rust-atomicwrites","homepage":"https://github.com/untitaker/rust-atomicwrites","documentation":"https://docs.rs/crate/atomicwrites","edition":"2015","links":null},{"name":"atty","version":"0.2.14","id":"atty 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)","license":"MIT","license_file":null,"description":"A simple interface for querying atty","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"hermit-abi","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.1.6","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":"cfg(target_os = \"hermit\")","registry":null},{"name":"libc","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.2","kind":null,"rename":null,"optional":false,"uses_default_features":false,"features":[],"target":"cfg(unix)","registry":null},{"name":"winapi","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":["consoleapi","processenv","minwinbase","minwindef","winbase"],"target":"cfg(windows)","registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"atty","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/atty-0.2.14/src/lib.rs","edition":"2015","doctest":true,"test":true},{"kind":["example"],"crate_types":["bin"],"name":"atty","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/atty-0.2.14/examples/atty.rs","edition":"2015","doctest":false,"test":false}],"features":{},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/atty-0.2.14/Cargo.toml","metadata":null,"publish":null,"authors":["softprops <d.tangren@gmail.com>"],"categories":[],"keywords":["terminal","tty","isatty"],"readme":"README.md","repository":"https://github.com/softprops/atty","homepage":"https://github.com/softprops/atty","documentation":"http://softprops.github.io/atty","edition":"2015","links":null},{"name":"autocfg","version":"1.0.1","id":"autocfg 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)","license":"Apache-2.0 OR MIT","license_file":null,"description":"Automatic cfg for Rust compiler features","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"autocfg","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/autocfg-1.0.1/src/lib.rs","edition":"2015","doctest":true,"test":true},{"kind":["example"],"crate_types":["bin"],"name":"versions","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/autocfg-1.0.1/examples/versions.rs","edition":"2015","doctest":false,"test":false},{"kind":["example"],"crate_types":["bin"],"name":"traits","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/autocfg-1.0.1/examples/traits.rs","edition":"2015","doctest":false,"test":false},{"kind":["example"],"crate_types":["bin"],"name":"paths","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/autocfg-1.0.1/examples/paths.rs","edition":"2015","doctest":false,"test":false},{"kind":["example"],"crate_types":["bin"],"name":"integers","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/autocfg-1.0.1/examples/integers.rs","edition":"2015","doctest":false,"test":false},{"kind":["test"],"crate_types":["bin"],"name":"rustflags","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/autocfg-1.0.1/tests/rustflags.rs","edition":"2015","doctest":false,"test":true}],"features":{},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/autocfg-1.0.1/Cargo.toml","metadata":null,"publish":null,"authors":["Josh Stone <cuviper@gmail.com>"],"categories":["development-tools::build-utils"],"keywords":["rustc","build","autoconf"],"readme":"README.md","repository":"https://github.com/cuviper/autocfg","homepage":null,"documentation":null,"edition":"2015","links":null},{"name":"bit-set","version":"0.5.2","id":"bit-set 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)","license":"MIT/Apache-2.0","license_file":null,"description":"A set of bits","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"bit-vec","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.6.1","kind":null,"rename":null,"optional":false,"uses_default_features":false,"features":[],"target":null,"registry":null},{"name":"rand","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"bit-set","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bit-set-0.5.2/src/lib.rs","edition":"2015","doctest":true,"test":true}],"features":{"default":["std"],"std":["bit-vec/std"]},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bit-set-0.5.2/Cargo.toml","metadata":null,"publish":null,"authors":["Alexis Beingessner <a.beingessner@gmail.com>"],"categories":[],"keywords":["data-structures","bitset"],"readme":"README.md","repository":"https://github.com/contain-rs/bit-set","homepage":"https://github.com/contain-rs/bit-set","documentation":"https://contain-rs.github.io/bit-set/bit_set","edition":"2015","links":null},{"name":"bit-vec","version":"0.6.3","id":"bit-vec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)","license":"MIT/Apache-2.0","license_file":null,"description":"A vector of bits","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"serde","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0","kind":null,"rename":null,"optional":true,"uses_default_features":false,"features":["derive"],"target":null,"registry":null},{"name":"rand","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.7","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"rand_xorshift","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.2","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"serde_json","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"bit-vec","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bit-vec-0.6.3/src/lib.rs","edition":"2015","doctest":true,"test":true},{"kind":["bench"],"crate_types":["bin"],"name":"bench","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bit-vec-0.6.3/benches/bench.rs","edition":"2015","doctest":false,"test":false}],"features":{"default":["std"],"serde_no_std":["serde/alloc"],"serde_std":["std","serde/std"],"std":[]},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bit-vec-0.6.3/Cargo.toml","metadata":null,"publish":null,"authors":["Alexis Beingessner <a.beingessner@gmail.com>"],"categories":[],"keywords":["data-structures","bitvec","bitmask","bitmap","bit"],"readme":"README.md","repository":"https://github.com/contain-rs/bit-vec","homepage":"https://github.com/contain-rs/bit-vec","documentation":"https://contain-rs.github.io/bit-vec/bit_vec","edition":"2015","links":null},{"name":"bitflags","version":"1.2.1","id":"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)","license":"MIT/Apache-2.0","license_file":null,"description":"A macro to generate structures which behave like bitflags.\n","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"bitflags","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bitflags-1.2.1/src/lib.rs","edition":"2015","doctest":true,"test":true},{"kind":["custom-build"],"crate_types":["bin"],"name":"build-script-build","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bitflags-1.2.1/build.rs","edition":"2015","doctest":false,"test":false}],"features":{"default":[],"example_generated":[]},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bitflags-1.2.1/Cargo.toml","metadata":{"docs":{"rs":{"features":["example_generated"]}}},"publish":null,"authors":["The Rust Project Developers"],"categories":["no-std"],"keywords":["bit","bitmask","bitflags","flags"],"readme":"README.md","repository":"https://github.com/bitflags/bitflags","homepage":"https://github.com/bitflags/bitflags","documentation":"https://docs.rs/bitflags","edition":"2015","links":null},{"name":"bitmaps","version":"2.1.0","id":"bitmaps 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)","license":"MPL-2.0+","license_file":null,"description":"Fixed size boolean arrays","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"typenum","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.10.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"proptest","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.9.1","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"proptest-derive","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.1.0","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"bitmaps","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bitmaps-2.1.0/src/lib.rs","edition":"2018","doctest":true,"test":true}],"features":{"default":["std"],"std":[]},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bitmaps-2.1.0/Cargo.toml","metadata":null,"publish":null,"authors":["Bodil Stokke <bodil@bodil.org>"],"categories":["data-structures"],"keywords":[],"readme":"./README.md","repository":"https://github.com/bodil/bitmaps","homepage":null,"documentation":"http://docs.rs/bitmaps","edition":"2018","links":null},{"name":"bstr","version":"0.2.14","id":"bstr 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)","license":"MIT OR Apache-2.0","license_file":null,"description":"A string type that is not required to be valid UTF-8.","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"lazy_static","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.2","kind":null,"rename":null,"optional":true,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"memchr","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^2.1.2","kind":null,"rename":null,"optional":false,"uses_default_features":false,"features":[],"target":null,"registry":null},{"name":"regex-automata","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.1.5","kind":null,"rename":null,"optional":true,"uses_default_features":false,"features":[],"target":null,"registry":null},{"name":"serde","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.85","kind":null,"rename":null,"optional":true,"uses_default_features":false,"features":[],"target":null,"registry":null},{"name":"quickcheck","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.8.1","kind":"dev","rename":null,"optional":false,"uses_default_features":false,"features":[],"target":null,"registry":null},{"name":"ucd-parse","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.1.3","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"unicode-segmentation","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.2.1","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"bstr","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bstr-0.2.14/src/lib.rs","edition":"2015","doctest":true,"test":true},{"kind":["example"],"crate_types":["bin"],"name":"lines-std","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bstr-0.2.14/examples/lines-std.rs","edition":"2015","doctest":false,"test":false},{"kind":["example"],"crate_types":["bin"],"name":"lines","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bstr-0.2.14/examples/lines.rs","edition":"2015","doctest":false,"test":false},{"kind":["example"],"crate_types":["bin"],"name":"uppercase","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bstr-0.2.14/examples/uppercase.rs","edition":"2015","doctest":false,"test":false},{"kind":["example"],"crate_types":["bin"],"name":"words","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bstr-0.2.14/examples/words.rs","edition":"2015","doctest":false,"test":false},{"kind":["example"],"crate_types":["bin"],"name":"words-std","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bstr-0.2.14/examples/words-std.rs","edition":"2015","doctest":false,"test":false},{"kind":["example"],"crate_types":["bin"],"name":"graphemes","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bstr-0.2.14/examples/graphemes.rs","edition":"2015","doctest":false,"test":false},{"kind":["example"],"crate_types":["bin"],"name":"uppercase-std","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bstr-0.2.14/examples/uppercase-std.rs","edition":"2015","doctest":false,"test":false},{"kind":["example"],"crate_types":["bin"],"name":"graphemes-std","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bstr-0.2.14/examples/graphemes-std.rs","edition":"2015","doctest":false,"test":false}],"features":{"default":["std","unicode"],"serde1":["std","serde1-nostd","serde/std"],"serde1-nostd":["serde"],"std":["memchr/use_std"],"unicode":["lazy_static","regex-automata"]},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bstr-0.2.14/Cargo.toml","metadata":null,"publish":null,"authors":["Andrew Gallant <jamslam@gmail.com>"],"categories":["text-processing","encoding"],"keywords":["string","str","byte","bytes","text"],"readme":"README.md","repository":"https://github.com/BurntSushi/bstr","homepage":"https://github.com/BurntSushi/bstr","documentation":"https://docs.rs/bstr","edition":"2015","links":null},{"name":"bumpalo","version":"3.4.0","id":"bumpalo 3.4.0 (registry+https://github.com/rust-lang/crates.io-index)","license":"MIT/Apache-2.0","license_file":null,"description":"A fast bump allocation arena for Rust.","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"criterion","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3.0","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"quickcheck","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.9.0","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"rand","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.7","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"bumpalo","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bumpalo-3.4.0/src/lib.rs","edition":"2018","doctest":true,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"try_alloc","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bumpalo-3.4.0/tests/try_alloc.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"quickchecks","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bumpalo-3.4.0/tests/quickchecks.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"alloc_fill","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bumpalo-3.4.0/tests/alloc_fill.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"alloc_with","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bumpalo-3.4.0/tests/alloc_with.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"string","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bumpalo-3.4.0/tests/string.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"readme_up_to_date","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bumpalo-3.4.0/tests/readme_up_to_date.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"tests","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bumpalo-3.4.0/tests/tests.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"vec","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bumpalo-3.4.0/tests/vec.rs","edition":"2018","doctest":false,"test":true},{"kind":["bench"],"crate_types":["bin"],"name":"benches","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bumpalo-3.4.0/benches/benches.rs","edition":"2018","required-features":["collections"],"doctest":false,"test":false}],"features":{"boxed":[],"collections":[],"default":[]},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bumpalo-3.4.0/Cargo.toml","metadata":{"docs":{"rs":{"all-features":true}}},"publish":null,"authors":["Nick Fitzgerald <fitzgen@gmail.com>"],"categories":["memory-management","rust-patterns","no-std"],"keywords":[],"readme":"./README.md","repository":"https://github.com/fitzgen/bumpalo","homepage":null,"documentation":"https://docs.rs/bumpalo","edition":"2018","links":null},{"name":"byteorder","version":"1.4.2","id":"byteorder 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)","license":"Unlicense OR MIT","license_file":null,"description":"Library for reading/writing numbers in big-endian and little-endian.","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"quickcheck","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.9.2","kind":"dev","rename":null,"optional":false,"uses_default_features":false,"features":[],"target":null,"registry":null},{"name":"rand","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.7","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"byteorder","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/byteorder-1.4.2/src/lib.rs","edition":"2018","doctest":true,"test":true},{"kind":["bench"],"crate_types":["bin"],"name":"bench","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/byteorder-1.4.2/benches/bench.rs","edition":"2018","doctest":false,"test":false}],"features":{"default":["std"],"i128":[],"std":[]},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/byteorder-1.4.2/Cargo.toml","metadata":null,"publish":null,"authors":["Andrew Gallant <jamslam@gmail.com>"],"categories":["encoding","parsing","no-std"],"keywords":["byte","endian","big-endian","little-endian","binary"],"readme":"README.md","repository":"https://github.com/BurntSushi/byteorder","homepage":"https://github.com/BurntSushi/byteorder","documentation":"https://docs.rs/byteorder","edition":"2018","links":null},{"name":"bytesize","version":"1.0.1","id":"bytesize 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)","license":"Apache-2.0","license_file":null,"description":"an utility for human-readable bytes representations","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"serde","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0","kind":null,"rename":null,"optional":true,"uses_default_features":true,"features":["derive"],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"bytesize","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bytesize-1.0.1/src/lib.rs","edition":"2015","doctest":true,"test":true}],"features":{},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/bytesize-1.0.1/Cargo.toml","metadata":null,"publish":null,"authors":["Hyunsik Choi <hyunsik.choi@gmail.com>"],"categories":[],"keywords":["byte","byte-size","utility","human-readable","format"],"readme":"README.md","repository":"https://github.com/hyunsik/bytesize/","homepage":"https://github.com/hyunsik/bytesize/","documentation":"https://docs.rs/bytesize/","edition":"2015","links":null},{"name":"cargo","version":"0.52.0","id":"cargo 0.52.0 (git+https://github.com/rust-lang/cargo.git?branch=master#3875bbbba4c2c47bb518171066c8d643c0edcbc8)","license":"MIT OR Apache-2.0","license_file":null,"description":"Cargo, a package manager for Rust.\n","source":"git+https://github.com/rust-lang/cargo.git?branch=master#3875bbbba4c2c47bb518171066c8d643c0edcbc8","dependencies":[{"name":"anyhow","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"atty","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.2","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"bytesize","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"cargo-platform","source":"git+https://github.com/rust-lang/cargo.git?branch=master#3875bbbba4c2c47bb518171066c8d643c0edcbc8","req":"^0.1.1","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"clap","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^2.31.2","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"crates-io","source":"git+https://github.com/rust-lang/cargo.git?branch=master#3875bbbba4c2c47bb518171066c8d643c0edcbc8","req":"^0.33.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"crossbeam-utils","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.8","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"crypto-hash","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3.1","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"curl","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.4.23","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":["http2"],"target":null,"registry":null},{"name":"curl-sys","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.4.22","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"env_logger","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.8.1","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"filetime","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.2.9","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"flate2","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.3","kind":null,"rename":null,"optional":false,"uses_default_features":false,"features":["zlib"],"target":null,"registry":null},{"name":"git2","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.13.16","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"git2-curl","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.14.1","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"glob","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"hex","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.4","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"home","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.5","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"humantime","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^2.0.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"ignore","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.4.7","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"im-rc","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^15.0.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"jobserver","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.1.21","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"lazy_static","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.2.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"lazycell","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.2.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"libc","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.2","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"libgit2-sys","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.12.18","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"log","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.4.6","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"memchr","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^2.1.3","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"num_cpus","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"opener","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.4","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"openssl","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.10.11","kind":null,"rename":null,"optional":true,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"percent-encoding","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^2.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"pretty_env_logger","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.4","kind":null,"rename":null,"optional":true,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"rustc-workspace-hack","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"rustfix","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.5.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"same-file","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"semver","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.10","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":["serde"],"target":null,"registry":null},{"name":"serde","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.82","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":["derive"],"target":null,"registry":null},{"name":"serde_ignored","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.1.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"serde_json","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.30","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":["raw_value"],"target":null,"registry":null},{"name":"shell-escape","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.1.4","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"strip-ansi-escapes","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.1.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"tar","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.4.26","kind":null,"rename":null,"optional":false,"uses_default_features":false,"features":[],"target":null,"registry":null},{"name":"tempfile","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^3.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"termcolor","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.1","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"toml","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.5.7","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"unicode-width","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.1.5","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"unicode-xid","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.2.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"url","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^2.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"walkdir","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^2.2","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"cargo-test-macro","source":"git+https://github.com/rust-lang/cargo.git?branch=master#3875bbbba4c2c47bb518171066c8d643c0edcbc8","req":"*","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"cargo-test-support","source":"git+https://github.com/rust-lang/cargo.git?branch=master#3875bbbba4c2c47bb518171066c8d643c0edcbc8","req":"*","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"flate2","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.3","kind":"build","rename":null,"optional":false,"uses_default_features":false,"features":["zlib"],"target":null,"registry":null},{"name":"tar","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.4.26","kind":"build","rename":null,"optional":false,"uses_default_features":false,"features":[],"target":null,"registry":null},{"name":"core-foundation","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.9.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":["mac_os_10_7_support"],"target":"cfg(target_os = \"macos\")","registry":null},{"name":"fwdansi","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.1.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":"cfg(windows)","registry":null},{"name":"miow","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3.6","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":"cfg(windows)","registry":null},{"name":"winapi","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":["basetsd","handleapi","jobapi","jobapi2","memoryapi","minwindef","ntdef","ntstatus","processenv","processthreadsapi","psapi","synchapi","winerror","winbase","wincon","winnt"],"target":"cfg(windows)","registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"cargo","src_path":"/home/fakeuser/.cargo/git/checkouts/cargo-e7ff1db891893a9e/3875bbb/src/cargo/lib.rs","edition":"2018","doctest":true,"test":true},{"kind":["bin"],"crate_types":["bin"],"name":"cargo","src_path":"/home/fakeuser/.cargo/git/checkouts/cargo-e7ff1db891893a9e/3875bbb/src/bin/cargo/main.rs","edition":"2018","doctest":false,"test":false},{"kind":["test"],"crate_types":["bin"],"name":"testsuite","src_path":"/home/fakeuser/.cargo/git/checkouts/cargo-e7ff1db891893a9e/3875bbb/tests/testsuite/main.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"build-std","src_path":"/home/fakeuser/.cargo/git/checkouts/cargo-e7ff1db891893a9e/3875bbb/tests/build-std/main.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"internal","src_path":"/home/fakeuser/.cargo/git/checkouts/cargo-e7ff1db891893a9e/3875bbb/tests/internal.rs","edition":"2018","doctest":false,"test":true},{"kind":["custom-build"],"crate_types":["bin"],"name":"build-script-build","src_path":"/home/fakeuser/.cargo/git/checkouts/cargo-e7ff1db891893a9e/3875bbb/build.rs","edition":"2018","doctest":false,"test":false}],"features":{"deny-warnings":[],"pretty-env-logger":["pretty_env_logger"],"vendored-openssl":["openssl/vendored"]},"manifest_path":"/home/fakeuser/.cargo/git/checkouts/cargo-e7ff1db891893a9e/3875bbb/Cargo.toml","metadata":null,"publish":null,"authors":["Yehuda Katz <wycats@gmail.com>","Carl Lerche <me@carllerche.com>","Alex Crichton <alex@alexcrichton.com>"],"categories":[],"keywords":[],"readme":"README.md","repository":"https://github.com/rust-lang/cargo","homepage":"https://crates.io","documentation":"https://docs.rs/cargo","edition":"2018","links":null},{"name":"cargo-compare","version":"0.1.0","id":"cargo-compare 0.1.0 (path+file:///home/fakeuser/dev/cargo-guppy/internal-tools/cargo-compare)","license":null,"license_file":null,"description":null,"source":null,"dependencies":[{"name":"anyhow","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.38","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"cargo","source":"git+https://github.com/rust-lang/cargo.git?branch=master","req":"*","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"diffus","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.9.1","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"either","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.6.1","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"guppy","source":null,"req":"*","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"guppy-cmdlib","source":null,"req":"*","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":["proptest010"],"target":null,"registry":null},{"name":"itertools","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.10.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"once_cell","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.5.2","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"proptest","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.10.1","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"structopt","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3.21","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"tempfile","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^3.2.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"cargo-compare","src_path":"/home/fakeuser/dev/cargo-guppy/internal-tools/cargo-compare/src/lib.rs","edition":"2018","doctest":true,"test":true},{"kind":["bin"],"crate_types":["bin"],"name":"cargo-compare","src_path":"/home/fakeuser/dev/cargo-guppy/internal-tools/cargo-compare/src/main.rs","edition":"2018","doctest":false,"test":true}],"features":{},"manifest_path":"/home/fakeuser/dev/cargo-guppy/internal-tools/cargo-compare/Cargo.toml","metadata":null,"publish":null,"authors":["Rain <rain1@fb.com>"],"categories":[],"keywords":[],"readme":null,"repository":null,"homepage":null,"documentation":null,"edition":"2018","links":null},{"name":"cargo-guppy","version":"0.1.0","id":"cargo-guppy 0.1.0 (path+file:///home/fakeuser/dev/cargo-guppy/cargo-guppy)","license":"MIT OR Apache-2.0","license_file":null,"description":null,"source":null,"dependencies":[{"name":"anyhow","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.38","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"clap","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^2.33.3","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"dialoguer","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.7.1","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"guppy","source":null,"req":"^0.7.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":["summaries"],"target":null,"registry":null},{"name":"guppy-cmdlib","source":null,"req":"*","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"itertools","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.10.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"pathdiff","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.2.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"serde","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.123","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":["derive"],"target":null,"registry":null},{"name":"serde_json","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.61","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"structopt","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3.21","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"toml_edit","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.2.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"cargo-guppy","src_path":"/home/fakeuser/dev/cargo-guppy/cargo-guppy/src/lib.rs","edition":"2018","doctest":true,"test":true},{"kind":["bin"],"crate_types":["bin"],"name":"cargo-guppy","src_path":"/home/fakeuser/dev/cargo-guppy/cargo-guppy/src/main.rs","edition":"2018","doctest":false,"test":true}],"features":{},"manifest_path":"/home/fakeuser/dev/cargo-guppy/cargo-guppy/Cargo.toml","metadata":null,"publish":null,"authors":["Rain <rain1@fb.com>","Brandon Williams <bmwill@fb.com>"],"categories":[],"keywords":[],"readme":"README.md","repository":null,"homepage":null,"documentation":null,"edition":"2018","links":null},{"name":"cargo-platform","version":"0.1.1","id":"cargo-platform 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)","license":"MIT OR Apache-2.0","license_file":null,"description":"Cargo's representation of a target platform.","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"serde","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.82","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":["derive"],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"cargo-platform","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cargo-platform-0.1.1/src/lib.rs","edition":"2018","doctest":true,"test":true},{"kind":["example"],"crate_types":["bin"],"name":"matches","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cargo-platform-0.1.1/examples/matches.rs","edition":"2018","doctest":false,"test":false},{"kind":["test"],"crate_types":["bin"],"name":"test_cfg","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cargo-platform-0.1.1/tests/test_cfg.rs","edition":"2018","doctest":false,"test":true}],"features":{},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cargo-platform-0.1.1/Cargo.toml","metadata":null,"publish":null,"authors":["The Cargo Project Developers"],"categories":[],"keywords":[],"readme":null,"repository":"https://github.com/rust-lang/cargo","homepage":"https://github.com/rust-lang/cargo","documentation":"https://docs.rs/cargo-platform","edition":"2018","links":null},{"name":"cargo-platform","version":"0.1.1","id":"cargo-platform 0.1.1 (git+https://github.com/rust-lang/cargo.git?branch=master#3875bbbba4c2c47bb518171066c8d643c0edcbc8)","license":"MIT OR Apache-2.0","license_file":null,"description":"Cargo's representation of a target platform.","source":"git+https://github.com/rust-lang/cargo.git?branch=master#3875bbbba4c2c47bb518171066c8d643c0edcbc8","dependencies":[{"name":"serde","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.82","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":["derive"],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"cargo-platform","src_path":"/home/fakeuser/.cargo/git/checkouts/cargo-e7ff1db891893a9e/3875bbb/crates/cargo-platform/src/lib.rs","edition":"2018","doctest":true,"test":true},{"kind":["example"],"crate_types":["bin"],"name":"matches","src_path":"/home/fakeuser/.cargo/git/checkouts/cargo-e7ff1db891893a9e/3875bbb/crates/cargo-platform/examples/matches.rs","edition":"2018","doctest":false,"test":false},{"kind":["test"],"crate_types":["bin"],"name":"test_cfg","src_path":"/home/fakeuser/.cargo/git/checkouts/cargo-e7ff1db891893a9e/3875bbb/crates/cargo-platform/tests/test_cfg.rs","edition":"2018","doctest":false,"test":true}],"features":{},"manifest_path":"/home/fakeuser/.cargo/git/checkouts/cargo-e7ff1db891893a9e/3875bbb/crates/cargo-platform/Cargo.toml","metadata":null,"publish":null,"authors":["The Cargo Project Developers"],"categories":[],"keywords":[],"readme":null,"repository":"https://github.com/rust-lang/cargo","homepage":"https://github.com/rust-lang/cargo","documentation":"https://docs.rs/cargo-platform","edition":"2018","links":null},{"name":"cargo_metadata","version":"0.12.3","id":"cargo_metadata 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)","license":"MIT","license_file":null,"description":"structured access to the output of `cargo metadata`","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"cargo-platform","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.1","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"semver","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.11.0","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":["serde"],"target":null,"registry":null},{"name":"semver-parser","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.10.2","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"serde","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.107","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":["derive"],"target":null,"registry":null},{"name":"serde_json","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.59","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":["unbounded_depth"],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"cargo_metadata","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cargo_metadata-0.12.3/src/lib.rs","edition":"2018","doctest":true,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"test_samples","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cargo_metadata-0.12.3/tests/test_samples.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"selftest","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cargo_metadata-0.12.3/tests/selftest.rs","edition":"2018","doctest":false,"test":true}],"features":{"default":[]},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cargo_metadata-0.12.3/Cargo.toml","metadata":{"cargo_metadata_test":{"other_field":"foo","some_field":true}},"publish":null,"authors":["Oliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>"],"categories":[],"keywords":[],"readme":"README.md","repository":"https://github.com/oli-obk/cargo_metadata","homepage":null,"documentation":null,"edition":"2018","links":null},{"name":"cast","version":"0.2.3","id":"cast 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)","license":"MIT OR Apache-2.0","license_file":null,"description":"Ergonomic, checked cast functions for primitive types","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"quickcheck","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.9.0","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"rustc_version","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.2.3","kind":"build","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"cast","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cast-0.2.3/src/lib.rs","edition":"2015","doctest":true,"test":true},{"kind":["custom-build"],"crate_types":["bin"],"name":"build-script-build","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cast-0.2.3/build.rs","edition":"2015","doctest":false,"test":false}],"features":{"default":["std"],"std":[],"x128":[]},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cast-0.2.3/Cargo.toml","metadata":null,"publish":null,"authors":["Jorge Aparicio <jorge@japaric.io>"],"categories":[],"keywords":["checked","cast","primitive","integer","float"],"readme":"README.md","repository":"https://github.com/japaric/cast.rs","homepage":null,"documentation":"https://docs.rs/cast","edition":"2015","links":null},{"name":"cc","version":"1.0.66","id":"cc 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)","license":"MIT/Apache-2.0","license_file":null,"description":"A build-time dependency for Cargo build scripts to assist in invoking the native\nC compiler to compile native C code into a static archive to be linked into Rust\ncode.\n","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"jobserver","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.1.16","kind":null,"rename":null,"optional":true,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"tempfile","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^3","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"cc","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cc-1.0.66/src/lib.rs","edition":"2018","doctest":true,"test":true},{"kind":["bin"],"crate_types":["bin"],"name":"gcc-shim","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cc-1.0.66/src/bin/gcc-shim.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"cflags","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cc-1.0.66/tests/cflags.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"cxxflags","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cc-1.0.66/tests/cxxflags.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"cc_env","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cc-1.0.66/tests/cc_env.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"test","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cc-1.0.66/tests/test.rs","edition":"2018","doctest":false,"test":true}],"features":{"parallel":["jobserver"]},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cc-1.0.66/Cargo.toml","metadata":null,"publish":null,"authors":["Alex Crichton <alex@alexcrichton.com>"],"categories":["development-tools::build-utils"],"keywords":["build-dependencies"],"readme":"README.md","repository":"https://github.com/alexcrichton/cc-rs","homepage":"https://github.com/alexcrichton/cc-rs","documentation":"https://docs.rs/cc","edition":"2018","links":null},{"name":"cfg-expr","version":"0.6.0","id":"cfg-expr 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)","license":"MIT OR Apache-2.0","license_file":null,"description":"A parser and evaluator for Rust `cfg()` expressions.","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"smallvec","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.4","kind":null,"rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"target-lexicon","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.11","kind":null,"rename":null,"optional":true,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"difference","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^2.0","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"cfg-expr","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-expr-0.6.0/src/lib.rs","edition":"2018","doctest":true,"test":true},{"kind":["example"],"crate_types":["bin"],"name":"eval","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-expr-0.6.0/examples/eval.rs","edition":"2018","doctest":false,"test":false},{"kind":["test"],"crate_types":["bin"],"name":"lexer","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-expr-0.6.0/tests/lexer.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"parser","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-expr-0.6.0/tests/parser.rs","edition":"2018","doctest":false,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"eval","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-expr-0.6.0/tests/eval.rs","edition":"2018","doctest":false,"test":true}],"features":{"default":[],"targets":["target-lexicon"]},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-expr-0.6.0/Cargo.toml","metadata":null,"publish":null,"authors":["Embark <opensource@embark-studios.com>","Jake Shadle <jake.shadle@embark-studios.com>"],"categories":[],"keywords":["cargo","rustc","cfg"],"readme":"README.md","repository":"https://github.com/EmbarkStudios/cfg-expr","homepage":"https://github.com/EmbarkStudios/cfg-expr","documentation":"https://docs.rs/cfg-expr","edition":"2018","links":null},{"name":"cfg-if","version":"0.1.10","id":"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)","license":"MIT/Apache-2.0","license_file":null,"description":"A macro to ergonomically define an item depending on a large number of #[cfg]\nparameters. Structured like an if-else chain, the first matching branch is the\nitem that gets emitted.\n","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"compiler_builtins","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.1.2","kind":null,"rename":null,"optional":true,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"rustc-std-workspace-core","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.0","kind":null,"rename":"core","optional":true,"uses_default_features":true,"features":[],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"cfg-if","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-if-0.1.10/src/lib.rs","edition":"2018","doctest":true,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"xcrate","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-if-0.1.10/tests/xcrate.rs","edition":"2018","doctest":false,"test":true}],"features":{"rustc-dep-of-std":["core","compiler_builtins"]},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-if-0.1.10/Cargo.toml","metadata":null,"publish":null,"authors":["Alex Crichton <alex@alexcrichton.com>"],"categories":[],"keywords":[],"readme":"README.md","repository":"https://github.com/alexcrichton/cfg-if","homepage":"https://github.com/alexcrichton/cfg-if","documentation":"https://docs.rs/cfg-if","edition":"2018","links":null},{"name":"cfg-if","version":"1.0.0","id":"cfg-if 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)","license":"MIT/Apache-2.0","license_file":null,"description":"A macro to ergonomically define an item depending on a large number of #[cfg]\nparameters. Structured like an if-else chain, the first matching branch is the\nitem that gets emitted.\n","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"compiler_builtins","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.1.2","kind":null,"rename":null,"optional":true,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"rustc-std-workspace-core","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.0","kind":null,"rename":"core","optional":true,"uses_default_features":true,"features":[],"target":null,"registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"cfg-if","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-if-1.0.0/src/lib.rs","edition":"2018","doctest":true,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"xcrate","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-if-1.0.0/tests/xcrate.rs","edition":"2018","doctest":false,"test":true}],"features":{"rustc-dep-of-std":["core","compiler_builtins"]},"manifest_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/cfg-if-1.0.0/Cargo.toml","metadata":null,"publish":null,"authors":["Alex Crichton <alex@alexcrichton.com>"],"categories":[],"keywords":[],"readme":"README.md","repository":"https://github.com/alexcrichton/cfg-if","homepage":"https://github.com/alexcrichton/cfg-if","documentation":"https://docs.rs/cfg-if","edition":"2018","links":null},{"name":"chrono","version":"0.4.19","id":"chrono 0.4.19 (registry+https://github.com/rust-lang/crates.io-index)","license":"MIT/Apache-2.0","license_file":null,"description":"Date and time library for Rust","source":"registry+https://github.com/rust-lang/crates.io-index","dependencies":[{"name":"libc","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.2.69","kind":null,"rename":null,"optional":true,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"num-integer","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.1.36","kind":null,"rename":null,"optional":false,"uses_default_features":false,"features":[],"target":null,"registry":null},{"name":"num-traits","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.2","kind":null,"rename":null,"optional":false,"uses_default_features":false,"features":[],"target":null,"registry":null},{"name":"pure-rust-locales","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.5.2","kind":null,"rename":null,"optional":true,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"rustc-serialize","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3.20","kind":null,"rename":null,"optional":true,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"serde","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1.0.99","kind":null,"rename":null,"optional":true,"uses_default_features":false,"features":[],"target":null,"registry":null},{"name":"time","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.1.43","kind":null,"rename":null,"optional":true,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"bincode","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.8.0","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"criterion","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"doc-comment","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"num-iter","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.1.35","kind":"dev","rename":null,"optional":false,"uses_default_features":false,"features":[],"target":null,"registry":null},{"name":"serde_derive","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1","kind":"dev","rename":null,"optional":false,"uses_default_features":false,"features":[],"target":null,"registry":null},{"name":"serde_json","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^1","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":null,"registry":null},{"name":"js-sys","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3","kind":null,"rename":null,"optional":true,"uses_default_features":true,"features":[],"target":"cfg(all(target_arch = \"wasm32\", not(any(target_os = \"emscripten\", target_os = \"wasi\"))))","registry":null},{"name":"wasm-bindgen","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.2","kind":null,"rename":null,"optional":true,"uses_default_features":true,"features":[],"target":"cfg(all(target_arch = \"wasm32\", not(any(target_os = \"emscripten\", target_os = \"wasi\"))))","registry":null},{"name":"wasm-bindgen-test","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3","kind":"dev","rename":null,"optional":false,"uses_default_features":true,"features":[],"target":"cfg(all(target_arch = \"wasm32\", not(any(target_os = \"emscripten\", target_os = \"wasi\"))))","registry":null},{"name":"winapi","source":"registry+https://github.com/rust-lang/crates.io-index","req":"^0.3.0","kind":null,"rename":null,"optional":true,"uses_default_features":true,"features":["std","minwinbase","minwindef","timezoneapi"],"target":"cfg(windows)","registry":null}],"targets":[{"kind":["lib"],"crate_types":["lib"],"name":"chrono","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/chrono-0.4.19/src/lib.rs","edition":"2015","doctest":true,"test":true},{"kind":["test"],"crate_types":["bin"],"name":"wasm","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/chrono-0.4.19/tests/wasm.rs","edition":"2015","doctest":false,"test":true},{"kind":["bench"],"crate_types":["bin"],"name":"chrono","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/chrono-0.4.19/benches/chrono.rs","edition":"2015","required-features":["__internal_bench"],"doctest":false,"test":false},{"kind":["bench"],"crate_types":["bin"],"name":"serde","src_path":"/home/fakeuser/.cargo/registry/src/github.com-1ecc6299db9ec823/chrono-0.4.19/benches/serde.rs","edition":"2015","required-features":["serde"],"doctest":false,"test":false}],"features":{"__doctest"
Download .txt
gitextract_922wtfg2/

├── .cargo/
│   ├── config.toml
│   └── nightly-config.toml
├── .claude/
│   ├── .gitignore
│   └── settings.json
├── .config/
│   └── hakari.toml
├── .git-blame-ignore-revs
├── .gitattributes
├── .github/
│   ├── renovate.json
│   └── workflows/
│       ├── ci.yml
│       ├── docs.yml
│       ├── hakari.yml
│       └── release.yml
├── .gitignore
├── .ignore
├── .vscode/
│   └── launch.json
├── CLAUDE.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Cargo.toml
├── Cross.toml
├── Justfile
├── LICENSE-APACHE
├── LICENSE-MIT
├── README.md
├── cargo-guppy/
│   ├── Cargo.toml
│   ├── README.md
│   ├── README.tpl
│   └── src/
│       ├── core.rs
│       ├── diff.rs
│       ├── lib.rs
│       ├── main.rs
│       └── mv.rs
├── clippy.toml
├── fixtures/
│   ├── Cargo.toml
│   ├── README.md
│   ├── determinator-paths/
│   │   ├── README.md
│   │   ├── git-diff.out
│   │   ├── guppy-linux.json
│   │   └── guppy-win.json
│   ├── guppy/
│   │   ├── hakari/
│   │   │   ├── metadata_guppy_44b62fa-0.toml
│   │   │   ├── metadata_guppy_44b62fa-1.toml
│   │   │   ├── metadata_guppy_44b62fa-2.toml
│   │   │   ├── metadata_guppy_44b62fa-3.toml
│   │   │   ├── metadata_guppy_78cb7e8-0.toml
│   │   │   ├── metadata_guppy_78cb7e8-1.toml
│   │   │   ├── metadata_guppy_78cb7e8-2.toml
│   │   │   ├── metadata_guppy_78cb7e8-3.toml
│   │   │   ├── metadata_guppy_869476c-0.toml
│   │   │   ├── metadata_guppy_869476c-1.toml
│   │   │   ├── metadata_guppy_869476c-2.toml
│   │   │   ├── metadata_guppy_869476c-3.toml
│   │   │   ├── metadata_guppy_c9b4f76-0.toml
│   │   │   ├── metadata_guppy_c9b4f76-1.toml
│   │   │   ├── metadata_guppy_c9b4f76-2.toml
│   │   │   └── metadata_guppy_c9b4f76-3.toml
│   │   ├── metadata_guppy_44b62fa.json
│   │   ├── metadata_guppy_78cb7e8.json
│   │   ├── metadata_guppy_869476c.json
│   │   ├── metadata_guppy_c9b4f76.json
│   │   ├── package-rules.toml
│   │   ├── path-rules.toml
│   │   └── summaries/
│   │       ├── metadata_guppy_44b62fa-0.toml
│   │       ├── metadata_guppy_44b62fa-1.toml
│   │       ├── metadata_guppy_44b62fa-2.toml
│   │       ├── metadata_guppy_44b62fa-3.toml
│   │       ├── metadata_guppy_44b62fa-4.toml
│   │       ├── metadata_guppy_44b62fa-5.toml
│   │       ├── metadata_guppy_44b62fa-6.toml
│   │       ├── metadata_guppy_44b62fa-7.toml
│   │       ├── metadata_guppy_78cb7e8-0.toml
│   │       ├── metadata_guppy_78cb7e8-1.toml
│   │       ├── metadata_guppy_78cb7e8-2.toml
│   │       ├── metadata_guppy_78cb7e8-3.toml
│   │       ├── metadata_guppy_78cb7e8-4.toml
│   │       ├── metadata_guppy_78cb7e8-5.toml
│   │       ├── metadata_guppy_78cb7e8-6.toml
│   │       ├── metadata_guppy_78cb7e8-7.toml
│   │       ├── metadata_guppy_869476c-0.toml
│   │       ├── metadata_guppy_869476c-1.toml
│   │       ├── metadata_guppy_869476c-2.toml
│   │       ├── metadata_guppy_869476c-3.toml
│   │       ├── metadata_guppy_869476c-4.toml
│   │       ├── metadata_guppy_869476c-5.toml
│   │       ├── metadata_guppy_869476c-6.toml
│   │       ├── metadata_guppy_869476c-7.toml
│   │       ├── metadata_guppy_c9b4f76-0.toml
│   │       ├── metadata_guppy_c9b4f76-1.toml
│   │       ├── metadata_guppy_c9b4f76-2.toml
│   │       ├── metadata_guppy_c9b4f76-3.toml
│   │       ├── metadata_guppy_c9b4f76-4.toml
│   │       ├── metadata_guppy_c9b4f76-5.toml
│   │       ├── metadata_guppy_c9b4f76-6.toml
│   │       └── metadata_guppy_c9b4f76-7.toml
│   ├── invalid/
│   │   ├── build_targets_duplicate_lib.json
│   │   ├── build_targets_empty_kinds.json
│   │   ├── build_targets_non_bin.json
│   │   ├── duplicate_workspace_names.json
│   │   ├── invalid_default_member.json
│   │   ├── named_feature_self_loop.json
│   │   ├── optional_dev_dep.json
│   │   └── workspace_member_different_drive.json
│   ├── large/
│   │   ├── hakari/
│   │   │   ├── hyper_util_7afb1ed-0.toml
│   │   │   ├── hyper_util_7afb1ed-1.toml
│   │   │   ├── hyper_util_7afb1ed-2.toml
│   │   │   ├── hyper_util_7afb1ed-3.toml
│   │   │   ├── metadata_libra-0.toml
│   │   │   ├── metadata_libra-1.toml
│   │   │   ├── metadata_libra-2.toml
│   │   │   ├── metadata_libra-3.toml
│   │   │   ├── metadata_libra_9ffd93b-0.toml
│   │   │   ├── metadata_libra_9ffd93b-1.toml
│   │   │   ├── metadata_libra_9ffd93b-2.toml
│   │   │   ├── metadata_libra_9ffd93b-3.toml
│   │   │   ├── metadata_libra_f0091a4-0.toml
│   │   │   ├── metadata_libra_f0091a4-1.toml
│   │   │   ├── metadata_libra_f0091a4-2.toml
│   │   │   ├── metadata_libra_f0091a4-3.toml
│   │   │   ├── mnemos_b3b4da9-0.toml
│   │   │   ├── mnemos_b3b4da9-1.toml
│   │   │   ├── mnemos_b3b4da9-2.toml
│   │   │   └── mnemos_b3b4da9-3.toml
│   │   ├── hyper_util_7afb1ed.json
│   │   ├── metadata_libra.json
│   │   ├── metadata_libra_9ffd93b.json
│   │   ├── metadata_libra_f0091a4.json
│   │   ├── mnemos_b3b4da9.json
│   │   └── summaries/
│   │       ├── hyper_util_7afb1ed-0.toml
│   │       ├── hyper_util_7afb1ed-1.toml
│   │       ├── hyper_util_7afb1ed-2.toml
│   │       ├── hyper_util_7afb1ed-3.toml
│   │       ├── hyper_util_7afb1ed-4.toml
│   │       ├── hyper_util_7afb1ed-5.toml
│   │       ├── hyper_util_7afb1ed-6.toml
│   │       ├── hyper_util_7afb1ed-7.toml
│   │       ├── metadata_libra-0.toml
│   │       ├── metadata_libra-1.toml
│   │       ├── metadata_libra-2.toml
│   │       ├── metadata_libra-3.toml
│   │       ├── metadata_libra-4.toml
│   │       ├── metadata_libra-5.toml
│   │       ├── metadata_libra-6.toml
│   │       ├── metadata_libra-7.toml
│   │       ├── metadata_libra_9ffd93b-0.toml
│   │       ├── metadata_libra_9ffd93b-1.toml
│   │       ├── metadata_libra_9ffd93b-2.toml
│   │       ├── metadata_libra_9ffd93b-3.toml
│   │       ├── metadata_libra_9ffd93b-4.toml
│   │       ├── metadata_libra_9ffd93b-5.toml
│   │       ├── metadata_libra_9ffd93b-6.toml
│   │       ├── metadata_libra_9ffd93b-7.toml
│   │       ├── metadata_libra_f0091a4-0.toml
│   │       ├── metadata_libra_f0091a4-1.toml
│   │       ├── metadata_libra_f0091a4-2.toml
│   │       ├── metadata_libra_f0091a4-3.toml
│   │       ├── metadata_libra_f0091a4-4.toml
│   │       ├── metadata_libra_f0091a4-5.toml
│   │       ├── metadata_libra_f0091a4-6.toml
│   │       ├── metadata_libra_f0091a4-7.toml
│   │       ├── mnemos_b3b4da9-0.toml
│   │       ├── mnemos_b3b4da9-1.toml
│   │       ├── mnemos_b3b4da9-2.toml
│   │       ├── mnemos_b3b4da9-3.toml
│   │       ├── mnemos_b3b4da9-4.toml
│   │       ├── mnemos_b3b4da9-5.toml
│   │       ├── mnemos_b3b4da9-6.toml
│   │       └── mnemos_b3b4da9-7.toml
│   ├── small/
│   │   ├── alternate-registries.json
│   │   ├── builddep.json
│   │   ├── hakari/
│   │   │   ├── metadata1-0.toml
│   │   │   ├── metadata1-1.toml
│   │   │   ├── metadata1-2.toml
│   │   │   ├── metadata1-3.toml
│   │   │   ├── metadata2-0.toml
│   │   │   ├── metadata2-1.toml
│   │   │   ├── metadata2-2.toml
│   │   │   ├── metadata2-3.toml
│   │   │   ├── metadata_alternate_registries-0.toml
│   │   │   ├── metadata_alternate_registries-1.toml
│   │   │   ├── metadata_alternate_registries-2.toml
│   │   │   ├── metadata_alternate_registries-3.toml
│   │   │   ├── metadata_build_targets1-0.toml
│   │   │   ├── metadata_build_targets1-1.toml
│   │   │   ├── metadata_build_targets1-2.toml
│   │   │   ├── metadata_build_targets1-3.toml
│   │   │   ├── metadata_builddep-0.toml
│   │   │   ├── metadata_builddep-1.toml
│   │   │   ├── metadata_builddep-2.toml
│   │   │   ├── metadata_builddep-3.toml
│   │   │   ├── metadata_cycle1-0.toml
│   │   │   ├── metadata_cycle1-1.toml
│   │   │   ├── metadata_cycle1-2.toml
│   │   │   ├── metadata_cycle1-3.toml
│   │   │   ├── metadata_cycle2-0.toml
│   │   │   ├── metadata_cycle2-1.toml
│   │   │   ├── metadata_cycle2-2.toml
│   │   │   ├── metadata_cycle2-3.toml
│   │   │   ├── metadata_cycle_features-0.toml
│   │   │   ├── metadata_cycle_features-1.toml
│   │   │   ├── metadata_cycle_features-2.toml
│   │   │   ├── metadata_cycle_features-3.toml
│   │   │   ├── metadata_dups-0.toml
│   │   │   ├── metadata_dups-1.toml
│   │   │   ├── metadata_dups-2.toml
│   │   │   ├── metadata_dups-3.toml
│   │   │   ├── metadata_proc_macro1-0.toml
│   │   │   ├── metadata_proc_macro1-1.toml
│   │   │   ├── metadata_proc_macro1-2.toml
│   │   │   ├── metadata_proc_macro1-3.toml
│   │   │   ├── metadata_targets1-0.toml
│   │   │   ├── metadata_targets1-1.toml
│   │   │   ├── metadata_targets1-2.toml
│   │   │   ├── metadata_targets1-3.toml
│   │   │   ├── metadata_weak_namespaced_features-0.toml
│   │   │   ├── metadata_weak_namespaced_features-1.toml
│   │   │   ├── metadata_weak_namespaced_features-2.toml
│   │   │   └── metadata_weak_namespaced_features-3.toml
│   │   ├── metadata1.json
│   │   ├── metadata2.json
│   │   ├── metadata_build_targets1.json
│   │   ├── metadata_cycle1.json
│   │   ├── metadata_cycle1_windows.json
│   │   ├── metadata_cycle1_windows_different_drives.json
│   │   ├── metadata_cycle2.json
│   │   ├── metadata_cycle_features.json
│   │   ├── metadata_default_members.json
│   │   ├── metadata_dups.json
│   │   ├── metadata_proc_macro1.json
│   │   ├── metadata_targets1.json
│   │   ├── summaries/
│   │   │   ├── metadata1-0.toml
│   │   │   ├── metadata1-1.toml
│   │   │   ├── metadata1-2.toml
│   │   │   ├── metadata1-3.toml
│   │   │   ├── metadata1-4.toml
│   │   │   ├── metadata1-5.toml
│   │   │   ├── metadata1-6.toml
│   │   │   ├── metadata1-7.toml
│   │   │   ├── metadata2-0.toml
│   │   │   ├── metadata2-1.toml
│   │   │   ├── metadata2-2.toml
│   │   │   ├── metadata2-3.toml
│   │   │   ├── metadata2-4.toml
│   │   │   ├── metadata2-5.toml
│   │   │   ├── metadata2-6.toml
│   │   │   ├── metadata2-7.toml
│   │   │   ├── metadata_alternate_registries-0.toml
│   │   │   ├── metadata_alternate_registries-1.toml
│   │   │   ├── metadata_alternate_registries-2.toml
│   │   │   ├── metadata_alternate_registries-3.toml
│   │   │   ├── metadata_alternate_registries-4.toml
│   │   │   ├── metadata_alternate_registries-5.toml
│   │   │   ├── metadata_alternate_registries-6.toml
│   │   │   ├── metadata_alternate_registries-7.toml
│   │   │   ├── metadata_build_targets1-0.toml
│   │   │   ├── metadata_build_targets1-1.toml
│   │   │   ├── metadata_build_targets1-2.toml
│   │   │   ├── metadata_build_targets1-3.toml
│   │   │   ├── metadata_build_targets1-4.toml
│   │   │   ├── metadata_build_targets1-5.toml
│   │   │   ├── metadata_build_targets1-6.toml
│   │   │   ├── metadata_build_targets1-7.toml
│   │   │   ├── metadata_builddep-0.toml
│   │   │   ├── metadata_builddep-1.toml
│   │   │   ├── metadata_builddep-2.toml
│   │   │   ├── metadata_builddep-3.toml
│   │   │   ├── metadata_builddep-4.toml
│   │   │   ├── metadata_builddep-5.toml
│   │   │   ├── metadata_builddep-6.toml
│   │   │   ├── metadata_builddep-7.toml
│   │   │   ├── metadata_cycle1-0.toml
│   │   │   ├── metadata_cycle1-1.toml
│   │   │   ├── metadata_cycle1-2.toml
│   │   │   ├── metadata_cycle1-3.toml
│   │   │   ├── metadata_cycle1-4.toml
│   │   │   ├── metadata_cycle1-5.toml
│   │   │   ├── metadata_cycle1-6.toml
│   │   │   ├── metadata_cycle1-7.toml
│   │   │   ├── metadata_cycle2-0.toml
│   │   │   ├── metadata_cycle2-1.toml
│   │   │   ├── metadata_cycle2-2.toml
│   │   │   ├── metadata_cycle2-3.toml
│   │   │   ├── metadata_cycle2-4.toml
│   │   │   ├── metadata_cycle2-5.toml
│   │   │   ├── metadata_cycle2-6.toml
│   │   │   ├── metadata_cycle2-7.toml
│   │   │   ├── metadata_cycle_features-0.toml
│   │   │   ├── metadata_cycle_features-1.toml
│   │   │   ├── metadata_cycle_features-2.toml
│   │   │   ├── metadata_cycle_features-3.toml
│   │   │   ├── metadata_cycle_features-4.toml
│   │   │   ├── metadata_cycle_features-5.toml
│   │   │   ├── metadata_cycle_features-6.toml
│   │   │   ├── metadata_cycle_features-7.toml
│   │   │   ├── metadata_dups-0.toml
│   │   │   ├── metadata_dups-1.toml
│   │   │   ├── metadata_dups-2.toml
│   │   │   ├── metadata_dups-3.toml
│   │   │   ├── metadata_dups-4.toml
│   │   │   ├── metadata_dups-5.toml
│   │   │   ├── metadata_dups-6.toml
│   │   │   ├── metadata_dups-7.toml
│   │   │   ├── metadata_proc_macro1-0.toml
│   │   │   ├── metadata_proc_macro1-1.toml
│   │   │   ├── metadata_proc_macro1-2.toml
│   │   │   ├── metadata_proc_macro1-3.toml
│   │   │   ├── metadata_proc_macro1-4.toml
│   │   │   ├── metadata_proc_macro1-5.toml
│   │   │   ├── metadata_proc_macro1-6.toml
│   │   │   ├── metadata_proc_macro1-7.toml
│   │   │   ├── metadata_targets1-0.toml
│   │   │   ├── metadata_targets1-1.toml
│   │   │   ├── metadata_targets1-2.toml
│   │   │   ├── metadata_targets1-3.toml
│   │   │   ├── metadata_targets1-4.toml
│   │   │   ├── metadata_targets1-5.toml
│   │   │   ├── metadata_targets1-6.toml
│   │   │   ├── metadata_targets1-7.toml
│   │   │   ├── metadata_weak_namespaced_features-0.toml
│   │   │   ├── metadata_weak_namespaced_features-1.toml
│   │   │   ├── metadata_weak_namespaced_features-2.toml
│   │   │   ├── metadata_weak_namespaced_features-3.toml
│   │   │   ├── metadata_weak_namespaced_features-4.toml
│   │   │   ├── metadata_weak_namespaced_features-5.toml
│   │   │   ├── metadata_weak_namespaced_features-6.toml
│   │   │   └── metadata_weak_namespaced_features-7.toml
│   │   └── weak-namespaced-features.json
│   ├── src/
│   │   ├── dep_helpers.rs
│   │   ├── details.rs
│   │   ├── json.rs
│   │   └── lib.rs
│   └── workspace/
│       └── inside-outside/
│           ├── aarch64-active/
│           │   ├── .gitignore
│           │   ├── Cargo.toml
│           │   └── src/
│           │       └── lib.rs
│           ├── external/
│           │   ├── .gitignore
│           │   ├── Cargo.toml
│           │   ├── examples/
│           │   │   └── external3.rs
│           │   └── src/
│           │       └── lib.rs
│           ├── inactive/
│           │   ├── .gitignore
│           │   ├── Cargo.toml
│           │   └── src/
│           │       └── lib.rs
│           ├── transitive/
│           │   ├── .gitignore
│           │   ├── Cargo.toml
│           │   └── src/
│           │       └── lib.rs
│           ├── workspace/
│           │   ├── .gitignore
│           │   ├── Cargo.toml
│           │   ├── internal/
│           │   │   ├── Cargo.toml
│           │   │   └── src/
│           │   │       └── lib.rs
│           │   ├── internal-macro/
│           │   │   ├── Cargo.toml
│           │   │   ├── build.rs
│           │   │   └── src/
│           │   │       └── lib.rs
│           │   ├── main/
│           │   │   ├── Cargo.toml
│           │   │   ├── build.rs
│           │   │   └── src/
│           │   │       └── lib.rs
│           │   ├── side/
│           │   │   ├── Cargo.toml
│           │   │   └── src/
│           │   │       └── lib.rs
│           │   └── src/
│           │       └── lib.rs
│           └── x86-active/
│               ├── .gitignore
│               ├── Cargo.toml
│               └── src/
│                   └── lib.rs
├── guppy/
│   ├── CHANGELOG.md
│   ├── Cargo.toml
│   ├── README.md
│   ├── README.tpl
│   ├── examples/
│   │   ├── cargo_set_link_filter.rs
│   │   ├── deps.rs
│   │   ├── print_by_level.rs
│   │   ├── print_dot.rs
│   │   ├── remove_dev_only.rs
│   │   └── topo_sort.rs
│   ├── proptest-regressions/
│   │   └── petgraph_support/
│   │       └── topo.txt
│   ├── src/
│   │   ├── debug_ignore.rs
│   │   ├── dependency_kind.rs
│   │   ├── errors.rs
│   │   ├── graph/
│   │   │   ├── build.rs
│   │   │   ├── build_targets.rs
│   │   │   ├── cargo/
│   │   │   │   ├── build.rs
│   │   │   │   ├── cargo_api.rs
│   │   │   │   └── mod.rs
│   │   │   ├── cycles.rs
│   │   │   ├── feature/
│   │   │   │   ├── build.rs
│   │   │   │   ├── cycles.rs
│   │   │   │   ├── feature_list.rs
│   │   │   │   ├── graph_impl.rs
│   │   │   │   ├── mod.rs
│   │   │   │   ├── proptest_helpers.rs
│   │   │   │   ├── query.rs
│   │   │   │   ├── resolve.rs
│   │   │   │   └── weak.rs
│   │   │   ├── graph_impl.rs
│   │   │   ├── mod.rs
│   │   │   ├── proptest_helpers.rs
│   │   │   ├── query.rs
│   │   │   ├── query_core.rs
│   │   │   ├── resolve.rs
│   │   │   ├── resolve_core.rs
│   │   │   ├── summaries/
│   │   │   │   └── package_set.rs
│   │   │   └── summaries.rs
│   │   ├── lib.rs
│   │   ├── macros.rs
│   │   ├── metadata_command.rs
│   │   ├── package_id.rs
│   │   ├── petgraph_support/
│   │   │   ├── dfs.rs
│   │   │   ├── dot.rs
│   │   │   ├── edge_ref.rs
│   │   │   ├── mod.rs
│   │   │   ├── scc.rs
│   │   │   ├── topo.rs
│   │   │   └── walk.rs
│   │   ├── platform/
│   │   │   ├── mod.rs
│   │   │   ├── platform_eval.rs
│   │   │   ├── platform_spec.rs
│   │   │   ├── proptest_helpers.rs
│   │   │   └── summaries.rs
│   │   ├── sorted_set.rs
│   │   └── unit_tests/
│   │       ├── dot_tests.rs
│   │       └── mod.rs
│   └── tests/
│       └── graph-tests/
│           ├── cargo_set_tests.rs
│           ├── feature_helpers.rs
│           ├── graph_tests.rs
│           ├── invalid_tests.rs
│           ├── main.rs
│           ├── proptest_helpers.rs
│           └── weak_namespaced.rs
├── guppy-cmdlib/
│   ├── Cargo.toml
│   └── src/
│       ├── lib.rs
│       └── proptest.rs
├── guppy-summaries/
│   ├── CHANGELOG.md
│   ├── Cargo.toml
│   ├── README.md
│   ├── README.tpl
│   └── src/
│       ├── diff.rs
│       ├── lib.rs
│       ├── report.rs
│       ├── summary.rs
│       └── unit_tests/
│           ├── basic_tests.rs
│           └── mod.rs
├── internal-tools/
│   ├── benchmarks/
│   │   ├── .gitignore
│   │   ├── Cargo.toml
│   │   └── benches/
│   │       └── package_graph.rs
│   ├── cargo-compare/
│   │   ├── Cargo.toml
│   │   ├── proptest-regressions/
│   │   │   └── tests/
│   │   │       └── workspace_tests.txt
│   │   └── src/
│   │       ├── check.rs
│   │       ├── common.rs
│   │       ├── diff.rs
│   │       ├── lib.rs
│   │       ├── main.rs
│   │       ├── tests/
│   │       │   ├── fixtures.rs
│   │       │   ├── mod.rs
│   │       │   ├── proptest_helpers.rs
│   │       │   └── workspace_tests.rs
│   │       └── type_conversions.rs
│   ├── fixture-manager/
│   │   ├── Cargo.toml
│   │   ├── src/
│   │   │   ├── context.rs
│   │   │   ├── hakari_toml.rs
│   │   │   ├── lib.rs
│   │   │   ├── main.rs
│   │   │   └── summaries.rs
│   │   └── tests/
│   │       └── unchanged_tests.rs
│   └── proptest-ext/
│       ├── Cargo.toml
│       └── src/
│           └── lib.rs
├── release.toml
├── rustfmt.toml
├── scripts/
│   ├── fix-readmes.awk
│   └── renovate-post-upgrade.sh
├── target-spec/
│   ├── CHANGELOG.md
│   ├── Cargo.toml
│   ├── README.md
│   ├── README.tpl
│   ├── build.rs
│   └── src/
│       ├── custom.rs
│       ├── custom_cfg.rs
│       ├── errors.rs
│       ├── lib.rs
│       ├── platform.rs
│       ├── proptest_helpers.rs
│       ├── simple_eval.rs
│       ├── spec.rs
│       ├── summaries.rs
│       └── triple.rs
├── target-spec-miette/
│   ├── CHANGELOG.md
│   ├── Cargo.toml
│   ├── README.md
│   ├── README.tpl
│   ├── src/
│   │   ├── fixtures.rs
│   │   ├── imp.rs
│   │   └── lib.rs
│   └── tests/
│       ├── datatest-snapshot/
│       │   ├── cfg.rs
│       │   ├── custom.rs
│       │   ├── expr.rs
│       │   ├── helpers.rs
│       │   ├── main.rs
│       │   └── snapshots/
│       │       ├── cfg-invalid/
│       │       │   ├── invalid-has-atomic.ansi
│       │       │   ├── invalid-pointer-width.ansi
│       │       │   ├── missing-arch.ansi
│       │       │   ├── unknown-endian.ansi
│       │       │   └── unquoted-value.ansi
│       │       ├── custom-invalid/
│       │       │   ├── invalid-arch.ansi
│       │       │   ├── invalid-endian.ansi
│       │       │   ├── invalid-family.ansi
│       │       │   ├── invalid-target-pointer-width.ansi
│       │       │   ├── missing-arch.ansi
│       │       │   └── syntax-error.ansi
│       │       └── expr-invalid/
│       │           ├── multiline-output.ansi
│       │           ├── unclosed-delimiter.ansi
│       │           └── unquoted-value.ansi
│       ├── fixtures/
│       │   ├── cfg-invalid/
│       │   │   ├── invalid-has-atomic.cfg
│       │   │   ├── invalid-pointer-width.cfg
│       │   │   ├── missing-arch.cfg
│       │   │   ├── unknown-endian.cfg
│       │   │   └── unquoted-value.cfg
│       │   ├── custom-invalid/
│       │   │   ├── invalid-arch.json
│       │   │   ├── invalid-endian.json
│       │   │   ├── invalid-family.json
│       │   │   ├── invalid-target-pointer-width.json
│       │   │   ├── missing-arch.json
│       │   │   └── syntax-error.json
│       │   └── expr-invalid/
│       │       ├── multiline-output
│       │       ├── unclosed-delimiter
│       │       └── unquoted-value
│       └── integration/
│           ├── main.rs
│           └── snapshots/
│               └── unavailable.ansi
├── tools/
│   ├── cargo-hakari/
│   │   ├── CHANGELOG.md
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   ├── README.tpl
│   │   └── src/
│   │       ├── cargo_cli.rs
│   │       ├── command.rs
│   │       ├── docs/
│   │       │   ├── about.rs
│   │       │   ├── config.rs
│   │       │   ├── mod.rs
│   │       │   ├── patch_directive.rs
│   │       │   └── publishing.rs
│   │       ├── helpers.rs
│   │       ├── lib.rs
│   │       ├── main.rs
│   │       ├── output.rs
│   │       └── publish.rs
│   ├── determinator/
│   │   ├── CHANGELOG.md
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   ├── README.tpl
│   │   ├── default-rules.toml
│   │   ├── src/
│   │   │   ├── determinator.rs
│   │   │   ├── errors.rs
│   │   │   ├── lib.rs
│   │   │   ├── paths0.rs
│   │   │   └── rules.rs
│   │   └── tests/
│   │       └── determinator_tests.rs
│   └── hakari/
│       ├── CHANGELOG.md
│       ├── Cargo.toml
│       ├── README.md
│       ├── README.tpl
│       ├── src/
│       │   ├── cargo_toml.rs
│       │   ├── cli_ops/
│       │   │   ├── initialize.rs
│       │   │   ├── manage_deps.rs
│       │   │   ├── mod.rs
│       │   │   └── workspace_ops.rs
│       │   ├── explain/
│       │   │   ├── display.rs
│       │   │   ├── mod.rs
│       │   │   └── simplify.rs
│       │   ├── hakari.rs
│       │   ├── helpers.rs
│       │   ├── lib.rs
│       │   ├── proptest_helpers.rs
│       │   ├── registry.rs
│       │   ├── summaries.rs
│       │   ├── toml_out.rs
│       │   └── verify/
│       │       ├── display.rs
│       │       └── mod.rs
│       └── templates/
│           ├── crate/
│           │   ├── .gitattributes
│           │   ├── Cargo.toml-in
│           │   ├── build.rs
│           │   └── src/
│           │       └── lib.rs
│           └── hakari.toml-in
└── workspace-hack/
    ├── .gitattributes
    ├── Cargo.toml
    ├── README.md
    ├── build.rs
    └── src/
        └── lib.rs
Download .txt
SYMBOL INDEX (2092 symbols across 139 files)

FILE: cargo-guppy/src/core.rs
  type Kind (line 17) | pub enum Kind {
    method should_traverse (line 26) | pub fn should_traverse(self, link: &PackageLink<'_>) -> bool {
  type QueryOptions (line 38) | pub struct QueryOptions {
    method direction (line 49) | fn direction(&self) -> DependencyDirection {
    method apply (line 58) | pub fn apply<'g>(&self, pkg_graph: &'g PackageGraph) -> Result<Package...
  type BaseFilterOptions (line 77) | pub struct BaseFilterOptions {
    method omitted_package_ids (line 90) | pub fn omitted_package_ids<'g: 'a, 'a>(
  type FilterOptions (line 100) | pub struct FilterOptions {
    method make_resolver (line 119) | pub fn make_resolver<'g>(
    method eval (line 147) | fn eval(
  function names_to_ids (line 158) | pub(crate) fn names_to_ids<'g: 'a, 'a>(

FILE: cargo-guppy/src/diff.rs
  type DiffOptions (line 9) | pub struct DiffOptions;
    method diff (line 12) | pub fn diff<'a>(
  type Package (line 116) | struct Package<'a>(pub &'a PackageMetadata<'a>);
  type Target (line 119) | type Target = PackageMetadata<'a>;
  method deref (line 121) | fn deref(&self) -> &Self::Target {
  method serialize (line 127) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type Diff (line 140) | pub struct Diff<'a> {
  function fmt (line 147) | fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {

FILE: cargo-guppy/src/lib.rs
  function cmd_cycles (line 64) | pub fn cmd_cycles(metadata_opts: CargoMetadataOptions, features: bool) -...
  function cmd_diff (line 111) | pub fn cmd_diff(json: bool, old: &str, new: &str) -> Result<()> {
  type DiffSummariesOptions (line 133) | pub struct DiffSummariesOptions {
    method exec (line 144) | pub fn exec(&self) -> Result<()> {
  type DupsOptions (line 168) | pub struct DupsOptions {
  function cmd_dups (line 176) | pub fn cmd_dups(opts: &DupsOptions) -> Result<()> {
  type BuildKind (line 205) | pub enum BuildKind {
  type ResolveCargoOptions (line 214) | pub struct ResolveCargoOptions {
  function cmd_resolve_cargo (line 244) | pub fn cmd_resolve_cargo(opts: &ResolveCargoOptions) -> Result<()> {
  type NameVisitor (line 327) | struct NameVisitor;
  method visit_package (line 330) | fn visit_package(&self, package: PackageMetadata<'_>, f: &mut DotWrite<'...
  method visit_link (line 334) | fn visit_link(&self, _link: PackageLink<'_>, f: &mut DotWrite<'_, '_>) -...
  type CmdSelectOptions (line 340) | pub struct CmdSelectOptions {
    method output_direction (line 360) | fn output_direction(&self) -> DependencyDirection {
  function cmd_select (line 369) | pub fn cmd_select(options: &CmdSelectOptions) -> Result<()> {
  type SubtreeSizeOptions (line 404) | pub struct SubtreeSizeOptions {
  function cmd_subtree_size (line 417) | pub fn cmd_subtree_size(options: &SubtreeSizeOptions) -> Result<()> {

FILE: cargo-guppy/src/main.rs
  type Args (line 14) | struct Args {
  type Command (line 21) | enum Command {
  function executable_name (line 65) | fn executable_name(subcommand: &str) -> String {
  function args (line 79) | fn args() -> impl Iterator<Item = String> {
  function main (line 89) | fn main() -> Result<()> {

FILE: cargo-guppy/src/mv.rs
  type MvOptions (line 21) | pub struct MvOptions {
    method exec (line 39) | pub fn exec(&self) -> Result<()> {
  type DestDir (line 184) | enum DestDir {
    method new (line 190) | fn new(pkg_graph: &PackageGraph, dest_dir: &Utf8Path) -> Result<Self> {
    method is_create (line 227) | fn is_create(&self) -> bool {
    method join (line 234) | fn join(&self, workspace_path: &Utf8Path, src_dir: &Utf8Path) -> Resul...
  function canonicalize_dir (line 264) | fn canonicalize_dir(pkg_graph: &PackageGraph, path: impl AsRef<Utf8Path>...
  function rel_path (line 279) | fn rel_path<'a>(path: &'a Path, workspace_root: &Utf8Path) -> Result<&'a...
  function moves_for (line 291) | fn moves_for<'g: 'a, 'a>(
  type PackageMove (line 336) | struct PackageMove<'g> {
  type ManifestEdit (line 342) | struct ManifestEdit<'g> {
  function fmt (line 348) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  function apply_edits (line 358) | fn apply_edits(manifest_path: &Utf8Path, edits: &[ManifestEdit<'_>]) -> ...
  function apply_edit (line 406) | fn apply_edit(table: &mut Table, edit: &ManifestEdit<'_>) -> Result<()> {
  function update_root_toml (line 450) | fn update_root_toml(
  function read_toml (line 514) | fn read_toml(manifest_path: &Utf8Path) -> Result<DocumentMut> {
  function replace_decorated (line 522) | fn replace_decorated(dest: &mut Value, new_value: impl Into<Value>) -> V...

FILE: fixtures/src/dep_helpers.rs
  function __from_metadata (line 22) | fn __from_metadata<'a>(link: &PackageLink<'a>) -> PackageMetadata<'a> {
  function __to_metadata (line 25) | fn __to_metadata<'a>(link: &PackageLink<'a>) -> PackageMetadata<'a> {
  type LinkToMetadata (line 28) | type LinkToMetadata<'a> = fn(&PackageLink<'a>) -> PackageMetadata<'a>;
  type DirectionDesc (line 34) | pub struct DirectionDesc<'a> {
  function new (line 43) | fn new(direction: DependencyDirection) -> Self {
  function forward (line 50) | fn forward() -> Self {
  function reverse (line 60) | fn reverse() -> Self {
  function known_metadata (line 70) | fn known_metadata(&self, dep: &PackageLink<'a>) -> PackageMetadata<'a> {
  function variable_metadata (line 74) | fn variable_metadata(&self, dep: &PackageLink<'a>) -> PackageMetadata<'a> {
  function from (line 80) | fn from(direction: DependencyDirection) -> Self {
  function assert_deps_internal (line 85) | pub(crate) fn assert_deps_internal(
  function assert_transitive_deps_internal (line 144) | pub(crate) fn assert_transitive_deps_internal(
  function assert_topo_ids (line 279) | pub(crate) fn assert_topo_ids(graph: &PackageGraph, direction: Dependenc...
  function assert_topo_metadatas (line 293) | pub(crate) fn assert_topo_metadatas(
  function assert_all_links (line 312) | pub(crate) fn assert_all_links(graph: &PackageGraph, direction: Dependen...
  function assert_enabled_status_is_known (line 351) | fn assert_enabled_status_is_known(req: DependencyReq<'_>, msg: &str) {
  type GraphAssert (line 373) | pub trait GraphAssert<'g>: Copy + fmt::Debug {
    constant NAME (line 378) | const NAME: &'static str;
    method depends_on (line 382) | fn depends_on(&self, a_id: Self::Id, b_id: Self::Id) -> Result<bool, E...
    method directly_depends_on (line 384) | fn directly_depends_on(&self, a_id: Self::Id, b_id: Self::Id) -> Resul...
    method is_cyclic (line 386) | fn is_cyclic(&self, a_id: Self::Id, b_id: Self::Id) -> Result<bool, Er...
    method query (line 388) | fn query(
    method resolve (line 394) | fn resolve(&self, initials: &[Self::Id], direction: DependencyDirectio...
    method ids (line 398) | fn ids(
    method root_ids (line 411) | fn root_ids(
    method root_metadatas (line 421) | fn root_metadatas(
    method assert_topo_order (line 431) | fn assert_topo_order(
    method assert_depends_on_any (line 449) | fn assert_depends_on_any(
    method assert_depends_on (line 484) | fn assert_depends_on(
    method assert_not_depends_on (line 511) | fn assert_not_depends_on(
    method assert_directly_depends_on (line 544) | fn assert_directly_depends_on(
  type GraphMetadata (line 572) | pub trait GraphMetadata<'g> {
    method id (line 574) | fn id(&self) -> Self::Id;
  type GraphQuery (line 577) | pub trait GraphQuery<'g> {
    method direction (line 581) | fn direction(&self) -> DependencyDirection;
    method starts_from (line 583) | fn starts_from(&self, id: Self::Id) -> bool;
    method resolve (line 585) | fn resolve(self) -> Self::Set;
  type GraphSet (line 588) | pub trait GraphSet<'g>: Clone + fmt::Debug {
    method len (line 591) | fn len(&self) -> usize;
    method is_empty (line 593) | fn is_empty(&self) -> bool {
    method contains (line 597) | fn contains(&self, id: Self::Id) -> bool;
    method union (line 599) | fn union(&self, other: &Self) -> Self;
    method intersection (line 600) | fn intersection(&self, other: &Self) -> Self;
    method difference (line 601) | fn difference(&self, other: &Self) -> Self;
    method symmetric_difference (line 602) | fn symmetric_difference(&self, other: &Self) -> Self;
    method ids (line 604) | fn ids(&self, direction: DependencyDirection) -> Vec<Self::Id>;
    method metadatas (line 605) | fn metadatas(&self, direction: DependencyDirection) -> Vec<Self::Metad...
    method root_ids (line 606) | fn root_ids(&self, direction: DependencyDirection) -> Vec<Self::Id>;
    method root_metadatas (line 607) | fn root_metadatas(&self, direction: DependencyDirection) -> Vec<Self::...
  type Id (line 611) | type Id = &'g PackageId;
  type Metadata (line 612) | type Metadata = PackageMetadata<'g>;
  type Query (line 613) | type Query = PackageQuery<'g>;
  type Set (line 614) | type Set = PackageSet<'g>;
  constant NAME (line 615) | const NAME: &'static str = "package";
  function depends_on (line 617) | fn depends_on(&self, a_id: Self::Id, b_id: Self::Id) -> Result<bool, Err...
  function directly_depends_on (line 621) | fn directly_depends_on(&self, a_id: Self::Id, b_id: Self::Id) -> Result<...
  function is_cyclic (line 625) | fn is_cyclic(&self, a_id: Self::Id, b_id: Self::Id) -> Result<bool, Erro...
  function query (line 630) | fn query(
  type Id (line 641) | type Id = &'g PackageId;
  function id (line 642) | fn id(&self) -> Self::Id {
  type Id (line 648) | type Id = &'g PackageId;
  type Set (line 649) | type Set = PackageSet<'g>;
  function direction (line 651) | fn direction(&self) -> DependencyDirection {
  function starts_from (line 655) | fn starts_from(&self, id: Self::Id) -> bool {
  function resolve (line 659) | fn resolve(self) -> Self::Set {
  type Id (line 665) | type Id = &'g PackageId;
  type Metadata (line 666) | type Metadata = PackageMetadata<'g>;
  function len (line 668) | fn len(&self) -> usize {
  function contains (line 672) | fn contains(&self, id: Self::Id) -> bool {
  function union (line 676) | fn union(&self, other: &Self) -> Self {
  function intersection (line 680) | fn intersection(&self, other: &Self) -> Self {
  function difference (line 684) | fn difference(&self, other: &Self) -> Self {
  function symmetric_difference (line 688) | fn symmetric_difference(&self, other: &Self) -> Self {
  function ids (line 692) | fn ids(&self, direction: DependencyDirection) -> Vec<Self::Id> {
  function metadatas (line 696) | fn metadatas(&self, direction: DependencyDirection) -> Vec<Self::Metadat...
  function root_ids (line 700) | fn root_ids(&self, direction: DependencyDirection) -> Vec<Self::Id> {
  function root_metadatas (line 704) | fn root_metadatas(&self, direction: DependencyDirection) -> Vec<Self::Me...
  type Id (line 710) | type Id = FeatureId<'g>;
  type Metadata (line 711) | type Metadata = FeatureMetadata<'g>;
  type Query (line 712) | type Query = FeatureQuery<'g>;
  type Set (line 713) | type Set = FeatureSet<'g>;
  constant NAME (line 714) | const NAME: &'static str = "feature";
  function depends_on (line 716) | fn depends_on(&self, a_id: Self::Id, b_id: Self::Id) -> Result<bool, Err...
  function directly_depends_on (line 720) | fn directly_depends_on(&self, a_id: Self::Id, b_id: Self::Id) -> Result<...
  function is_cyclic (line 724) | fn is_cyclic(&self, a_id: Self::Id, b_id: Self::Id) -> Result<bool, Erro...
  function query (line 729) | fn query(
  type Id (line 740) | type Id = FeatureId<'g>;
  function id (line 741) | fn id(&self) -> Self::Id {
  type Id (line 747) | type Id = FeatureId<'g>;
  type Set (line 748) | type Set = FeatureSet<'g>;
  function direction (line 750) | fn direction(&self) -> DependencyDirection {
  function starts_from (line 754) | fn starts_from(&self, id: Self::Id) -> bool {
  function resolve (line 758) | fn resolve(self) -> Self::Set {
  type Id (line 764) | type Id = FeatureId<'g>;
  type Metadata (line 765) | type Metadata = FeatureMetadata<'g>;
  function len (line 767) | fn len(&self) -> usize {
  function contains (line 771) | fn contains(&self, id: Self::Id) -> bool {
  function union (line 775) | fn union(&self, other: &Self) -> Self {
  function intersection (line 779) | fn intersection(&self, other: &Self) -> Self {
  function difference (line 783) | fn difference(&self, other: &Self) -> Self {
  function symmetric_difference (line 787) | fn symmetric_difference(&self, other: &Self) -> Self {
  function ids (line 791) | fn ids(&self, direction: DependencyDirection) -> Vec<Self::Id> {
  function metadatas (line 795) | fn metadatas(&self, direction: DependencyDirection) -> Vec<Self::Metadat...
  function root_ids (line 799) | fn root_ids(&self, direction: DependencyDirection) -> Vec<Self::Id> {
  function root_metadatas (line 803) | fn root_metadatas(&self, direction: DependencyDirection) -> Vec<Self::Me...
  function assert_link_order (line 815) | pub fn assert_link_order<'g>(
  function dep_link_ptrs (line 842) | fn dep_link_ptrs<'g>(dep_links: impl IntoIterator<Item = PackageLink<'g>...

FILE: fixtures/src/details.rs
  type FixtureDetails (line 27) | pub struct FixtureDetails {
    method new (line 36) | pub fn new(package_details: AHashMap<PackageId, PackageDetails>) -> Se...
    method with_workspace_members (line 46) | pub fn with_workspace_members<'a>(
    method with_link_details (line 59) | pub fn with_link_details(
    method with_feature_graph_warnings (line 67) | pub fn with_feature_graph_warnings(mut self, mut warnings: Vec<Feature...
    method with_cycles (line 73) | pub fn with_cycles(mut self, cycles: Vec<Vec<&'static str>>) -> Self {
    method known_ids (line 84) | pub fn known_ids(&self) -> impl Iterator<Item = &PackageId> {
    method assert_workspace (line 88) | pub fn assert_workspace(&self, workspace: Workspace) {
    method assert_topo (line 118) | pub fn assert_topo(&self, graph: &PackageGraph) {
    method assert_metadata (line 131) | pub fn assert_metadata(&self, id: &PackageId, metadata: PackageMetadat...
    method has_build_targets (line 140) | pub fn has_build_targets(&self, id: &PackageId) -> bool {
    method assert_build_targets (line 145) | pub fn assert_build_targets(&self, metadata: PackageMetadata<'_>, msg:...
    method has_deps (line 179) | pub fn has_deps(&self, id: &PackageId) -> bool {
    method assert_deps (line 184) | pub fn assert_deps(&self, graph: &PackageGraph, id: &PackageId, msg: &...
    method has_reverse_deps (line 190) | pub fn has_reverse_deps(&self, id: &PackageId) -> bool {
    method assert_reverse_deps (line 195) | pub fn assert_reverse_deps(&self, graph: &PackageGraph, id: &PackageId...
    method has_transitive_deps (line 205) | pub fn has_transitive_deps(&self, id: &PackageId) -> bool {
    method assert_transitive_deps (line 210) | pub fn assert_transitive_deps(&self, graph: &PackageGraph, id: &Packag...
    method has_transitive_reverse_deps (line 220) | pub fn has_transitive_reverse_deps(&self, id: &PackageId) -> bool {
    method assert_transitive_reverse_deps (line 225) | pub fn assert_transitive_reverse_deps(&self, graph: &PackageGraph, id:...
    method assert_link_details (line 238) | pub fn assert_link_details(&self, graph: &PackageGraph, msg: &str) {
    method has_named_features (line 266) | pub fn has_named_features(&self, id: &PackageId) -> bool {
    method assert_named_features (line 270) | pub fn assert_named_features(&self, graph: &PackageGraph, id: &Package...
    method assert_feature_graph_warnings (line 281) | pub fn assert_feature_graph_warnings(&self, graph: &PackageGraph, msg:...
    method assert_cycles (line 291) | pub fn assert_cycles(&self, graph: &PackageGraph, msg: &str) {
  type PackageDetails (line 319) | pub struct PackageDetails {
    method new (line 345) | pub fn new(
    method with_workspace_path (line 370) | pub fn with_workspace_path(mut self, path: &'static str) -> Self {
    method with_local_path (line 375) | pub fn with_local_path(mut self, path: &'static str) -> Self {
    method with_crates_io (line 380) | pub fn with_crates_io(self) -> Self {
    method with_external_source (line 384) | pub fn with_external_source(mut self, source: &'static str) -> Self {
    method with_build_targets (line 389) | pub fn with_build_targets(
    method with_deps (line 407) | pub fn with_deps(mut self, mut deps: Vec<(&'static str, &'static str)>...
    method with_reverse_deps (line 417) | pub fn with_reverse_deps(
    method with_transitive_deps (line 431) | pub fn with_transitive_deps(mut self, mut transitive_deps: Vec<&'stati...
    method with_transitive_reverse_deps (line 437) | pub fn with_transitive_reverse_deps(
    method with_named_features (line 451) | pub fn with_named_features(mut self, mut named_features: Vec<&'static ...
    method insert_into (line 457) | pub fn insert_into(self, map: &mut AHashMap<PackageId, PackageDetails>) {
    method id (line 461) | pub fn id(&self) -> &PackageId {
    method deps (line 465) | pub fn deps(&self, direction: DependencyDirection) -> Option<&[(&'stat...
    method transitive_deps (line 472) | pub fn transitive_deps(&self, direction: DependencyDirection) -> Optio...
    method assert_metadata (line 479) | pub fn assert_metadata(&self, metadata: PackageMetadata<'_>, msg: &str) {
  type LinkDetails (line 507) | pub struct LinkDetails {
    method new (line 515) | pub fn new(from: PackageId, to: PackageId) -> Self {
    method with_platform_status (line 524) | pub fn with_platform_status(
    method with_features (line 534) | pub fn with_features(
    method insert_into (line 544) | pub fn insert_into(self, map: &mut AHashMap<(PackageId, PackageId), Se...
    method assert_metadata (line 548) | pub fn assert_metadata(&self, link: PackageLink<'_>, msg: &str) {
  type PlatformResults (line 598) | pub struct PlatformResults {
    method new (line 606) | pub fn new(
    method with_feature_status (line 617) | pub fn with_feature_status(

FILE: fixtures/src/json.rs
  constant FIXTURE_MANAGER_EXCLUDES (line 183) | const FIXTURE_MANAGER_EXCLUDES: &[&str] = &[
  type JsonFixture (line 252) | pub struct JsonFixture {
    method new (line 261) | fn new(name: &'static str, rel_path: &'static str, details: FixtureDet...
    method by_name (line 294) | pub fn by_name(name: &str) -> Option<&'static Self> {
    method name (line 299) | pub fn name(&self) -> &'static str {
    method abs_path (line 304) | pub fn abs_path(&self) -> &Utf8Path {
    method workspace_path (line 309) | pub fn workspace_path(&self) -> &Utf8Path {
    method json (line 314) | pub fn json(&self) -> &str {
    method graph (line 319) | pub fn graph(&self) -> &PackageGraph {
    method details (line 324) | pub fn details(&self) -> &FixtureDetails {
    method verify (line 329) | pub fn verify(&self) {
    method init_graph (line 399) | fn init_graph(&self) -> (&str, &PackageGraph) {
    method parse_graph (line 409) | fn parse_graph(json: &str) -> PackageGraph {
  function normalize_assuming_no_symlinks (line 417) | fn normalize_assuming_no_symlinks(p: impl AsRef<Utf8Path>) -> Utf8PathBuf {
  method metadata1 (line 435) | pub(crate) fn metadata1() -> Self {
  method metadata2 (line 527) | pub(crate) fn metadata2() -> Self {
  method metadata_builddep (line 609) | pub(crate) fn metadata_builddep() -> Self {
  method metadata_dups (line 615) | pub(crate) fn metadata_dups() -> Self {
  method metadata_cycle1 (line 638) | pub(crate) fn metadata_cycle1() -> Self {
  method metadata_cycle1_windows (line 674) | pub(crate) fn metadata_cycle1_windows() -> Self {
  method metadata_cycle1_windows_different_drives (line 725) | pub(crate) fn metadata_cycle1_windows_different_drives() -> Self {
  method metadata_cycle2 (line 788) | pub(crate) fn metadata_cycle2() -> Self {
  method metadata_cycle_features (line 900) | pub(crate) fn metadata_cycle_features() -> Self {
  method metadata_targets1 (line 914) | pub(crate) fn metadata_targets1() -> Self {
  method metadata_build_targets1 (line 1190) | pub(crate) fn metadata_build_targets1() -> Self {
  method metadata_proc_macro1 (line 1268) | pub(crate) fn metadata_proc_macro1() -> Self {
  method metadata_alternate_registries (line 1290) | pub(crate) fn metadata_alternate_registries() -> Self {
  method metadata_weak_namespaced_features (line 1295) | pub(crate) fn metadata_weak_namespaced_features() -> Self {
  method metadata_libra (line 1300) | pub(crate) fn metadata_libra() -> Self {
  method metadata_libra_f0091a4 (line 1438) | pub(crate) fn metadata_libra_f0091a4() -> Self {
  method metadata_libra_9ffd93b (line 1450) | pub(crate) fn metadata_libra_9ffd93b() -> Self {
  method mnemos_b3b4da9 (line 1469) | pub(crate) fn mnemos_b3b4da9() -> Self {
  method hyper_util_7afb1ed (line 1475) | pub(crate) fn hyper_util_7afb1ed() -> Self {
  method metadata_guppy_78cb7e8 (line 1481) | pub(crate) fn metadata_guppy_78cb7e8() -> Self {
  method metadata_guppy_869476c (line 1487) | pub(crate) fn metadata_guppy_869476c() -> Self {
  method metadata_guppy_c9b4f76 (line 1493) | pub(crate) fn metadata_guppy_c9b4f76() -> Self {
  method metadata_guppy_44b62fa (line 1499) | pub(crate) fn metadata_guppy_44b62fa() -> Self {

FILE: fixtures/src/lib.rs
  function package_id (line 13) | pub fn package_id(s: impl Into<Box<str>>) -> PackageId {

FILE: fixtures/workspace/inside-outside/aarch64-active/src/lib.rs
  function it_works (line 4) | fn it_works() {

FILE: fixtures/workspace/inside-outside/external/src/lib.rs
  function it_works (line 4) | fn it_works() {

FILE: fixtures/workspace/inside-outside/inactive/src/lib.rs
  function it_works (line 4) | fn it_works() {

FILE: fixtures/workspace/inside-outside/transitive/src/lib.rs
  function it_works (line 4) | fn it_works() {

FILE: fixtures/workspace/inside-outside/workspace/internal-macro/build.rs
  function main (line 1) | fn main() {

FILE: fixtures/workspace/inside-outside/workspace/internal-macro/src/lib.rs
  function it_works (line 4) | fn it_works() {

FILE: fixtures/workspace/inside-outside/workspace/internal/src/lib.rs
  function it_works (line 4) | fn it_works() {

FILE: fixtures/workspace/inside-outside/workspace/main/build.rs
  function main (line 1) | fn main() {

FILE: fixtures/workspace/inside-outside/workspace/main/src/lib.rs
  function it_works (line 4) | fn it_works() {

FILE: fixtures/workspace/inside-outside/workspace/side/src/lib.rs
  function it_works (line 4) | fn it_works() {

FILE: fixtures/workspace/inside-outside/workspace/src/lib.rs
  function it_works (line 4) | fn it_works() {

FILE: fixtures/workspace/inside-outside/x86-active/src/lib.rs
  function it_works (line 4) | fn it_works() {

FILE: guppy-cmdlib/src/lib.rs
  type PackagesAndFeatures (line 28) | pub struct PackagesAndFeatures {
    method make_feature_sets (line 54) | pub fn make_feature_sets<'g>(
  type CargoResolverVersionCmd (line 89) | pub enum CargoResolverVersionCmd {
    method to_guppy (line 123) | pub fn to_guppy(self) -> CargoResolverVersion {
  type InitialsPlatformCmd (line 97) | pub enum InitialsPlatformCmd {
    method to_guppy (line 135) | pub fn to_guppy(self) -> InitialsPlatform {
  type CargoResolverOpts (line 105) | pub struct CargoResolverOpts {
  type CargoMetadataOptions (line 148) | pub struct CargoMetadataOptions {
    method current_dir (line 156) | pub fn current_dir(&self) -> Result<PathBuf> {
    method abs_manifest_path (line 161) | pub fn abs_manifest_path(&self) -> Result<PathBuf> {
    method make_command (line 171) | pub fn make_command(&self) -> MetadataCommand {
  function string_to_platform_spec (line 183) | pub fn string_to_platform_spec(s: Option<&str>) -> Result<PlatformSpec> {

FILE: guppy-cmdlib/src/proptest.rs
  method strategy (line 14) | pub fn strategy(graph: &PackageGraph) -> impl Strategy<Value = Self> + '_ {
  function triple_strategy (line 49) | pub fn triple_strategy() -> impl Strategy<Value = Option<String>> {

FILE: guppy-summaries/src/diff.rs
  type SummaryDiff (line 74) | pub struct SummaryDiff<'a> {
  function new (line 84) | pub fn new(old: &'a Summary, new: &'a Summary) -> Self {
  function is_changed (line 92) | pub fn is_changed(&self) -> bool {
  function is_unchanged (line 97) | pub fn is_unchanged(&self) -> bool {
  function report (line 104) | pub fn report<'b>(&'b self) -> SummaryReport<'a, 'b> {
  type UnchangedInfo (line 110) | pub type UnchangedInfo<'a> = (&'a Version, &'a SummarySource, &'a Packag...
  type PackageDiff (line 114) | pub struct PackageDiff<'a> {
  function new (line 124) | pub fn new(old: &'a PackageMap, new: &'a PackageMap) -> Self {
  function is_unchanged (line 177) | pub fn is_unchanged(&self) -> bool {
  function combine_insert_remove (line 185) | fn combine_insert_remove(changed: &mut BTreeMap<&'a SummaryId, SummaryDi...
  function changed_sort_key (line 238) | pub(crate) fn changed_sort_key<'a>(
  method serialize (line 251) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type SummaryDiffStatus (line 314) | pub enum SummaryDiffStatus<'a> {
  function make_changed (line 372) | fn make_changed(
  function make_changed_diff (line 407) | fn make_changed_diff(
  function tag (line 442) | pub fn tag(&self) -> SummaryDiffTag {
  function latest_status (line 451) | pub fn latest_status(&self) -> PackageStatus {
  function serialize (line 464) | pub fn serialize<S>(item: &PackageInfo, serializer: S) -> Result<S::Ok, ...
  type SummaryDiffTag (line 488) | pub enum SummaryDiffTag {
    method fmt (line 500) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  type Diff (line 510) | type Diff = (&'a PackageInfo, &'a PackageInfo);
  method diff (line 512) | fn diff(&'a self, other: &'a Self) -> edit::Edit<'a, Self> {
  type Diff (line 522) | type Diff = (&'a PackageStatus, &'a PackageStatus);
  method diff (line 524) | fn diff(&'a self, other: &'a Self) -> edit::Edit<'a, Self> {
  type CombineStatus (line 534) | enum CombineStatus<'a> {
  function record_added (line 546) | fn record_added(&mut self, summary_id: &'a SummaryId) {
  function record_removed (line 559) | fn record_removed(&mut self, summary_id: &'a SummaryId) {
  function record_changed (line 572) | fn record_changed(&mut self) {

FILE: guppy-summaries/src/report.rs
  type SummaryReport (line 14) | pub struct SummaryReport<'a, 'b> {
  function new (line 22) | pub fn new(diff: &'b SummaryDiff<'a>) -> Self {
  function make_sorted (line 33) | fn make_sorted(
  function fmt (line 48) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type PackageReport (line 70) | struct PackageReport<'x> {
  function new (line 76) | fn new(
  function fmt (line 88) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  function display_list (line 188) | fn display_list<I>(f: &mut fmt::Formatter, items: I) -> fmt::Result

FILE: guppy-summaries/src/summary.rs
  type PackageMap (line 15) | pub type PackageMap = BTreeMap<SummaryId, PackageInfo>;
  type Summary (line 24) | pub struct Summary {
    method with_metadata (line 55) | pub fn with_metadata(metadata: &impl Serialize) -> Result<Self, toml::...
    method parse (line 66) | pub fn parse(s: &str) -> Result<Self, toml::de::Error> {
    method diff (line 73) | pub fn diff<'a>(&'a self, other: &'a Summary) -> SummaryDiff<'a> {
    method to_string (line 78) | pub fn to_string(&self) -> Result<String, toml::ser::Error> {
    method write_to_string (line 85) | pub fn write_to_string(&self, dst: &mut String) -> Result<(), toml::se...
  type SummaryId (line 95) | pub struct SummaryId {
    method new (line 109) | pub fn new(name: impl Into<String>, version: Version, source: SummaryS...
    method fmt (line 119) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type SummarySource (line 131) | pub enum SummarySource {
    method workspace (line 167) | pub fn workspace(workspace_path: impl Into<Utf8PathBuf>) -> Self {
    method path (line 174) | pub fn path(path: impl Into<Utf8PathBuf>) -> Self {
    method crates_io (line 179) | pub fn crates_io() -> Self {
    method external (line 185) | pub fn external(source: impl Into<String>) -> Self {
    method fmt (line 193) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type PackageInfo (line 214) | pub struct PackageInfo {
  type PackageStatus (line 231) | pub enum PackageStatus {
    method fmt (line 248) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  function serialize (line 264) | pub fn serialize<S>(package_map: &PackageMap, serializer: S) -> Result<S...
  type PackageSerialize (line 281) | struct PackageSerialize<'a> {
  function deserialize (line 288) | pub fn deserialize<'de, D>(deserializer: D) -> Result<PackageMap, D::Error>
  type PackageDeserialize (line 303) | struct PackageDeserialize {
  function serialize_forward_slashes (line 312) | pub fn serialize_forward_slashes<S>(path: &Utf8PathBuf, serializer: S) -...
  function path_replace_slashes (line 321) | fn path_replace_slashes(path: &Utf8Path) -> impl fmt::Display + Serializ...
  function serialize (line 337) | pub fn serialize<S>(serializer: S) -> Result<S::Ok, S::Error>
  function deserialize (line 346) | pub fn deserialize<'de, D>(deserializer: D) -> Result<(), D::Error>
  type CratesIoDeserialize (line 358) | struct CratesIoDeserialize {

FILE: guppy-summaries/src/unit_tests/basic_tests.rs
  function empty_roundtrip (line 110) | fn empty_roundtrip() {
  function basic_roundtrip (line 128) | fn basic_roundtrip() {
  function test_serialization (line 344) | fn test_serialization() {
  function make_summary (line 583) | fn make_summary(list: Vec<(SummaryId, PackageStatus, Vec<&str>, Vec<&str...

FILE: guppy/examples/cargo_set_link_filter.rs
  type PackageResolverForPlatformSet (line 28) | struct PackageResolverForPlatformSet(Vec<PlatformSpec>);
    method new (line 31) | fn new(platform_set: Vec<PlatformSpec>) -> Self {
    method can_platform_status_be_true (line 35) | fn can_platform_status_be_true(&self, platform_status: PlatformStatus)...
    method should_include_dependency_req (line 42) | fn should_include_dependency_req(&self, dependency_req: DependencyReq)...
    method accept (line 50) | fn accept(&mut self, _query: &PackageQuery<'g>, link: PackageLink<'g>)...
  function win32_platform_spec (line 56) | fn win32_platform_spec() -> PlatformSpec {
  function win64_platform_spec (line 69) | fn win64_platform_spec() -> PlatformSpec {
  function cargo_set_to_package_names (line 82) | fn cargo_set_to_package_names(cargo_set: CargoSet) -> Vec<String> {
  function main (line 98) | fn main() -> Result<(), Error> {

FILE: guppy/examples/deps.rs
  function main (line 9) | fn main() -> Result<(), Error> {

FILE: guppy/examples/print_by_level.rs
  function main (line 15) | fn main() -> Result<(), Error> {

FILE: guppy/examples/print_dot.rs
  type PackageNameVisitor (line 23) | struct PackageNameVisitor;
  method visit_package (line 26) | fn visit_package(&self, package: PackageMetadata<'_>, f: &mut DotWrite<'...
  method visit_link (line 34) | fn visit_link(&self, link: PackageLink<'_>, f: &mut DotWrite<'_, '_>) ->...
  function main (line 44) | fn main() -> Result<(), Error> {

FILE: guppy/examples/remove_dev_only.rs
  function main (line 15) | fn main() -> Result<(), Error> {

FILE: guppy/examples/topo_sort.rs
  function main (line 11) | fn main() -> Result<(), Error> {

FILE: guppy/src/debug_ignore.rs
  type DebugIgnore (line 16) | pub struct DebugIgnore<T>(pub T);
  type Target (line 19) | type Target = T;
  method deref (line 21) | fn deref(&self) -> &Self::Target {
  method deref_mut (line 27) | fn deref_mut(&mut self) -> &mut Self::Target {
  function fmt (line 33) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {

FILE: guppy/src/dependency_kind.rs
  type DependencyKind (line 10) | pub enum DependencyKind {
    constant VALUES (line 30) | pub const VALUES: &'static [Self; 3] = &[
    method to_str (line 37) | pub fn to_str(self) -> &'static str {
    method fmt (line 47) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {

FILE: guppy/src/errors.rs
  type Error (line 15) | pub enum Error {
    method command_error (line 77) | pub(crate) fn command_error(err: cargo_metadata::Error) -> Self {
    method unknown_feature_id (line 81) | pub(crate) fn unknown_feature_id(feature_id: FeatureId<'_>) -> Self {
    method fmt (line 90) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method source (line 153) | fn source(&self) -> Option<&(dyn error::Error + 'static)> {
  type FeatureGraphWarning (line 181) | pub enum FeatureGraphWarning {
    method fmt (line 202) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type FeatureBuildStage (line 227) | pub enum FeatureBuildStage {
    method fmt (line 245) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {

FILE: guppy/src/graph/build.rs
  method build (line 34) | pub(crate) fn build(mut metadata: Metadata) -> Result<Self, Box<Error>> {
  method new (line 96) | fn new(
  type GraphBuildState (line 171) | struct GraphBuildState<'a> {
  function new (line 186) | fn new(
  function process_package (line 237) | fn process_package(
  function package_data_and_remove_build_targets (line 412) | fn package_data_and_remove_build_targets(
  function workspace_path (line 427) | fn workspace_path(
  function finish (line 449) | fn finish(self) -> Graph<PackageId, PackageLinkImpl, Directed, PackageIx> {
  type PackageDataValue (line 456) | struct PackageDataValue {
    method new (line 467) | fn new(
  type ResolvedName (line 515) | enum ResolvedName {
  type ReqResolvedName (line 527) | struct ReqResolvedName<'g> {
  function new (line 536) | fn new(renamed: Option<&str>, resolved_name: &'g ResolvedName) -> Self {
  function matches (line 543) | fn matches(&self, name: &str) -> bool {
  method create_path (line 572) | fn create_path(path: &Utf8Path, workspace_root: &Utf8Path) -> Self {
  method from_cargo_string (line 582) | fn from_cargo_string(input: impl Into<String>) -> Self {
  type BuildTargetMap (line 600) | type BuildTargetMap = BTreeMap<OwnedBuildTargetId, BuildTargetImpl>;
  type BuildTargets (line 602) | struct BuildTargets<'a> {
  function new (line 608) | fn new(package_id: &'a PackageId) -> Self {
  function add (line 615) | fn add(&mut self, target: Target) -> Result<(), Box<Error>> {
  function is_proc_macro (line 730) | fn is_proc_macro(list: &[String]) -> bool {
  function finish (line 734) | fn finish(self) -> BuildTargetMap {
  type DependencyResolver (line 739) | struct DependencyResolver<'g> {
  function new (line 753) | fn new(
  function resolve (line 791) | fn resolve<'a>(
  type DependencyReqs (line 820) | struct DependencyReqs<'g> {
  function push (line 826) | fn push(&mut self, resolved_name: ReqResolvedName<'g>, dependency: &'g D...
  function matches_for (line 830) | fn matches_for<'a>(
  method new (line 868) | fn new<'a>(
  method add_instance (line 980) | fn add_instance(&mut self, from_id: &PackageId, dep: &Dependency) -> Res...
  method add_instance (line 990) | fn add_instance(&mut self, from_id: &PackageId, dep: &Dependency) -> Res...
  method new (line 1026) | fn new(registries: Option<Vec<String>>) -> Self {
  type WindowsPathPrefix (line 1038) | enum WindowsPathPrefix<'a> {
  function parse (line 1050) | fn parse(s: &'a str) -> Option<(Self, &'a str)> {
  function parse_inner (line 1069) | fn parse_inner(s: &'a str) -> Option<(Self, &'a str)> {
  function parse_unc_components (line 1092) | fn parse_unc_components(s: &'a str) -> Option<(Self, &'a str)> {
  function normalize_windows_path_on_unix (line 1117) | fn normalize_windows_path_on_unix(path: Utf8PathBuf) -> Utf8PathBuf {
  function diff_utf8_paths_cross_platform (line 1157) | fn diff_utf8_paths_cross_platform(path: &Utf8Path, base: &Utf8Path) -> O...
  function convert_relative_forward_slashes (line 1209) | fn convert_relative_forward_slashes(rel_path: Utf8PathBuf) -> Utf8PathBuf {
  function test_parse_named_feature_dependency (line 1230) | fn test_parse_named_feature_dependency() {
  function test_create_path (line 1250) | fn test_create_path() {
  function test_convert_relative_forward_slashes (line 1262) | fn test_convert_relative_forward_slashes() {
  function test_normalize_windows_path_on_unix (line 1271) | fn test_normalize_windows_path_on_unix() {
  function verify_diff_utf8_paths_cross_platform (line 1299) | fn verify_diff_utf8_paths_cross_platform(
  function test_workspace_path_out_of_pocket (line 1315) | fn test_workspace_path_out_of_pocket() {
  function test_diff_utf8_paths_cross_platform_unix (line 1324) | fn test_diff_utf8_paths_cross_platform_unix() {
  function test_diff_utf8_paths_cross_platform_windows (line 1347) | fn test_diff_utf8_paths_cross_platform_windows() {
  function test_diff_utf8_paths_cross_platform_unc (line 1382) | fn test_diff_utf8_paths_cross_platform_unc() {
  function test_diff_utf8_paths_cross_platform_extended_length (line 1402) | fn test_diff_utf8_paths_cross_platform_extended_length() {
  function test_diff_utf8_paths_cross_platform_different_drives (line 1447) | fn test_diff_utf8_paths_cross_platform_different_drives() {
  function test_diff_utf8_paths_cross_platform_different_unc_servers (line 1465) | fn test_diff_utf8_paths_cross_platform_different_unc_servers() {
  function test_diff_utf8_paths_cross_platform_mixed (line 1495) | fn test_diff_utf8_paths_cross_platform_mixed() {
  function test_diff_utf8_paths_cross_platform_trailing_slashes (line 1508) | fn test_diff_utf8_paths_cross_platform_trailing_slashes() {
  function test_diff_utf8_paths_cross_platform_root_only (line 1525) | fn test_diff_utf8_paths_cross_platform_root_only() {
  function test_windows_path_prefix_parse (line 1542) | fn test_windows_path_prefix_parse() {
  function test_create_path_windows (line 1593) | fn test_create_path_windows() {
  function test_convert_relative_forward_slashes_absolute (line 1608) | fn test_convert_relative_forward_slashes_absolute() {
  function test_workspace_path_out_of_pocket_on_windows_same_drive (line 1617) | fn test_workspace_path_out_of_pocket_on_windows_same_drive() {
  function test_workspace_path_out_of_pocket_on_windows_different_drives (line 1627) | fn test_workspace_path_out_of_pocket_on_windows_different_drives() {

FILE: guppy/src/graph/build_targets.rs
  type BuildTarget (line 15) | pub struct BuildTarget<'g> {
  function new (line 22) | pub(super) fn new((id, inner): (&'g OwnedBuildTargetId, &'g BuildTargetI...
  function id (line 31) | pub fn id(&self) -> BuildTargetId<'g> {
  function name (line 36) | pub fn name(&self) -> &'g str {
  function kind (line 49) | pub fn kind(&self) -> BuildTargetKind<'g> {
  function required_features (line 61) | pub fn required_features(&self) -> &'g [String] {
  function path (line 67) | pub fn path(&self) -> &'g Utf8Path {
  function edition (line 73) | pub fn edition(&self) -> &'g str {
  function doc_by_default (line 87) | pub fn doc_by_default(&self) -> bool {
  function doctest_by_default (line 98) | pub fn doctest_by_default(&self) -> bool {
  function doc_tests (line 105) | pub fn doc_tests(&self) -> bool {
  function test_by_default (line 118) | pub fn test_by_default(&self) -> bool {
  type BuildTargetId (line 126) | pub enum BuildTargetId<'g> {
  function name (line 169) | pub fn name(&self) -> Option<&'g str> {
  function as_key (line 180) | pub(super) fn as_key(&self) -> &(dyn BuildTargetKey + 'g) {
  type BuildTargetKind (line 190) | pub enum BuildTargetKind<'g> {
  function new (line 222) | fn new(inner: &'g BuildTargetKindImpl) -> Self {
  type BuildTargetImpl (line 235) | pub(super) struct BuildTargetImpl {
  type OwnedBuildTargetId (line 250) | pub(super) enum OwnedBuildTargetId {
    method as_borrowed (line 260) | fn as_borrowed(&self) -> BuildTargetId<'_> {
    method borrow (line 298) | fn borrow(&self) -> &(dyn BuildTargetKey + 'g) {
    method as_key (line 331) | fn as_key(&self) -> &dyn BuildTargetKey {
  type BuildTargetKindImpl (line 274) | pub(super) enum BuildTargetKindImpl {
  type BuildTargetKey (line 281) | pub(super) trait BuildTargetKey {
    method key (line 282) | fn key(&self) -> BuildTargetId<'_>;
    method key (line 286) | fn key(&self) -> BuildTargetId<'_> {
    method key (line 292) | fn key(&self) -> BuildTargetId<'_> {
  method eq (line 304) | fn eq(&self, other: &Self) -> bool {
  method partial_cmp (line 314) | fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
  method cmp (line 320) | fn cmp(&self, other: &Self) -> Ordering {

FILE: guppy/src/graph/cargo/build.rs
  type CargoSetBuildState (line 19) | pub(super) struct CargoSetBuildState<'a> {
  function new (line 25) | pub(super) fn new<'g>(
  function build (line 38) | pub(super) fn build<'g>(
  function build_intermediate (line 57) | pub(super) fn build_intermediate(self, query: FeatureQuery) -> CargoInte...
  function new_v1 (line 68) | fn new_v1<'g>(
  function new_v2 (line 80) | fn new_v2<'g>(
  function is_omitted (line 95) | fn is_omitted(&self, package_ix: NodeIndex<PackageIx>) -> bool {
  function build_set (line 99) | fn build_set<'g>(
  function new_v1_intermediate (line 353) | fn new_v1_intermediate<'g>(
  function new_v2_intermediate (line 380) | fn new_v2_intermediate<'g>(&self, query: FeatureQuery<'g>) -> CargoInter...

FILE: guppy/src/graph/cargo/cargo_api.rs
  type CargoOptions (line 22) | pub struct CargoOptions<'a> {
  function new (line 42) | pub fn new() -> Self {
  function set_resolver (line 56) | pub fn set_resolver(&mut self, resolver: CargoResolverVersion) -> &mut S...
  function set_include_dev (line 67) | pub fn set_include_dev(&mut self, include_dev: bool) -> &mut Self {
  function set_initials_platform (line 77) | pub fn set_initials_platform(&mut self, initials_platform: InitialsPlatf...
  function set_platform (line 83) | pub fn set_platform(&mut self, platform_spec: impl Into<PlatformSpec>) -...
  function set_target_platform (line 91) | pub fn set_target_platform(&mut self, target_platform: impl Into<Platfor...
  function set_host_platform (line 97) | pub fn set_host_platform(&mut self, host_platform: impl Into<PlatformSpe...
  function add_omitted_packages (line 108) | pub fn add_omitted_packages(
  method default (line 118) | fn default() -> Self {
  type CargoResolverVersion (line 128) | pub enum CargoResolverVersion {
  type InitialsPlatform (line 185) | pub enum InitialsPlatform {
  method default (line 209) | fn default() -> Self {
  type CargoSet (line 219) | pub struct CargoSet<'g> {
  function new (line 255) | pub fn new(
  function with_package_resolver (line 273) | pub fn with_package_resolver(
  function new_internal (line 283) | fn new_internal(
  function new_intermediate (line 299) | pub fn new_intermediate(
  function feature_graph (line 308) | pub fn feature_graph(&self) -> &FeatureGraph<'g> {
  function package_graph (line 313) | pub fn package_graph(&self) -> &'g PackageGraph {
  function initials (line 319) | pub fn initials(&self) -> &FeatureSet<'g> {
  function features_only (line 328) | pub fn features_only(&self) -> &FeatureSet<'g> {
  function target_features (line 336) | pub fn target_features(&self) -> &FeatureSet<'g> {
  function host_features (line 346) | pub fn host_features(&self) -> &FeatureSet<'g> {
  function platform_features (line 351) | pub fn platform_features(&self, build_platform: BuildPlatform) -> &Featu...
  function all_features (line 359) | pub fn all_features(&self) -> [(BuildPlatform, &FeatureSet<'g>); 2] {
  function target_direct_deps (line 369) | pub fn target_direct_deps(&self) -> &PackageSet<'g> {
  function host_direct_deps (line 376) | pub fn host_direct_deps(&self) -> &PackageSet<'g> {
  function platform_direct_deps (line 381) | pub fn platform_direct_deps(&self, build_platform: BuildPlatform) -> &Pa...
  function all_direct_deps (line 390) | pub fn all_direct_deps(&self) -> [(BuildPlatform, &PackageSet<'g>); 2] {
  function proc_macro_links (line 410) | pub fn proc_macro_links<'a>(&'a self) -> impl ExactSizeIterator<Item = P...
  function build_dep_links (line 427) | pub fn build_dep_links<'a>(&'a self) -> impl ExactSizeIterator<Item = Pa...
  function target_links (line 442) | pub fn target_links<'a>(&'a self) -> impl ExactSizeIterator<Item = Packa...
  function host_links (line 460) | pub fn host_links<'a>(&'a self) -> impl ExactSizeIterator<Item = Package...
  type BuildPlatform (line 480) | pub enum BuildPlatform {
    constant VALUES (line 496) | pub const VALUES: &'static [Self; 2] = &[BuildPlatform::Target, BuildP...
    method flip (line 499) | pub fn flip(self) -> Self {
    method fmt (line 508) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type CargoIntermediateSet (line 522) | pub enum CargoIntermediateSet<'g> {
  function target_host_sets (line 532) | pub fn target_host_sets(&self) -> (&FeatureSet<'g>, &FeatureSet<'g>) {

FILE: guppy/src/graph/cycles.rs
  type Cycles (line 272) | pub struct Cycles<'g> {
  function new (line 278) | pub(super) fn new(package_graph: &'g PackageGraph) -> Self {
  function is_cyclic (line 288) | pub fn is_cyclic(&self, a: &PackageId, b: &PackageId) -> Result<bool, Er...
  function all_cycles (line 303) | pub fn all_cycles(&self) -> impl DoubleEndedIterator<Item = Vec<&'g Pack...

FILE: guppy/src/graph/feature/build.rs
  type FeaturePetgraph (line 23) | pub(super) type FeaturePetgraph = Graph<FeatureNode, FeatureEdge, Direct...
  type FeatureEdgeReference (line 24) | pub(super) type FeatureEdgeReference<'g> = <&'g FeaturePetgraph as IntoE...
  type FeatureGraphBuildState (line 27) | pub(super) struct FeatureGraphBuildState {
    method new (line 37) | pub(super) fn new(package_graph: &PackageGraph) -> Self {
    method add_nodes (line 53) | pub(super) fn add_nodes(&mut self, package: PackageMetadata<'_>) {
    method end_nodes (line 67) | pub(super) fn end_nodes(&mut self) {
    method add_named_feature_edges (line 71) | pub(super) fn add_named_feature_edges(&mut self, metadata: PackageMeta...
    method nodes_for_named_feature_dep (line 102) | fn nodes_for_named_feature_dep(
    method make_named_feature_node (line 223) | fn make_named_feature_node(
    method make_named_feature_cross_edge (line 268) | fn make_named_feature_cross_edge(
    method make_full_conditional_link_impl (line 282) | fn make_full_conditional_link_impl(link: &PackageLink<'_>) -> Conditio...
    method add_dependency_edges (line 299) | pub(super) fn add_dependency_edges(&mut self, link: PackageLink<'_>) {
    method add_node (line 379) | fn add_node(&mut self, feature_id: FeatureNode) -> NodeIndex<FeatureIx> {
    method add_edges (line 386) | fn add_edges(
    method lookup_node (line 487) | fn lookup_node(&self, node: &FeatureNode) -> Option<NodeIndex<FeatureI...
    method build (line 491) | pub(super) fn build(self) -> FeatureGraphImpl {
  type FeatureReq (line 504) | struct FeatureReq<'g> {
  function new (line 514) | fn new(link: PackageLink<'g>) -> Self {
  function is_empty (line 527) | fn is_empty(&self) -> bool {
  function add_features (line 532) | fn add_features(
  function extend (line 564) | fn extend(
  function finish (line 579) | fn finish(self) -> impl Iterator<Item = (FeatureNode, FeatureEdge)> + us...
  type DependencyBuildState (line 595) | struct DependencyBuildState {
    method new (line 603) | fn new(package_edge_ix: EdgeIndex<PackageIx>) -> Self {
    method extend (line 612) | fn extend(&mut self, dep_kind: DependencyKind, status: &PlatformStatus...
    method is_empty (line 621) | fn is_empty(&self) -> bool {
    method finish (line 625) | fn finish(self) -> FeatureEdge {

FILE: guppy/src/graph/feature/cycles.rs
  type Cycles (line 21) | pub struct Cycles<'g> {
  function new (line 27) | pub(super) fn new(feature_graph: FeatureGraph<'g>) -> Self {
  function is_cyclic (line 35) | pub fn is_cyclic<'a>(
  function all_cycles (line 54) | pub fn all_cycles(&self) -> impl Iterator<Item = Vec<FeatureId<'g>>> + '...

FILE: guppy/src/graph/feature/feature_list.rs
  type FeatureList (line 22) | pub struct FeatureList<'g> {
  function new (line 29) | pub fn new(
  function package (line 40) | pub fn package(&self) -> &PackageMetadata<'g> {
  function contains (line 45) | pub fn contains(&self, label: FeatureLabel<'_>) -> bool {
  function has_base (line 53) | pub fn has_base(&self) -> bool {
  function has_named_feature (line 59) | pub fn has_named_feature(&self, feature_name: &str) -> bool {
  function has_optional_dependency (line 65) | pub fn has_optional_dependency(&self, dep_name: &str) -> bool {
  function labels (line 72) | pub fn labels(&self) -> &[FeatureLabel<'g>] {
  function named_features (line 79) | pub fn named_features(&self) -> impl Iterator<Item = &'g str> + '_ {
  function optional_deps (line 90) | pub fn optional_deps(&self) -> impl Iterator<Item = &'g str> + '_ {
  function iter (line 99) | pub fn iter<'a>(&'a self) -> Iter<'g, 'a> {
  function display_features (line 104) | pub fn display_features<'a>(&'a self) -> DisplayFeatures<'g, 'a> {
  function into_labels (line 111) | pub fn into_labels(self) -> Vec<FeatureLabel<'g>> {
  function fmt (line 117) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type Item (line 126) | type Item = FeatureId<'g>;
  type IntoIter (line 127) | type IntoIter = IntoIter<'g>;
  method into_iter (line 129) | fn into_iter(self) -> Self::IntoIter {
  type Item (line 135) | type Item = FeatureId<'g>;
  type IntoIter (line 136) | type IntoIter = Iter<'g, 'a>;
  method into_iter (line 138) | fn into_iter(self) -> Self::IntoIter {
  type IntoIter (line 144) | pub struct IntoIter<'g> {
  function new (line 151) | pub fn new(feature_list: FeatureList<'g>) -> Self {
  type Item (line 160) | type Item = FeatureId<'g>;
  method next (line 162) | fn next(&mut self) -> Option<Self::Item> {
  type Iter (line 170) | pub struct Iter<'g, 'a> {
  function new (line 177) | pub fn new(feature_list: &'a FeatureList<'g>) -> Self {
  type Item (line 186) | type Item = FeatureId<'g>;
  method next (line 188) | fn next(&mut self) -> Option<Self::Item> {
  type DisplayFeatures (line 199) | pub struct DisplayFeatures<'g, 'a>(&'a [FeatureLabel<'g>]);
  function fmt (line 202) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  function fmt (line 215) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {

FILE: guppy/src/graph/feature/graph_impl.rs
  method feature_graph (line 56) | pub fn feature_graph(&self) -> FeatureGraph<'_> {
  method get_feature_graph (line 64) | pub(super) fn get_feature_graph(&self) -> &FeatureGraphImpl {
  type FeatureGraph (line 74) | pub struct FeatureGraph<'g> {
  function build_warnings (line 83) | pub fn build_warnings(&self) -> &'g [FeatureGraphWarning] {
  function package_graph (line 88) | pub fn package_graph(&self) -> &'g PackageGraph {
  function feature_count (line 95) | pub fn feature_count(&self) -> usize {
  function link_count (line 100) | pub fn link_count(&self) -> usize {
  function contains (line 105) | pub fn contains(&self, feature_id: impl Into<FeatureId<'g>>) -> bool {
  function metadata (line 111) | pub fn metadata(
  function all_features_for (line 125) | pub fn all_features_for(&self, package_id: &PackageId) -> Result<Feature...
  function is_default_feature (line 143) | pub fn is_default_feature<'a>(
  function depends_on (line 166) | pub fn depends_on<'a>(
  function directly_depends_on (line 183) | pub fn directly_depends_on<'a>(
  function cycles (line 198) | pub fn cycles(&self) -> Cycles<'g> {
  function verify (line 208) | pub fn verify(&self) -> Result<(), Error> {
  function sccs (line 229) | pub(super) fn sccs(&self) -> &'g Sccs<FeatureIx> {
  function metadata_impl (line 248) | fn metadata_impl(&self, feature_id: FeatureId<'g>) -> Option<&'g Feature...
  function metadata_for_ix (line 253) | pub(in crate::graph) fn metadata_for_ix(
  function metadata_for_node (line 261) | pub(super) fn metadata_for_node(&self, node: FeatureNode) -> Option<Feat...
  function metadata_impl_for_node (line 271) | fn metadata_impl_for_node(&self, node: &FeatureNode) -> Option<&'g Featu...
  function dep_graph (line 275) | pub(super) fn dep_graph(&self) -> &'g FeaturePetgraph {
  function edge_to_conditional_link (line 280) | pub(super) fn edge_to_conditional_link(
  function feature_ix_depends_on (line 304) | fn feature_ix_depends_on(
  function feature_ix_depends_on_no_conditional (line 312) | fn feature_ix_depends_on_no_conditional(
  function feature_ixs_for_package_ix (line 328) | pub(super) fn feature_ixs_for_package_ix(
  function feature_ixs_for_package_ixs (line 340) | pub(super) fn feature_ixs_for_package_ixs<I>(
  function feature_ixs_for_package_ixs_filtered (line 355) | pub(in crate::graph) fn feature_ixs_for_package_ixs_filtered<B>(
  function package_ix_for_feature_ix (line 373) | pub(in crate::graph) fn package_ix_for_feature_ix(
  function feature_ixs (line 382) | pub(super) fn feature_ixs<'a, B>(
  function feature_ix (line 395) | pub(super) fn feature_ix(
  type FeatureId (line 413) | pub struct FeatureId<'g> {
  function new (line 422) | pub fn new(package_id: &'g PackageId, label: FeatureLabel<'g>) -> Self {
  function named (line 428) | pub fn named(package_id: &'g PackageId, feature_name: &'g str) -> Self {
  function optional_dependency (line 436) | pub fn optional_dependency(package_id: &'g PackageId, dep_name: &'g str)...
  function base (line 444) | pub fn base(package_id: &'g PackageId) -> Self {
  function from_node (line 451) | pub(super) fn from_node(package_graph: &'g PackageGraph, node: &FeatureN...
  function node_to_feature (line 463) | pub(super) fn node_to_feature(
  function package_id (line 471) | pub fn package_id(&self) -> &'g PackageId {
  function label (line 476) | pub fn label(&self) -> FeatureLabel<'g> {
  function is_base (line 482) | pub fn is_base(&self) -> bool {
  function is_optional_dependency (line 488) | pub fn is_optional_dependency(self) -> bool {
  function is_named (line 494) | pub fn is_named(self) -> bool {
  function from (line 500) | fn from((package_id, label): (&'g PackageId, FeatureLabel<'g>)) -> Self {
  function fmt (line 535) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type FeatureLabel (line 542) | pub enum FeatureLabel<'g> {
  function kind (line 563) | pub fn kind(self) -> FeatureKind {
  function fmt (line 588) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type FeatureMetadata (line 599) | pub struct FeatureMetadata<'g> {
  function feature_id (line 609) | pub fn feature_id(&self) -> FeatureId<'g> {
  function package_id (line 614) | pub fn package_id(&self) -> &'g PackageId {
  function package (line 619) | pub fn package(&self) -> PackageMetadata<'g> {
  function label (line 627) | pub fn label(&self) -> FeatureLabel<'g> {
  function package_ix (line 636) | pub(in crate::graph) fn package_ix(&self) -> NodeIndex<PackageIx> {
  function feature_ix (line 641) | pub(in crate::graph) fn feature_ix(&self) -> NodeIndex<FeatureIx> {
  function fmt (line 647) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type FeatureGraphImpl (line 656) | pub(in crate::graph) struct FeatureGraphImpl {
    method new (line 669) | pub(super) fn new(package_graph: &PackageGraph) -> Self {
  type ConditionalLink (line 736) | pub struct ConditionalLink<'g> {
  function new (line 748) | pub(super) fn new(
  function from (line 770) | pub fn from(&self) -> FeatureMetadata<'g> {
  function to (line 779) | pub fn to(&self) -> FeatureMetadata<'g> {
  function endpoints (line 788) | pub fn endpoints(&self) -> (FeatureMetadata<'g>, FeatureMetadata<'g>) {
  function normal (line 793) | pub fn normal(&self) -> PlatformStatus<'g> {
  function build (line 798) | pub fn build(&self) -> PlatformStatus<'g> {
  function dev (line 803) | pub fn dev(&self) -> PlatformStatus<'g> {
  function status_for_kind (line 809) | pub fn status_for_kind(&self, kind: DependencyKind) -> PlatformStatus<'g> {
  function dev_only (line 819) | pub fn dev_only(&self) -> bool {
  function package_link (line 824) | pub fn package_link(&self) -> PackageLink<'g> {
  function edge_ix (line 835) | pub(super) fn edge_ix(&self) -> EdgeIndex<FeatureIx> {
  function package_edge_ix (line 840) | pub(in crate::graph) fn package_edge_ix(&self) -> EdgeIndex<PackageIx> {
  function fmt (line 846) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type FeatureNode (line 861) | pub(in crate::graph) struct FeatureNode {
    method new (line 868) | pub(in crate::graph) fn new(
    method base (line 879) | pub(in crate::graph) fn base(package_ix: NodeIndex<PackageIx>) -> Self {
    method optional_dep (line 886) | pub(in crate::graph) fn optional_dep(package_ix: NodeIndex<PackageIx>,...
    method named_feature (line 893) | pub(in crate::graph) fn named_feature(
    method from_id (line 903) | fn from_id(feature_graph: &FeatureGraph<'_>, id: FeatureId<'_>) -> Opt...
    method named_features (line 911) | pub(super) fn named_features(package: PackageMetadata<'_>) -> impl Ite...
    method optional_deps (line 921) | pub(super) fn optional_deps(package: PackageMetadata<'_>) -> impl Iter...
    method package_ix (line 931) | pub(in crate::graph) fn package_ix(&self) -> NodeIndex<PackageIx> {
    method package_id_and_feature_label (line 935) | pub(in crate::graph) fn package_id_and_feature_label<'g>(
  type FeatureEdge (line 951) | pub enum FeatureEdge {
  type ConditionalLinkImpl (line 1007) | pub struct ConditionalLinkImpl {
    method dev_only (line 1016) | fn dev_only(&self) -> bool {
  type FeatureMetadataImpl (line 1023) | pub(super) struct FeatureMetadataImpl {
  type FeatureKind (line 1031) | pub enum FeatureKind {
    method is_base (line 1050) | pub fn is_base(self) -> bool {
    method is_named (line 1056) | pub fn is_named(self) -> bool {
    method is_optional_dependency (line 1062) | pub fn is_optional_dependency(self) -> bool {

FILE: guppy/src/graph/feature/proptest_helpers.rs
  function proptest1_id_strategy (line 30) | pub fn proptest1_id_strategy(&self) -> impl Strategy<Value = FeatureId<'...
  function proptest1_set_strategy (line 40) | pub fn proptest1_set_strategy(&self) -> impl Strategy<Value = FeatureSet...

FILE: guppy/src/graph/feature/query.rs
  type FeatureFilter (line 28) | pub trait FeatureFilter<'g> {
    method accept (line 37) | fn accept(&mut self, graph: &FeatureGraph<'g>, feature_id: FeatureId<'...
  function accept (line 44) | fn accept(&mut self, graph: &FeatureGraph<'g>, feature_id: FeatureId<'g>...
  function accept (line 50) | fn accept(&mut self, graph: &FeatureGraph<'g>, feature_id: FeatureId<'g>...
  function accept (line 56) | fn accept(&mut self, graph: &FeatureGraph<'g>, feature_id: FeatureId<'g>...
  type FeatureFilterFn (line 63) | pub struct FeatureFilterFn<F>(F);
  function new (line 70) | pub fn new(f: F) -> Self {
  function accept (line 79) | fn accept(&mut self, graph: &FeatureGraph<'g>, feature_id: FeatureId<'g>...
  type StandardFeatures (line 89) | pub enum StandardFeatures {
    constant VALUES (line 102) | pub const VALUES: &'static [Self; 3] = &[
    method accept (line 110) | fn accept(&mut self, graph: &FeatureGraph<'g>, feature_id: FeatureId<'...
  function named_feature_filter (line 135) | pub fn named_feature_filter<'g: 'a, 'a>(
  function feature_id_filter (line 160) | pub fn feature_id_filter<'g: 'a, 'a>(
  type FeatureQuery (line 180) | pub struct FeatureQuery<'g> {
  function query_workspace (line 196) | pub fn query_workspace(&self, filter: impl FeatureFilter<'g>) -> Feature...
  function query_directed (line 206) | pub fn query_directed<'a>(
  function query_forward (line 220) | pub fn query_forward<'a>(
  function query_reverse (line 234) | pub fn query_reverse<'a>(
  function query_from_parts (line 245) | pub(in crate::graph) fn query_from_parts(
  function graph (line 263) | pub fn graph(&self) -> &FeatureGraph<'g> {
  function direction (line 268) | pub fn direction(&self) -> DependencyDirection {
  function initials (line 275) | pub fn initials<'a>(&'a self) -> impl ExactSizeIterator<Item = FeatureMe...
  function initial_packages (line 286) | pub fn initial_packages<'a>(&'a self) -> impl Iterator<Item = PackageMet...
  function starts_from_package (line 294) | pub fn starts_from_package(&self, package_id: &PackageId) -> Result<bool...
  function starts_from (line 302) | pub fn starts_from<'a>(&self, feature_id: impl Into<FeatureId<'a>>) -> R...
  function resolve (line 311) | pub fn resolve(self) -> FeatureSet<'g> {
  function resolve_with (line 317) | pub fn resolve_with(self, resolver: impl FeatureResolver<'g>) -> Feature...
  function resolve_with_fn (line 323) | pub fn resolve_with_fn(
  function starts_from_package_ix (line 334) | pub(in crate::graph) fn starts_from_package_ix(
  type FeatureResolver (line 346) | pub trait FeatureResolver<'g> {
    method accept (line 348) | fn accept(&mut self, query: &FeatureQuery<'g>, link: ConditionalLink<'...
  function accept (line 355) | fn accept(&mut self, query: &FeatureQuery<'g>, link: ConditionalLink<'g>...
  function accept (line 361) | fn accept(&mut self, query: &FeatureQuery<'g>, link: ConditionalLink<'g>...
  function accept (line 367) | fn accept(&mut self, query: &FeatureQuery<'g>, link: ConditionalLink<'g>...
  type ResolverFn (line 373) | struct ResolverFn<F>(pub F);
  function accept (line 379) | fn accept(&mut self, query: &FeatureQuery<'g>, link: ConditionalLink<'g>...

FILE: guppy/src/graph/feature/resolve.rs
  function resolve_all (line 32) | pub fn resolve_all(&self) -> FeatureSet<'g> {
  function resolve_none (line 40) | pub fn resolve_none(&self) -> FeatureSet<'g> {
  function resolve_ids (line 50) | pub fn resolve_ids<'a>(
  type FeatureSet (line 68) | pub struct FeatureSet<'g> {
  function fmt (line 74) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  function new (line 84) | pub(super) fn new(query: FeatureQuery<'g>) -> Self {
  function with_resolver (line 92) | pub(super) fn with_resolver(
  function from_included (line 131) | pub(in crate::graph) fn from_included(
  function graph (line 142) | pub fn graph(&self) -> &FeatureGraph<'g> {
  function len (line 147) | pub fn len(&self) -> usize {
  function is_empty (line 152) | pub fn is_empty(&self) -> bool {
  function contains (line 159) | pub fn contains<'a>(&self, feature_id: impl Into<FeatureId<'a>>) -> Resu...
  function contains_package (line 168) | pub fn contains_package(&self, package_id: &PackageId) -> Result<bool, E...
  function to_feature_query (line 179) | pub fn to_feature_query(&self, direction: DependencyDirection) -> Featur...
  function union (line 200) | pub fn union(&self, other: &Self) -> Self {
  function intersection (line 215) | pub fn intersection(&self, other: &Self) -> Self {
  function difference (line 230) | pub fn difference(&self, other: &Self) -> Self {
  function symmetric_difference (line 247) | pub fn symmetric_difference(&self, other: &Self) -> Self {
  function filter (line 266) | pub fn filter(
  function partition (line 296) | pub fn partition(
  function filter_partition (line 329) | pub fn filter_partition(
  function features_for (line 360) | pub fn features_for(&self, package_id: &PackageId) -> Result<Option<Feat...
  function to_package_set (line 367) | pub fn to_package_set(&self) -> PackageSet<'g> {
  function into_cargo_set (line 391) | pub fn into_cargo_set(self, opts: &CargoOptions<'_>) -> Result<CargoSet<...
  function feature_ids (line 407) | pub fn feature_ids<'a>(
  function features (line 426) | pub fn features<'a>(
  function packages_with_features (line 448) | pub fn packages_with_features<'a>(
  function root_ids (line 478) | pub fn root_ids<'a>(
  function root_features (line 501) | pub fn root_features<'a>(
  function conditional_links (line 523) | pub fn conditional_links<'a>(
  function features_for_package_impl (line 541) | fn features_for_package_impl<'a>(
  function ixs_unordered (line 568) | pub(in crate::graph) fn ixs_unordered(
  function contains_package_ix (line 576) | pub(in crate::graph) fn contains_package_ix(&self, package_ix: NodeIndex...
  function links (line 584) | pub fn links<'a>(
  method eq (line 609) | fn eq(&self, other: &Self) -> bool {

FILE: guppy/src/graph/feature/weak.rs
  type WeakDependencies (line 17) | pub(super) struct WeakDependencies {
    method new (line 22) | pub(super) fn new() -> Self {
    method insert (line 28) | pub(super) fn insert(&mut self, edge_ix: EdgeIndex<PackageIx>) -> Weak...
    method get (line 32) | pub(super) fn get(&self, edge_ix: EdgeIndex<PackageIx>) -> Option<Weak...
    method new_buffer_states (line 37) | pub(super) fn new_buffer_states<'g, F>(&self, accept_fn: F) -> WeakBuf...
  type WeakIndex (line 48) | pub struct WeakIndex(pub(super) usize);
  type WeakBufferStates (line 51) | pub(super) struct WeakBufferStates<'g, 'a, F> {
  function new (line 62) | fn new(deps: &'a WeakDependencies, len: usize, accept_fn: F) -> Self {
  function track (line 72) | pub(super) fn track(
  type SingleBufferState (line 133) | pub(super) enum SingleBufferState<'g> {
  method default (line 139) | fn default() -> Self {
  type SingleBufferVec (line 144) | type SingleBufferVec<'g> = Vec<(ConditionalLink<'g>, FeatureEdgeReferenc...

FILE: guppy/src/graph/graph_impl.rs
  type PackageGraph (line 42) | pub struct PackageGraph {
    method from_command (line 63) | pub fn from_command(command: &mut MetadataCommand) -> Result<Self, Err...
    method from_metadata (line 68) | pub fn from_metadata(metadata: CargoMetadata) -> Result<Self, Error> {
    method from_json (line 82) | pub fn from_json(json: impl AsRef<str>) -> Result<Self, Error> {
    method verify (line 89) | pub fn verify(&self) -> Result<(), Error> {
    method workspace (line 228) | pub fn workspace(&self) -> Workspace<'_> {
    method package_ids (line 236) | pub fn package_ids(&self) -> impl ExactSizeIterator<Item = &PackageId> {
    method packages (line 241) | pub fn packages(&self) -> impl ExactSizeIterator<Item = PackageMetadat...
    method metadata (line 249) | pub fn metadata(&self, package_id: &PackageId) -> Result<PackageMetada...
    method package_count (line 258) | pub fn package_count(&self) -> usize {
    method link_count (line 268) | pub fn link_count(&self) -> usize {
    method new_depends_cache (line 275) | pub fn new_depends_cache(&self) -> DependsCache<'_> {
    method depends_on (line 287) | pub fn depends_on(&self, package_a: &PackageId, package_b: &PackageId)...
    method directly_depends_on (line 297) | pub fn directly_depends_on(
    method cycles (line 310) | pub fn cycles(&self) -> Cycles<'_> {
    method dep_links_ixs_directed (line 320) | fn dep_links_ixs_directed(
    method link_between_ixs (line 330) | fn link_between_ixs(
    method sccs (line 341) | pub(super) fn sccs(&self) -> &Sccs<PackageIx> {
    method invalidate_caches (line 358) | pub fn invalidate_caches(&mut self) {
    method dep_graph (line 366) | pub(super) fn dep_graph(&self) -> &Graph<PackageId, PackageLinkImpl, D...
    method edge_ref_to_link (line 371) | pub(super) fn edge_ref_to_link<'g>(
    method edge_ix_to_link (line 385) | pub(super) fn edge_ix_to_link(&self, edge_ix: EdgeIndex<PackageIx>) ->...
    method package_ixs (line 400) | pub(super) fn package_ixs<'g, 'a, B>(
    method package_ix (line 415) | pub(super) fn package_ix(&self, package_id: &PackageId) -> Result<Node...
  type PackageGraphData (line 56) | pub(super) struct PackageGraphData {
    method package_ids (line 422) | pub fn package_ids(&self) -> impl ExactSizeIterator<Item = &PackageId> {
    method metadata_impl (line 431) | pub(super) fn metadata_impl(&self, package_id: &PackageId) -> Option<&...
  type DependsCache (line 440) | pub struct DependsCache<'g> {
  function new (line 450) | pub fn new(package_graph: &'g PackageGraph) -> Self {
  function depends_on (line 461) | pub fn depends_on(
  type Workspace (line 483) | pub struct Workspace<'g> {
  function root (line 490) | pub fn root(&self) -> &'g Utf8Path {
  function target_directory (line 495) | pub fn target_directory(&self) -> &'g Utf8Path {
  function build_directory (line 504) | pub fn build_directory(&self) -> Option<&'g Utf8Path> {
  function default_member_ids (line 515) | pub fn default_member_ids(&self) -> impl ExactSizeIterator<Item = &'g Pa...
  function default_members (line 527) | pub fn default_members(&self) -> impl ExactSizeIterator<Item = PackageMe...
  function member_count (line 536) | pub fn member_count(&self) -> usize {
  function contains_name (line 541) | pub fn contains_name(&self, name: impl AsRef<str>) -> bool {
  function contains_path (line 546) | pub fn contains_path(&self, path: impl AsRef<Utf8Path>) -> bool {
  function iter (line 551) | pub fn iter(&self) -> impl ExactSizeIterator<Item = PackageMetadata<'g>>...
  function iter_by_path (line 557) | pub fn iter_by_path(
  function iter_by_name (line 570) | pub fn iter_by_name(
  function member_ids (line 582) | pub fn member_ids(&self) -> impl ExactSizeIterator<Item = &'g PackageId>...
  function member_by_path (line 589) | pub fn member_by_path(&self, path: impl AsRef<Utf8Path>) -> Result<Packa...
  function members_by_paths (line 603) | pub fn members_by_paths<B>(
  function member_by_name (line 619) | pub fn member_by_name(&self, name: impl AsRef<str>) -> Result<PackageMet...
  function members_by_names (line 633) | pub fn members_by_names<B>(
  function metadata_table (line 650) | pub fn metadata_table(&self) -> &'g JsonValue {
  function par_iter (line 665) | pub fn par_iter(&self) -> impl ParallelIterator<Item = PackageMetadata<'...
  function par_iter_by_path (line 673) | pub fn par_iter_by_path(
  function par_iter_by_name (line 692) | pub fn par_iter_by_name(
  type WorkspaceImpl (line 707) | pub(super) struct WorkspaceImpl {
  type PackageMetadata (line 727) | pub struct PackageMetadata<'g> {
  function fmt (line 733) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  function new (line 744) | pub(super) fn new(graph: &'g PackageGraph, inner: &'g PackageMetadataImp...
  function id (line 749) | pub fn id(&self) -> &'g PackageId {
  function graph (line 754) | pub fn graph(&self) -> &'g PackageGraph {
  function to_package_query (line 761) | pub fn to_package_query(&self, direction: DependencyDirection) -> Packag...
  function to_package_set (line 767) | pub fn to_package_set(&self) -> PackageSet<'g> {
  function to_feature_set (line 774) | pub fn to_feature_set(&self, features: impl FeatureFilter<'g>) -> Featur...
  function direct_links_directed (line 784) | pub fn direct_links_directed(
  function direct_links (line 792) | pub fn direct_links(&self) -> impl Iterator<Item = PackageLink<'g>> + 'g...
  function reverse_direct_links (line 798) | pub fn reverse_direct_links(&self) -> impl Iterator<Item = PackageLink<'...
  function link_between (line 808) | pub fn link_between(
  function link_to (line 820) | pub fn link_to(&self, to: &PackageId) -> Result<Option<PackageLink<'g>>,...
  function link_from (line 828) | pub fn link_from(&self, from: &PackageId) -> Result<Option<PackageLink<'...
  function name (line 839) | pub fn name(&self) -> &'g str {
  function version (line 846) | pub fn version(&self) -> &'g Version {
  function authors (line 853) | pub fn authors(&self) -> &'g [String] {
  function description (line 860) | pub fn description(&self) -> Option<&'g str> {
  function license (line 868) | pub fn license(&self) -> Option<&'g str> {
  function license_file (line 876) | pub fn license_file(&self) -> Option<&'g Utf8Path> {
  function source (line 883) | pub fn source(&self) -> PackageSource<'g> {
  function in_workspace (line 890) | pub fn in_workspace(&self) -> bool {
  function manifest_path (line 897) | pub fn manifest_path(&self) -> &'g Utf8Path {
  function categories (line 906) | pub fn categories(&self) -> &'g [String] {
  function keywords (line 913) | pub fn keywords(&self) -> &'g [String] {
  function readme (line 921) | pub fn readme(&self) -> Option<&'g Utf8Path> {
  function repository (line 928) | pub fn repository(&self) -> Option<&'g str> {
  function homepage (line 935) | pub fn homepage(&self) -> Option<&'g str> {
  function documentation (line 942) | pub fn documentation(&self) -> Option<&'g str> {
  function edition (line 949) | pub fn edition(&self) -> &'g str {
  function metadata_table (line 957) | pub fn metadata_table(&self) -> &'g JsonValue {
  function links (line 966) | pub fn links(&self) -> Option<&'g str> {
  function publish (line 973) | pub fn publish(&self) -> PackagePublish<'g> {
  function default_run (line 983) | pub fn default_run(&self) -> Option<&'g str> {
  function minimum_rust_version (line 993) | pub fn minimum_rust_version(&self) -> Option<&'g Version> {
  function rust_version (line 1011) | pub fn rust_version(&self) -> Option<&'g VersionReq> {
  function build_targets (line 1020) | pub fn build_targets(&self) -> impl Iterator<Item = BuildTarget<'g>> + u...
  function build_target (line 1025) | pub fn build_target(&self, id: &BuildTargetId<'_>) -> Option<BuildTarget...
  function is_proc_macro (line 1036) | pub fn is_proc_macro(&self) -> bool {
  function has_build_script (line 1050) | pub fn has_build_script(&self) -> bool {
  function has_default_feature (line 1059) | pub fn has_default_feature(&self) -> bool {
  function default_feature_id (line 1064) | pub fn default_feature_id(&self) -> FeatureId<'g> {
  function named_features (line 1077) | pub fn named_features(&self) -> impl Iterator<Item = &'g str> + 'g + use...
  function package_ix (line 1087) | pub(super) fn package_ix(&self) -> NodeIndex<PackageIx> {
  function link_between_impl (line 1091) | fn link_between_impl(
  function direct_links_impl (line 1103) | fn direct_links_impl(
  function get_feature_idx (line 1110) | pub(super) fn get_feature_idx(&self, label: FeatureLabel<'_>) -> Option<...
  function feature_idx_to_label (line 1126) | pub(super) fn feature_idx_to_label(&self, idx: FeatureIndexInPackage) ->...
  function all_feature_nodes (line 1148) | pub(super) fn all_feature_nodes(&self) -> impl Iterator<Item = FeatureNo...
  function named_features_full (line 1164) | pub(super) fn named_features_full(
  function optional_deps_full (line 1183) | pub(super) fn optional_deps_full(
  type FeatureIndexInPackage (line 1202) | pub(crate) enum FeatureIndexInPackage {
  method eq (line 1210) | fn eq(&self, other: &Self) -> bool {
  type PackageMetadataImpl (line 1220) | pub(crate) struct PackageMetadataImpl {
  type PackageSource (line 1259) | pub enum PackageSource<'g> {
  constant CRATES_IO_REGISTRY (line 1283) | pub const CRATES_IO_REGISTRY: &'static str =
  function new (line 1286) | pub(super) fn new(inner: &'g PackageSourceImpl) -> Self {
  function is_workspace (line 1296) | pub fn is_workspace(&self) -> bool {
  function is_path (line 1302) | pub fn is_path(&self) -> bool {
  function is_external (line 1307) | pub fn is_external(&self) -> bool {
  function is_crates_io (line 1312) | pub fn is_crates_io(&self) -> bool {
  function is_local (line 1318) | pub fn is_local(&self) -> bool {
  function workspace_path (line 1326) | pub fn workspace_path(&self) -> Option<&'g Utf8Path> {
  function local_path (line 1337) | pub fn local_path(&self) -> Option<&'g Utf8Path> {
  function external_source (line 1346) | pub fn external_source(&self) -> Option<&'g str> {
  function parse_external (line 1359) | pub fn parse_external(&self) -> Option<ExternalSource<'g>> {
  function fmt (line 1368) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  type ExternalSource (line 1385) | pub enum ExternalSource<'g> {
  constant REGISTRY_PLUS (line 1530) | pub const REGISTRY_PLUS: &'static str = "registry+";
  constant SPARSE_PLUS (line 1535) | pub const SPARSE_PLUS: &'static str = "sparse+";
  constant GIT_PLUS (line 1540) | pub const GIT_PLUS: &'static str = "git+";
  constant BRANCH_EQ (line 1545) | pub const BRANCH_EQ: &'static str = "?branch=";
  constant TAG_EQ (line 1550) | pub const TAG_EQ: &'static str = "?tag=";
  constant REV_EQ (line 1555) | pub const REV_EQ: &'static str = "?rev=";
  constant CRATES_IO_URL (line 1560) | pub const CRATES_IO_URL: &'static str = "https://github.com/rust-lang/cr...
  function new (line 1565) | pub fn new(source: &'g str) -> Option<Self> {
  function fmt (line 1622) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  type GitReq (line 1649) | pub enum GitReq<'g> {
  type PackageSourceImpl (line 1691) | pub(super) enum PackageSourceImpl {
  type PackagePublish (line 1704) | pub enum PackagePublish<'g> {
  function new (line 1721) | pub(super) fn new(inner: &'g PackagePublishImpl) -> Self {
  constant CRATES_IO (line 1730) | pub const CRATES_IO: &'static str = "crates-io";
  function is_unrestricted (line 1743) | pub fn is_unrestricted(&self) -> bool {
  function can_publish_to (line 1767) | pub fn can_publish_to(&self, registry: impl AsRef<str>) -> bool {
  function can_publish_to_crates_io (line 1776) | pub fn can_publish_to_crates_io(&self) -> bool {
  function is_never (line 1791) | pub fn is_never(&self) -> bool {
  type PackagePublishImpl (line 1801) | pub(super) enum PackagePublishImpl {
  type PackageLink (line 1813) | pub struct PackageLink<'g> {
  function new (line 1824) | pub(super) fn new(
  function from (line 1849) | pub fn from(&self) -> PackageMetadata<'g> {
  function to (line 1854) | pub fn to(&self) -> PackageMetadata<'g> {
  function endpoints (line 1859) | pub fn endpoints(&self) -> (PackageMetadata<'g>, PackageMetadata<'g>) {
  function dep_name (line 1864) | pub fn dep_name(&self) -> &'g str {
  function resolved_name (line 1870) | pub fn resolved_name(&self) -> &'g str {
  function version_req (line 1886) | pub fn version_req(&self) -> &'g VersionReq {
  function registry (line 1894) | pub fn registry(&self) -> Option<&'g str> {
  function path (line 1902) | pub fn path(&self) -> Option<&'g Utf8Path> {
  function normal (line 1907) | pub fn normal(&self) -> DependencyReq<'g> {
  function build (line 1914) | pub fn build(&self) -> DependencyReq<'g> {
  function dev (line 1921) | pub fn dev(&self) -> DependencyReq<'g> {
  function req_for_kind (line 1929) | pub fn req_for_kind(&self, kind: DependencyKind) -> DependencyReq<'g> {
  function dev_only (line 1939) | pub fn dev_only(&self) -> bool {
  function edge_ix (line 1949) | pub(super) fn edge_ix(&self) -> EdgeIndex<PackageIx> {
  function as_inner_ptrs (line 1955) | pub fn as_inner_ptrs(&self) -> PackageLinkPtrs {
  type PackageLinkPtrs (line 1967) | pub struct PackageLinkPtrs {
  type PackageLinkImpl (line 1974) | pub(crate) struct PackageLinkImpl {
    method dev_only (line 1987) | fn dev_only(&self) -> bool {
  type DependencyReq (line 1997) | pub struct DependencyReq<'g> {
  function is_present (line 2006) | pub fn is_present(&self) -> bool {
  function status (line 2015) | pub fn status(&self) -> EnabledStatus<'g> {
  function default_features (line 2022) | pub fn default_features(&self) -> EnabledStatus<'g> {
  function no_default_features (line 2032) | pub fn no_default_features(&self) -> EnabledStatus<'g> {
  function features (line 2039) | pub fn features(&self) -> impl Iterator<Item = &'g str> + use<'g> {
  function feature_status (line 2051) | pub fn feature_status(&self, feature: &str) -> EnabledStatus<'g> {
  type EnabledStatus (line 2097) | pub struct EnabledStatus<'g> {
  function new (line 2105) | pub(super) fn new(required: &'g PlatformStatusImpl, optional: &'g Platfo...
  function is_never (line 2113) | pub fn is_never(&self) -> bool {
  function required_on (line 2121) | pub fn required_on(&self, platform_spec: &PlatformSpec) -> EnabledTernary {
  function enabled_on (line 2130) | pub fn enabled_on(&self, platform_spec: &PlatformSpec) -> EnabledTernary {
  function required_status (line 2138) | pub fn required_status(&self) -> PlatformStatus<'g> {
  function optional_status (line 2143) | pub fn optional_status(&self) -> PlatformStatus<'g> {
  type NamedFeatureDep (line 2149) | pub(super) enum NamedFeatureDep {
    method named_feature (line 2161) | pub(super) fn named_feature(feature_name: impl Into<String>) -> Self {
    method optional_dependency (line 2166) | pub(super) fn optional_dependency(dep_name: impl Into<String>) -> Self {
    method dep_named_feature (line 2171) | pub(super) fn dep_named_feature(
    method fmt (line 2185) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  type DependencyReqImpl (line 2208) | pub(super) struct DependencyReqImpl {
    method all_features (line 2214) | fn all_features(&self) -> impl Iterator<Item = &str> {
    method enabled (line 2220) | pub(super) fn enabled(&self) -> EnabledStatus<'_> {
    method default_features (line 2224) | pub(super) fn default_features(&self) -> EnabledStatus<'_> {
    method no_default_features (line 2228) | pub(super) fn no_default_features(&self) -> EnabledStatus<'_> {
    method feature_status (line 2232) | pub(super) fn feature_status(&self, feature: &str) -> EnabledStatus<'_> {
    method make_status (line 2244) | fn make_status(
  type DepRequiredOrOptional (line 2255) | pub(super) struct DepRequiredOrOptional {
    method all_features (line 2263) | pub(super) fn all_features(&self) -> impl Iterator<Item = &str> {

FILE: guppy/src/graph/mod.rs
  type DependencyDirection (line 45) | pub enum DependencyDirection {
    method opposite (line 54) | pub fn opposite(self) -> Self {
    method from (line 63) | fn from(direction: Direction) -> Self {
  method from (line 72) | fn from(direction: DependencyDirection) -> Self {
  type PackageIx (line 82) | struct PackageIx(u32);
  type FeatureIx (line 86) | struct FeatureIx(u32);
  type GraphSpec (line 120) | trait GraphSpec {
    type Node (line 127) | type Node = PackageId;
    type Edge (line 128) | type Edge = PackageLinkImpl;
    type Ix (line 129) | type Ix = PackageIx;
    type Node (line 140) | type Node = feature::FeatureNode;
    type Edge (line 141) | type Edge = feature::FeatureEdge;
    type Ix (line 142) | type Ix = FeatureIx;
  type FeatureGraphSpec (line 137) | pub(crate) enum FeatureGraphSpec {}
  function cargo_version_matches (line 148) | fn cargo_version_matches(req: &VersionReq, version: &Version) -> bool {

FILE: guppy/src/graph/proptest_helpers.rs
  method proptest1_id_strategy (line 34) | pub fn proptest1_id_strategy(&self) -> impl Strategy<Value = &PackageId> {
  method proptest1_link_strategy (line 49) | pub fn proptest1_link_strategy(&self) -> impl Strategy<Value = PackageLi...
  method proptest1_resolver_strategy (line 63) | pub fn proptest1_resolver_strategy(&self) -> impl Strategy<Value = Prop0...
  method proptest1_cargo_options_strategy (line 71) | pub fn proptest1_cargo_options_strategy(&self) -> impl Strategy<Value = ...
  function proptest1_name_strategy (line 119) | pub fn proptest1_name_strategy(&self) -> impl Strategy<Value = &'g str> ...
  function proptest1_id_strategy (line 131) | pub fn proptest1_id_strategy(&self) -> impl Strategy<Value = &'g Package...
  function name_list (line 137) | fn name_list(&self) -> &'g [Box<str>] {
  type Prop010Resolver (line 149) | pub struct Prop010Resolver {
    method new (line 155) | fn new(included_edges: FixedBitSet) -> Self {
    method check_depends_on (line 164) | pub fn check_depends_on(&mut self, check: bool) {
    method accept_link (line 169) | pub fn accept_link(&self, link: PackageLink<'_>) -> bool {
    method accept (line 175) | fn accept(&mut self, query: &PackageQuery<'g>, link: PackageLink<'g>) ...
  function fixedbitset_strategy (line 192) | pub(super) fn fixedbitset_strategy(len: usize) -> impl Strategy<Value = ...

FILE: guppy/src/graph/query.rs
  type PackageQuery (line 22) | pub struct PackageQuery<'g> {
  method query_workspace (line 39) | pub fn query_workspace(&self) -> PackageQuery<'_> {
  method query_workspace_paths (line 47) | pub fn query_workspace_paths(
  method query_workspace_names (line 69) | pub fn query_workspace_names(
  method query_directed (line 90) | pub fn query_directed<'g, 'a>(
  method query_forward (line 104) | pub fn query_forward<'g, 'a>(
  method query_reverse (line 117) | pub fn query_reverse<'g, 'a>(
  method query_from_parts (line 127) | pub(super) fn query_from_parts(
  function graph (line 145) | pub fn graph(&self) -> &'g PackageGraph {
  function direction (line 150) | pub fn direction(&self) -> DependencyDirection {
  function initials (line 157) | pub fn initials<'a>(&'a self) -> impl ExactSizeIterator<Item = PackageMe...
  function starts_from (line 169) | pub fn starts_from(&self, package_id: &PackageId) -> Result<bool, Error> {
  function to_feature_query (line 176) | pub fn to_feature_query(&self, filter: impl FeatureFilter<'g>) -> Featur...
  function resolve (line 188) | pub fn resolve(self) -> PackageSet<'g> {
  function resolve_with (line 194) | pub fn resolve_with(self, resolver: impl PackageResolver<'g>) -> Package...
  function resolve_with_fn (line 200) | pub fn resolve_with_fn(

FILE: guppy/src/graph/query_core.rs
  type QueryParams (line 17) | pub(super) enum QueryParams<G: GraphSpec> {
  function direction (line 23) | pub(super) fn direction(&self) -> DependencyDirection {
  function has_initial (line 31) | pub(super) fn has_initial(&self, initial: NodeIndex<G::Ix>) -> bool {
  function initials (line 38) | pub(super) fn initials(&self) -> &[NodeIndex<G::Ix>] {
  method clone (line 50) | fn clone(&self) -> Self {
  function fmt (line 62) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  function all_visit_map (line 70) | pub(super) fn all_visit_map<G, Ix>(graph: G) -> (FixedBitSet, usize)
  function reachable_map (line 82) | pub(super) fn reachable_map<G, Ix>(
  function reachable_map_buffered_filter (line 106) | pub(super) fn reachable_map_buffered_filter<G, Ix>(

FILE: guppy/src/graph/resolve.rs
  method resolve_all (line 36) | pub fn resolve_all(&self) -> PackageSet<'_> {
  method resolve_none (line 44) | pub fn resolve_none(&self) -> PackageSet<'_> {
  method resolve_ids (line 56) | pub fn resolve_ids<'a>(
  method resolve_workspace (line 69) | pub fn resolve_workspace(&self) -> PackageSet<'_> {
  method resolve_workspace_paths (line 86) | pub fn resolve_workspace_paths(
  method resolve_workspace_names (line 110) | pub fn resolve_workspace_names(
  method resolve_package_name (line 132) | pub fn resolve_package_name(&self, name: impl AsRef<str>) -> PackageSet<...
  type PackageSet (line 157) | pub struct PackageSet<'g> {
  function new (line 165) | pub(super) fn new(query: PackageQuery<'g>) -> Self {
  function from_included (line 173) | pub(super) fn from_included(graph: &'g PackageGraph, included: impl Into...
  function with_resolver (line 180) | pub(super) fn with_resolver(
  function len (line 196) | pub fn len(&self) -> usize {
  function is_empty (line 201) | pub fn is_empty(&self) -> bool {
  function contains (line 208) | pub fn contains(&self, package_id: &PackageId) -> Result<bool, Error> {
  function to_package_query (line 215) | pub fn to_package_query(&self, direction: DependencyDirection) -> Packag...
  function union (line 236) | pub fn union(&self, other: &Self) -> Self {
  function intersection (line 251) | pub fn intersection(&self, other: &Self) -> Self {
  function difference (line 266) | pub fn difference(&self, other: &Self) -> Self {
  function symmetric_difference (line 283) | pub fn symmetric_difference(&self, other: &Self) -> Self {
  function filter (line 302) | pub fn filter(
  function partition (line 332) | pub fn partition(
  function filter_partition (line 365) | pub fn filter_partition(
  function to_feature_set (line 396) | pub fn to_feature_set(&self, filter: impl FeatureFilter<'g>) -> FeatureS...
  function package_ids (line 417) | pub fn package_ids<'a>(
  function ixs (line 427) | pub(super) fn ixs(&'g self, direction: DependencyDirection) -> Topo<'g, ...
  function packages (line 438) | pub fn packages<'a>(
  function root_ids (line 458) | pub fn root_ids<'a>(
  function root_packages (line 480) | pub fn root_packages<'a>(
  function links (line 510) | pub fn links<'a>(
  function display_dot (line 523) | pub fn display_dot<'a, V: PackageDotVisitor + 'g>(
  function ixs_unordered (line 537) | pub(super) fn ixs_unordered(&self) -> impl Iterator<Item = NodeIndex<Pac...
  function contains_ix (line 541) | pub(super) fn contains_ix(&self, package_ix: NodeIndex<PackageIx>) -> bo...
  method eq (line 547) | fn eq(&self, other: &Self) -> bool {
  type PackageResolver (line 556) | pub trait PackageResolver<'g> {
    method accept (line 561) | fn accept(&mut self, query: &PackageQuery<'g>, link: PackageLink<'g>) ...
  function accept (line 568) | fn accept(&mut self, query: &PackageQuery<'g>, link: PackageLink<'g>) ->...
  function accept (line 574) | fn accept(&mut self, query: &PackageQuery<'g>, link: PackageLink<'g>) ->...
  function accept (line 580) | fn accept(&mut self, query: &PackageQuery<'g>, link: PackageLink<'g>) ->...
  type ResolverFn (line 585) | pub(super) struct ResolverFn<F>(pub(super) F);
  function accept (line 591) | fn accept(&mut self, query: &PackageQuery<'g>, link: PackageLink<'g>) ->...
  type PackageDotVisitor (line 597) | pub trait PackageDotVisitor {
    method visit_package (line 600) | fn visit_package(&self, package: PackageMetadata<'_>, f: &mut DotWrite...
    method visit_link (line 604) | fn visit_link(&self, link: PackageLink<'_>, f: &mut DotWrite<'_, '_>) ...
  type VisitorWrap (line 607) | struct VisitorWrap<'g, V> {
  function new (line 613) | fn new(graph: &'g PackageGraph, inner: V) -> Self {
  function visit_node (line 624) | fn visit_node(&self, node: NR, f: &mut DotWrite<'_, '_>) -> fmt::Result {
  function visit_edge (line 632) | fn visit_edge(&self, edge: ER, f: &mut DotWrite<'_, '_>) -> fmt::Result {

FILE: guppy/src/graph/resolve_core.rs
  type ResolveCore (line 28) | pub(super) struct ResolveCore<G> {
  function new (line 35) | pub(super) fn new(
  function all_nodes (line 50) | pub(super) fn all_nodes(graph: &Graph<G::Node, G::Edge, Directed, G::Ix>...
  function empty (line 59) | pub(super) fn empty() -> Self {
  function with_edge_filter (line 68) | pub(super) fn with_edge_filter<'g>(
  function with_buffered_edge_filter (line 93) | pub(super) fn with_buffered_edge_filter<'g>(
  function from_included (line 115) | pub(super) fn from_included<T: Into<FixedBitSet>>(included: T) -> Self {
  function len (line 125) | pub(super) fn len(&self) -> usize {
  function is_empty (line 129) | pub(super) fn is_empty(&self) -> bool {
  function contains (line 133) | pub(super) fn contains(&self, ix: NodeIndex<G::Ix>) -> bool {
  function union_with (line 141) | pub(super) fn union_with(&mut self, other: &Self) {
  function intersect_with (line 146) | pub(super) fn intersect_with(&mut self, other: &Self) {
  function difference (line 152) | pub(super) fn difference(&self, other: &Self) -> Self {
  function symmetric_difference_with (line 160) | pub(super) fn symmetric_difference_with(&mut self, other: &Self) {
  function invalidate_caches (line 165) | pub(super) fn invalidate_caches(&mut self) {
  function roots (line 170) | pub(super) fn roots(
  function topo (line 187) | pub(super) fn topo<'g>(
  function links (line 218) | pub(super) fn links<'g>(
  method eq (line 248) | fn eq(&self, other: &Self) -> bool {
  type Topo (line 268) | pub(super) struct Topo<'g, G: GraphSpec> {
  type Item (line 275) | type Item = NodeIndex<G::Ix>;
  method next (line 277) | fn next(&mut self) -> Option<Self::Item> {
  method size_hint (line 288) | fn size_hint(&self) -> (usize, Option<usize>) {
  method len (line 294) | fn len(&self) -> usize {
  type Links (line 302) | pub(super) struct Links<'g, G: GraphSpec> {
  type Item (line 311) | type Item = (NodeIndex<G::Ix>, NodeIndex<G::Ix>, EdgeIndex<G::Ix>);
  method next (line 313) | fn next(&mut self) -> Option<Self::Item> {

FILE: guppy/src/graph/summaries.rs
  function to_summary (line 28) | pub fn to_summary(&self, opts: &CargoOptions<'_>) -> Result<Summary, Err...
  function to_package_map (line 48) | fn to_package_map(
  method metadata_by_summary_id (line 91) | pub fn metadata_by_summary_id(
  function to_summary_id (line 122) | pub fn to_summary_id(&self) -> SummaryId {
  type CargoOptionsSummary (line 137) | pub struct CargoOptionsSummary {
    method new (line 170) | pub fn new(
    method to_cargo_options (line 208) | pub fn to_cargo_options<'g>(
  type InitialsPlatformSummary (line 240) | pub enum InitialsPlatformSummary {
  method from (line 257) | fn from(s: InitialsPlatformSummary) -> Self {
  type FeaturesOnlySummary (line 280) | pub struct FeaturesOnlySummary {
  function to_summary_source (line 297) | pub fn to_summary_source(&self) -> SummarySource {
  function eq (line 313) | fn eq(&self, summary_source: &SummarySource) -> bool {
  function parse_old_metadata (line 332) | fn parse_old_metadata() {

FILE: guppy/src/graph/summaries/package_set.rs
  type PackageSetSummary (line 104) | pub struct PackageSetSummary {
    method new (line 137) | pub fn new(package_set: &PackageSet<'_>) -> Self {
    method from_package_ids (line 149) | pub fn from_package_ids<'a>(
    method is_empty (line 164) | pub fn is_empty(&self) -> bool {
    method to_package_set (line 173) | pub fn to_package_set<'g>(
    method to_package_set_registry (line 191) | pub fn to_package_set_registry<'g, 'a>(
    method to_package_set_impl (line 208) | fn to_package_set_impl<'g, 'a>(
  function to_summary (line 130) | pub fn to_summary(&self) -> PackageSetSummary {
  type ThirdPartySummary (line 231) | pub struct ThirdPartySummary {
    method fmt (line 244) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method deserialize (line 395) | fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
  type ThirdPartySource (line 258) | pub enum ThirdPartySource {
    method fmt (line 283) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type GitReqSummary (line 312) | pub enum GitReqSummary {
    method new (line 336) | pub fn new(git_req: GitReq<'_>) -> Self {
    method as_git_req (line 346) | pub fn as_git_req(&self) -> GitReq<'_> {
  function to_summary (line 330) | pub fn to_summary(self) -> GitReqSummary {
  type ThirdPartySelectFields (line 361) | struct ThirdPartySelectFields<'a> {
  method serialize (line 506) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  function serialize_opt_path_fwdslash (line 544) | fn serialize_opt_path_fwdslash<S>(
  function version_req_is_star (line 557) | fn version_req_is_star(req: &VersionReq) -> bool {
  type PackageMatcher (line 566) | struct PackageMatcher<'a> {
  function new (line 576) | fn new(
  function store_is_match (line 621) | fn store_is_match(&mut self, metadata: PackageMetadata<'_>) -> bool {
  function finish (line 663) | fn finish(self, graph: &PackageGraph, error_message: impl Into<String>) ...
  function source_matches (line 719) | fn source_matches(
  function valid (line 785) | fn valid() {
  function invalid (line 918) | fn invalid() {
  function format_input (line 991) | fn format_input(input: &str) -> String {

FILE: guppy/src/metadata_command.rs
  type MetadataCommand (line 25) | pub struct MetadataCommand {
    method new (line 34) | pub fn new() -> Self {
    method cargo_path (line 44) | pub fn cargo_path(&mut self, path: impl Into<PathBuf>) -> &mut Self {
    method manifest_path (line 54) | pub fn manifest_path(&mut self, path: impl Into<PathBuf>) -> &mut Self {
    method current_dir (line 62) | pub fn current_dir(&mut self, path: impl Into<PathBuf>) -> &mut Self {
    method no_deps (line 76) | pub fn no_deps(&mut self) -> &mut Self {
    method other_options (line 91) | pub fn other_options(
    method env (line 102) | pub fn env(
    method cargo_command (line 113) | pub fn cargo_command(&self) -> Command {
    method exec (line 118) | pub fn exec(&self) -> Result<CargoMetadata, Error> {
    method build_graph (line 124) | pub fn build_graph(&self) -> Result<PackageGraph, Error> {
  type Error (line 133) | type Error = Error;
  method try_from (line 135) | fn try_from(command: MetadataCommand) -> Result<Self, Self::Error> {
  type Error (line 141) | type Error = Error;
  method try_from (line 143) | fn try_from(command: &'a MetadataCommand) -> Result<Self, Self::Error> {
  type CargoMetadata (line 159) | pub struct CargoMetadata(pub(crate) cargo_metadata::Metadata);
    method parse_json (line 163) | pub fn parse_json(json: impl AsRef<str>) -> Result<Self, Error> {
    method serialize (line 169) | pub fn serialize(&self, writer: &mut impl io::Write) -> Result<(), Err...
    method build_graph (line 174) | pub fn build_graph(self) -> Result<PackageGraph, Error> {
  type Error (line 180) | type Error = Error;
  method try_from (line 182) | fn try_from(metadata: CargoMetadata) -> Result<Self, Self::Error> {

FILE: guppy/src/package_id.rs
  type PackageId (line 9) | pub struct PackageId {
    method new (line 16) | pub fn new(s: impl Into<Box<str>>) -> Self {
    method from_metadata (line 20) | pub(super) fn from_metadata(id: cargo_metadata::PackageId) -> Self {
    method repr (line 28) | pub fn repr(&self) -> &str {
    method fmt (line 34) | fn fmt(&self, f: &mut fmt::Formatter) -> std::fmt::Result {
    method eq (line 40) | fn eq(&self, other: &&PackageId) -> bool {
  function eq (line 46) | fn eq(&self, other: &PackageId) -> bool {

FILE: guppy/src/petgraph_support/dfs.rs
  function dfs_next_buffered_filter (line 13) | pub fn dfs_next_buffered_filter<N, VM, G>(
  type BufferedEdgeFilter (line 51) | pub trait BufferedEdgeFilter<G>
    method filter (line 58) | fn filter(&mut self, edge: G::EdgeRef) -> Self::Iter;
  type Iter (line 67) | type Iter = T::Iter;
  function filter (line 70) | fn filter(&mut self, edge: G::EdgeRef) -> Self::Iter {
  type SimpleEdgeFilterFn (line 76) | pub struct SimpleEdgeFilterFn<F>(pub F);
  type Iter (line 83) | type Iter = Option<G::EdgeRef>;
  function filter (line 86) | fn filter(&mut self, edge: G::EdgeRef) -> Self::Iter {
  type BufferedEdgeFilterFn (line 92) | pub struct BufferedEdgeFilterFn<F>(pub F);
  type Iter (line 100) | type Iter = I;
  function filter (line 103) | fn filter(&mut self, edge: G::EdgeRef) -> Self::Iter {
  type ReversedBufferedFilter (line 109) | pub struct ReversedBufferedFilter<T>(pub T);
  type Iter (line 116) | type Iter =
  function filter (line 119) | fn filter(&mut self, edge: <Reversed<G> as IntoEdgeReferences>::EdgeRef)...
  type ReversedEdgeReferences (line 127) | pub struct ReversedEdgeReferences<I> {
  type Item (line 135) | type Item = ReversedEdgeReference<I::Item>;
  method next (line 138) | fn next(&mut self) -> Option<Self::Item> {
  method size_hint (line 146) | fn size_hint(&self) -> (usize, Option<usize>) {
  function horrible_transmute (line 151) | unsafe fn horrible_transmute<A, B>(a: A) -> B {

FILE: guppy/src/petgraph_support/dot.rs
  type DotVisitor (line 13) | pub trait DotVisitor<NR, ER> {
    method visit_node (line 16) | fn visit_node(&self, node: NR, f: &mut DotWrite<'_, '_>) -> fmt::Result;
    method visit_edge (line 20) | fn visit_edge(&self, edge: ER, f: &mut DotWrite<'_, '_>) -> fmt::Result;
  type DisplayVisitor (line 31) | pub struct DisplayVisitor;
    method visit_node (line 40) | fn visit_node(&self, node: NR, f: &mut DotWrite<'_, '_>) -> fmt::Result {
    method visit_edge (line 44) | fn visit_edge(&self, edge: ER, f: &mut DotWrite<'_, '_>) -> fmt::Result {
  function visit_node (line 53) | fn visit_node(&self, node: NR, f: &mut DotWrite<'_, '_>) -> fmt::Result {
  function visit_edge (line 57) | fn visit_edge(&self, edge: ER, f: &mut DotWrite<'_, '_>) -> fmt::Result {
  type DotFmt (line 63) | pub struct DotFmt<G, V> {
  function new (line 76) | pub fn new(graph: G, visitor: V) -> Self {
  function fmt (line 81) | pub fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  function fmt (line 119) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type DotWrite (line 125) | pub struct DotWrite<'a, 'b> {
  function new (line 131) | fn new(f: &'a mut fmt::Formatter<'b>) -> Self {
  function set_escape_backslashes (line 142) | pub fn set_escape_backslashes(&mut self, escape_backslashes: bool) {
  function write_fmt (line 153) | pub fn write_fmt(&mut self, args: fmt::Arguments<'_>) -> fmt::Result {
  method write_str (line 160) | fn write_str(&mut self, s: &str) -> fmt::Result {
  method write_char (line 167) | fn write_char(&mut self, c: char) -> fmt::Result {
  function graph_type (line 180) | fn graph_type<G: GraphProp>(graph: G) -> &'static str {
  function edge_str (line 188) | fn edge_str<G: GraphProp>(graph: G) -> &'static str {

FILE: guppy/src/petgraph_support/edge_ref.rs
  type GraphEdgeRef (line 11) | pub trait GraphEdgeRef<'a, E, Ix: IndexType>: EdgeRef {
    method into_edge_reference (line 12) | fn into_edge_reference(self) -> EdgeReference<'a, E, Ix>;
  function into_edge_reference (line 16) | fn into_edge_reference(self) -> EdgeReference<'a, E, Ix> {
  function into_edge_reference (line 24) | fn into_edge_reference(self) -> EdgeReference<'a, E, Ix> {

FILE: guppy/src/petgraph_support/mod.rs
  function edge_triple (line 20) | pub fn edge_triple<ER: EdgeRef>(edge_ref: ER) -> (ER::NodeId, ER::NodeId...
  type IxBitSet (line 25) | pub struct IxBitSet(pub FixedBitSet);
    method with_capacity (line 29) | pub(crate) fn with_capacity(bits: usize) -> Self {
    method insert_node_ix (line 34) | pub(crate) fn insert_node_ix<Ix: IndexType>(&mut self, bit: NodeIndex<...
    method from_iter (line 46) | fn from_iter<T: IntoIterator<Item = NodeIndex<Ix>>>(iter: T) -> Self {
    method from_iter (line 52) | fn from_iter<T: IntoIterator<Item = EdgeIndex<Ix>>>(iter: T) -> Self {
    method extend (line 58) | fn extend<T: IntoIterator<Item = NodeIndex<Ix>>>(&mut self, iter: T) {
  method from (line 40) | fn from(ix_set: IxBitSet) -> Self {

FILE: guppy/src/petgraph_support/scc.rs
  type Sccs (line 16) | pub(crate) struct Sccs<Ix: IndexType> {
  function new (line 25) | pub fn new<G>(graph: G, mut scc_sorter: impl FnMut(&mut Vec<NodeIndex<Ix...
  function is_same_scc (line 55) | pub fn is_same_scc(&self, a: NodeIndex<Ix>, b: NodeIndex<Ix>) -> bool {
  function multi_sccs (line 66) | pub fn multi_sccs(&self) -> impl DoubleEndedIterator<Item = &[NodeIndex<...
  function externals (line 72) | pub fn externals<'a, G>(&'a self, graph: G) -> impl Iterator<Item = Node...
  function node_iter (line 123) | pub fn node_iter(&self, direction: Direction) -> NodeIter<'_, Ix> {
  type NodeIter (line 133) | pub(crate) struct NodeIter<'a, Ix> {
  function direction (line 141) | pub fn direction(&self) -> Direction {
  type Item (line 147) | type Item = NodeIndex<Ix>;
  method next (line 149) | fn next(&mut self) -> Option<NodeIndex<Ix>> {

FILE: guppy/src/petgraph_support/topo.rs
  type TopoWithCycles (line 16) | pub struct TopoWithCycles<Ix> {
  function new (line 24) | pub fn new<G>(graph: G) -> Self
  function sort_nodes (line 90) | pub fn sort_nodes(&self, nodes: &mut [NodeIndex<Ix>]) {
  function topo_ix (line 95) | pub fn topo_ix(&self, node_ix: NodeIndex<Ix>) -> usize {
  function possibly_cyclic_graph (line 121) | fn possibly_cyclic_graph() -> impl Strategy<Value = Graph<(), ()>> {
  function check_consistency (line 148) | fn check_consistency(topo: &TopoWithCycles<u32>, n: usize) {

FILE: guppy/src/petgraph_support/walk.rs
  type EdgeDfs (line 9) | pub(crate) struct EdgeDfs<E, N, VM> {
  function new (line 24) | pub(crate) fn new<G>(graph: G, initials: impl IntoIterator<Item = N>) ->...
  function new_single (line 48) | pub(crate) fn new_single<G>(graph: G, start: N) -> Self
  function next (line 56) | pub fn next<G>(&mut self, graph: G) -> Option<(N, N, E)>
  type Item (line 72) | type Item = (G::NodeId, G::NodeId, G::EdgeId);
  function walk_next (line 74) | fn walk_next(&mut self, context: G) -> Option<Self::Item> {

FILE: guppy/src/platform/platform_eval.rs
  type PlatformStatus (line 12) | pub enum PlatformStatus<'g> {
  function new (line 27) | pub(crate) fn new(specs: &'g PlatformStatusImpl) -> Self {
  function is_always (line 43) | pub fn is_always(&self) -> bool {
  function is_never (line 51) | pub fn is_never(&self) -> bool {
  function is_present (line 59) | pub fn is_present(&self) -> bool {
  function enabled_on (line 67) | pub fn enabled_on(&self, platform_spec: &PlatformSpec) -> EnabledTernary {
  type EnabledTernary (line 91) | pub enum EnabledTernary {
    method new (line 106) | fn new(x: Option<bool>) -> Self {
    method is_known (line 115) | pub fn is_known(self) -> bool {
  type Output (line 125) | type Output = Self;
  method bitand (line 127) | fn bitand(self, rhs: Self) -> Self::Output {
  type Output (line 140) | type Output = Self;
  method bitor (line 142) | fn bitor(self, rhs: Self) -> Self {
  type PlatformEval (line 157) | pub struct PlatformEval<'g> {
  function eval (line 165) | pub fn eval(&self, platform: &Platform) -> EnabledTernary {
  function target_specs (line 182) | pub fn target_specs(&self) -> &'g [TargetSpec] {
  type PlatformStatusImpl (line 188) | pub(crate) enum PlatformStatusImpl {
    method is_never (line 196) | pub(crate) fn is_never(&self) -> bool {
    method extend (line 203) | pub(crate) fn extend(&mut self, other: &PlatformStatusImpl) {
    method add_spec (line 219) | pub(crate) fn add_spec(&mut self, spec: Option<&TargetSpec>) {
  method default (line 237) | fn default() -> Self {

FILE: guppy/src/platform/platform_spec.rs
  type PlatformSpec (line 19) | pub enum PlatformSpec {
    method current (line 59) | pub fn current() -> Result<Self, TargetSpecError> {
    method build_target (line 68) | pub fn build_target() -> Result<Self, TargetSpecError> {
    method from (line 75) | fn from(platform: T) -> Self {

FILE: guppy/src/platform/proptest_helpers.rs
  method strategy (line 16) | pub fn strategy(platform: impl Strategy<Value = Platform>) -> impl Strat...
  type Parameters (line 26) | type Parameters = ();
  type Strategy (line 27) | type Strategy = BoxedStrategy<Self>;
  method arbitrary_with (line 29) | fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy {

FILE: guppy/src/platform/summaries.rs
  type PlatformSpecSummary (line 12) | pub enum PlatformSpecSummary {
    method new (line 110) | pub fn new(platform_spec: &PlatformSpec) -> Self {
    method to_platform_spec (line 123) | pub fn to_platform_spec(&self) -> Result<PlatformSpec, TargetSpecError> {
    method is_any (line 134) | pub fn is_any(&self) -> bool {
    method deserialize (line 166) | fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
  method serialize (line 146) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type Spec (line 161) | struct Spec {
  type PlatformSpecSummaryDeserialize (line 202) | enum PlatformSpecSummaryDeserialize {

FILE: guppy/src/sorted_set.rs
  type SortedSet (line 8) | pub struct SortedSet<T> {
  type _SortedSetCovariant (line 12) | type _SortedSetCovariant<'a> = SortedSet<&'a ()>;
  function new (line 20) | pub fn new(v: impl Into<Vec<T>>) -> Self {
  function contains (line 30) | pub fn contains(&self, item: &T) -> bool {
  function as_slice (line 35) | pub fn as_slice(&self) -> &[T] {
  function into_inner (line 40) | pub fn into_inner(self) -> Box<[T]> {
  function from_iter (line 49) | fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> Self {
  type Target (line 56) | type Target = [T];
  method deref (line 58) | fn deref(&self) -> &Self::Target {
  function fmt (line 64) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {

FILE: guppy/src/unit_tests/dot_tests.rs
  function dot_fmt (line 12) | fn dot_fmt() {
  type NoEscapeDisplayVisitor (line 65) | pub struct NoEscapeDisplayVisitor;
    method visit_node (line 74) | fn visit_node(&self, node: NR, f: &mut DotWrite<'_, '_>) -> fmt::Result {
    method visit_edge (line 79) | fn visit_edge(&self, edge: ER, f: &mut DotWrite<'_, '_>) -> fmt::Result {

FILE: guppy/tests/graph-tests/cargo_set_tests.rs
  type PackageResolverForTesting (line 12) | struct PackageResolverForTesting<'a, 'g> {
  function new (line 23) | fn new() -> Self {
  function with_filter (line 30) | fn with_filter(f: &'a impl Fn(PackageLink<'g>) -> bool) -> Self {
  function link_to_string (line 38) | fn link_to_string(link: &PackageLink) -> String {
  function links_to_strings (line 48) | fn links_to_strings<'g>(links: impl IntoIterator<Item = PackageLink<'g>>...
  function accept (line 58) | fn accept(&mut self, _query: &PackageQuery<'g>, link: PackageLink<'g>) -...
  function cargo_set_with_resolver (line 64) | fn cargo_set_with_resolver<'g>(
  function cargo_set_package_names (line 82) | fn cargo_set_package_names(cargo_set: &CargoSet) -> Vec<String> {
  function test_package_resolver_visits (line 94) | fn test_package_resolver_visits() {
  function test_package_resolver_filtering_normal_links_on_target (line 253) | fn test_package_resolver_filtering_normal_links_on_target() {
  function test_package_resolver_filtering_build_links_on_target (line 293) | fn test_package_resolver_filtering_build_links_on_target() {
  function test_package_resolver_filtering_links_on_host (line 326) | fn test_package_resolver_filtering_links_on_host() {

FILE: guppy/tests/graph-tests/feature_helpers.rs
  function assert_features_for_package (line 9) | pub(super) fn assert_features_for_package(

FILE: guppy/tests/graph-tests/graph_tests.rs
  function metadata_default_members (line 24) | fn metadata_default_members() {
  function metadata1 (line 51) | fn metadata1() {
  function metadata2 (line 169) | fn metadata2() {
  function metadata_dups (line 189) | fn metadata_dups() {
  function metadata_cycle1 (line 197) | fn metadata_cycle1() {
  function metadata_cycle2 (line 205) | fn metadata_cycle2() {
  function metadata_cycle_features (line 213) | fn metadata_cycle_features() {
  function metadata_cycle1_windows (line 261) | fn metadata_cycle1_windows() {
  function metadata_cycle1_windows_different_drives (line 286) | fn metadata_cycle1_windows_different_drives() {
  function windows_metadata_path_normalization (line 321) | fn windows_metadata_path_normalization() {
  function metadata_targets1 (line 373) | fn metadata_targets1() {
  function metadata_build_targets1 (line 460) | fn metadata_build_targets1() {
  function metadata_proc_macro1 (line 468) | fn metadata_proc_macro1() {
  function metadata_libra (line 497) | fn metadata_libra() {
  function metadata_libra_f0091a4 (line 505) | fn metadata_libra_f0091a4() {
  function metadata_libra_9ffd93b (line 513) | fn metadata_libra_9ffd93b() {
  function mnemos_b3b4da9 (line 595) | fn mnemos_b3b4da9() {
  function hyper_util_7afb1ed (line 604) | fn hyper_util_7afb1ed() {
  function metadata_guppy_44b62fa (line 618) | fn metadata_guppy_44b62fa() {
  type NameVisitor (line 638) | struct NameVisitor;
  method visit_package (line 641) | fn visit_package(&self, package: PackageMetadata<'_>, f: &mut DotWrite<'...
  method visit_link (line 645) | fn visit_link(&self, link: PackageLink<'_>, f: &mut DotWrite<'_, '_>) ->...

FILE: guppy/tests/graph-tests/invalid_tests.rs
  function optional_dev_dep (line 6) | fn optional_dev_dep() {
  function duplicate_workspace_names (line 14) | fn duplicate_workspace_names() {
  function invalid_default_member (line 22) | fn invalid_default_member() {
  function build_targets_empty_kinds (line 30) | fn build_targets_empty_kinds() {
  function build_targets_non_bin (line 38) | fn build_targets_non_bin() {
  function build_targets_duplicate_lib (line 46) | fn build_targets_duplicate_lib() {
  function named_feature_self_loop (line 56) | fn named_feature_self_loop() {
  function proc_macro_mixed_kinds (line 81) | fn proc_macro_mixed_kinds() {
  function workspace_member_different_drive (line 119) | fn workspace_member_different_drive() {
  function assert_invalid (line 126) | fn assert_invalid(json: &str, search_str: &str) {

FILE: guppy/tests/graph-tests/proptest_helpers.rs
  function depends_on (line 270) | pub(super) fn depends_on<'g, G: GraphAssert<'g>>(
  function depends_on_same_id (line 288) | pub(super) fn depends_on_same_id<'g, G: GraphAssert<'g>>(graph: G, query...
  function link_order (line 304) | pub(super) fn link_order(
  function roots (line 334) | pub(super) fn roots<'g, G: GraphAssert<'g>>(
  function resolve_contains (line 383) | pub(super) fn resolve_contains<'g, G: GraphAssert<'g>>(
  type ResolveTree (line 407) | pub(super) enum ResolveTree<G: GraphAssert<'static>> {
  function strategy (line 420) | pub(super) fn strategy(
  function resolve_ops (line 451) | pub(super) fn resolve_ops<G: GraphAssert<'static>>(graph: G, resolve_tre...
  function resolve_ops_impl (line 465) | fn resolve_ops_impl<G: GraphAssert<'static>>(
  function package_feature_set_roundtrip (line 516) | pub(super) fn package_feature_set_roundtrip(
  function feature_set_props (line 557) | pub(super) fn feature_set_props(feature_set: FeatureSet<'_>, direction: ...
  function query_starts_from (line 594) | pub(super) fn query_starts_from<'g, G: GraphAssert<'g>>(

FILE: guppy/tests/graph-tests/weak_namespaced.rs
  function default_features (line 16) | fn default_features() {
  function named_feature_single_dep (line 27) | fn named_feature_single_dep() {
  function named_feature_same_as_dep_plus_feature (line 45) | fn named_feature_same_as_dep_plus_feature() {
  function enabled_non_weak_feature (line 71) | fn enabled_non_weak_feature() {
  function named_feature_does_not_enable_dep_with_same_name (line 95) | fn named_feature_does_not_enable_dep_with_same_name() {
  function enabled_weak_feature_1 (line 114) | fn enabled_weak_feature_1() {
  function enabled_weak_feature_2 (line 141) | fn enabled_weak_feature_2() {
  function enabled_weak_feature_3 (line 166) | fn enabled_weak_feature_3() {
  function disabled_weak_feature_1 (line 192) | fn disabled_weak_feature_1() {
  function disabled_weak_feature_2 (line 215) | fn disabled_weak_feature_2() {
  function platform_not_matched_features (line 239) | fn platform_not_matched_features() {
  function platform_matched_features (line 279) | fn platform_matched_features() {
  function test_feature_presence (line 331) | fn test_feature_presence() {
  function test_edge_upgrades (line 362) | fn test_edge_upgrades() {
  function feature_set_fn (line 404) | fn feature_set_fn(named_features: &[&str]) -> FeatureSet<'static> {
  function make_linux_cargo_set (line 415) | fn make_linux_cargo_set(feature_set: FeatureSet<'static>) -> CargoSet<'s...
  function make_windows_cargo_set (line 419) | fn make_windows_cargo_set(feature_set: FeatureSet<'static>) -> CargoSet<...
  function make_cargo_set (line 423) | fn make_cargo_set(feature_set: FeatureSet<'static>, triple: &'static str...

FILE: internal-tools/benchmarks/benches/package_graph.rs
  function construct_benchmarks (line 13) | pub fn construct_benchmarks(c: &mut Criterion) {
  function query_benchmarks (line 17) | pub fn query_benchmarks(c: &mut Criterion) {
  function make_package_graph (line 94) | fn make_package_graph() -> PackageGraph {
  function make_package_name_hashmap (line 102) | fn make_package_name_hashmap<'g>(
  function id_pairs_strategy (line 116) | fn id_pairs_strategy(graph: &PackageGraph) -> impl Strategy<Value = Vec<...
  function ids_directions_strategy (line 124) | fn ids_directions_strategy(

FILE: internal-tools/cargo-compare/src/check.rs
  type CheckOpts (line 21) | pub struct CheckOpts {
    method exec (line 41) | pub fn exec(self, ctx: &GlobalContext) -> Result<()> {

FILE: internal-tools/cargo-compare/src/common.rs
  type GuppyCargoCommon (line 38) | pub struct GuppyCargoCommon {
    method resolve_cargo (line 60) | pub fn resolve_cargo(&self, ctx: &GlobalContext<'_>) -> anyhow::Result...
    method resolve_guppy (line 135) | pub fn resolve_guppy(&self, ctx: &GlobalContext<'_>) -> Result<Feature...
    method make_target_platform (line 184) | pub fn make_target_platform(&self) -> Result<Platform> {
    method strategy (line 194) | pub fn strategy<'a>(
    method cargo_make_gctx (line 217) | fn cargo_make_gctx(&self, _ctx: &GlobalContext) -> anyhow::Result<carg...
    method cargo_discover_root (line 232) | fn cargo_discover_root(&self, gctx: &cargo::GlobalContext) -> anyhow::...
    method cargo_make_workspace (line 244) | fn cargo_make_workspace<'gctx>(
    method cargo_make_cli_features (line 253) | fn cargo_make_cli_features(&self) -> CliFeatures {
    method guppy_current_platform (line 267) | fn guppy_current_platform(&self) -> Result<Platform> {
  type FeatureMap (line 273) | pub struct FeatureMap {
    method from_guppy (line 279) | fn from_guppy(target_features: &FeatureSet<'_>, host_features: &Featur...
    method feature_set_to_map (line 288) | fn feature_set_to_map(feature_set: &FeatureSet<'_>) -> BTreeMap<Packag...
  function anyhow_to_eyre (line 302) | pub(crate) fn anyhow_to_eyre<T>(x: anyhow::Result<T>) -> Result<T> {
  function query_target_features (line 314) | fn query_target_features(triple: &str) -> Result<TargetFeatures> {

FILE: internal-tools/cargo-compare/src/diff.rs
  type DiffOpts (line 21) | pub struct DiffOpts {
    method exec (line 31) | pub fn exec(self, ctx: &GlobalContext) -> Result<()> {
    method compute_diff (line 42) | pub fn compute_diff<'g>(self, ctx: &'g GlobalContext) -> Result<Target...
  type TargetHostDiff (line 67) | pub struct TargetHostDiff<'g> {
  function new (line 74) | pub fn new(target_diff: FeatureDiff<'g>, host_diff: FeatureDiff<'g>) -> ...
  function any_diff (line 83) | pub fn any_diff(&self) -> bool {
  function fmt (line 91) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  type FeatureDiff (line 101) | pub struct FeatureDiff<'g> {
  function any_diff (line 110) | pub fn any_diff(&self) -> bool {
  function fmt (line 116) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {

FILE: internal-tools/cargo-compare/src/lib.rs
  type CargoCompare (line 25) | pub struct CargoCompare {
    method exec (line 32) | pub fn exec(self) -> Result<()> {
  type Command (line 51) | enum Command {
  type GlobalContext (line 60) | pub struct GlobalContext<'g> {
  function new (line 66) | pub fn new(temp_home: bool, graph: &'g PackageGraph) -> Result<Self> {
  function home_dir (line 78) | pub fn home_dir(&self) -> &Path {
  function graph (line 85) | pub fn graph(&self) -> &'g PackageGraph {

FILE: internal-tools/cargo-compare/src/main.rs
  function main (line 8) | fn main() -> Result<()> {

FILE: internal-tools/cargo-compare/src/tests/fixtures.rs
  type Fixture (line 21) | pub struct Fixture {
    method new (line 46) | pub fn new(
    method graph (line 153) | pub fn graph(&self) -> &PackageGraph {
    method num_proptests (line 158) | pub fn num_proptests(&self) -> u32 {
    method common_strategy (line 176) | pub fn common_strategy(&self) -> impl Strategy<Value = GuppyCargoCommo...

FILE: internal-tools/cargo-compare/src/tests/proptest_helpers.rs
  function compare (line 34) | pub(super) fn compare(graph: &PackageGraph, common: GuppyCargoCommon) ->...

FILE: internal-tools/cargo-compare/src/type_conversions.rs
  type ToGuppy (line 8) | pub trait ToGuppy {
    method to_guppy (line 11) | fn to_guppy(&self) -> Self::Guppy;
    type Guppy (line 15) | type Guppy = guppy::PackageId;
    method to_guppy (line 17) | fn to_guppy(&self) -> Self::Guppy {
    type Guppy (line 24) | type Guppy = BTreeSet<String>;
    method to_guppy (line 26) | fn to_guppy(&self) -> Self::Guppy {

FILE: internal-tools/fixture-manager/src/context.rs
  type ContextImpl (line 8) | pub trait ContextImpl<'g> {
    method dir_name (line 13) | fn dir_name(fixture: &'g JsonFixture) -> Utf8PathBuf;
    method file_name (line 14) | fn file_name(fixture: &'g JsonFixture, item: &Self::IterItem) -> String;
    method iter (line 16) | fn iter(
    method parse_existing (line 21) | fn parse_existing(path: &Utf8Path, contents: String) -> Result<Self::E...
    method is_changed (line 22) | fn is_changed(item: &Self::IterItem, existing: &Self::Existing) -> bool;
    method diff (line 23) | fn diff(
    method write_to_string (line 29) | fn write_to_string(
  type ContextDiff (line 36) | pub trait ContextDiff<'a> {}
  type GenerateContext (line 38) | pub struct GenerateContext<'g, T: ContextImpl<'g>> {
  function new (line 46) | pub fn new(fixture: &'g JsonFixture, args: &T::IterArgs, skip_existing: ...
  type Item (line 66) | type Item = Result<ContextItem<'g, T>>;
  method next (line 68) | fn next(&mut self) -> Option<Self::Item> {
  type ContextItem (line 96) | pub struct ContextItem<'g, T: ContextImpl<'g>> {
  function path (line 104) | pub fn path(&self) -> &Utf8Path {
  function is_changed (line 108) | pub fn is_changed(&self) -> bool {
  function diff (line 118) | pub fn diff(&self) -> String {
  function write_to_path (line 122) | pub fn write_to_path(&self) -> Result<()> {
  function read_contents (line 138) | fn read_contents(file: &Utf8Path) -> Result<Option<String>> {

FILE: internal-tools/fixture-manager/src/hakari_toml.rs
  type HakariTomlContext (line 13) | pub struct HakariTomlContext;
    type IterArgs (line 16) | type IterArgs = usize;
    type IterItem (line 17) | type IterItem = (usize, HakariTomlItem<'g>);
    type Existing (line 18) | type Existing = HakariCargoToml;
    method dir_name (line 20) | fn dir_name(fixture: &'g JsonFixture) -> Utf8PathBuf {
    method file_name (line 28) | fn file_name(fixture: &'g JsonFixture, &(count, _): &Self::IterItem) -...
    method iter (line 32) | fn iter(
    method parse_existing (line 72) | fn parse_existing(path: &Utf8Path, contents: String) -> Result<Self::E...
    method is_changed (line 76) | fn is_changed((_, item): &Self::IterItem, existing: &Self::Existing) -...
    method diff (line 80) | fn diff(
    method write_to_string (line 114) | fn write_to_string(
  type HakariTomlItem (line 137) | pub struct HakariTomlItem<'g> {

FILE: internal-tools/fixture-manager/src/lib.rs
  type FixtureManager (line 18) | pub struct FixtureManager {
    method exec (line 25) | pub fn exec(self) -> Result<()> {
  type Command (line 35) | enum Command {
  function list (line 45) | pub fn list() -> Result<()> {
  type GenerateSummariesOpts (line 54) | pub struct GenerateSummariesOpts {
    constant DEFAULT_COUNT_STR (line 65) | pub const DEFAULT_COUNT_STR: &'static str = "8";
    method default_count (line 68) | pub fn default_count() -> usize {
    method exec (line 122) | pub fn exec(self) -> Result<()> {
  type GenerateHakariOpts (line 76) | pub struct GenerateHakariOpts {
    constant DEFAULT_COUNT_STR (line 87) | pub const DEFAULT_COUNT_STR: &'static str = "4";
    method default_count (line 90) | pub fn default_count() -> usize {
    method exec (line 128) | pub fn exec(self) -> Result<()> {
  type GenerateOpts (line 98) | pub struct GenerateOpts {
    method exec (line 134) | pub fn exec<'g, T: ContextImpl<'g>>(self, args: T::IterArgs) -> Result...
  type GenerateMode (line 115) | pub enum GenerateMode {

FILE: internal-tools/fixture-manager/src/main.rs
  function main (line 8) | fn main() -> Result<()> {

FILE: internal-tools/fixture-manager/src/summaries.rs
  type SummaryContext (line 17) | pub struct SummaryContext;
    type IterArgs (line 20) | type IterArgs = usize;
    type IterItem (line 21) | type IterItem = (usize, Summary);
    type Existing (line 22) | type Existing = Summary;
    method dir_name (line 24) | fn dir_name(fixture: &'g JsonFixture) -> Utf8PathBuf {
    method file_name (line 32) | fn file_name(fixture: &'g JsonFixture, &(count, _): &Self::IterItem) -...
    method iter (line 36) | fn iter(
    method parse_existing (line 78) | fn parse_existing(_: &Utf8Path, contents: String) -> Result<Self::Exis...
    method is_changed (line 82) | fn is_changed((_, summary): &Self::IterItem, existing: &Self::Existing...
    method diff (line 87) | fn diff(
    method write_to_string (line 104) | fn write_to_string(

FILE: internal-tools/fixture-manager/tests/unchanged_tests.rs
  function summaries_unchanged (line 13) | fn summaries_unchanged() -> Result<()> {
  function hakari_unchanged (line 44) | fn hakari_unchanged() -> Result<()> {

FILE: internal-tools/proptest-ext/src/lib.rs
  type ValueGenerator (line 17) | pub struct ValueGenerator {
    method new (line 23) | pub fn new() -> Self {
    method deterministic (line 33) | pub fn deterministic() -> Self {
    method from_seed (line 43) | pub fn from_seed(seed: impl Hash) -> Self {
    method partial_clone (line 62) | pub fn partial_clone(&mut self) -> Self {
    method generate (line 72) | pub fn generate<S: Strategy>(&mut self, strategy: S) -> S::Value {

FILE: target-spec-miette/src/imp.rs
  type IntoMietteDiagnostic (line 12) | pub trait IntoMietteDiagnostic {
    method into_diagnostic (line 19) | fn into_diagnostic(self) -> Self::IntoDiagnostic;
    type IntoDiagnostic (line 23) | type IntoDiagnostic = Box<dyn Diagnostic + Send + Sync + 'static>;
    method into_diagnostic (line 25) | fn into_diagnostic(self) -> Self::IntoDiagnostic {
    type IntoDiagnostic (line 79) | type IntoDiagnostic = ExpressionParseDiagnostic;
    method into_diagnostic (line 81) | fn into_diagnostic(self) -> Self::IntoDiagnostic {
    type IntoDiagnostic (line 140) | type IntoDiagnostic = TripleParseDiagnostic;
    method into_diagnostic (line 142) | fn into_diagnostic(self) -> Self::IntoDiagnostic {
    type IntoDiagnostic (line 198) | type IntoDiagnostic = PlainStringParseDiagnostic;
    method into_diagnostic (line 200) | fn into_diagnostic(self) -> Self::IntoDiagnostic {
    type IntoDiagnostic (line 206) | type IntoDiagnostic = CustomTripleCreateDiagnostic;
    method into_diagnostic (line 208) | fn into_diagnostic(self) -> Self::IntoDiagnostic {
  type ExpressionParseDiagnostic (line 40) | pub struct ExpressionParseDiagnostic(ExpressionParseError);
    method new (line 44) | pub fn new(error: ExpressionParseError) -> Self {
    method fmt (line 50) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method fmt (line 56) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  method source (line 62) | fn source(&self) -> Option<&(dyn StdError + 'static)> {
  method source_code (line 68) | fn source_code(&self) -> Option<&dyn SourceCode> {
  method labels (line 72) | fn labels(&self) -> Option<Box<dyn Iterator<Item = LabeledSpan> + '_>> {
  type TripleParseDiagnostic (line 88) | pub struct TripleParseDiagnostic {
    method new (line 96) | pub fn new(error: TripleParseError) -> Self {
    method fmt (line 103) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method fmt (line 109) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  method source (line 115) | fn source(&self) -> Option<&(dyn StdError + 'static)> {
  method source_code (line 121) | fn source_code(&self) -> Option<&dyn SourceCode> {
  method labels (line 125) | fn labels(&self) -> Option<Box<dyn Iterator<Item = LabeledSpan> + '_>> {
  type PlainStringParseDiagnostic (line 149) | pub struct PlainStringParseDiagnostic {
    method new (line 157) | pub fn new(error: PlainStringParseError) -> Self {
    method fmt (line 164) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method fmt (line 170) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  method source (line 178) | fn source(&self) -> Option<&(dyn StdError + 'static)> {
  method source_code (line 184) | fn source_code(&self) -> Option<&dyn SourceCode> {
  method labels (line 188) | fn labels(&self) -> Option<Box<dyn Iterator<Item = LabeledSpan> + '_>> {
  type CustomTripleCreateDiagnostic (line 214) | pub struct CustomTripleCreateDiagnostic(CustomTripleCreateError);
    method new (line 218) | pub fn new(error: CustomTripleCreateError) -> Self {
    method fmt (line 224) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method fmt (line 230) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  method source (line 236) | fn source(&self) -> Option<&(dyn StdError + 'static)> {
  method source_code (line 247) | fn source_code(&self) -> Option<&dyn SourceCode> {
  method labels (line 251) | fn labels(&self) -> Option<Box<dyn Iterator<Item = LabeledSpan> + '_>> {

FILE: target-spec-miette/tests/datatest-snapshot/cfg.rs
  function cfg_invalid (line 11) | pub(crate) fn cfg_invalid(path: &Utf8Path, contents: String) -> datatest...

FILE: target-spec-miette/tests/datatest-snapshot/custom.rs
  function custom_invalid (line 14) | pub(crate) fn custom_invalid(path: &Utf8Path, contents: String) -> datat...

FILE: target-spec-miette/tests/datatest-snapshot/expr.rs
  function expr_invalid (line 8) | pub(crate) fn expr_invalid(path: &Utf8Path, contents: String) -> datates...

FILE: target-spec-miette/tests/datatest-snapshot/helpers.rs
  function snapbox_assert_ansi (line 8) | pub(crate) fn snapbox_assert_ansi(test_name: &str, path: &Utf8Path, actu...
  function snapshot_path (line 28) | fn snapshot_path(test_name: &str, file_name: &str, ext: &str) -> PathBuf {

FILE: target-spec-miette/tests/integration/main.rs
  function unavailable_snapshot (line 9) | fn unavailable_snapshot() {

FILE: target-spec/build.rs
  function main (line 6) | fn main() {

FILE: target-spec/src/custom.rs
  type TargetDefinition (line 15) | pub(crate) struct TargetDefinition {
    method into_target_info (line 57) | pub(crate) fn into_target_info(self, triple: Cow<'static, str>) -> Tar...
  function deserialize (line 104) | pub(super) fn deserialize<'de, D>(deserializer: D) -> Result<u8, D::Error>
  function serialize (line 141) | pub(super) fn serialize<S>(value: &u8, serializer: S) -> Result<S::Ok, S...
  type Endian (line 154) | enum Endian {
    method to_cfg_expr (line 161) | fn to_cfg_expr(self) -> cfg_expr::targets::Endian {
  type AllTargets (line 176) | struct AllTargets(BTreeMap<String, TargetDefinition>);
  function test_all_builtin_specs_recognized (line 179) | fn test_all_builtin_specs_recognized() {

FILE: target-spec/src/custom_cfg.rs
  function parse_cfg_output (line 34) | pub(crate) fn parse_cfg_output(
  type CfgValue (line 49) | enum CfgValue {
    method set (line 70) | fn set(
    method into_option (line 93) | fn into_option(self) -> Option<String> {
    method require (line 104) | fn require(
  type ParsedCfg (line 125) | struct ParsedCfg {
    method parse (line 141) | fn parse(triple: &str, input: &str) -> Result<Self, CustomTripleCreate...
    method into_target_info_and_features (line 259) | fn into_target_info_and_features(
  function test_parse_x86_64_linux (line 346) | fn test_parse_x86_64_linux() {
  function test_parse_big_endian (line 393) | fn test_parse_big_endian() {
  function test_parse_multiple_families (line 419) | fn test_parse_multiple_families() {
  function test_missing_required_arch (line 436) | fn test_missing_required_arch() {
  function test_missing_required_pointer_width (line 453) | fn test_missing_required_pointer_width() {
  function test_malformed_quoting (line 470) | fn test_malformed_quoting() {
  function test_invalid_pointer_width (line 489) | fn test_invalid_pointer_width() {
  function test_missing_required_endian (line 510) | fn test_missing_required_endian() {
  function test_missing_required_panic (line 533) | fn test_missing_required_panic() {
  function test_invalid_has_atomic (line 553) | fn test_invalid_has_atomic() {
  function test_unknown_endian_value (line 584) | fn test_unknown_endian_value() {
  function test_parse_bare_metal_target (line 614) | fn test_parse_bare_metal_target() {
  function test_duplicate_single_valued_key (line 646) | fn test_duplicate_single_valued_key() {
  function test_roundtrip_against_rustc (line 680) | fn test_roundtrip_against_rustc() {

FILE: target-spec/src/errors.rs
  type Error (line 11) | pub enum Error {
    method fmt (line 32) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method source (line 54) | fn source(&self) -> Option<&(dyn error::Error + 'static)> {
  type ExpressionParseError (line 73) | pub struct ExpressionParseError {
    method new (line 86) | pub(crate) fn new(input: &str, error: cfg_expr::ParseError) -> Self {
    method fmt (line 103) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type ExpressionParseErrorKind (line 113) | pub enum ExpressionParseErrorKind {
    method from_cfg_expr (line 145) | fn from_cfg_expr(reason: cfg_expr::error::Reason) -> Self {
    method fmt (line 166) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type PlainStringParseError (line 202) | pub struct PlainStringParseError {
    method new (line 214) | pub(crate) fn new(input: String, char_index: usize, character: char) -...
    method span (line 223) | pub fn span(&self) -> std::ops::Range<usize> {
    method fmt (line 230) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method source (line 241) | fn source(&self) -> Option<&(dyn error::Error + 'static)> {
  type TripleParseError (line 253) | pub struct TripleParseError {
    method new (line 259) | pub(crate) fn new(
    method new_strict (line 269) | pub(crate) fn new_strict(triple_str: Cow<'static, str>) -> Self {
    method triple_str (line 277) | pub fn triple_str(&self) -> &str {
    method fmt (line 283) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method source (line 289) | fn source(&self) -> Option<&(dyn error::Error + 'static)> {
  type TripleParseErrorKind (line 295) | enum TripleParseErrorKind {
    method fmt (line 301) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method source (line 316) | fn source(&self) -> Option<&(dyn error::Error + 'static)> {
  type CustomTripleCreateError (line 327) | pub enum CustomTripleCreateError {
    method input (line 410) | pub fn input(&self) -> Option<&str> {
    method input_string (line 419) | pub fn input_string(&self) -> Option<&String> {
    method line_and_column (line 442) | pub fn line_and_column(&self) -> Option<(usize, usize)> {
    method label (line 463) | pub fn label(&self) -> Option<String> {
    method fmt (line 491) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method source (line 540) | fn source(&self) -> Option<&(dyn error::Error + 'static)> {
  type RustcVersionVerboseParseError (line 561) | pub enum RustcVersionVerboseParseError {
    method fmt (line 573) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    method source (line 589) | fn source(&self) -> Option<&(dyn error::Error + 'static)> {
  function test_expression_parse_error_span (line 604) | fn test_expression_parse_error_span(input: &str, expected_span: std::ops...
  function test_plain_string_parse_error_span (line 611) | fn test_plain_string_parse_error_span(input: &str, expected_span: std::o...

FILE: target-spec/src/platform.rs
  type Platform (line 35) | pub struct Platform {
    method new (line 45) | pub fn new(
    method new_strict (line 57) | pub fn new_strict(
    method from_rustc_version_verbose (line 67) | pub fn from_rustc_version_verbose(
    method current (line 84) | pub fn current() -> Result<Self, Error> {
    method build_target (line 106) | pub fn build_target() -> Result<Self, Error> {
    method from_triple (line 117) | pub fn from_triple(triple: Triple, target_features: TargetFeatures) ->...
    method new_custom (line 127) | pub fn new_custom(
    method new_custom_cfg (line 143) | pub fn new_custom_cfg(
    method add_flags (line 164) | pub fn add_flags(&mut self, flags: impl IntoIterator<Item = impl Into<...
    method triple_str (line 169) | pub fn triple_str(&self) -> &str {
    method flags (line 174) | pub fn flags(&self) -> impl ExactSizeIterator<Item = &str> {
    method has_flag (line 179) | pub fn has_flag(&self, flag: impl AsRef<str>) -> bool {
    method is_standard (line 196) | pub fn is_standard(&self) -> bool {
    method is_builtin (line 213) | pub fn is_builtin(&self) -> bool {
    method is_heuristic (line 232) | pub fn is_heuristic(&self) -> bool {
    method is_custom (line 241) | pub fn is_custom(&self) -> bool {
    method triple (line 246) | pub fn triple(&self) -> &Triple {
    method target_features (line 251) | pub fn target_features(&self) -> &TargetFeatures {
    method custom_json (line 256) | pub(crate) fn custom_json(&self) -> Option<&str> {
    method custom_cfg_text (line 261) | pub(crate) fn custom_cfg_text(&self) -> Option<&str> {
  type TargetFeatures (line 269) | pub enum TargetFeatures {
    method features (line 280) | pub fn features(features: impl IntoIterator<Item = impl Into<Cow<'stat...
    method none (line 285) | pub fn none() -> Self {
    method matches (line 291) | pub fn matches(&self, feature: &str) -> Option<bool> {
  constant LINUX_CFG (line 306) | const LINUX_CFG: &str = "\
  function new_custom_cfg_basic (line 320) | fn new_custom_cfg_basic() {
  function new_custom_cfg_evaluates_expressions (line 333) | fn new_custom_cfg_evaluates_expressions() {
  function new_custom_cfg_with_features (line 361) | fn new_custom_cfg_with_features() {
  function new_custom_cfg_with_no_features (line 374) | fn new_custom_cfg_with_no_features() {

FILE: target-spec/src/proptest_helpers.rs
  method strategy (line 32) | pub fn strategy(
  method filtered_strategy (line 50) | pub fn filtered_strategy(
  function flag_strategy (line 71) | pub fn flag_strategy() -> impl Strategy<Value = &'static str> {
  type Parameters (line 78) | type Parameters = ();
  type Strategy (line 79) | type Strategy = BoxedStrategy<Self>;
  method arbitrary_with (line 81) | fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy {

FILE: target-spec/src/simple_eval.rs
  function eval (line 18) | pub fn eval(spec_or_triple: &str, platform: &str) -> Result<Option<bool>...
  function test_windows (line 29) | fn test_windows() {
  function test_not_target_os (line 37) | fn test_not_target_os() {
  function test_not_target_os_false (line 49) | fn test_not_target_os_false() {
  function test_exact_triple (line 61) | fn test_exact_triple() {
  function test_redox (line 69) | fn test_redox() {
  function test_bogus_families (line 81) | fn test_bogus_families() {
  function test_target_feature (line 146) | fn test_target_feature() {

FILE: target-spec/src/spec.rs
  type TargetSpec (line 71) | pub enum TargetSpec {
    method new (line 86) | pub fn new(input: impl Into<Cow<'static, str>>) -> Result<Self, Error> {
    method looks_like_expression (line 105) | pub fn looks_like_expression(input: &str) -> bool {
    method looks_like_plain_string (line 116) | pub fn looks_like_plain_string(input: &str) -> bool {
    method is_known (line 129) | pub fn is_known(&self) -> bool {
    method eval (line 143) | pub fn eval(&self, platform: &Platform) -> Option<bool> {
    method fmt (line 160) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type Err (line 152) | type Err = Error;
  method from_str (line 154) | fn from_str(input: &str) -> Result<Self, Self::Err> {
  type TargetSpecExpression (line 172) | pub struct TargetSpecExpression {
    method new (line 181) | pub fn new(input: &str) -> Result<Self, ExpressionParseError> {
    method expression_str (line 190) | pub fn expression_str(&self) -> &str {
    method eval (line 198) | pub fn eval(&self, platform: &Platform) -> Option<bool> {
    method fmt (line 235) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type Err (line 227) | type Err = ExpressionParseError;
  method from_str (line 229) | fn from_str(input: &str) -> Result<Self, Self::Err> {
  type TargetSpecPlainString (line 244) | pub struct TargetSpecPlainString(Cow<'static, str>);
    method new (line 248) | pub fn new(input: impl Into<Cow<'static, str>>) -> Result<Self, PlainS...
    method as_str (line 255) | pub fn as_str(&self) -> &str {
    method validate (line 259) | fn validate(input: &str) -> Result<(), PlainStringParseError> {
    method fmt (line 280) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type Err (line 272) | type Err = PlainStringParseError;
  method from_str (line 274) | fn from_str(input: &str) -> Result<Self, Self::Err> {
  function test_triple (line 294) | fn test_triple() {
  function test_single (line 303) | fn test_single() {
  function test_target_abi (line 317) | fn test_target_abi() {
  function test_not (line 338) | fn test_not() {
  function test_testequal (line 346) | fn test_testequal() {
  function test_identifier_like_triple (line 361) | fn test_identifier_like_triple() {
  function test_triple_string_identifier (line 369) | fn test_triple_string_identifier() {
  function test_unknown_triple (line 388) | fn test_unknown_triple() {
  function test_unknown_flag (line 399) | fn test_unknown_flag() {
  function test_unknown_predicate (line 414) | fn test_unknown_predicate() {
  function test_extra (line 442) | fn test_extra() {
  function test_incomplete (line 448) | fn test_incomplete() {

FILE: target-spec/src/summaries.rs
  method to_summary (line 20) | pub fn to_summary(&self) -> PlatformSummary {
  type PlatformSummary (line 33) | pub struct PlatformSummary {
    method new (line 62) | pub fn new(triple_str: impl Into<String>) -> Self {
    method with_custom_json (line 82) | pub fn with_custom_json(mut self, custom_json: impl Into<String>) -> S...
    method with_custom_cfg (line 93) | pub fn with_custom_cfg(mut self, custom_cfg: impl Into<String>) -> Self {
    method with_target_features (line 100) | pub fn with_target_features(mut self, target_features: TargetFeaturesS...
    method with_added_flags (line 106) | pub fn with_added_flags(mut self, flags: impl IntoIterator<Item = impl...
    method from_platform (line 112) | pub fn from_platform(platform: &Platform) -> Self {
    method to_platform (line 125) | pub fn to_platform(&self) -> Result<Platform, Error> {
    method deserialize (line 224) | fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
  type TargetFeaturesSummary (line 179) | pub enum TargetFeaturesSummary {
    method new (line 193) | pub fn new(target_features: &TargetFeatures) -> Self {
    method to_target_features (line 204) | pub fn to_target_features(&self) -> TargetFeatures {
    method deserialize (line 293) | fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
  type PlatformSummaryDeserialize (line 256) | enum PlatformSummaryDeserialize {
  method serialize (line 280) | fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  type TargetFeaturesDeserialize (line 317) | enum TargetFeaturesDeserialize {
  function platform_deserialize_valid (line 330) | fn platform_deserialize_valid() {

FILE: target-spec/src/triple.rs
  type Triple (line 54) | pub struct Triple {
    method new (line 60) | pub fn new(triple_str: impl Into<Cow<'static, str>>) -> Result<Self, T...
    method new_strict (line 69) | pub fn new_strict(triple_str: impl Into<Cow<'static, str>>) -> Result<...
    method from_rustc_version_verbose (line 91) | pub fn from_rustc_version_verbose(output: impl AsRef<[u8]>) -> Result<...
    method new_custom (line 120) | pub fn new_custom(
    method new_custom_cfg (line 155) | pub fn new_custom_cfg(
    method as_str (line 173) | pub fn as_str(&self) -> &str {
    method is_standard (line 190) | pub fn is_standard(&self) -> bool {
    method is_builtin (line 206) | pub fn is_builtin(&self) -> bool {
    method is_heuristic (line 225) | pub fn is_heuristic(&self) -> bool {
    method is_custom (line 234) | pub fn is_custom(&self) -> bool {
    method eval (line 243) | pub fn eval(&self, platform: &Platform) -> bool {
    method matches (line 249) | pub(crate) fn matches(&self, tp: &TargetPredicate) -> bool {
    method custom_json (line 254) | pub(crate) fn custom_json(&self) -> Option<&str> {
    method custom_cfg_text (line 259) | pub(crate) fn custom_cfg_text(&self) -> Option<&str> {
  type Err (line 265) | type Err = TripleParseError;
  method from_str (line 267) | fn from_str(triple_str: &str) -> Result<Self, Self::Err> {
  type TripleInner (line 275) | enum TripleInner {
    method new (line 310) | fn new(triple_str: Cow<'static, str>) -> Result<Self, TripleParseError> {
    method new_strict (line 326) | fn new_strict(triple_str: Cow<'static, str>) -> Result<Self, TriplePar...
    method from_borrowed_str (line 333) | fn from_borrowed_str(triple_str: &str) -> Result<Self, TripleParseErro...
    method is_standard (line 352) | fn is_standard(&self) -> bool {
    method is_builtin (line 360) | fn is_builtin(&self) -> bool {
    method is_heuristic (line 369) | fn is_heuristic(&self) -> bool {
    method is_custom (line 378) | fn is_custom(&self) -> bool {
    method as_str (line 386) | fn as_str(&self) -> &str {
    method matches (line 395) | fn matches(&self, tp: &TargetPredicate) -> bool {
    method custom_json (line 405) | pub(crate) fn custom_json(&self) -> Option<&str> {
    method custom_cfg_text (line 418) | pub(crate) fn custom_cfg_text(&self) -> Option<&str> {
    method project (line 430) | fn project(&self) -> TripleInnerProjected<'_> {
    method hash (line 475) | fn hash<H: hash::Hasher>(&self, state: &mut H) {
  type CustomSource (line 300) | pub(crate) enum CustomSource {
  type TripleInnerProjected (line 444) | enum TripleInnerProjected<'a> {
  method eq (line 453) | fn eq(&self, other: &Self) -> bool {
  method partial_cmp (line 462) | fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
  method cmp (line 469) | fn cmp(&self, other: &Self) -> Ordering {
  function test_parse (line 486) | fn test_parse() {
  function test_parse_rustc_version_verbose (line 515) | fn test_parse_rustc_version_verbose() {

FILE: tools/cargo-hakari/src/cargo_cli.rs
  type CargoCli (line 11) | pub(crate) struct CargoCli<'a> {
  function new (line 19) | pub(crate) fn new(command: &'a str, output: OutputContext) -> Self {
  function add_arg (line 29) | pub(crate) fn add_arg(&mut self, arg: &'a str) -> &mut Self {
  function add_args (line 34) | pub(crate) fn add_args(&mut self, args: impl IntoIterator<Item = &'a str...
  function all_args (line 39) | pub(crate) fn all_args(&self) -> Vec<&str> {
  function to_expression (line 45) | pub(crate) fn to_expression(&self) -> duct::Expression {
  function cargo_path (line 64) | fn cargo_path() -> Utf8PathBuf {

FILE: tools/cargo-hakari/src/command.rs
  type Args (line 49) | pub struct Args {
    method exec (line 60) | pub fn exec(self) -> Result<i32> {
  type GlobalOpts (line 66) | struct GlobalOpts {
  type Command (line 73) | enum Command {
    method exec (line 105) | fn exec(self, output: OutputOpts) -> Result<i32> {
  type CommandWithBuilder (line 168) | enum CommandWithBuilder {
    method exec (line 274) | fn exec(
  type PackageSelection (line 435) | struct PackageSelection {
    method to_package_set (line 443) | fn to_package_set<'g>(&self, graph: &'g PackageGraph) -> Result<Packag...
  function cwd_rel_to_workspace_rel (line 456) | fn cwd_rel_to_workspace_rel(path: &Utf8Path, workspace_root: &Utf8Path) ...
  function make_builder_and_output (line 472) | fn make_builder_and_output(
  function write_to_cargo_toml (line 494) | fn write_to_cargo_toml(
  function apply_on_dialog (line 527) | fn apply_on_dialog(

FILE: tools/cargo-hakari/src/helpers.rs
  function read_contents (line 12) | pub(crate) fn read_contents(
  function regenerate_lockfile (line 38) | pub(crate) fn regenerate_lockfile(output: OutputContext) -> Result<()> {
  function test_read_contents (line 57) | fn test_read_contents() -> Result<()> {

FILE: tools/cargo-hakari/src/main.rs
  function executable_name (line 11) | fn executable_name(subcommand: &str) -> String {
  function args (line 23) | fn args() -> impl Iterator<Item = String> {
  function main (line 33) | fn main() -> Result<()> {

FILE: tools/cargo-hakari/src/output.rs
  type OutputOpts (line 12) | pub(crate) struct OutputOpts {
    method init (line 43) | pub(crate) fn init(self) -> OutputContext {
  type OutputContext (line 80) | pub(crate) struct OutputContext {
  function format_fn (line 87) | fn format_fn(f: &mut Formatter, record: &Record<'_>) -> std::io::Result<...
  function stderr_supports_color (line 117) | fn stderr_supports_color() -> bool {
  type Color (line 126) | pub enum Color {
    method init_colored (line 133) | fn init_colored(self) {
    method is_enabled (line 141) | pub(crate) fn is_enabled(self) -> bool {
    method to_arg (line 150) | pub(crate) fn to_arg(self) -> &'static str {
    type Err (line 160) | type Err = String;
    method from_str (line 162) | fn from_str(s: &str) -> Result<Self, Self::Err> {
  type Styles (line 175) | pub(crate) struct Styles {
    method colorize (line 184) | fn colorize(&mut self) {

FILE: tools/cargo-hakari/src/publish.rs
  function publish_hakari (line 11) | pub(crate) fn publish_hakari(
  type TempRemoveDep (line 68) | struct TempRemoveDep<'g> {
  function new (line 73) | fn new(
  function none (line 111) | fn none() -> Self {
  function is_none (line 115) | fn is_none(&self) -> bool {
  function finish (line 119) | fn finish(&mut self, success: bool) -> Result<()> {
  method drop (line 131) | fn drop(&mut self) {
  type TempRemoveDepInner (line 138) | struct TempRemoveDepInner<'g> {
  function finish (line 145) | fn finish(self, success: bool) -> Result<()> {

FILE: tools/determinator/src/determinator.rs
  type Determinator (line 37) | pub struct Determinator<'g, 'a> {
  function new (line 49) | pub fn new(old: &'a PackageGraph, new: &'g PackageGraph) -> Self {
  function add_changed_paths (line 94) | pub fn add_changed_paths(
  function match_path (line 112) | pub fn match_path(
  function set_rules (line 128) | pub fn set_rules(&mut self, rules: &DeterminatorRules) -> Result<&mut Se...
  function set_cargo_options (line 140) | pub fn set_cargo_options(&mut self, cargo_options: &'a CargoOptions<'a>)...
  function default_cargo_options (line 151) | pub fn default_cargo_options() -> CargoOptions<'static> {
  function set_features_only (line 171) | pub fn set_features_only<'b>(
  function compute (line 205) | pub fn compute(&self) -> DeterminatorSet<'g> {
  type DeterminatorSet (line 260) | pub struct DeterminatorSet<'g> {
  type BuildState (line 286) | struct BuildState<'g, 'a, 'b> {
  function new (line 295) | fn new(determinator: &'b Determinator<'g, 'a>) -> Self {
  function process_path (line 308) | fn process_path(mut self, path: &Utf8Path) -> Option<Self> {
  function process_build_summaries (line 323) | fn process_build_summaries(&mut self) {
  function build_summaries_changed (line 344) | fn build_summaries_changed(&self, name: &str, package: PackageMetadata<'...
  function process_path (line 372) | fn process_path<'g>(
  type CargoBuildCache (line 429) | struct CargoBuildCache<'g> {
  function new (line 434) | fn new(determinator: &Determinator<'g, '_>) -> Self {
  type BuildResult (line 461) | struct BuildResult<'g> {
  function new (line 469) | fn new(
  function unified_workspace_set (line 509) | fn unified_workspace_set(&self, workspace_set: &PackageSet<'g>) -> Packa...
  function is_changed (line 524) | fn is_changed(&self, other: &BuildResult<'_>, cargo_options: &CargoOptio...
  function all_cargo_sets (line 540) | fn all_cargo_sets<'a>(&'a self) -> impl Iterator<Item = &'a CargoSet<'g>...
  function make_cargo_set (line 547) | fn make_cargo_set<'x>(
  type ReverseIndex (line 561) | struct ReverseIndex<'g> {
  type ReverseIndexEdge (line 568) | enum ReverseIndexEdge {
  function new (line 576) | fn new(determinator: &Determinator<'g, '_>, build_cache: &CargoBuildCach...
  function affected_closure (line 624) | fn affected_closure(

FILE: tools/determinator/src/errors.rs
  type RulesError (line 11) | pub struct RulesError {
    method rule_index (line 18) | pub fn rule_index(&self) -> RuleIndex {
    method kind (line 23) | pub fn kind(&self) -> &RulesErrorKind {
    method resolve_ref (line 31) | pub(crate) fn resolve_ref(rule_index: RuleIndex, err: guppy::Error) ->...
    method glob_parse (line 38) | pub(crate) fn glob_parse(rule_index: RuleIndex, err: globset::Error) -...
    method fmt (line 48) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
    method source (line 58) | fn source(&self) -> Option<&(dyn error::Error + 'static)> {
  type RulesErrorKind (line 69) | pub enum RulesErrorKind {
    method fmt (line 83) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {

FILE: tools/determinator/src/paths0.rs
  type Utf8Paths0 (line 70) | pub struct Utf8Paths0 {
    method new (line 78) | pub fn new(buf: impl Into<String>) -> Self {
    method from_bytes (line 91) | pub fn from_bytes(buf: impl Into<Vec<u8>>) -> Result<Self, (Vec<u8>, U...
    method new_forward_slashes (line 102) | pub fn new_forward_slashes(buf: impl Into<String>) -> Self {
    method iter (line 112) | pub fn iter<'a>(&'a self) -> Box<dyn Iterator<Item = &'a Utf8Path> + '...
    method validate_utf8 (line 120) | fn validate_utf8(buf: Vec<u8>) -> Result<String, (Vec<u8>, Utf8Error)> {
    method strip_trailing_null_byte (line 136) | fn strip_trailing_null_byte(mut buf: String) -> Self {
  type Item (line 146) | type Item = &'a Utf8Path;
  type IntoIter (line 147) | type IntoIter = Box<dyn Iterator<Item = &'a Utf8Path> + 'a>;
  method into_iter (line 149) | fn into_iter(self) -> Self::IntoIter {
  function basic (line 164) | fn basic() {
  function backslashes (line 178) | fn backslashes() {
  function forward_slashes (line 186) | fn forward_slashes() {
  function paths_eq (line 195) | fn paths_eq(bytes: impl Into<Vec<u8>>, expected: &[&str]) {
  function paths_eq_fwd (line 204) | fn paths_eq_fwd(bytes: impl Into<Vec<u8>>, expected: &[&str]) {

FILE: tools/determinator/src/rules.rs
  type DeterminatorRules (line 121) | pub struct DeterminatorRules {
    method parse (line 169) | pub fn parse(s: &str) -> Result<Self, toml::de::Error> {
    method default_rules (line 192) | pub fn default_rules() -> &'static DeterminatorRules {
  method default (line 145) | fn default() -> Self {
  function default_true (line 155) | fn default_true() -> bool {
  type PathRule (line 217) | pub struct PathRule {
  type DeterminatorPostRule (line 259) | pub enum DeterminatorPostRule {
  type PackageRule (line 314) | pub struct PackageRule {
  type DeterminatorMarkChanged (line 366) | pub enum DeterminatorMarkChanged {
  type PathMatch (line 387) | pub enum PathMatch {
  type RuleIndex (line 404) | pub enum RuleIndex {
    method fmt (line 416) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  type RulesImpl (line 431) | pub(crate) struct RulesImpl<'g> {
  function new (line 437) | pub(crate) fn new(
  type PathRuleImpl (line 533) | pub(crate) struct PathRuleImpl<'g> {
  type PackageRuleImpl (line 541) | pub(crate) struct PackageRuleImpl<'g> {
  type MarkChangedImpl (line 547) | pub(crate) enum MarkChangedImpl<'g> {
  function new (line 553) | fn new(
  function serialize (line 570) | pub fn serialize<S>(
  function deserialize (line 583) | pub fn deserialize<'de, D>(deserializer: D) -> Result<DeterminatorMarkCh...
  type MarkChangedDeserialized (line 603) | enum MarkChangedDeserialized {
  function parse (line 614) | fn parse() {
  function parse_empty (line 677) | fn parse_empty() {
  function parse_bad (line 688) | fn parse_bad() {

FILE: tools/determinator/tests/determinator_tests.rs
  function guppy_no_rules (line 15) | fn guppy_no_rules() {
  function guppy_path_rules (line 49) | fn guppy_path_rules() {
  function guppy_package_rules (line 188) | fn guppy_package_rules() {
  function guppy_package_rules_2 (line 285) | fn guppy_package_rules_2() {
  function guppy_deps (line 319) | fn guppy_deps() {
  function guppy_match_paths (line 390) | fn guppy_match_paths() {
  function git_match_paths (line 446) | fn git_match_paths() {
  function git_match_paths_backslashes (line 453) | fn git_match_paths_backslashes() {
  function git_match_paths_impl (line 460) | fn git_match_paths_impl(paths: Utf8Paths0) {
  function read_options (line 514) | fn read_options(fixture: &JsonFixture, toml_name: &str) -> DeterminatorR...

FILE: tools/hakari/src/cargo_toml.rs
  type HakariCargoToml (line 62) | pub struct HakariCargoToml {
    constant BEGIN_SECTION (line 73) | pub const BEGIN_SECTION: &'static str = "\n### BEGIN HAKARI SECTION\n";
    constant END_SECTION (line 77) | pub const END_SECTION: &'static str = "\n### END HAKARI SECTION\n";
    method new (line 86) | pub fn new(toml_path: impl Into<Utf8PathBuf>) -> Result<Self, CargoTom...
    method new_relative (line 104) | pub fn new_relative(
    method new_in_memory (line 119) | pub fn new_in_memory(
    method toml_path (line 150) | pub fn toml_path(&self) -> &Utf8Path {
    method contents (line 155) | pub fn contents(&self) -> &str {
    method generated_offsets (line 160) | pub fn generated_offsets(&self) -> (usize, usize) {
    method generated_contents (line 167) | pub fn generated_contents(&self) -> &str {
    method is_changed (line 172) | pub fn is_changed(&self, toml: &str) -> bool {
    method diff_toml (line 184) | pub fn diff_toml<'a>(&'a self, toml: &'a str) -> Patch<'a, str> {
    method write_to_file (line 196) | pub fn write_to_file(self, toml: &str) -> Result<bool, CargoTomlError> {
    method write (line 219) | pub fn write(&self, toml: &str, mut out: impl io::Write) -> io::Result...
    method write_to_fmt (line 231) | pub fn write_to_fmt(&self, toml: &str, mut out: impl fmt::Write) -> fm...
  type CargoTomlError (line 242) | pub enum CargoTomlError {
    method fmt (line 261) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
    method source (line 280) | fn source(&self) -> Option<&(dyn error::Error + 'static)> {

FILE: tools/hakari/src/cli_ops/initialize.rs
  constant CRATE_TEMPLATE_DIR (line 10) | const CRATE_TEMPLATE_DIR: Dir = include_dir!("$CARGO_MANIFEST_DIR/templa...
  constant CONFIG_TEMPLATE (line 11) | const CONFIG_TEMPLATE: &str = include_str!("../../templates/hakari.toml-...
  type HakariInit (line 15) | pub struct HakariInit<'g, 'a> {
  function new (line 28) | pub fn new(
  function set_config (line 90) | pub fn set_config(
  function set_cargo_toml_comment (line 107) | pub fn set_cargo_toml_comment(&mut self, comment: &'a str) -> &mut Self {
  function make_ops (line 113) | pub fn make_ops(&self) -> WorkspaceOps<'g, 'a> {
  function make_new_crate_op (line 124) | fn make_new_crate_op(&self) -> WorkspaceOp<'g, 'a> {
  type InitError (line 177) | pub enum InitError {
    method fmt (line 219) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
    method source (line 253) | fn source(&self) -> Option<&(dyn error::Error + 'static)> {

FILE: tools/hakari/src/cli_ops/manage_deps.rs
  function manage_dep_ops (line 25) | pub fn manage_dep_ops(&self, workspace_set: &PackageSet<'g>) -> Option<W...
  function add_dep_ops (line 78) | pub fn add_dep_ops(
  function remove_dep_ops (line 126) | pub fn remove_dep_ops(
  function needs_update_v2 (line 157) | fn needs_update_v2(

FILE: tools/hakari/src/cli_ops/workspace_ops.rs
  type WorkspaceOps (line 22) | pub struct WorkspaceOps<'g, 'a> {
  function new (line 28) | pub(crate) fn new(
  function display (line 40) | pub fn display<'ops>(&'ops self) -> WorkspaceOpsDisplay<'g, 'a, 'ops> {
  function is_empty (line 46) | pub fn is_empty(&self) -> bool {
  function apply (line 53) | pub fn apply(&self) -> Result<(), ApplyError> {
  type WorkspaceOp (line 70) | pub(crate) enum WorkspaceOp<'g, 'a> {
  function apply (line 91) | fn apply(&self, canonical_workspace_root: &Utf8Path) -> Result<(), Apply...
  function create_new_crate (line 146) | fn create_new_crate(
  function add_to_root_toml (line 172) | fn add_to_root_toml(
  function get_workspace_members_array (line 232) | fn get_workspace_members_array<'doc>(
  function add_to_cargo_toml (line 285) | fn add_to_cargo_toml(
  function inline_table_for_add (line 312) | fn inline_table_for_add(
  function remove_from_cargo_toml (line 363) | fn remove_from_cargo_toml(name: &str, package: PackageMetadata<'g>) -> R...
  function get_or_insert_dependencies_table (line 374) | fn get_or_insert_dependencies_table<'doc>(
  function decorate (line 407) | fn decorate(existing: &Value, new: impl Into<Value>) -> Value {
  function with_forward_slashes (line 416) | fn with_forward_slashes(path: &Utf8Path) -> Utf8PathBuf {
  function canonical_rel_path (line 425) | fn canonical_rel_path(
  function read_toml (line 450) | fn read_toml(manifest_path: &Utf8Path) -> Result<DocumentMut, ApplyError> {
  function write_contents (line 457) | fn write_contents(contents: &[u8], path: &Utf8Path) -> Result<(), ApplyE...
  function write_document (line 461) | fn write_document(document: &DocumentMut, path: &Utf8Path) -> Result<(),...
  function write_atomic (line 465) | fn write_atomic(
  type ApplyError (line 480) | pub struct ApplyError {
    method message (line 489) | pub fn message(&self) -> &str {
    method path (line 495) | pub fn path(&self) -> &Utf8Path {
    method io (line 502) | fn io(message: impl Into<String>, path: impl Into<Utf8PathBuf>, err: i...
    method toml (line 510) | fn toml(
    method misc (line 522) | fn misc(message: impl Into<String>, path: impl Into<Utf8PathBuf>) -> S...
    method fmt (line 532) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
    method source (line 538) | fn source(&self) -> Option<&(dyn error::Error + 'static)> {
  type ApplyErrorKind (line 548) | enum ApplyErrorKind {
  type WorkspaceOpsDisplay (line 556) | pub struct WorkspaceOpsDisplay<'g, 'a, 'ops> {
  function new (line 562) | fn new(ops: &'ops WorkspaceOps<'g, 'a>) -> Self {
  function colorize (line 570) | pub fn colorize(&mut self) -> &mut Self {
  function fmt (line 577) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type Styles (line 667) | struct Styles {
    method colorize (line 681) | fn colorize(&mut self) {
  function package_names_paths (line 695) | fn package_names_paths<'g>(package_set: &PackageSet<'g>) -> Vec<(&'g str...
  function test_inline_table_for_add (line 717) | fn test_inline_table_for_add() {

FILE: tools/hakari/src/explain/display.rs
  type HakariExplainDisplay (line 15) | pub struct HakariExplainDisplay<'g, 'a, 'explain> {
  function new (line 21) | pub(super) fn new(explain: &'explain HakariExplain<'g, 'a>) -> Self {
  function colorize (line 29) | pub fn colorize(&mut self) -> &mut Self {
  function display_platform_str (line 34) | fn display_platform_str(
  constant DITTO_MARK (line 49) | const DITTO_MARK: &str = "\"";
  function fmt (line 52) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type Styles (line 154) | struct Styles {
    method colorize (line 169) | fn colorize(&mut self) {
  type FeatureDisplay (line 185) | struct FeatureDisplay<'g, 'a> {
  function fmt (line 190) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {

FILE: tools/hakari/src/explain/mod.rs
  type HakariExplain (line 31) | pub struct HakariExplain<'g, 'a> {
  type ExplainMap (line 41) | type ExplainMap<'g, 'a> = BTreeMap<&'a BTreeSet<&'g str>, ExplainInner<'...
  type ExplainInner (line 44) | struct ExplainInner<'g> {
  type ExplainInnerValue (line 53) | struct ExplainInnerValue<'g> {
  function new (line 65) | pub(crate) fn new(hakari: &'a Hakari<'g>, dep_id: &PackageId) -> Result<...
  function simplify_map (line 82) | fn simplify_map(hakari: &'a Hakari<'g>, map: IntermediateMap<'g, 'a>) ->...
  function dependency (line 115) | pub fn dependency(&self) -> PackageMetadata<'g> {
  function display (line 121) | pub fn display<'explain>(&'explain self) -> HakariExplainDisplay<'g, 'a,...
  function explain_maps (line 127) | fn explain_maps(&self) -> [(BuildPlatform, &ExplainMap<'g, 'a>); 2] {
  type ExplainIntermediate (line 137) | struct ExplainIntermediate<'g, 'a> {
  type IntermediateMap (line 142) | type IntermediateMap<'g, 'a> = BTreeMap<&'a BTreeSet<&'g str>, Intermedi...
  type IntermediateInner (line 145) | struct IntermediateInner<'g> {
  type IntermediateInnerValue (line 151) | struct IntermediateInnerValue<'g> {
  function new (line 157) | fn new(hakari: &'a Hakari<'g>, dep_id: &'g PackageId) -> Result<Self, gu...

FILE: tools/hakari/src/explain/simplify.rs
  type Simple (line 12) | pub(super) enum Simple<T> {
  function display_with (line 19) | pub(super) fn display_with<'simple, F>(
  type SimpleDisplay (line 36) | pub(super) struct SimpleDisplay<'simple, T, F> {
  function fmt (line 47) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  function simplify3 (line 55) | pub(super) fn simplify3<A, B, C>(
  function simplify1 (line 103) | pub(super) fn simplify1<A>(input: &BTreeSet<A>, n_a: usize) -> Vec<Simpl...

FILE: tools/hakari/src/hakari.rs
  type HakariBuilder (line 36) | pub struct HakariBuilder<'g> {
  function new (line 59) | pub fn new(
  function graph (line 92) | pub fn graph(&self) -> &'g PackageGraph {
  function hakari_package (line 99) | pub fn hakari_package(&self) -> Option<&PackageMetadata<'g>> {
  function read_toml (line 111) | pub fn read_toml(&self) -> Option<Result<HakariCargoToml, CargoTomlError...
  function set_platforms (line 137) | pub fn set_platforms(
  function platforms (line 150) | pub fn platforms(&self) -> impl ExactSizeIterator<Item = &str> + '_ {
  function set_resolver (line 159) | pub fn set_resolver(&mut self, resolver: CargoResolverVersion) -> &mut S...
  function resolver (line 165) | pub fn resolver(&self) -> CargoResolverVersion {
  function add_traversal_excludes (line 182) | pub fn add_traversal_excludes<'b>(
  function traversal_excludes (line 198) | pub fn traversal_excludes<'b>(&'b self) -> impl Iterator<Item = &'g Pack...
  function is_traversal_excluded (line 209) | pub fn is_traversal_excluded(&self, package_id: &PackageId) -> Result<bo...
  function add_final_excludes (line 222) | pub fn add_final_excludes<'b>(
  function final_excludes (line 235) | pub fn final_excludes<'b>(&'b self) -> impl Iterator<Item = &'g PackageI...
  function is_final_excluded (line 242) | pub fn is_final_excluded(&self, package_id: &PackageId) -> Result<bool, ...
  function is_excluded (line 254) | pub fn is_excluded(&self, package_id: &PackageId) -> Result<bool, guppy:...
  function add_registries (line 262) | pub fn add_registries(
  function set_unify_target_host (line 278) | pub fn set_unify_target_host(&mut self, unify_target_host: UnifyTargetHo...
  function unify_target_host (line 284) | pub fn unify_target_host(&self) -> UnifyTargetHost {
  function set_output_single_feature (line 295) | pub fn set_output_single_feature(&mut self, output_single_feature: bool)...
  function output_single_feature (line 301) | pub fn output_single_feature(&self) -> bool {
  function set_dep_format_version (line 308) | pub fn set_dep_format_version(&mut self, dep_format_version: DepFormatVe...
  function dep_format_version (line 314) | pub fn dep_format_version(&self) -> DepFormatVersion {
  function set_workspace_hack_line_style (line 321) | pub fn set_workspace_hack_line_style(
  function workspace_hack_line_style (line 330) | pub fn workspace_hack_line_style(&self) -> WorkspaceHackLineStyle {
  function compute (line 335) | pub fn compute(self) -> Hakari<'g> {
  function traversal_excludes_only (line 344) | pub(crate) fn traversal_excludes_only<'b>(
  function make_traversal_excludes (line 350) | fn make_traversal_excludes<'b>(&'b self) -> TraversalExcludes<'g, 'b> {
  function make_features_only (line 363) | fn make_features_only<'b>(&'b self) -> FeatureSet<'g> {
  function from_summary (line 389) | pub fn from_summary(
  type UnifyTargetHost (line 488) | pub enum UnifyTargetHost {
    method to_impl (line 1591) | fn to_impl(self, graph: &PackageGraph) -> UnifyTargetHostImpl {
  method default (line 524) | fn default() -> Self {
  type DepFormatVersion (line 537) | pub enum DepFormatVersion {
    method latest (line 566) | pub fn latest() -> Self {
    method fmt (line 572) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type WorkspaceHackLineStyle (line 589) | pub enum WorkspaceHackLineStyle {
  type OutputKey (line 603) | pub struct OutputKey {
  type Hakari (line 619) | pub struct Hakari<'g> {
  function builder (line 636) | pub fn builder(&self) -> &HakariBuilder<'g> {
  function read_toml (line 648) | pub fn read_toml(&self) -> Option<Result<HakariCargoToml, CargoTomlError...
  function write_toml (line 655) | pub fn write_toml(
  function toml_name_map (line 674) | pub fn toml_name_map(&self) -> AHashMap<Cow<'g, str>, PackageMetadata<'g...
  function explain (line 682) | pub fn explain(
  function to_toml_string (line 693) | pub fn to_toml_string(&self, options: &HakariOutputOptions) -> Result<St...
  function build (line 703) | fn build(builder: HakariBuilder<'g>) -> Self {
  type OutputMap (line 828) | pub type OutputMap<'g> =
  type ComputedMap (line 841) | pub type ComputedMap<'g> = BTreeMap<(Option<usize>, &'g PackageId), Comp...
  type ComputedValue (line 849) | pub struct ComputedValue<'g> {
  type ComputedInnerMap (line 861) | pub type ComputedInnerMap<'g> = BTreeMap<BTreeSet<&'g str>, ComputedInne...
  type ComputedInnerValue (line 865) | pub struct ComputedInnerValue<'g> {
  function extend (line 876) | fn extend(&mut self, other: ComputedInnerValue<'g>) {
  function push (line 882) | fn push(
  type TraversalExcludes (line 894) | struct TraversalExcludes<'g, 'b> {
  function iter (line 900) | fn iter(&self) -> impl Iterator<Item = &'g PackageId> + 'b + use<'g, 'b> {
  function is_excluded (line 904) | fn is_excluded(&self, package_id: &PackageId) -> bool {
  type ComputedMapBuild (line 911) | struct ComputedMapBuild<'g, 'b> {
  function new (line 917) | fn new(builder: &'b HakariBuilder<'g>) -> Self {
  function get (line 1077) | fn get(
  function get_or_insert_mut (line 1085) | fn get_or_insert_mut(
  function iter (line 1095) | fn iter<'a>(
  function inner_maps (line 1106) | pub fn inner_maps(&self) -> [(BuildPlatform, &ComputedInnerMap<'g>); 2] {
  function into_inner_maps (line 1115) | pub fn into_inner_maps(self) -> [(BuildPlatform, ComputedInnerMap<'g>); ...
  function get_inner (line 1123) | pub fn get_inner(&self, build_platform: BuildPlatform) -> &ComputedInner...
  function get_inner_mut (line 1131) | pub fn get_inner_mut(&mut self, build_platform: BuildPlatform) -> &mut C...
  function merge (line 1139) | fn merge(&mut self, other: ComputedValue<'g>) {
  function contains (line 1151) | fn contains(&mut self, build_platform: BuildPlatform, features: &BTreeSe...
  function insert (line 1155) | fn insert(
  function mark_fixed_up (line 1169) | fn mark_fixed_up(&mut self, build_platform: BuildPlatform, features: BTr...
  function describe (line 1176) | fn describe<'a>(&'a self) -> ValueDescribe<'g, 'a> {
  type ValueDescribe (line 1215) | enum ValueDescribe<'g, 'a> {
  function description (line 1245) | fn description(self) -> &'static str {
  function insert (line 1260) | fn insert(
  type OutputMapBuild (line 1361) | struct OutputMapBuild<'g> {
  function new (line 1367) | fn new(graph: &'g PackageGraph) -> Self {
  function is_inserted (line 1374) | fn is_inserted(&self, output_key: OutputKey, package_id: &'g PackageId) ...
  function get (line 1382) | fn get(
  function insert_all (line 1393) | fn insert_all<'a>(
  function insert_inner (line 1413) | fn insert_inner(
  function insert (line 1431) | fn insert(
  function iter_feature_sets (line 1448) | fn iter_feature_sets<'a>(&'a self) -> impl Iterator<Item = (OutputKey, F...
  function finish (line 1465) | fn finish(
  function filter_root_features (line 1545) | fn filter_root_features(
  type UnifyTargetHostImpl (line 1584) | enum UnifyTargetHostImpl {
  function unify_target_host_auto (line 1627) | fn unify_target_host_auto() {

FILE: tools/hakari/src/helpers.rs
  type VersionDisplay (line 9) | pub(crate) struct VersionDisplay<'a> {
  function new (line 18) | pub(crate) fn new(
  function fmt (line 32) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
  function min_version (line 64) | fn min_version() {
  function min_versions_match (line 110) | fn min_versions_match() {

FILE: tools/hakari/src/proptest_helpers.rs
  function proptest1_strategy (line 34) | pub fn proptest1_strategy(
  function builder_summary_roundtrip (line 94) | fn builder_summary_roundtrip() {
  function traversal_excludes (line 119) | fn traversal_excludes() {

FILE: tools/hakari/src/registry.rs
  type Registry (line 7) | pub(crate) struct Registry {
  type K1 (line 13) | type K1<'a> = &'a str;
  type K2 (line 14) | type K2<'a> = &'a str;
  method key1 (line 16) | fn key1(&self) -> Self::K1<'_> {
  method key2 (line 20) | fn key2(&self) -> Self::K2<'_> {

FILE: tools/hakari/src/summaries.rs
  type HakariConfig (line 32) | pub struct HakariConfig {
  type Err (line 43) | type Err = toml::de::Error;
  method from_str (line 46) | fn from_str(input: &str) -> Result<Self, Self::Err> {
  type HakariBuilderSummary (line 60) | pub struct HakariBuilderSummary {
    method new (line 117) | pub fn new(builder: &HakariBuilder<'_>) -> Result<Self, TargetSpecErro...
    method to_hakari_builder (line 153) | pub fn to_hakari_builder<'g>(
    method to_string (line 163) | pub fn to_string(&self) -> Result<String, toml::ser::Error> {
    method write_comment (line 173) | pub fn write_comment(&self, mut out: impl fmt::Write) -> Result<(), To...
    method write_to_string (line 192) | pub fn write_to_string(&self, dst: &mut String) -> Result<(), toml::se...
  function to_summary (line 206) | pub fn to_summary(&self) -> Result<HakariBuilderSummary, TargetSpecError> {
  type OutputOptionsSummary (line 217) | pub struct OutputOptionsSummary {
    method new (line 233) | pub fn new(options: &HakariOutputOptions) -> Self {
    method to_options (line 242) | pub fn to_options(&self) -> HakariOutputOptions {
  type RegistryDe (line 257) | struct RegistryDe {
  type RegistrySer (line 262) | struct RegistrySer<'a> {
  function serialize (line 267) | pub fn serialize<S>(
  function deserialize (line 289) | pub fn deserialize<'de, D>(deserializer: D) -> Result<BTreeMap<String, S...
  function parse_registries (line 308) | fn parse_registries() {

FILE: tools/hakari/src/toml_out.rs
  type HakariOutputOptions (line 32) | pub struct HakariOutputOptions {
    method new (line 45) | pub fn new() -> Self {
    method set_exact_versions (line 69) | pub fn set_exact_versions(&mut self, exact_versions: bool) -> &mut Self {
    method set_absolute_paths (line 95) | pub fn set_absolute_paths(&mut self, absolute_paths: bool) -> &mut Self {
    method set_builder_summary (line 113) | pub fn set_builder_summary(&mut self, builder_summary: bool) -> &mut S...
  method default (line 120) | fn default() -> Self {
  type TomlOutError (line 128) | pub enum TomlOutError {
    method from (line 214) | fn from(err: TargetSpecError) -> Self {
    method from (line 220) | fn from(err: fmt::Error) -> Self {
    method fmt (line 226) | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
    method source (line 257) | fn source(&self) -> Option<&(dyn error::Error + 'static)> {
  function toml_name_map (line 180) | pub(crate) fn toml_name_map<'g>(
  function write_toml (line 270) | pub(crate) fn write_toml(
  function make_hashed_name (line 504) | fn make_hashed_name(dep: &PackageMetadata<'_>, dep_format: DepFormatVers...
  function get_or_insert_table (line 521) | fn get_or_insert_table<'t>(parent: &'t mut Table, key: &str) -> &'t mut ...
  function make_package_name_unique (line 539) | fn make_package_name_unique() {
  function alternate_registries (line 565) | fn alternate_registries() {

FILE: tools/hakari/src/verify/display.rs
  type VerifyErrorsDisplay (line 13) | pub struct VerifyErrorsDisplay<'g, 'verify> {
  function new (line 20) | pub(super) fn new(verify: &'verify VerifyErrors<'g>) -> Self {
  function colorize (line 29) | pub fn colorize(&mut self) -> &mut Self {
  function fmt (line 37) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  type Styles (line 59) | struct Styles {
    method colorize (line 64) | fn colorize(&mut self) {

FILE: tools/hakari/src/verify/mod.rs
  function verify (line 36) | pub fn verify(mut self) -> Result<(), VerifyErrors<'g>> {
  type VerifyErrors (line 65) | pub struct VerifyErrors<'g> {
  function errors (line 78) | pub fn errors<'a>(&'a self) -> impl ExactSizeIterator<Item = HakariExpla...
  function display (line 88) | pub fn display<'verify>(&'verify self) -> VerifyErrorsDisplay<'g, 'verif...
  function cargo_guppy_verify (line 101) | fn cargo_guppy_verify() {

FILE: tools/hakari/templates/crate/build.rs
  function main (line 2) | fn main() {}

FILE: workspace-hack/build.rs
  function main (line 2) | fn main() {}
Copy disabled (too large) Download .json
Condensed preview — 578 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (24,486K chars).
[
  {
    "path": ".cargo/config.toml",
    "chars": 59,
    "preview": "[alias]\nxfmt = \"fmt -- --config imports_granularity=Crate\"\n"
  },
  {
    "path": ".cargo/nightly-config.toml",
    "chars": 563,
    "preview": "# Extra configuration for nightly Rust.\n#\n# Use manually by passing this path into `--config`, or via the Justfile: `jus"
  },
  {
    "path": ".claude/.gitignore",
    "chars": 21,
    "preview": "/settings.local.json\n"
  },
  {
    "path": ".claude/settings.json",
    "chars": 451,
    "preview": "{\n  \"permissions\": {\n    \"allow\": [\n      \"Bash(cargo build:*)\",\n      \"Bash(cargo check:*)\",\n      \"Bash(cargo doc:*)\","
  },
  {
    "path": ".config/hakari.toml",
    "chars": 1149,
    "preview": "# This file contains settings for `cargo hakari`.\n# See https://docs.rs/cargo-hakari/latest/cargo_hakari/config for a fu"
  },
  {
    "path": ".git-blame-ignore-revs",
    "chars": 72,
    "preview": "# Update style_version to 2024\n4722ab31392e622ec6373ef133e3956e3a2851c7\n"
  },
  {
    "path": ".gitattributes",
    "chars": 60,
    "preview": "# Disable all CRLF conversions throughout the repo.\n* -text\n"
  },
  {
    "path": ".github/renovate.json",
    "chars": 115,
    "preview": "{\n    \"extends\": [\n        \"github>nextest-rs/renovate\",\n        \"github>nextest-rs/renovate:post-upgrade\"\n    ]\n}\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 6291,
    "preview": "on:\n  push:\n    branches:\n      - main\n  pull_request:\n    branches:\n      - main\n\nname: CI\n\njobs:\n  lint:\n    name: Lin"
  },
  {
    "path": ".github/workflows/docs.yml",
    "chars": 1609,
    "preview": "on:\n  push:\n    branches:\n      - main\n    workflow_dispatch:\n\nname: Docs\n\n# Sets permissions to allow deployment to Git"
  },
  {
    "path": ".github/workflows/hakari.yml",
    "chars": 804,
    "preview": "# This workflow file serves as an example for cargo-hakari CI integration.\n\non:\n  push:\n    branches:\n      - main\n  pul"
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 13707,
    "preview": "# adapted from https://github.com/taiki-e/cargo-hack/blob/main/.github/workflows/release.yml\n\nname: Publish releases to "
  },
  {
    "path": ".gitignore",
    "chars": 19,
    "preview": "/target\n**/*.rs.bk\n"
  },
  {
    "path": ".ignore",
    "chars": 11,
    "preview": "/fixtures/\n"
  },
  {
    "path": ".vscode/launch.json",
    "chars": 1025,
    "preview": "{\n    // Use IntelliSense to learn about possible attributes.\n    // Hover to view descriptions of existing attributes.\n"
  },
  {
    "path": "CLAUDE.md",
    "chars": 295,
    "preview": "# Instructions for dropshot-api-manager\n\n## General instructions\n\n* Always use `cargo nextest run` to run tests. Never u"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 5523,
    "preview": "\n# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make particip"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1118,
    "preview": "# Contributing to cargo-guppy\n\n## Pull Requests\n\nWe actively welcome your pull requests. If you have a new feature in mi"
  },
  {
    "path": "Cargo.toml",
    "chars": 1412,
    "preview": "[workspace]\nresolver = \"2\"\nmembers = [\n    \"cargo-guppy\",\n    \"fixtures\",\n    \"guppy\",\n    \"guppy-cmdlib\",\n    \"guppy-su"
  },
  {
    "path": "Cross.toml",
    "chars": 274,
    "preview": "[build.env]\npassthrough = [\"CARGO_PROFILE_RELEASE_LTO\"]\n\n[target.x86_64-unknown-freebsd]\n# The current cross 0.2.4 docke"
  },
  {
    "path": "Justfile",
    "chars": 2087,
    "preview": "# Note: help messages should be 1 line long as required by just.\n\n# Print a help message.\nhelp:\n    just --list\n\n# Run t"
  },
  {
    "path": "LICENSE-APACHE",
    "chars": 10847,
    "preview": "                              Apache License\n                        Version 2.0, January 2004\n                     http"
  },
  {
    "path": "LICENSE-MIT",
    "chars": 1067,
    "preview": "Copyright (c) The cargo-guppy Contributors\n\nPermission is hereby granted, free of charge, to any\nperson obtaining a copy"
  },
  {
    "path": "README.md",
    "chars": 7653,
    "preview": "# cargo-guppy: track and query dependency graphs\n\n[![Build Status](https://github.com/guppy-rs/guppy/workflows/CI/badge."
  },
  {
    "path": "cargo-guppy/Cargo.toml",
    "chars": 775,
    "preview": "[package]\nname = \"cargo-guppy\"\nversion = \"0.1.0\"\nauthors = [\"Rain <rain1@fb.com>\", \"Brandon Williams <bmwill@fb.com>\"]\nl"
  },
  {
    "path": "cargo-guppy/README.md",
    "chars": 1793,
    "preview": "# cargo-guppy\n\n[![Documentation (main)](https://img.shields.io/badge/docs-main-brightgreen)](https://guppy-rs.github.io/"
  },
  {
    "path": "cargo-guppy/README.tpl",
    "chars": 694,
    "preview": "# {{crate}}\n\n[![Documentation (main)](https://img.shields.io/badge/docs-main-brightgreen)](https://guppy-rs.github.io/gu"
  },
  {
    "path": "cargo-guppy/src/core.rs",
    "chars": 5600,
    "preview": "// Copyright (c) The cargo-guppy Contributors\n// SPDX-License-Identifier: MIT OR Apache-2.0\n\n//! Implementations for opt"
  },
  {
    "path": "cargo-guppy/src/diff.rs",
    "chars": 6506,
    "preview": "// Copyright (c) The cargo-guppy Contributors\n// SPDX-License-Identifier: MIT OR Apache-2.0\n\nuse guppy::{PackageId, grap"
  },
  {
    "path": "cargo-guppy/src/lib.rs",
    "chars": 16089,
    "preview": "// Copyright (c) The cargo-guppy Contributors\n// SPDX-License-Identifier: MIT OR Apache-2.0\n\n//! A command-line frontend"
  },
  {
    "path": "cargo-guppy/src/main.rs",
    "chars": 3467,
    "preview": "// Copyright (c) The cargo-guppy Contributors\n// SPDX-License-Identifier: MIT OR Apache-2.0\n\nuse cargo_guppy::{\n    CmdS"
  },
  {
    "path": "cargo-guppy/src/mv.rs",
    "chars": 19549,
    "preview": "// Copyright (c) The cargo-guppy Contributors\n// SPDX-License-Identifier: MIT OR Apache-2.0\n\nuse camino::{Utf8Path, Utf8"
  },
  {
    "path": "clippy.toml",
    "chars": 168,
    "preview": "disallowed-methods = [\n    # use ahash everywhere instead\n    \"std::collections::hash::map::HashMap::new\",\n    \"std::col"
  },
  {
    "path": "fixtures/Cargo.toml",
    "chars": 305,
    "preview": "[package]\nname = \"fixtures\"\nversion = \"0.1.0\"\nauthors = [\"Rain <rain1@fb.com>\"]\npublish = false\nedition = \"2024\"\n\n[depen"
  },
  {
    "path": "fixtures/README.md",
    "chars": 812,
    "preview": "# Fixtures for cargo-guppy\n\nThis directory contains interesting test corpuses used within the cargo-guppy codebase.\n\nThe"
  },
  {
    "path": "fixtures/determinator-paths/README.md",
    "chars": 400,
    "preview": "# determinator paths fixtures\n\nThis fixture is used to test that path matching works correctly across platforms.\n\n* `git"
  },
  {
    "path": "fixtures/determinator-paths/guppy-linux.json",
    "chars": 874889,
    "preview": "{\"packages\":[{\"name\":\"adler\",\"version\":\"0.2.3\",\"id\":\"adler 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)"
  },
  {
    "path": "fixtures/determinator-paths/guppy-win.json",
    "chars": 889333,
    "preview": "{\"packages\":[{\"name\":\"adler\",\"version\":\"0.2.3\",\"id\":\"adler 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)"
  },
  {
    "path": "fixtures/guppy/hakari/metadata_guppy_44b62fa-0.toml",
    "chars": 765,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_g"
  },
  {
    "path": "fixtures/guppy/hakari/metadata_guppy_44b62fa-1.toml",
    "chars": 1009,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_g"
  },
  {
    "path": "fixtures/guppy/hakari/metadata_guppy_44b62fa-2.toml",
    "chars": 656,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_g"
  },
  {
    "path": "fixtures/guppy/hakari/metadata_guppy_44b62fa-3.toml",
    "chars": 450,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_g"
  },
  {
    "path": "fixtures/guppy/hakari/metadata_guppy_78cb7e8-0.toml",
    "chars": 3346,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_g"
  },
  {
    "path": "fixtures/guppy/hakari/metadata_guppy_78cb7e8-1.toml",
    "chars": 21396,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_g"
  },
  {
    "path": "fixtures/guppy/hakari/metadata_guppy_78cb7e8-2.toml",
    "chars": 12663,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_g"
  },
  {
    "path": "fixtures/guppy/hakari/metadata_guppy_78cb7e8-3.toml",
    "chars": 2467,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_g"
  },
  {
    "path": "fixtures/guppy/hakari/metadata_guppy_869476c-0.toml",
    "chars": 1750,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_g"
  },
  {
    "path": "fixtures/guppy/hakari/metadata_guppy_869476c-1.toml",
    "chars": 1724,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_g"
  },
  {
    "path": "fixtures/guppy/hakari/metadata_guppy_869476c-2.toml",
    "chars": 10325,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_g"
  },
  {
    "path": "fixtures/guppy/hakari/metadata_guppy_869476c-3.toml",
    "chars": 2305,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_g"
  },
  {
    "path": "fixtures/guppy/hakari/metadata_guppy_c9b4f76-0.toml",
    "chars": 13370,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_g"
  },
  {
    "path": "fixtures/guppy/hakari/metadata_guppy_c9b4f76-1.toml",
    "chars": 13143,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_g"
  },
  {
    "path": "fixtures/guppy/hakari/metadata_guppy_c9b4f76-2.toml",
    "chars": 12692,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_g"
  },
  {
    "path": "fixtures/guppy/hakari/metadata_guppy_c9b4f76-3.toml",
    "chars": 16629,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_g"
  },
  {
    "path": "fixtures/guppy/metadata_guppy_44b62fa.json",
    "chars": 53770,
    "preview": "{\"packages\":[{\"name\":\"cargo-guppy\",\"version\":\"0.1.0\",\"id\":\"cargo-guppy 0.1.0 (path+file:///home/fakeuser/dev/cargo-guppy"
  },
  {
    "path": "fixtures/guppy/metadata_guppy_78cb7e8.json",
    "chars": 763945,
    "preview": "{\"packages\":[{\"name\":\"adler\",\"version\":\"0.2.3\",\"id\":\"adler 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)"
  },
  {
    "path": "fixtures/guppy/metadata_guppy_869476c.json",
    "chars": 763945,
    "preview": "{\"packages\":[{\"name\":\"adler\",\"version\":\"0.2.3\",\"id\":\"adler 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)"
  },
  {
    "path": "fixtures/guppy/metadata_guppy_c9b4f76.json",
    "chars": 763945,
    "preview": "{\"packages\":[{\"name\":\"adler\",\"version\":\"0.2.3\",\"id\":\"adler 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)"
  },
  {
    "path": "fixtures/guppy/package-rules.toml",
    "chars": 454,
    "preview": "# This file lists out determinator package rules that can be used in tests.\n\nuse-default-rules = false\n\n# This path rule"
  },
  {
    "path": "fixtures/guppy/path-rules.toml",
    "chars": 725,
    "preview": "# This file lists out determinator path rules that can be used in tests.\n\n[[path-rule]]\n# Ignore README files.\nglobs = ["
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_44b62fa-0.toml",
    "chars": 1156,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_44b62fa-1.toml",
    "chars": 1133,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_44b62fa-2.toml",
    "chars": 1685,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_44b62fa-3.toml",
    "chars": 925,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_44b62fa-4.toml",
    "chars": 1507,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_44b62fa-5.toml",
    "chars": 613,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_44b62fa-6.toml",
    "chars": 1765,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_44b62fa-7.toml",
    "chars": 2130,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_78cb7e8-0.toml",
    "chars": 4212,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_78cb7e8-1.toml",
    "chars": 5896,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_78cb7e8-2.toml",
    "chars": 19811,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_78cb7e8-3.toml",
    "chars": 10065,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_78cb7e8-4.toml",
    "chars": 2175,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_78cb7e8-5.toml",
    "chars": 28885,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_78cb7e8-6.toml",
    "chars": 12232,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_78cb7e8-7.toml",
    "chars": 4476,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_869476c-0.toml",
    "chars": 21885,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_869476c-1.toml",
    "chars": 8324,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_869476c-2.toml",
    "chars": 3708,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_869476c-3.toml",
    "chars": 12686,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_869476c-4.toml",
    "chars": 12454,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_869476c-5.toml",
    "chars": 11337,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_869476c-6.toml",
    "chars": 10995,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_869476c-7.toml",
    "chars": 13341,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_c9b4f76-0.toml",
    "chars": 11964,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_c9b4f76-1.toml",
    "chars": 9488,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_c9b4f76-2.toml",
    "chars": 8935,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_c9b4f76-3.toml",
    "chars": 24922,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_c9b4f76-4.toml",
    "chars": 15821,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_c9b4f76-5.toml",
    "chars": 20519,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_c9b4f76-6.toml",
    "chars": 10310,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/guppy/summaries/metadata_guppy_c9b4f76-7.toml",
    "chars": 4889,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/invalid/build_targets_duplicate_lib.json",
    "chars": 2068,
    "preview": "{\"packages\":[{\"name\":\"testcrate\",\"version\":\"0.1.0\",\"id\":\"testcrate 0.1.0 (path+file:///Users/fakeuser/local/testcrates/t"
  },
  {
    "path": "fixtures/invalid/build_targets_empty_kinds.json",
    "chars": 2065,
    "preview": "{\"packages\":[{\"name\":\"testcrate\",\"version\":\"0.1.0\",\"id\":\"testcrate 0.1.0 (path+file:///Users/fakeuser/local/testcrates/t"
  },
  {
    "path": "fixtures/invalid/build_targets_non_bin.json",
    "chars": 2075,
    "preview": "{\"packages\":[{\"name\":\"testcrate\",\"version\":\"0.1.0\",\"id\":\"testcrate 0.1.0 (path+file:///Users/fakeuser/local/testcrates/t"
  },
  {
    "path": "fixtures/invalid/duplicate_workspace_names.json",
    "chars": 2040,
    "preview": "{\"packages\":[{\"name\":\"pkg\",\"version\":\"0.1.0\",\"id\":\"pkg 0.1.0 (path+file:///Users/fakeuser/local/testcrates/testworkspace"
  },
  {
    "path": "fixtures/invalid/invalid_default_member.json",
    "chars": 3342,
    "preview": "{\n  \"packages\": [\n    {\n      \"name\": \"testcrate\",\n      \"version\": \"0.1.0\",\n      \"id\": \"testcrate 0.1.0 (path+file:///"
  },
  {
    "path": "fixtures/invalid/named_feature_self_loop.json",
    "chars": 3488,
    "preview": "{\n  \"packages\": [\n    {\n      \"name\": \"a\",\n      \"version\": \"0.1.0\",\n      \"id\": \"path+file:///home/fakeuser/dev/tmp/nam"
  },
  {
    "path": "fixtures/invalid/optional_dev_dep.json",
    "chars": 3519,
    "preview": "{\"packages\":[{\"name\":\"lazy_static\",\"version\":\"1.4.0\",\"id\":\"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crat"
  },
  {
    "path": "fixtures/invalid/workspace_member_different_drive.json",
    "chars": 999,
    "preview": "{\"packages\":[{\"name\":\"testcrate\",\"version\":\"0.1.0\",\"id\":\"testcrate 0.1.0 (path+file:///D:/other-drive/testcrate)\",\"licen"
  },
  {
    "path": "fixtures/large/hakari/hyper_util_7afb1ed-0.toml",
    "chars": 8191,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture hyper_util"
  },
  {
    "path": "fixtures/large/hakari/hyper_util_7afb1ed-1.toml",
    "chars": 1222,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture hyper_util"
  },
  {
    "path": "fixtures/large/hakari/hyper_util_7afb1ed-2.toml",
    "chars": 7105,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture hyper_util"
  },
  {
    "path": "fixtures/large/hakari/hyper_util_7afb1ed-3.toml",
    "chars": 1268,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture hyper_util"
  },
  {
    "path": "fixtures/large/hakari/metadata_libra-0.toml",
    "chars": 46460,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_l"
  },
  {
    "path": "fixtures/large/hakari/metadata_libra-1.toml",
    "chars": 37294,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_l"
  },
  {
    "path": "fixtures/large/hakari/metadata_libra-2.toml",
    "chars": 5180,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_l"
  },
  {
    "path": "fixtures/large/hakari/metadata_libra-3.toml",
    "chars": 11128,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_l"
  },
  {
    "path": "fixtures/large/hakari/metadata_libra_9ffd93b-0.toml",
    "chars": 39024,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_l"
  },
  {
    "path": "fixtures/large/hakari/metadata_libra_9ffd93b-1.toml",
    "chars": 9236,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_l"
  },
  {
    "path": "fixtures/large/hakari/metadata_libra_9ffd93b-2.toml",
    "chars": 12022,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_l"
  },
  {
    "path": "fixtures/large/hakari/metadata_libra_9ffd93b-3.toml",
    "chars": 46804,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_l"
  },
  {
    "path": "fixtures/large/hakari/metadata_libra_f0091a4-0.toml",
    "chars": 53100,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_l"
  },
  {
    "path": "fixtures/large/hakari/metadata_libra_f0091a4-1.toml",
    "chars": 62244,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_l"
  },
  {
    "path": "fixtures/large/hakari/metadata_libra_f0091a4-2.toml",
    "chars": 7555,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_l"
  },
  {
    "path": "fixtures/large/hakari/metadata_libra_f0091a4-3.toml",
    "chars": 28737,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_l"
  },
  {
    "path": "fixtures/large/hakari/mnemos_b3b4da9-0.toml",
    "chars": 91253,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture mnemos_b3b"
  },
  {
    "path": "fixtures/large/hakari/mnemos_b3b4da9-1.toml",
    "chars": 80530,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture mnemos_b3b"
  },
  {
    "path": "fixtures/large/hakari/mnemos_b3b4da9-2.toml",
    "chars": 17598,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture mnemos_b3b"
  },
  {
    "path": "fixtures/large/hakari/mnemos_b3b4da9-3.toml",
    "chars": 87835,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture mnemos_b3b"
  },
  {
    "path": "fixtures/large/hyper_util_7afb1ed.json",
    "chars": 606123,
    "preview": "{\n  \"packages\": [\n    {\n      \"name\": \"addr2line\",\n      \"version\": \"0.22.0\",\n      \"id\": \"registry+https://github.com/r"
  },
  {
    "path": "fixtures/large/metadata_libra.json",
    "chars": 1892550,
    "preview": "{\"packages\":[{\"name\":\"bech32\",\"version\":\"0.6.0\",\"id\":\"bech32 0.6.0 (registry+https://github.com/rust-lang/crates.io-inde"
  },
  {
    "path": "fixtures/large/metadata_libra_9ffd93b.json",
    "chars": 2428281,
    "preview": "{\"packages\":[{\"name\":\"http-body\",\"version\":\"0.1.0\",\"id\":\"http-body 0.1.0 (registry+https://github.com/rust-lang/crates.i"
  },
  {
    "path": "fixtures/large/metadata_libra_f0091a4.json",
    "chars": 2105330,
    "preview": "{\"packages\":[{\"name\":\"serde_urlencoded\",\"version\":\"0.6.1\",\"id\":\"serde_urlencoded 0.6.1 (registry+https://github.com/rust"
  },
  {
    "path": "fixtures/large/mnemos_b3b4da9.json",
    "chars": 6165962,
    "preview": "{\n  \"packages\": [\n    {\n      \"name\": \"CoreFoundation-sys\",\n      \"version\": \"0.1.4\",\n      \"id\": \"CoreFoundation-sys 0."
  },
  {
    "path": "fixtures/large/summaries/hyper_util_7afb1ed-0.toml",
    "chars": 8313,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture hype"
  },
  {
    "path": "fixtures/large/summaries/hyper_util_7afb1ed-1.toml",
    "chars": 7818,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture hype"
  },
  {
    "path": "fixtures/large/summaries/hyper_util_7afb1ed-2.toml",
    "chars": 8841,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture hype"
  },
  {
    "path": "fixtures/large/summaries/hyper_util_7afb1ed-3.toml",
    "chars": 5894,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture hype"
  },
  {
    "path": "fixtures/large/summaries/hyper_util_7afb1ed-4.toml",
    "chars": 1961,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture hype"
  },
  {
    "path": "fixtures/large/summaries/hyper_util_7afb1ed-5.toml",
    "chars": 5044,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture hype"
  },
  {
    "path": "fixtures/large/summaries/hyper_util_7afb1ed-6.toml",
    "chars": 4464,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture hype"
  },
  {
    "path": "fixtures/large/summaries/hyper_util_7afb1ed-7.toml",
    "chars": 5069,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture hype"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra-0.toml",
    "chars": 28353,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra-1.toml",
    "chars": 43274,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra-2.toml",
    "chars": 73714,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra-3.toml",
    "chars": 55450,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra-4.toml",
    "chars": 58239,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra-5.toml",
    "chars": 44739,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra-6.toml",
    "chars": 64197,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra-7.toml",
    "chars": 58304,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra_9ffd93b-0.toml",
    "chars": 41500,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra_9ffd93b-1.toml",
    "chars": 50997,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra_9ffd93b-2.toml",
    "chars": 49152,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra_9ffd93b-3.toml",
    "chars": 67493,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra_9ffd93b-4.toml",
    "chars": 48218,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra_9ffd93b-5.toml",
    "chars": 37889,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra_9ffd93b-6.toml",
    "chars": 67249,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra_9ffd93b-7.toml",
    "chars": 38614,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra_f0091a4-0.toml",
    "chars": 36532,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra_f0091a4-1.toml",
    "chars": 1859,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra_f0091a4-2.toml",
    "chars": 36847,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra_f0091a4-3.toml",
    "chars": 23718,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra_f0091a4-4.toml",
    "chars": 61339,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra_f0091a4-5.toml",
    "chars": 46663,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra_f0091a4-6.toml",
    "chars": 34914,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/metadata_libra_f0091a4-7.toml",
    "chars": 78838,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture meta"
  },
  {
    "path": "fixtures/large/summaries/mnemos_b3b4da9-0.toml",
    "chars": 66517,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture mnem"
  },
  {
    "path": "fixtures/large/summaries/mnemos_b3b4da9-1.toml",
    "chars": 18667,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture mnem"
  },
  {
    "path": "fixtures/large/summaries/mnemos_b3b4da9-2.toml",
    "chars": 145998,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture mnem"
  },
  {
    "path": "fixtures/large/summaries/mnemos_b3b4da9-3.toml",
    "chars": 27453,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture mnem"
  },
  {
    "path": "fixtures/large/summaries/mnemos_b3b4da9-4.toml",
    "chars": 47359,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture mnem"
  },
  {
    "path": "fixtures/large/summaries/mnemos_b3b4da9-5.toml",
    "chars": 22934,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture mnem"
  },
  {
    "path": "fixtures/large/summaries/mnemos_b3b4da9-6.toml",
    "chars": 157440,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture mnem"
  },
  {
    "path": "fixtures/large/summaries/mnemos_b3b4da9-7.toml",
    "chars": 70869,
    "preview": "# This summary was @generated. To regenerate, run:\n#   cargo run -p fixture-manager -- generate-summaries --fixture mnem"
  },
  {
    "path": "fixtures/small/alternate-registries.json",
    "chars": 41973,
    "preview": "{\"packages\":[{\"name\":\"debug-ignore\",\"version\":\"1.0.1\",\"id\":\"debug-ignore 1.0.1 (path+file:///home/fakeuser/dev/debug-ign"
  },
  {
    "path": "fixtures/small/builddep.json",
    "chars": 2762,
    "preview": "{\"packages\":[{\"name\":\"builddep\",\"version\":\"0.1.0\",\"id\":\"builddep 0.1.0 (path+file:///home/fakeuser/dev/tmp/test-workspac"
  },
  {
    "path": "fixtures/small/hakari/metadata1-0.toml",
    "chars": 1268,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata1\n"
  },
  {
    "path": "fixtures/small/hakari/metadata1-1.toml",
    "chars": 2638,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata1\n"
  },
  {
    "path": "fixtures/small/hakari/metadata1-2.toml",
    "chars": 2371,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata1\n"
  },
  {
    "path": "fixtures/small/hakari/metadata1-3.toml",
    "chars": 2301,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata1\n"
  },
  {
    "path": "fixtures/small/hakari/metadata2-0.toml",
    "chars": 2038,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata2\n"
  },
  {
    "path": "fixtures/small/hakari/metadata2-1.toml",
    "chars": 2652,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata2\n"
  },
  {
    "path": "fixtures/small/hakari/metadata2-2.toml",
    "chars": 593,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata2\n"
  },
  {
    "path": "fixtures/small/hakari/metadata2-3.toml",
    "chars": 1249,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata2\n"
  },
  {
    "path": "fixtures/small/hakari/metadata_alternate_registries-0.toml",
    "chars": 1984,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_a"
  },
  {
    "path": "fixtures/small/hakari/metadata_alternate_registries-1.toml",
    "chars": 1021,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_a"
  },
  {
    "path": "fixtures/small/hakari/metadata_alternate_registries-2.toml",
    "chars": 1146,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_a"
  },
  {
    "path": "fixtures/small/hakari/metadata_alternate_registries-3.toml",
    "chars": 1759,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_a"
  },
  {
    "path": "fixtures/small/hakari/metadata_build_targets1-0.toml",
    "chars": 685,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_b"
  },
  {
    "path": "fixtures/small/hakari/metadata_build_targets1-1.toml",
    "chars": 673,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_b"
  },
  {
    "path": "fixtures/small/hakari/metadata_build_targets1-2.toml",
    "chars": 572,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_b"
  },
  {
    "path": "fixtures/small/hakari/metadata_build_targets1-3.toml",
    "chars": 653,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_b"
  },
  {
    "path": "fixtures/small/hakari/metadata_builddep-0.toml",
    "chars": 858,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_b"
  },
  {
    "path": "fixtures/small/hakari/metadata_builddep-1.toml",
    "chars": 807,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_b"
  },
  {
    "path": "fixtures/small/hakari/metadata_builddep-2.toml",
    "chars": 858,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_b"
  },
  {
    "path": "fixtures/small/hakari/metadata_builddep-3.toml",
    "chars": 754,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_b"
  },
  {
    "path": "fixtures/small/hakari/metadata_cycle1-0.toml",
    "chars": 759,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_c"
  },
  {
    "path": "fixtures/small/hakari/metadata_cycle1-1.toml",
    "chars": 644,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_c"
  },
  {
    "path": "fixtures/small/hakari/metadata_cycle1-2.toml",
    "chars": 837,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_c"
  },
  {
    "path": "fixtures/small/hakari/metadata_cycle1-3.toml",
    "chars": 758,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_c"
  },
  {
    "path": "fixtures/small/hakari/metadata_cycle2-0.toml",
    "chars": 915,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_c"
  },
  {
    "path": "fixtures/small/hakari/metadata_cycle2-1.toml",
    "chars": 932,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_c"
  },
  {
    "path": "fixtures/small/hakari/metadata_cycle2-2.toml",
    "chars": 1152,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_c"
  },
  {
    "path": "fixtures/small/hakari/metadata_cycle2-3.toml",
    "chars": 979,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_c"
  },
  {
    "path": "fixtures/small/hakari/metadata_cycle_features-0.toml",
    "chars": 956,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_c"
  },
  {
    "path": "fixtures/small/hakari/metadata_cycle_features-1.toml",
    "chars": 889,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_c"
  },
  {
    "path": "fixtures/small/hakari/metadata_cycle_features-2.toml",
    "chars": 884,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_c"
  },
  {
    "path": "fixtures/small/hakari/metadata_cycle_features-3.toml",
    "chars": 693,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_c"
  },
  {
    "path": "fixtures/small/hakari/metadata_dups-0.toml",
    "chars": 839,
    "preview": "# This file is @generated. To regenerate, run:\n#    cargo run -p fixture-manager -- generate-hakari --fixture metadata_d"
  }
]

// ... and 378 more files (download for full content)

About this extraction

This page contains the full source code of the guppy-rs/guppy GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 578 files (21.3 MB), approximately 5.6M tokens, and a symbol index with 2092 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!