{"id":"b40742b3dc426ad1","repo":"rust-lang/cargo","slug":"cannot-specify-multiple-crates-with-rename","errorCode":null,"errorMessage":"cannot specify multiple crates with `--rename`","messagePattern":"cannot specify multiple crates with `--rename`","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/bin/cargo/commands/add.rs","lineNumber":360,"sourceCode":"            crate_spec,\n            rename: rename.map(String::from),\n            features,\n            default_features,\n            optional,\n            public,\n            registry: registry.clone(),\n            path: path.map(String::from),\n            base: base.map(String::from),\n            git: git.map(String::from),\n            branch: branch.map(String::from),\n            rev: rev.map(String::from),\n            tag: tag.map(String::from),\n        };\n        deps.push(dep);\n    }\n\n    if deps.len() > 1 && rename.is_some() {\n        anyhow::bail!(\"cannot specify multiple crates with `--rename`\");\n    }\n\n    Ok(deps)\n}\n\nfn default_features(matches: &ArgMatches) -> Option<bool> {\n    resolve_bool_arg(\n        matches.flag(\"default-features\"),\n        matches.flag(\"no-default-features\"),\n    )\n}\n\nfn optional(matches: &ArgMatches) -> Option<bool> {\n    resolve_bool_arg(matches.flag(\"optional\"), matches.flag(\"no-optional\"))\n}\n\nfn public(matches: &ArgMatches) -> Option<bool> {\n    resolve_bool_arg(matches.flag(\"public\"), matches.flag(\"no-public\"))","sourceCodeStart":342,"sourceCodeEnd":378,"githubUrl":"https://github.com/rust-lang/cargo/blob/0e07a155371a6ce88ae53a2c00df940280c09a67/src/bin/cargo/commands/add.rs#L342-L378","documentation":"From parse_dependencies (src/bin/cargo/commands/add.rs:359-361). After building the list of DepOp entries, if more than one crate is being added and --rename is set, Cargo bails because a single rename target cannot apply to multiple crates unambiguously.","triggerScenarios":"`cargo add serde tokio --rename my-serde` — renaming is only meaningful for a single dependency.","commonSituations":"Batch-adding crates and trying to rename at the same time; script that loops and forgets --rename is per-invocation.","solutions":["Add crates one at a time if you need --rename: `cargo add serde --rename my-serde` then `cargo add tokio`.","Drop --rename when adding multiple crates.","Edit Cargo.toml manually to set the package name + package key for renamed deps."],"exampleFix":"// before\ncargo add serde tokio --rename my-serde\n\n// after\ncargo add serde --rename my-serde && cargo add tokio","handlingStrategy":"validation","validationCode":"// Only allow --rename with a single crate\nfn add_command_valid(crates: &[String], rename: Option<&str>) -> bool {\n    rename.is_none() || crates.len() == 1\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Reserve --rename for single-crate `cargo add` invocations.","Loop per-crate in scripts when renaming multiple deps."],"tags":["cargo","add","rename","cli"],"analyzedSha":"0e07a155371a6ce88ae53a2c00df940280c09a67","analyzedAt":"2026-08-06T01:46:58.334Z","schemaVersion":2}