{"record":{"id":"6b9c7b0d9f10091f","repo":"rust-lang/cargo","slug":"err-help","errorCode":null,"errorMessage":"{err}{help}","messagePattern":"\\{err\\}\\{help\\}","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/ops/cargo_new.rs","lineNumber":155,"sourceCode":"            help.push_str(&format!(\n                \"\\n\\\n                help: to name the binary \\\"{name}\\\", use a valid package \\\n                name, and set the binary name to be different from the package. \\\n                This can be done by setting the binary filename to `src/bin/{name}.rs` \\\n                or change the name in Cargo.toml with:\\n\\\n                \\n    \\\n                [[bin]]\\n    \\\n                name = \\\"{name}\\\"\\n    \\\n                path = \\\"src/main.rs\\\"\\n\\\n            \",\n                name = name\n            ));\n        }\n        help\n    };\n    PackageName::new(name).map_err(|err| {\n        let help = bin_help();\n        anyhow::anyhow!(\"{err}{help}\")\n    })?;\n\n    if restricted_names::is_keyword(name) {\n        anyhow::bail!(\n            \"invalid package name `{}`: it is a Rust keyword{}\",\n            name,\n            bin_help()\n        );\n    }\n    if restricted_names::is_conflicting_artifact_name(name) {\n        if has_bin {\n            anyhow::bail!(\n                \"invalid package name `{}`: \\\n                it conflicts with cargo's build directory names{}\",\n                name,\n                name_help\n            );\n        } else {","sourceCodeStart":137,"sourceCodeEnd":173,"githubUrl":"https://github.com/rust-lang/cargo/blob/98a09e7e7d62850f14e5b6132101fc1edd19a16f/src/ops/cargo_new.rs#L137-L173","documentation":"`check_name` runs the package name through `PackageName::new`, which enforces crate-name rules (lowercase ASCII, no leading/trailing hyphens, no double hyphens, non-empty, etc.). On failure it appends contextual help (`bin_help`) explaining how to keep a binary with a different name via `[[bin]] name = ...` / `src/bin/<name>.rs`. The `{err}` is the underlying PackageName validation message; `{help}` is the appended guidance.","triggerScenarios":"`cargo new`/`cargo init` deriving a name from a directory that contains uppercase letters, spaces, or invalid characters (e.g. `cargo new My-Project` where the dir yields an invalid name), or passing `--name` with such a value. `PackageName::new(\"Foo Bar\")`, `PackageName::new(\"-foo\")`, `PackageName::new(\"foo--bar\")`.","commonSituations":"Directory names with capitals or spaces (e.g. creating from a `CamelCase` folder). Accidental leading hyphen in `--name`. Names with dots or special punctuation. Renaming a directory to something non-snake/kebab before `cargo init`.","solutions":["Use an explicit valid name: `cargo new --name my-project my-project` (lowercase ASCII, hyphens/underscores only, no leading/trailing hyphen).","Rename/recreate the target directory with a valid package name (lowercase, no spaces).","Follow the appended help: keep a valid package name and set the binary name separately with `[[bin]] name = \"Desired\" path = \"src/main.rs\"` or via `src/bin/Desired.rs`."],"exampleFix":"# before\n$ cargo new \"My Project\"   # error: invalid name (uppercase + space)\n\n# after\n$ cargo new --name my-project \"My Project\"\n# or\n$ cargo new my-project","handlingStrategy":"validation","validationCode":"// Mirror cargo's PackageName rules before invoking `cargo new --name`.\nfn valid_package_name(name: &str) -> bool {\n    !name.is_empty()\n    && name.chars().all(|c| c.is_ascii_lowercase() || c.is_ascii_digit() || c == '-' || c == '_')\n    && !name.starts_with('-') && !name.ends_with('-')\n    && !name.contains(\"--\")\n}","typeGuard":"fn is_valid_package_name(name: &str) -> bool { valid_package_name(name) }","tryCatchPattern":null,"preventionTips":["Pre-validate names: lowercase ASCII, hyphens/underscores only, no leading/trailing/double hyphens.","Derive package names from directory names with a sanitizer that lowercases and replaces invalid chars.","When scaffolding from CamelCase folders, always pass an explicit `--name` with a cleaned value.","Run a quick `PackageName::new(name)`-equivalent check in your generator before shelling out."],"tags":["package-name","cargo-new","validation","naming"],"backgroundTag":null,"analyzedSha":"98a09e7e7d62850f14e5b6132101fc1edd19a16f","analyzedAt":"2026-08-11T17:42:36.556Z","contentChangedAt":"2026-08-11T17:42:36.556Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}