https://github.com/timonpost/cargo-dependency-inheritor
Utility to inherit dependencies from workspace file if it occurs 'n' or more times throughout the project.
https://github.com/timonpost/cargo-dependency-inheritor
Last synced: 6 months ago
JSON representation
Utility to inherit dependencies from workspace file if it occurs 'n' or more times throughout the project.
- Host: GitHub
- URL: https://github.com/timonpost/cargo-dependency-inheritor
- Owner: TimonPost
- License: apache-2.0
- Created: 2022-09-20T20:04:01.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-03-14T13:26:08.000Z (almost 3 years ago)
- Last Synced: 2025-03-18T10:38:09.417Z (11 months ago)
- Language: Rust
- Size: 50.8 KB
- Stars: 31
- Watchers: 1
- Forks: 1
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# Cargo Workspace Dependency Inheritor
Utility that inherits dependencies from the main workspace if they occur `n` or more times in the workspace.
Workspace Inheritance was stabilized in version 1.64.
See [`[workspace.package]`][1], [`[workspace.dependencies]`][2], and [inheriting-a-dependency-from-a-workspace][3] for more information.
## How to Use
To inherit a dependency that occurs five or more times in the workspace, use the following command:
```bash
cargo install cargo-dependency-inheritor
cargo dependency-inheritor --workspace-path "path/to/workspace/Cargo.toml" -n 5
```
**This command edits your toml files, make sure to have a back up**
## Process
Dependencies can be inherited from a workspace by specifying the dependency in the workspace's [`[workspace.dependencies]`][2] table. After that, add it to the `[dependencies]` table with workspace = true.
This crate automates the process.
1. Read packages defined in `[workspace]` section of the workspace-file.
2. Note which dependencies occur `n` or more times.
3. Update all dependencies that occurred `n` or more times:
1. Turn `dependency = "0.1.3"` into inline tables.
2. Add `workspace = true` key-value to the dependency inline table.
3. Remove `version` from inline table if exists (this will be specified in the workspace file).
4. Add [`[workspace.dependencies]`][2] table to root workspace file with all the dependencies that occurred `n` times and their version.
Result:
```toml
# in a project
[dependencies]
tokio = { workspace = true }
# in the workspace
[workspace.dependencies]
tokio = "1.0"
```
[1]: https://doc.rust-lang.org/nightly/cargo/reference/workspaces.html#the-package-table
[2]: https://doc.rust-lang.org/nightly/cargo/reference/workspaces.html#the-dependencies-table
[3]: https://doc.rust-lang.org/nightly/cargo/reference/specifying-dependencies.html#inheriting-a-dependency-from-a-workspace