| use std::io; | |
| use std::path::Path; | |
| use rustc_hir::attrs::CrateType; | |
| use rustc_macros::Diagnostic; | |
| use rustc_span::{Span, Symbol}; | |
| use rustc_target::spec::TargetTuple; | |
| #[derive(Diagnostic)] | |
| #[diag( | |
| "`--crate-name` and `#[crate_name]` are required to match, but `{$crate_name}` != `{$attr_crate_name}`" | |
| )] | |
| pub(crate) struct CrateNameDoesNotMatch { | |
| #[primary_span] | |
| pub(crate) span: Span, | |
| pub(crate) crate_name: Symbol, | |
| pub(crate) attr_crate_name: Symbol, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("crate names cannot start with a `-`, but `{$crate_name}` has a leading hyphen")] | |
| pub(crate) struct CrateNameInvalid<'a> { | |
| pub(crate) crate_name: &'a str, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("Ferris cannot be used as an identifier")] | |
| pub struct FerrisIdentifier { | |
| #[primary_span] | |
| pub spans: Vec<Span>, | |
| #[suggestion( | |
| "try using their name instead", | |
| code = "{ferris_fix}", | |
| applicability = "maybe-incorrect" | |
| )] | |
| pub first_span: Span, | |
| pub ferris_fix: &'static str, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("identifiers cannot contain emoji: `{$ident}`")] | |
| pub struct EmojiIdentifier { | |
| #[primary_span] | |
| pub spans: Vec<Span>, | |
| pub ident: Symbol, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("cannot mix `bin` crate type with others")] | |
| pub struct MixedBinCrate; | |
| #[derive(Diagnostic)] | |
| #[diag("cannot mix `proc-macro` crate type with others")] | |
| pub struct MixedProcMacroCrate; | |
| #[derive(Diagnostic)] | |
| #[diag("error writing dependencies to `{$path}`: {$error}")] | |
| pub struct ErrorWritingDependencies<'a> { | |
| pub path: &'a Path, | |
| pub error: io::Error, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("the input file \"{$path}\" would be overwritten by the generated executable")] | |
| pub struct InputFileWouldBeOverWritten<'a> { | |
| pub path: &'a Path, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag( | |
| "the generated executable for the input file \"{$input_path}\" conflicts with the existing directory \"{$dir_path}\"" | |
| )] | |
| pub struct GeneratedFileConflictsWithDirectory<'a> { | |
| pub input_path: &'a Path, | |
| pub dir_path: &'a Path, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("failed to find or create the directory specified by `--temps-dir`")] | |
| pub struct TempsDirError; | |
| #[derive(Diagnostic)] | |
| #[diag("failed to find or create the directory specified by `--out-dir`")] | |
| pub struct OutDirError; | |
| #[derive(Diagnostic)] | |
| #[diag("failed to write file {$path}: {$error}\"")] | |
| pub struct FailedWritingFile<'a> { | |
| pub path: &'a Path, | |
| pub error: io::Error, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag( | |
| "building proc macro crate with `panic=abort` or `panic=immediate-abort` may crash the compiler should the proc-macro panic" | |
| )] | |
| pub struct ProcMacroCratePanicAbort; | |
| #[derive(Diagnostic)] | |
| #[diag( | |
| "due to multiple output types requested, the explicitly specified output file name will be adapted for each output type" | |
| )] | |
| pub struct MultipleOutputTypesAdaption; | |
| #[derive(Diagnostic)] | |
| #[diag("ignoring -C extra-filename flag due to -o flag")] | |
| pub struct IgnoringExtraFilename; | |
| #[derive(Diagnostic)] | |
| #[diag("ignoring --out-dir flag due to -o flag")] | |
| pub struct IgnoringOutDir; | |
| #[derive(Diagnostic)] | |
| #[diag("can't use option `-o` or `--emit` to write multiple output types to stdout")] | |
| pub struct MultipleOutputTypesToStdout; | |
| #[derive(Diagnostic)] | |
| #[diag( | |
| "target feature `{$feature}` must be {$enabled} to ensure that the ABI of the current target can be implemented correctly" | |
| )] | |
| #[note( | |
| "this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!" | |
| )] | |
| #[note("for more information, see issue #116344 <https://github.com/rust-lang/rust/issues/116344>")] | |
| pub(crate) struct AbiRequiredTargetFeature<'a> { | |
| pub feature: &'a str, | |
| pub enabled: &'a str, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("dropping unsupported crate type `{$crate_type}` for codegen backend `{$codegen_backend}`")] | |
| pub(crate) struct UnsupportedCrateTypeForCodegenBackend { | |
| pub(crate) crate_type: CrateType, | |
| pub(crate) codegen_backend: &'static str, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("dropping unsupported crate type `{$crate_type}` for target `{$target_triple}`")] | |
| pub(crate) struct UnsupportedCrateTypeForTarget<'a> { | |
| pub(crate) crate_type: CrateType, | |
| pub(crate) target_triple: &'a TargetTuple, | |
| } |