Skip to main content

knave_expand/diagnostic/
code.rs

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}