Files
dev/src/skills/style/build/rules/dependencies.md
T

31 lines
1.2 KiB
Markdown

# Dependency rules
## Use workspace dependency versions
### Rule
Declare Rust dependency versions in the repository root `Cargo.toml` under `[workspace.dependencies]`.
Reference workspace dependencies from package `Cargo.toml` files with `workspace = true`.
Do not declare dependency versions in package `Cargo.toml` files unless the operator explicitly requests a package-local version.
Add package-local dependency features only when the feature set is specific to that package.
### Rationale
The repository has one Cargo workspace and one `Cargo.lock`.
Centralized versions keep package manifests consistent with the workspace lockfile.
## Declare Rust dependencies in each build system
### Rule
Declare each direct crate dependency in each build system that builds the Rust target.
For Cargo, declare the crate in the package `Cargo.toml` file.
Use `workspace = true` for workspace-managed dependencies.
For Bazel, add the crate label to the `deps` of the target that uses it.
Apply this rule to `rust_library`, `rust_binary`, and `rust_test` targets.
### Rationale
Cargo and Bazel resolve Rust dependencies independently.
Complete declarations keep Cargo, Rust Analyzer, and Bazel builds consistent.