diff --git a/compiler/rustc_session/src/diagnostics.rs b/compiler/rustc_session/src/diagnostics.rs index d1989609cefe2..a06c40f77a73e 100644 --- a/compiler/rustc_session/src/diagnostics.rs +++ b/compiler/rustc_session/src/diagnostics.rs @@ -435,11 +435,20 @@ pub(crate) struct CrateNameEmpty { #[derive(Diagnostic)] #[diag("invalid character {$character} in crate name: `{$crate_name}`")] +#[note("crate names may only contain alphanumeric characters or underscores")] pub(crate) struct InvalidCharacterInCrateName { #[primary_span] pub(crate) span: Option, pub(crate) character: char, pub(crate) crate_name: Symbol, + #[subdiagnostic] + pub(crate) suggestion: Option, +} + +#[derive(Subdiagnostic)] +#[help("you might have meant to use `--crate-name={$suggested_name}`")] +pub(crate) struct InvalidCharacterInCrateNameSuggestion { + pub(crate) suggested_name: String, } #[derive(Subdiagnostic)] diff --git a/compiler/rustc_session/src/output.rs b/compiler/rustc_session/src/output.rs index 120eb04c6e8c4..e2eb46c4ca878 100644 --- a/compiler/rustc_session/src/output.rs +++ b/compiler/rustc_session/src/output.rs @@ -6,7 +6,10 @@ use rustc_span::{Span, Symbol}; use crate::Session; use crate::config::{CrateType, OutFileName, OutputFilenames, OutputType}; -use crate::diagnostics::{CrateNameEmpty, FileIsNotWriteable, InvalidCharacterInCrateName}; +use crate::diagnostics::{ + CrateNameEmpty, FileIsNotWriteable, InvalidCharacterInCrateName, + InvalidCharacterInCrateNameSuggestion, +}; pub fn out_filename( sess: &Session, @@ -68,6 +71,10 @@ pub fn validate_crate_name(sess: &Session, crate_name: Symbol, span: Option