# 2024 Deprecations # Problem Cargo has been emitting a bunch deprecation message for a (long?) while. Since edition 2024 is approaching (1.82.0 anticipated), and a Cargo linting system is on the way (<https://github.com/rust-lang/cargo/pull/13621>), we might want to take advantage of this timing to evaluate whether this deprecations could be turned into a hard error. The main risk here is CI automation might fail. Unlike rustc and clippy lints, people hardly noticed Cargo warnings becuase because there was no way to set `-D` on them. # Deprecations ## 2024 Edition ### dependency without `path`, `version`, `git`, `workspace` specified https://github.com/rust-lang/cargo/blob/8bcecfeed464c990733ff680e0b4546a73fbed44/src/cargo/util/toml/mod.rs#L1914-L1918 * Warn since: Merged on 2016-01-20 * May become a hard error? ✅ * Risk: Old crates and deps fail to build. See <https://github.com/rust-lang/cargo/issues/9885> * <https://github.com/rust-lang/cargo/pull/2270> * Next step: * Check all `Cargo.toml` and latest `Cargo.toml.orig` on crates.io * Was this a bug? * Yes * https://github.com/rust-lang/cargo/issues/2147#issuecomment-156879677 * Disposition: leaning towards removal without worrying about Edition * Maybe back off if something needs fixed in ecosystem first * Could slow introduce using Editions ### `license-file` and `readme` pointing to a non-existent file https://github.com/rust-lang/cargo/blob/f0ae76519127d16d87362c6d88416d92cba86c6a/src/cargo/ops/cargo_package.rs#L416-L418 * Warn since: 1.43.0 (2020-04-23) for `license-file`; 1.71.0 (2023-08-03) for `readme` * may become a hard error? ✅ ) * Risk: Publish might fail. Easy to fix in normal cases. * <https://github.com/rust-lang/cargo/pull/7905> * <https://github.com/rust-lang/cargo/pull/12036> * Next step: * Check with ehuss for context on why it could become a hard error in #7905 * Otherwise, use Edition 2024 ### `dev_dependencies`/`build_dependencies`/`default_features`/`crate_types`/`proc_macro` https://github.com/rust-lang/cargo/blob/f0ae76519127d16d87362c6d88416d92cba86c6a/src/cargo/util/toml/mod.rs#L198-L199 * Warn since: 1.61 (2022-05-19) but only when conflicting with dash ones * may become a hard error? NO * Risk: Old crates fail to compile. Might need an edition boundary. * <https://github.com/rust-lang/cargo/pull/10316> * Next step: * Error on 2024 edition ### good old `[project]` (replaced with `[package]`) https://github.com/rust-lang/cargo/blob/f0ae76519127d16d87362c6d88416d92cba86c6a/src/cargo/util/toml/mod.rs#L497-L498 * Warn since: 1.66 (2022-12-15) * may become a hard error? ✅ * Risk: Old crates fail to compile. Require an edition boundary. * <https://github.com/rust-lang/cargo/pull/11135> * Next step: * Error on 2024 edition ### `default-features` in inherited dependencies https://github.com/rust-lang/cargo/blob/f0ae76519127d16d87362c6d88416d92cba86c6a/src/cargo/util/toml/mod.rs#L1801-L1803 * Warn since: 1.69.0 (2023-04-29) * may become a hard error? ✅ * Risk: Build failures. Easy to fix. * <https://github.com/rust-lang/cargo/pull/11409> * Next step: * Error in 2024 Edition ### `plugin` support https://github.com/rust-lang/cargo/blob/f0ae76519127d16d87362c6d88416d92cba86c6a/src/cargo/util/toml/targets.rs#L211-L216 * Warn since: 1.77.0 (2024-03-21) * may become a hard error? ✅ (stop supporting `plugin`) * Risk: Too new. * <https://github.com/rust-lang/cargo/pull/13248> * Next step: * Wait until 2024 release * Remove key, making it an "unused key" warning ## Independent of Edition ### `--release` is ignored when paired with `--profile` https://github.com/rust-lang/cargo/blob/8bcecfeed464c990733ff680e0b4546a73fbed44/src/cargo/util/command_prelude.rs#L570-L573 * Warn since: 1.57.0 (2021-12-02) * may become a hard error? ✅ * Risk: Break people's build. Easy to fix by themselves. * <https://github.com/rust-lang/cargo/pull/9943> * Next step: * Check with ehuss, is hard error justified? If accepted for long time and no indication to user its a bug, then maybe keep as warning? ### `cargo read-manifest` https://github.com/rust-lang/cargo/blob/8bcecfeed464c990733ff680e0b4546a73fbed44/src/bin/cargo/commands/read_manifest.rs#L9 * Warn since: Merged on 2016-10-03. * Become a hard error? NO * Risk: Automations might still rely on it. `cargo metadata --no-deps` should cover its use cases. * <https://github.com/rust-lang/cargo/pull/3150> * Next step: * Add runtime warning saying its deprecated (not just help) * CLI, so no further steps ### `[replace]` is deprecated https://github.com/rust-lang/cargo/blob/8bcecfeed464c990733ff680e0b4546a73fbed44/src/doc/src/reference/overriding-dependencies.md?plain=1#L300-L301 * Warn since: 1.42.0 (2020-03-12) * may become a hard error? NO * Risk: Can we patch `[patch]` to fully replace `[repalce]`? * <https://github.com/rust-lang/cargo/pull/7733> * Next step * Deprecation warning using lint system (since restricted `Cargo.toml`) * Maybe with future edition turn it into forbid (based on people's reaction to warning) ### old `cargo tree` flags: `--all`, `no-dev-dependencies`, `--no-indent`, `--prefix-depth`, `--all-targets` https://github.com/rust-lang/cargo/blob/8bcecfeed464c990733ff680e0b4546a73fbed44/src/bin/cargo/commands/tree.rs#L144-L146 * Warn since: 1.44.0 (2020-06-04) * may become a hard error? ✅ for `all`; NO for others * Risk: Have alternatives. Easy to fix. * <https://github.com/rust-lang/cargo/pull/8115> * Next step: * Downgrade to consistent deprecation (no point removing one when others would be kept) ### path override modifying dependency graph https://github.com/rust-lang/cargo/blob/f0ae76519127d16d87362c6d88416d92cba86c6a/src/cargo/core/registry.rs#L535-L538 * Warn since: Merged on 2016-10-05 (1.14 or so) * may become a hard error? ✅ (was a bug) * Risk: Assuming people seldom use it? * <https://github.com/rust-lang/cargo/pull/3136> * Next step: * Turn into error because it was a bug with buggy behavior and people using this went into it knowing its bad (since they likely started post-1.14), and we've not been getting necro-posts for people saying they need this (like depending on bins) ### `rustc-cdylib-link-arg` used in non-cdylib target https://github.com/rust-lang/cargo/blob/f0ae76519127d16d87362c6d88416d92cba86c6a/src/cargo/core/compiler/custom_build.rs#L850-L856 * Warn since: 1.54.0 (2021-07-29) * may become a hard error? ✅ (may become) * Risk: crates might depends on this heavily; might need a way to toggle like <https://github.com/rust-lang/cargo/issues/9094> or [Pre-RFC for mutually-exclusive, global features](https://internals.rust-lang.org/t/pre-rfc-mutually-excusive-global-features/19618) * <https://github.com/rust-lang/cargo/pull/9563> * Next step: * Hard error, independent of edition, because this was never intended, we warning for a while, and no has brought up a concrete case of the warning firing when they need it ### user-defined alias is shadowing an external subcommand found: https://github.com/rust-lang/cargo/blob/f0ae76519127d16d87362c6d88416d92cba86c6a/src/bin/cargo/cli.rs#L321-L323 * Warn since: 1.58.0 (2022-01-13) * may become a hard error? ✅ * Risk: Custom workflow might fail. `cargo clippy` and `cargo fmt` are what we concerned. * #10049 * <https://github.com/rust-lang/cargo/pull/10082> * Next step: * Turn into hard error. Aliases are generally for user interaction, rather than automation (except for things like xtasks) so the impact is low ### output artifact name collisions https://github.com/rust-lang/cargo/blob/f0ae76519127d16d87362c6d88416d92cba86c6a/src/cargo/core/compiler/build_runner/mod.rs#L472-L474 * Warn since: 1.32.0 (2019-01-17) * may become a hard error? ✅ * Risk: Workaround could be quite complicated. * <https://github.com/rust-lang/cargo/pull/6308> * Next step: * Maybe in a future Edition, switch to forbid by default? * Or just warn because this is implementation-defined for when a collision may occur and new collisions may come up in the future ### Bail out when trying to link to a library that is not linkable https://github.com/rust-lang/cargo/blob/f0ae76519127d16d87362c6d88416d92cba86c6a/src/cargo/core/compiler/mod.rs#L1427-L1430 * Warn since: 1.24.0 (2018-02-15) * may become a hard error? ✅ * Risk: People depend on this in a quirky way. * <https://github.com/rust-lang/cargo/pull/4797> * Next step: * Needs investigation into replacement feature for those relying on it * Likely should instead be hard error conditioned on Edition ### Ambiguous package name in git dependency https://github.com/rust-lang/cargo/blob/bd1cf584af2c356eeb3980c3c9bb0fea190ed633/src/cargo/ops/cargo_read_manifest.rs#L225-L234 * Warn since: 1.63 * may become a hard error? NO * Risk: too many false positives, see #10752 * #10701, #10767 * Next step: * Address #10752 * Turn into error on edition ## No further steps ### deprecate `--all` (alias to `--workspace`) https://github.com/rust-lang/cargo/blob/8bcecfeed464c990733ff680e0b4546a73fbed44/src/cargo/util/command_prelude.rs#L54 * Warn since: 1.39.0 (2019-11-07) * may become a hard error? NO * Risk: Automations might still rely on it. Some users use it exclusively due to brevity (see also #11554) * <https://github.com/rust-lang/cargo/pull/7241> * Next step: * CLI, so no further steps * Not doing runtime warning because of pervasive use by people who really like it for brevity ### Deprecate `.cargo/config` https://github.com/rust-lang/cargo/blob/8bcecfeed464c990733ff680e0b4546a73fbed44/src/cargo/util/context/mod.rs#L1563-L1567 * Warn since: 1.78 (2024-05-02) * may become a hard error? NO * Risk: Way too new. * <https://github.com/rust-lang/cargo/pull/13349> * Next step: * No further steps