rustc_interface/
errors.rs

1use std::io;
2use std::path::Path;
3
4use rustc_macros::Diagnostic;
5use rustc_span::{Span, Symbol};
6
7#[derive(Diagnostic)]
8#[diag(interface_crate_name_does_not_match)]
9pub(crate) struct CrateNameDoesNotMatch {
10    #[primary_span]
11    pub(crate) span: Span,
12    pub(crate) crate_name: Symbol,
13    pub(crate) attr_crate_name: Symbol,
14}
15
16#[derive(Diagnostic)]
17#[diag(interface_crate_name_invalid)]
18pub(crate) struct CrateNameInvalid<'a> {
19    pub(crate) crate_name: &'a str,
20}
21
22#[derive(Diagnostic)]
23#[diag(interface_ferris_identifier)]
24pub struct FerrisIdentifier {
25    #[primary_span]
26    pub spans: Vec<Span>,
27    #[suggestion(code = "{ferris_fix}", applicability = "maybe-incorrect")]
28    pub first_span: Span,
29    pub ferris_fix: &'static str,
30}
31
32#[derive(Diagnostic)]
33#[diag(interface_emoji_identifier)]
34pub struct EmojiIdentifier {
35    #[primary_span]
36    pub spans: Vec<Span>,
37    pub ident: Symbol,
38}
39
40#[derive(Diagnostic)]
41#[diag(interface_mixed_bin_crate)]
42pub struct MixedBinCrate;
43
44#[derive(Diagnostic)]
45#[diag(interface_mixed_proc_macro_crate)]
46pub struct MixedProcMacroCrate;
47
48#[derive(Diagnostic)]
49#[diag(interface_error_writing_dependencies)]
50pub struct ErrorWritingDependencies<'a> {
51    pub path: &'a Path,
52    pub error: io::Error,
53}
54
55#[derive(Diagnostic)]
56#[diag(interface_input_file_would_be_overwritten)]
57pub struct InputFileWouldBeOverWritten<'a> {
58    pub path: &'a Path,
59}
60
61#[derive(Diagnostic)]
62#[diag(interface_generated_file_conflicts_with_directory)]
63pub struct GeneratedFileConflictsWithDirectory<'a> {
64    pub input_path: &'a Path,
65    pub dir_path: &'a Path,
66}
67
68#[derive(Diagnostic)]
69#[diag(interface_temps_dir_error)]
70pub struct TempsDirError;
71
72#[derive(Diagnostic)]
73#[diag(interface_out_dir_error)]
74pub struct OutDirError;
75
76#[derive(Diagnostic)]
77#[diag(interface_cant_emit_mir)]
78pub struct CantEmitMIR {
79    pub error: io::Error,
80}
81
82#[derive(Diagnostic)]
83#[diag(interface_rustc_error_fatal)]
84pub struct RustcErrorFatal {
85    #[primary_span]
86    pub span: Span,
87}
88
89#[derive(Diagnostic)]
90#[diag(interface_rustc_error_unexpected_annotation)]
91pub struct RustcErrorUnexpectedAnnotation {
92    #[primary_span]
93    pub span: Span,
94}
95
96#[derive(Diagnostic)]
97#[diag(interface_failed_writing_file)]
98pub struct FailedWritingFile<'a> {
99    pub path: &'a Path,
100    pub error: io::Error,
101}
102
103#[derive(Diagnostic)]
104#[diag(interface_proc_macro_crate_panic_abort)]
105pub struct ProcMacroCratePanicAbort;
106
107#[derive(Diagnostic)]
108#[diag(interface_multiple_output_types_adaption)]
109pub struct MultipleOutputTypesAdaption;
110
111#[derive(Diagnostic)]
112#[diag(interface_ignoring_extra_filename)]
113pub struct IgnoringExtraFilename;
114
115#[derive(Diagnostic)]
116#[diag(interface_ignoring_out_dir)]
117pub struct IgnoringOutDir;
118
119#[derive(Diagnostic)]
120#[diag(interface_multiple_output_types_to_stdout)]
121pub struct MultipleOutputTypesToStdout;
122
123#[derive(Diagnostic)]
124#[diag(interface_abi_required_feature)]
125#[note]
126#[note(interface_abi_required_feature_issue)]
127pub(crate) struct AbiRequiredTargetFeature<'a> {
128    pub feature: &'a str,
129    pub enabled: &'a str,
130}
131
132#[derive(Diagnostic)]
133#[diag(interface_limit_invalid)]
134pub(crate) struct LimitInvalid<'a> {
135    #[primary_span]
136    pub span: Span,
137    #[label]
138    pub value_span: Span,
139    pub error_str: &'a str,
140}