1use std::borrow::Cow;
2
3#[derive(Clone, Debug, PartialEq, Eq, Hash)]
4pub struct DiagnosticCode(Cow<'static, str>);
5
6macro_rules! diagnostic_codes {
7 ($($constant:ident = $code:literal,)*) => {
8 impl DiagnosticCode {
9 $(pub const $constant: Self = Self(Cow::Borrowed($code));)*
10
11 pub(super) const NAMED: &[(&str, &str)] = &[$((stringify!($constant), $code)),*];
12 }
13 };
14}
15
16diagnostic_codes! {
17 UNCLOSED_LIST = "L0101",
18 UNMATCHED_CLOSE = "L0102",
19 UNTERMINATED_STRING = "L0103",
20 UNKNOWN_ESCAPE = "L0104",
21 MALFORMED_NUMBER = "L0105",
22 RESERVED_CHARACTER = "L0106",
23 NUMBER_TOO_LARGE = "L0107",
24 LIST_TOO_DEEP = "L0108",
25
26 UNBOUND_NAME = "L0201",
27 AMBIGUOUS_NAME = "L0202",
28 DUPLICATE_DEFINITION = "L0203",
29 UNKNOWN_MODULE = "L0204",
30 MISSING_EXPORT = "L0205",
31 IMPORT_CYCLE = "L0206",
32 NOT_A_DEFINITION = "L0207",
33 MODULE_LEVEL_ONLY = "L0208",
34 EMPTY_CALL = "L0209",
35 MALFORMED_FORM = "L0210",
36 FORM_AS_VALUE = "L0211",
37 WRONG_NAMESPACE = "L0212",
38 BAD_TYPE_TEMPLATE = "L0213",
39 RECUR_OUTSIDE_TAIL = "L0214",
40 RECUR_ARGUMENT_COUNT = "L0215",
41 RECUR_OUTSIDE_FN = "L0216",
42 SECOND_TRAIT_PATH = "L0217",
43 MALFORMED_TEMPLATE = "L0218",
44 TYPE_PARAMETERS_ON_NAME = "L0219",
45 TRY_OUTSIDE_FN = "L0220",
46 TYPE_PARAMETER_PLACEHOLDER = "L0221",
47 TYPE_PLACEHOLDER_IN_RUST_TYPE = "L0222",
48 RUST_TYPE_CLAUSES_NEED_ONE_PARAMETER = "L0223",
49 BORROWED_TYPE_PLACEHOLDER = "L0224",
50 PLACEHOLDER_WITHOUT_PARAMETER = "L0225",
51 UNUSED_TYPE_PLACEHOLDER = "L0226",
52 LET_OUTSIDE_BODY = "L0227",
53 MALFORMED_TYPE = "L0228",
54 MACRO_OUTSIDE_DEF = "L0229",
55 MIXED_VARIANT_PAYLOAD = "L0230",
56 NOT_A_PATTERN = "L0231",
57 VARIANT_AS_VALUE = "L0233",
58 NOT_A_TYPE = "L0234",
59 NOT_A_NAME = "L0235",
60 SIGNATURE_TARGET = "L0236",
61 DERIVE_TARGET = "L0237",
62 DERIVE_TRAIT = "L0238",
63 MISSING_METHOD = "L0239",
64 EXTRA_METHOD = "L0240",
65 UNDECLARED_METHOD = "L0241",
66 GENERIC_IMPLEMENTOR = "L0242",
67 FIELD_KEYWORD_ARITY = "L0243",
68 KEYWORD_BINDER = "L0244",
69 IGNORED_BINDING_READ = "L0245",
70 RUST_CLAUSES_NEED_ONE_PARAMETER = "L0246",
71 CLAUSE_PASSES_ARGUMENTS_UNLIKE_TEMPLATE = "L0247",
72 MALFORMED_STRUCTURAL_CLAUSE = "L0248",
73 INPUT_SET_ASIDE = "L0249",
74 RESERVED_MODULE_NAME = "L0250",
75 LIBRARY_HIDES_LOCAL_MODULE = "L0251",
76 UNLISTED_LIBRARY = "L0252",
77 LOCAL_MODULE_BESIDE_LIBRARY = "L0253",
78 MODULE_OUTSIDE_CHECKOUT = "L0254",
79 INTERNAL_MODULE = "L0255",
80 TEST_MODULE_HIDES_SOURCE_MODULE = "L0256",
81 FILE_TAKES_COMPILER_MODULE = "L0257",
82
83 MACRO_FAILED = "L0301",
84 MACRO_RESULT_NOT_FORM = "L0302",
85 COMPILE_TIME_ERROR = "L0303",
86 MACRO_AS_VALUE = "L0304",
87 EXPANSION_TOO_DEEP = "L0305",
88 PROGRAM_ONLY = "L0306",
89 COMPILE_TIME_CYCLE = "L0307",
90 BROKEN_DEFINITION = "L0308",
91 BROKEN_MACRO = "L0309",
92 NOT_AT_COMPILE_TIME = "L0310",
93 COMPILE_TIME_ARGUMENT_COUNT = "L0311",
94 NOT_CALLABLE = "L0312",
95 NOT_A_BOOLEAN = "L0313",
96 INDEX_OUT_OF_RANGE = "L0314",
97 ARITHMETIC_OVERFLOW = "L0315",
98 RUNTIME_ONLY = "L0316",
99 MATCH_AT_RUNTIME = "L0317",
100 COMPILE_TIME_RECURSION = "L0318",
101 RUST_CODE_PROGRAM_ONLY = "L0319",
102 REPEATED_PARAMETER = "L0320",
103 FAILURE_PART = "L0321",
104 UNKNOWN_FAILURE_CODE = "L0322",
105 UNKNOWN_PARAMETER = "L0323",
106 UNKNOWN_FIELD_DEFAULT = "L0324",
107 EXPANSION_NESTS_TOO_DEEP = "L0325",
108 EXPANSION_TOO_LARGE = "L0326",
109 UNDOCUMENTED_TERM = "L0327",
110 DOCSTRING_BEFORE_PARAMETERS = "L0328",
111 MALFORMED_HEADER_SHAPE = "L0329",
112 UNEQUAL_REPETITIONS = "L0330",
113 UNEXPECTED_HEADER_SHAPE_MARKER = "L0331",
114 TRAILING_COLON = "L0332",
115 DUPLICATE_TEST = "L0333",
116 BINDING_WITHOUT_VALUE = "L0334",
117 BINDINGS_WITHOUT_BODY = "L0335",
118 MALFORMED_BINDING_LIST = "L0336",
119 PARTLY_LABELED_CALL = "L0338",
120 MALFORMED_DEFINER_HEAD = "L0339",
121 MISPLACED_RUST_CLAUSE = "L0340",
122 MALFORMED_RUST_CLAUSE = "L0341",
123 MALFORMED_TRAIT_METHOD = "L0342",
124 METHOD_IN_RUST_TRAIT = "L0343",
125 RUST_TRAIT_SUPERTRAITS = "L0344",
126 DEFTYPE_WITHOUT_RUST = "L0345",
127 MALFORMED_VARIANT = "L0346",
128 VARIANT_STRUCT_PAYLOAD = "L0347",
129 MIXED_VARIANT_ITEMS = "L0348",
130 VARIANT_FIELD_WITHOUT_TYPE = "L0349",
131 PROJECT_FORM_IN_PROGRAM = "L0350",
132 UNDEFINED_DOCUMENTED_TERM = "L0351",
133 PRN_WITHOUT_VALUE = "L0352",
134 UPDATE_ARGUMENTS = "L0353",
135 UNREADABLE_DOC_EXAMPLE = "L0354",
136 MACRO_VALUE_SIZE = "L0355",
137 DUPLICATE_TASK = "L0356",
138 MISNAMED_TASK = "L0357",
139 POSITIONAL_AFTER_FLAG = "L0358",
140 TASK_OUTSIDE_TASKS = "L0359",
141 TASK_HELP_FLAG = "L0360",
142 TASK_WITHOUT_BODY = "L0361",
143 OPEN_TASK_RESULT = "L0362",
144 MACRO_STEP_LIMIT = "L0363",
145 MISSING_HOST_GROUP = "L0364",
146
147 MISMATCHED_TYPES = "L0401",
148 WRONG_ARGUMENT_COUNT = "L0402",
149 NOT_A_FUNCTION = "L0403",
150 MISSING_TRAIT = "L0404",
151 LITERAL_OUT_OF_RANGE = "L0406",
152 CANNOT_INFER = "L0407",
153 UNKNOWN_FIELD = "L0408",
154 MISSING_FIELDS = "L0409",
155 NO_FIELDS = "L0410",
156 INFINITE_TYPE = "L0411",
157 COMPILE_TIME_ONLY = "L0412",
158 MISPLACED_WHERE = "L0413",
159 LITERAL_TYPE_PARAMETER = "L0414",
160 WRONG_TYPE_ARGUMENT_COUNT = "L0415",
161 UNUSED_TYPE_PARAMETER = "L0416",
162 BOUNDED_TYPE_PARAMETER = "L0417",
163 BARE_IMPLEMENTOR = "L0418",
164 MUT_BORROW_OF_COPY = "L0419",
165 TRAIT_CLAIM_ON_STRUCT = "L0421",
166 NOT_DERIVABLE = "L0422",
167 BLOCKED_DERIVE = "L0423",
168 DUPLICATE_DERIVE = "L0424",
169 TRAIT_NO_SECOND_TYPE = "L0425",
170 MISPLACED_WITH = "L0426",
171 TRY_TARGET = "L0428",
172 TRY_NOT_RESULT_OR_OPTION = "L0429",
173 TRY_NO_CONVERSION = "L0437",
174 AMBIGUOUS_VARIANT = "L0430",
175 UNKNOWN_VARIANT = "L0431",
176 WRONG_PATTERN_COUNT = "L0432",
177 NON_EXHAUSTIVE_MATCH = "L0433",
178 UNREACHABLE_ARM = "L0434",
179 DERIVE_ON_RUST_TYPE = "L0435",
180 VARIANT_ARM_VALUE = "L0436",
181 ENUM_RUST_TEMPLATE = "L0438",
182 RECURSIVELY_USED_TYPE_PARAMETER = "L0439",
183 MISSING_BOUND = "L0440",
184 LITERAL_MISFIT = "L0441",
185 QUOTE_AT_RUNTIME = "L0442",
186 UNUSED_ENUM_PARAMETER = "L0443",
187 UNSIZABLE_IMPLEMENTOR = "L0444",
188 FOREIGN_IMPLEMENTOR = "L0445",
189 SUPERTRAIT = "L0446",
190 ASSOCIATED_TYPE = "L0447",
191 OBJECT_SAFETY = "L0448",
192 TRAIT_OUTSIDE_BOX = "L0449",
193 MISSING_ASSOCIATED_VALUE = "L0450",
194 PROJECTION_WITHOUT_IMPLEMENTOR = "L0451",
195 UNDECLARED_ASSOCIATED_VALUE = "L0452",
196 PROJECTION_WITHOUT_BOUND = "L0453",
197 REPEATED_FIELD = "L0454",
198 MAIN_RETURNS_VALUE = "L0455",
199 SELFLESS_METHOD_CALL = "L0456",
200 UNKNOWN_COLLECTION = "L0457",
201 UNNAMEABLE_TYPE = "L0458",
202 SECOND_IMPL = "L0459",
203 UNKNOWN_PATTERN_FIELD = "L0460",
204 REPEATED_PATTERN_FIELD = "L0461",
205 MIXED_PATTERN_FORMS = "L0462",
206 KEYWORD_WITHOUT_PATTERN = "L0463",
207 COVERED_CLAUSE = "L0464",
208 REQUIREMENT_CYCLE = "L0465",
209
210 USE_AFTER_MOVE = "L0501",
211 NEEDS_OWNERSHIP = "L0503",
212 MISSING_BANG = "L0504",
213 MISSING_COPY_BOUND = "L0505",
214 WRITTEN_MODE_MISMATCH = "L0506",
215 FUNCTION_VALUE_MISMATCH = "L0507",
216 CLOSURE_KIND_MISMATCH = "L0509",
217 LOCAL_BORROW = "L0510",
218 CAPTURING_FUNCTION_FIELD = "L0511",
219 LENT_LOCAL_BORROW = "L0512",
220 INFERRED_MUT_OF_COPY = "L0514",
221 CHANGING_FUNCTION_VALUE = "L0515",
222 ALIASED_CHANGE = "L0516",
223 RETURNED_CLOSURE_USES_CHANGED_PARAMETER = "L0517",
224
225 MISSING_MAIN = "L0601",
226 NAME_COLLISION = "L0602",
227 BAD_TEMPLATE = "L0603",
228 RUST_ERROR = "L0604",
229 UNTIED_IMPLEMENTOR_BORROW = "L0605",
230 UNCAPTURABLE_CHANGED_COPY = "L0606",
231
232 MISSING_PROJECT_FORM = "L0701",
233 EXTRA_PROJECT_FORM = "L0702",
234 MISSING_PROJECT_NAME = "L0703",
235 UNKNOWN_PROJECT_KEY = "L0704",
236 MISSING_PROJECT_VALUE = "L0705",
237 MISMATCHED_PROJECT_VALUE = "L0706",
238 UNKNOWN_PROJECT_SECTION = "L0707",
239 UNEXPECTED_PROJECT_FORM = "L0708",
240 DUPLICATE_PROJECT_ENTRY = "L0709",
241 MALFORMED_DEPENDENCY = "L0710",
242 VERSIONED_LIBRARY = "L0711",
243 LIBRARY_WITHOUT_SOURCE = "L0712",
244 CONFLICTING_LIBRARY_SOURCES = "L0713",
245 GIT_LIBRARY_WITHOUT_REVISION = "L0714",
246 SHORT_REVISION = "L0715",
247 UNVERSIONED_CRATE = "L0716",
248 UNKNOWN_EDITION = "L0717",
249 INVALID_PROJECT_NAME = "L0718",
250 CRATES_UNAVAILABLE_TO_COMMAND = "L0719",
251 RESERVED_LIBRARY_NAME = "L0720",
252 INVALID_LIBRARY_NAME = "L0721",
253 LIBRARY_AT_TWO_SOURCES = "L0722",
254 LIBRARY_WITHOUT_PROJECT_FILE = "L0723",
255 LIBRARY_WITHOUT_ROOT_MODULE = "L0724",
256 GIT_LIBRARY_UNAVAILABLE = "L0725",
257 CRATE_REQUESTS_CONFLICT = "L0726",
258 INVALID_GIT_REPOSITORY = "L0727",
259 PATH_OUTSIDE_CHECKOUT = "L0728",
260
261 UNMATCHED_LINK = "L0802",
262}
263
264impl DiagnosticCode {
265 pub fn from_rustc(code: String) -> Self {
266 Self(Cow::Owned(code))
267 }
268
269 pub fn as_str(&self) -> &str {
270 &self.0
271 }
272
273 pub(super) fn named() -> impl Iterator<Item = (&'static str, Self)> {
274 Self::NAMED
275 .iter()
276 .map(|(constant, code)| (*constant, Self(Cow::Borrowed(code))))
277 }
278}