1use span::Edition;
4
5use crate::Severity;
6
7#[derive(Clone)]
8pub struct Lint {
9 pub label: &'static str,
10 pub description: &'static str,
11 pub default_severity: Severity,
12 pub warn_since: Option<Edition>,
13 pub deny_since: Option<Edition>,
14}
15
16pub struct LintGroup {
17 pub lint: Lint,
18 pub children: &'static [&'static str],
19}
20
21pub const DEFAULT_LINTS: &[Lint] = &[
22 Lint {
23 label: "abi_unsupported_vector_types",
24 description: r##"this function call or definition uses a vector type which is not enabled"##,
25 default_severity: Severity::Warning,
26 warn_since: None,
27 deny_since: None,
28 },
29 Lint {
30 label: "absolute_paths_not_starting_with_crate",
31 description: r##"fully qualified paths that start with a module name instead of `crate`, `self`, or an extern crate name"##,
32 default_severity: Severity::Allow,
33 warn_since: None,
34 deny_since: None,
35 },
36 Lint {
37 label: "ambiguous_associated_items",
38 description: r##"ambiguous associated items"##,
39 default_severity: Severity::Error,
40 warn_since: None,
41 deny_since: None,
42 },
43 Lint {
44 label: "ambiguous_glob_imports",
45 description: r##"detects certain glob imports that require reporting an ambiguity error"##,
46 default_severity: Severity::Warning,
47 warn_since: None,
48 deny_since: None,
49 },
50 Lint {
51 label: "ambiguous_glob_reexports",
52 description: r##"ambiguous glob re-exports"##,
53 default_severity: Severity::Warning,
54 warn_since: None,
55 deny_since: None,
56 },
57 Lint {
58 label: "ambiguous_negative_literals",
59 description: r##"ambiguous negative literals operations"##,
60 default_severity: Severity::Allow,
61 warn_since: None,
62 deny_since: None,
63 },
64 Lint {
65 label: "ambiguous_wide_pointer_comparisons",
66 description: r##"detects ambiguous wide pointer comparisons"##,
67 default_severity: Severity::Warning,
68 warn_since: None,
69 deny_since: None,
70 },
71 Lint {
72 label: "anonymous_parameters",
73 description: r##"detects anonymous parameters"##,
74 default_severity: Severity::Warning,
75 warn_since: None,
76 deny_since: None,
77 },
78 Lint {
79 label: "arithmetic_overflow",
80 description: r##"arithmetic operation overflows"##,
81 default_severity: Severity::Error,
82 warn_since: None,
83 deny_since: None,
84 },
85 Lint {
86 label: "array_into_iter",
87 description: r##"detects calling `into_iter` on arrays in Rust 2015 and 2018"##,
88 default_severity: Severity::Warning,
89 warn_since: None,
90 deny_since: None,
91 },
92 Lint {
93 label: "asm_sub_register",
94 description: r##"using only a subset of a register for inline asm inputs"##,
95 default_severity: Severity::Warning,
96 warn_since: None,
97 deny_since: None,
98 },
99 Lint {
100 label: "async_fn_in_trait",
101 description: r##"use of `async fn` in definition of a publicly-reachable trait"##,
102 default_severity: Severity::Warning,
103 warn_since: None,
104 deny_since: None,
105 },
106 Lint {
107 label: "bad_asm_style",
108 description: r##"incorrect use of inline assembly"##,
109 default_severity: Severity::Warning,
110 warn_since: None,
111 deny_since: None,
112 },
113 Lint {
114 label: "bare_trait_objects",
115 description: r##"suggest using `dyn Trait` for trait objects"##,
116 default_severity: Severity::Warning,
117 warn_since: None,
118 deny_since: None,
119 },
120 Lint {
121 label: "binary_asm_labels",
122 description: r##"labels in inline assembly containing only 0 or 1 digits"##,
123 default_severity: Severity::Error,
124 warn_since: None,
125 deny_since: None,
126 },
127 Lint {
128 label: "bindings_with_variant_name",
129 description: r##"detects pattern bindings with the same name as one of the matched variants"##,
130 default_severity: Severity::Error,
131 warn_since: None,
132 deny_since: None,
133 },
134 Lint {
135 label: "boxed_slice_into_iter",
136 description: r##"detects calling `into_iter` on boxed slices in Rust 2015, 2018, and 2021"##,
137 default_severity: Severity::Warning,
138 warn_since: None,
139 deny_since: None,
140 },
141 Lint {
142 label: "break_with_label_and_loop",
143 description: r##"`break` expression with label and unlabeled loop as value expression"##,
144 default_severity: Severity::Warning,
145 warn_since: None,
146 deny_since: None,
147 },
148 Lint {
149 label: "cenum_impl_drop_cast",
150 description: r##"a C-like enum implementing Drop is cast"##,
151 default_severity: Severity::Error,
152 warn_since: None,
153 deny_since: None,
154 },
155 Lint {
156 label: "clashing_extern_declarations",
157 description: r##"detects when an extern fn has been declared with the same name but different types"##,
158 default_severity: Severity::Warning,
159 warn_since: None,
160 deny_since: None,
161 },
162 Lint {
163 label: "closure_returning_async_block",
164 description: r##"closure that returns `async {}` could be rewritten as an async closure"##,
165 default_severity: Severity::Allow,
166 warn_since: None,
167 deny_since: None,
168 },
169 Lint {
170 label: "coherence_leak_check",
171 description: r##"distinct impls distinguished only by the leak-check code"##,
172 default_severity: Severity::Warning,
173 warn_since: None,
174 deny_since: None,
175 },
176 Lint {
177 label: "conflicting_repr_hints",
178 description: r##"conflicts between `#[repr(..)]` hints that were previously accepted and used in practice"##,
179 default_severity: Severity::Error,
180 warn_since: None,
181 deny_since: None,
182 },
183 Lint {
184 label: "confusable_idents",
185 description: r##"detects visually confusable pairs between identifiers"##,
186 default_severity: Severity::Warning,
187 warn_since: None,
188 deny_since: None,
189 },
190 Lint {
191 label: "const_evaluatable_unchecked",
192 description: r##"detects a generic constant is used in a type without a emitting a warning"##,
193 default_severity: Severity::Warning,
194 warn_since: None,
195 deny_since: None,
196 },
197 Lint {
198 label: "const_item_mutation",
199 description: r##"detects attempts to mutate a `const` item"##,
200 default_severity: Severity::Warning,
201 warn_since: None,
202 deny_since: None,
203 },
204 Lint {
205 label: "dangling_pointers_from_temporaries",
206 description: r##"detects getting a pointer from a temporary"##,
207 default_severity: Severity::Warning,
208 warn_since: None,
209 deny_since: None,
210 },
211 Lint {
212 label: "dead_code",
213 description: r##"detect unused, unexported items"##,
214 default_severity: Severity::Warning,
215 warn_since: None,
216 deny_since: None,
217 },
218 Lint {
219 label: "dependency_on_unit_never_type_fallback",
220 description: r##"never type fallback affecting unsafe function calls"##,
221 default_severity: Severity::Warning,
222 warn_since: None,
223 deny_since: None,
224 },
225 Lint {
226 label: "deprecated",
227 description: r##"detects use of deprecated items"##,
228 default_severity: Severity::Warning,
229 warn_since: None,
230 deny_since: None,
231 },
232 Lint {
233 label: "deprecated_in_future",
234 description: r##"detects use of items that will be deprecated in a future version"##,
235 default_severity: Severity::Allow,
236 warn_since: None,
237 deny_since: None,
238 },
239 Lint {
240 label: "deprecated_safe_2024",
241 description: r##"detects unsafe functions being used as safe functions"##,
242 default_severity: Severity::Allow,
243 warn_since: None,
244 deny_since: None,
245 },
246 Lint {
247 label: "deprecated_where_clause_location",
248 description: r##"deprecated where clause location"##,
249 default_severity: Severity::Warning,
250 warn_since: None,
251 deny_since: None,
252 },
253 Lint {
254 label: "deref_into_dyn_supertrait",
255 description: r##"`Deref` implementation usage with a supertrait trait object for output might be shadowed in the future"##,
256 default_severity: Severity::Warning,
257 warn_since: None,
258 deny_since: None,
259 },
260 Lint {
261 label: "deref_nullptr",
262 description: r##"detects when an null pointer is dereferenced"##,
263 default_severity: Severity::Warning,
264 warn_since: None,
265 deny_since: None,
266 },
267 Lint {
268 label: "drop_bounds",
269 description: r##"bounds of the form `T: Drop` are most likely incorrect"##,
270 default_severity: Severity::Warning,
271 warn_since: None,
272 deny_since: None,
273 },
274 Lint {
275 label: "dropping_copy_types",
276 description: r##"calls to `std::mem::drop` with a value that implements Copy"##,
277 default_severity: Severity::Warning,
278 warn_since: None,
279 deny_since: None,
280 },
281 Lint {
282 label: "dropping_references",
283 description: r##"calls to `std::mem::drop` with a reference instead of an owned value"##,
284 default_severity: Severity::Warning,
285 warn_since: None,
286 deny_since: None,
287 },
288 Lint {
289 label: "duplicate_macro_attributes",
290 description: r##"duplicated attribute"##,
291 default_severity: Severity::Warning,
292 warn_since: None,
293 deny_since: None,
294 },
295 Lint {
296 label: "dyn_drop",
297 description: r##"trait objects of the form `dyn Drop` are useless"##,
298 default_severity: Severity::Warning,
299 warn_since: None,
300 deny_since: None,
301 },
302 Lint {
303 label: "edition_2024_expr_fragment_specifier",
304 description: r##"The `expr` fragment specifier will accept more expressions in the 2024 edition. To keep the existing behavior, use the `expr_2021` fragment specifier."##,
305 default_severity: Severity::Allow,
306 warn_since: None,
307 deny_since: None,
308 },
309 Lint {
310 label: "elided_lifetimes_in_associated_constant",
311 description: r##"elided lifetimes cannot be used in associated constants in impls"##,
312 default_severity: Severity::Error,
313 warn_since: None,
314 deny_since: None,
315 },
316 Lint {
317 label: "elided_lifetimes_in_paths",
318 description: r##"hidden lifetime parameters in types are deprecated"##,
319 default_severity: Severity::Allow,
320 warn_since: None,
321 deny_since: None,
322 },
323 Lint {
324 label: "elided_named_lifetimes",
325 description: r##"detects when an elided lifetime gets resolved to be `'static` or some named parameter"##,
326 default_severity: Severity::Warning,
327 warn_since: None,
328 deny_since: None,
329 },
330 Lint {
331 label: "ellipsis_inclusive_range_patterns",
332 description: r##"`...` range patterns are deprecated"##,
333 default_severity: Severity::Warning,
334 warn_since: None,
335 deny_since: None,
336 },
337 Lint {
338 label: "enum_intrinsics_non_enums",
339 description: r##"detects calls to `core::mem::discriminant` and `core::mem::variant_count` with non-enum types"##,
340 default_severity: Severity::Error,
341 warn_since: None,
342 deny_since: None,
343 },
344 Lint {
345 label: "explicit_builtin_cfgs_in_flags",
346 description: r##"detects builtin cfgs set via the `--cfg`"##,
347 default_severity: Severity::Error,
348 warn_since: None,
349 deny_since: None,
350 },
351 Lint {
352 label: "explicit_outlives_requirements",
353 description: r##"outlives requirements can be inferred"##,
354 default_severity: Severity::Allow,
355 warn_since: None,
356 deny_since: None,
357 },
358 Lint {
359 label: "exported_private_dependencies",
360 description: r##"public interface leaks type from a private dependency"##,
361 default_severity: Severity::Warning,
362 warn_since: None,
363 deny_since: None,
364 },
365 Lint {
366 label: "ffi_unwind_calls",
367 description: r##"call to foreign functions or function pointers with FFI-unwind ABI"##,
368 default_severity: Severity::Allow,
369 warn_since: None,
370 deny_since: None,
371 },
372 Lint {
373 label: "for_loops_over_fallibles",
374 description: r##"for-looping over an `Option` or a `Result`, which is more clearly expressed as an `if let`"##,
375 default_severity: Severity::Warning,
376 warn_since: None,
377 deny_since: None,
378 },
379 Lint {
380 label: "forbidden_lint_groups",
381 description: r##"applying forbid to lint-groups"##,
382 default_severity: Severity::Warning,
383 warn_since: None,
384 deny_since: None,
385 },
386 Lint {
387 label: "forgetting_copy_types",
388 description: r##"calls to `std::mem::forget` with a value that implements Copy"##,
389 default_severity: Severity::Warning,
390 warn_since: None,
391 deny_since: None,
392 },
393 Lint {
394 label: "forgetting_references",
395 description: r##"calls to `std::mem::forget` with a reference instead of an owned value"##,
396 default_severity: Severity::Warning,
397 warn_since: None,
398 deny_since: None,
399 },
400 Lint {
401 label: "function_item_references",
402 description: r##"suggest casting to a function pointer when attempting to take references to function items"##,
403 default_severity: Severity::Warning,
404 warn_since: None,
405 deny_since: None,
406 },
407 Lint {
408 label: "fuzzy_provenance_casts",
409 description: r##"a fuzzy integer to pointer cast is used"##,
410 default_severity: Severity::Allow,
411 warn_since: None,
412 deny_since: None,
413 },
414 Lint {
415 label: "hidden_glob_reexports",
416 description: r##"name introduced by a private item shadows a name introduced by a public glob re-export"##,
417 default_severity: Severity::Warning,
418 warn_since: None,
419 deny_since: None,
420 },
421 Lint {
422 label: "if_let_rescope",
423 description: r##"`if let` assigns a shorter lifetime to temporary values being pattern-matched against in Edition 2024 and rewriting in `match` is an option to preserve the semantics up to Edition 2021"##,
424 default_severity: Severity::Allow,
425 warn_since: None,
426 deny_since: None,
427 },
428 Lint {
429 label: "ill_formed_attribute_input",
430 description: r##"ill-formed attribute inputs that were previously accepted and used in practice"##,
431 default_severity: Severity::Error,
432 warn_since: None,
433 deny_since: None,
434 },
435 Lint {
436 label: "impl_trait_overcaptures",
437 description: r##"`impl Trait` will capture more lifetimes than possibly intended in edition 2024"##,
438 default_severity: Severity::Allow,
439 warn_since: None,
440 deny_since: None,
441 },
442 Lint {
443 label: "impl_trait_redundant_captures",
444 description: r##"redundant precise-capturing `use<...>` syntax on an `impl Trait`"##,
445 default_severity: Severity::Warning,
446 warn_since: None,
447 deny_since: None,
448 },
449 Lint {
450 label: "improper_ctypes",
451 description: r##"proper use of libc types in foreign modules"##,
452 default_severity: Severity::Warning,
453 warn_since: None,
454 deny_since: None,
455 },
456 Lint {
457 label: "improper_ctypes_definitions",
458 description: r##"proper use of libc types in foreign item definitions"##,
459 default_severity: Severity::Warning,
460 warn_since: None,
461 deny_since: None,
462 },
463 Lint {
464 label: "incomplete_features",
465 description: r##"incomplete features that may function improperly in some or all cases"##,
466 default_severity: Severity::Warning,
467 warn_since: None,
468 deny_since: None,
469 },
470 Lint {
471 label: "incomplete_include",
472 description: r##"trailing content in included file"##,
473 default_severity: Severity::Error,
474 warn_since: None,
475 deny_since: None,
476 },
477 Lint {
478 label: "ineffective_unstable_trait_impl",
479 description: r##"detects `#[unstable]` on stable trait implementations for stable types"##,
480 default_severity: Severity::Error,
481 warn_since: None,
482 deny_since: None,
483 },
484 Lint {
485 label: "inline_no_sanitize",
486 description: r##"detects incompatible use of `#[inline(always)]` and `#[no_sanitize(...)]`"##,
487 default_severity: Severity::Warning,
488 warn_since: None,
489 deny_since: None,
490 },
491 Lint {
492 label: "internal_features",
493 description: r##"internal features are not supposed to be used"##,
494 default_severity: Severity::Warning,
495 warn_since: None,
496 deny_since: None,
497 },
498 Lint {
499 label: "invalid_atomic_ordering",
500 description: r##"usage of invalid atomic ordering in atomic operations and memory fences"##,
501 default_severity: Severity::Error,
502 warn_since: None,
503 deny_since: None,
504 },
505 Lint {
506 label: "invalid_doc_attributes",
507 description: r##"detects invalid `#[doc(...)]` attributes"##,
508 default_severity: Severity::Error,
509 warn_since: None,
510 deny_since: None,
511 },
512 Lint {
513 label: "invalid_from_utf8",
514 description: r##"using a non UTF-8 literal in `std::str::from_utf8`"##,
515 default_severity: Severity::Warning,
516 warn_since: None,
517 deny_since: None,
518 },
519 Lint {
520 label: "invalid_from_utf8_unchecked",
521 description: r##"using a non UTF-8 literal in `std::str::from_utf8_unchecked`"##,
522 default_severity: Severity::Error,
523 warn_since: None,
524 deny_since: None,
525 },
526 Lint {
527 label: "invalid_macro_export_arguments",
528 description: r##""invalid_parameter" isn't a valid argument for `#[macro_export]`"##,
529 default_severity: Severity::Warning,
530 warn_since: None,
531 deny_since: None,
532 },
533 Lint {
534 label: "invalid_nan_comparisons",
535 description: r##"detects invalid floating point NaN comparisons"##,
536 default_severity: Severity::Warning,
537 warn_since: None,
538 deny_since: None,
539 },
540 Lint {
541 label: "invalid_reference_casting",
542 description: r##"casts of `&T` to `&mut T` without interior mutability"##,
543 default_severity: Severity::Error,
544 warn_since: None,
545 deny_since: None,
546 },
547 Lint {
548 label: "invalid_type_param_default",
549 description: r##"type parameter default erroneously allowed in invalid location"##,
550 default_severity: Severity::Error,
551 warn_since: None,
552 deny_since: None,
553 },
554 Lint {
555 label: "invalid_value",
556 description: r##"an invalid value is being created (such as a null reference)"##,
557 default_severity: Severity::Warning,
558 warn_since: None,
559 deny_since: None,
560 },
561 Lint {
562 label: "irrefutable_let_patterns",
563 description: r##"detects irrefutable patterns in `if let` and `while let` statements"##,
564 default_severity: Severity::Warning,
565 warn_since: None,
566 deny_since: None,
567 },
568 Lint {
569 label: "keyword_idents_2018",
570 description: r##"detects edition keywords being used as an identifier"##,
571 default_severity: Severity::Allow,
572 warn_since: None,
573 deny_since: None,
574 },
575 Lint {
576 label: "keyword_idents_2024",
577 description: r##"detects edition keywords being used as an identifier"##,
578 default_severity: Severity::Allow,
579 warn_since: None,
580 deny_since: None,
581 },
582 Lint {
583 label: "large_assignments",
584 description: r##"detects large moves or copies"##,
585 default_severity: Severity::Warning,
586 warn_since: None,
587 deny_since: None,
588 },
589 Lint {
590 label: "late_bound_lifetime_arguments",
591 description: r##"detects generic lifetime arguments in path segments with late bound lifetime parameters"##,
592 default_severity: Severity::Warning,
593 warn_since: None,
594 deny_since: None,
595 },
596 Lint {
597 label: "legacy_derive_helpers",
598 description: r##"detects derive helper attributes that are used before they are introduced"##,
599 default_severity: Severity::Warning,
600 warn_since: None,
601 deny_since: None,
602 },
603 Lint {
604 label: "let_underscore_drop",
605 description: r##"non-binding let on a type that has a destructor"##,
606 default_severity: Severity::Allow,
607 warn_since: None,
608 deny_since: None,
609 },
610 Lint {
611 label: "let_underscore_lock",
612 description: r##"non-binding let on a synchronization lock"##,
613 default_severity: Severity::Error,
614 warn_since: None,
615 deny_since: None,
616 },
617 Lint {
618 label: "long_running_const_eval",
619 description: r##"detects long const eval operations"##,
620 default_severity: Severity::Error,
621 warn_since: None,
622 deny_since: None,
623 },
624 Lint {
625 label: "lossy_provenance_casts",
626 description: r##"a lossy pointer to integer cast is used"##,
627 default_severity: Severity::Allow,
628 warn_since: None,
629 deny_since: None,
630 },
631 Lint {
632 label: "macro_expanded_macro_exports_accessed_by_absolute_paths",
633 description: r##"macro-expanded `macro_export` macros from the current crate cannot be referred to by absolute paths"##,
634 default_severity: Severity::Error,
635 warn_since: None,
636 deny_since: None,
637 },
638 Lint {
639 label: "macro_use_extern_crate",
640 description: r##"the `#[macro_use]` attribute is now deprecated in favor of using macros via the module system"##,
641 default_severity: Severity::Allow,
642 warn_since: None,
643 deny_since: None,
644 },
645 Lint {
646 label: "map_unit_fn",
647 description: r##"`Iterator::map` call that discard the iterator's values"##,
648 default_severity: Severity::Warning,
649 warn_since: None,
650 deny_since: None,
651 },
652 Lint {
653 label: "meta_variable_misuse",
654 description: r##"possible meta-variable misuse at macro definition"##,
655 default_severity: Severity::Allow,
656 warn_since: None,
657 deny_since: None,
658 },
659 Lint {
660 label: "missing_abi",
661 description: r##"No declared ABI for extern declaration"##,
662 default_severity: Severity::Allow,
663 warn_since: None,
664 deny_since: None,
665 },
666 Lint {
667 label: "missing_copy_implementations",
668 description: r##"detects potentially-forgotten implementations of `Copy`"##,
669 default_severity: Severity::Allow,
670 warn_since: None,
671 deny_since: None,
672 },
673 Lint {
674 label: "missing_debug_implementations",
675 description: r##"detects missing implementations of Debug"##,
676 default_severity: Severity::Allow,
677 warn_since: None,
678 deny_since: None,
679 },
680 Lint {
681 label: "missing_docs",
682 description: r##"detects missing documentation for public members"##,
683 default_severity: Severity::Allow,
684 warn_since: None,
685 deny_since: None,
686 },
687 Lint {
688 label: "missing_fragment_specifier",
689 description: r##"detects missing fragment specifiers in unused `macro_rules!` patterns"##,
690 default_severity: Severity::Error,
691 warn_since: None,
692 deny_since: None,
693 },
694 Lint {
695 label: "missing_unsafe_on_extern",
696 description: r##"detects missing unsafe keyword on extern declarations"##,
697 default_severity: Severity::Allow,
698 warn_since: None,
699 deny_since: None,
700 },
701 Lint {
702 label: "mixed_script_confusables",
703 description: r##"detects Unicode scripts whose mixed script confusables codepoints are solely used"##,
704 default_severity: Severity::Warning,
705 warn_since: None,
706 deny_since: None,
707 },
708 Lint {
709 label: "multiple_supertrait_upcastable",
710 description: r##"detect when a dyn-compatible trait has multiple supertraits"##,
711 default_severity: Severity::Allow,
712 warn_since: None,
713 deny_since: None,
714 },
715 Lint {
716 label: "must_not_suspend",
717 description: r##"use of a `#[must_not_suspend]` value across a yield point"##,
718 default_severity: Severity::Allow,
719 warn_since: None,
720 deny_since: None,
721 },
722 Lint {
723 label: "mutable_transmutes",
724 description: r##"transmuting &T to &mut T is undefined behavior, even if the reference is unused"##,
725 default_severity: Severity::Error,
726 warn_since: None,
727 deny_since: None,
728 },
729 Lint {
730 label: "named_arguments_used_positionally",
731 description: r##"named arguments in format used positionally"##,
732 default_severity: Severity::Warning,
733 warn_since: None,
734 deny_since: None,
735 },
736 Lint {
737 label: "named_asm_labels",
738 description: r##"named labels in inline assembly"##,
739 default_severity: Severity::Error,
740 warn_since: None,
741 deny_since: None,
742 },
743 Lint {
744 label: "never_type_fallback_flowing_into_unsafe",
745 description: r##"never type fallback affecting unsafe function calls"##,
746 default_severity: Severity::Warning,
747 warn_since: None,
748 deny_since: Some(Edition::Edition2024),
749 },
750 Lint {
751 label: "no_mangle_const_items",
752 description: r##"const items will not have their symbols exported"##,
753 default_severity: Severity::Error,
754 warn_since: None,
755 deny_since: None,
756 },
757 Lint {
758 label: "no_mangle_generic_items",
759 description: r##"generic items must be mangled"##,
760 default_severity: Severity::Warning,
761 warn_since: None,
762 deny_since: None,
763 },
764 Lint {
765 label: "non_ascii_idents",
766 description: r##"detects non-ASCII identifiers"##,
767 default_severity: Severity::Allow,
768 warn_since: None,
769 deny_since: None,
770 },
771 Lint {
772 label: "non_camel_case_types",
773 description: r##"types, variants, traits and type parameters should have camel case names"##,
774 default_severity: Severity::Warning,
775 warn_since: None,
776 deny_since: None,
777 },
778 Lint {
779 label: "non_contiguous_range_endpoints",
780 description: r##"detects off-by-one errors with exclusive range patterns"##,
781 default_severity: Severity::Warning,
782 warn_since: None,
783 deny_since: None,
784 },
785 Lint {
786 label: "non_exhaustive_omitted_patterns",
787 description: r##"detect when patterns of types marked `non_exhaustive` are missed"##,
788 default_severity: Severity::Allow,
789 warn_since: None,
790 deny_since: None,
791 },
792 Lint {
793 label: "non_fmt_panics",
794 description: r##"detect single-argument panic!() invocations in which the argument is not a format string"##,
795 default_severity: Severity::Warning,
796 warn_since: None,
797 deny_since: None,
798 },
799 Lint {
800 label: "non_local_definitions",
801 description: r##"checks for non-local definitions"##,
802 default_severity: Severity::Warning,
803 warn_since: None,
804 deny_since: None,
805 },
806 Lint {
807 label: "non_shorthand_field_patterns",
808 description: r##"using `Struct { x: x }` instead of `Struct { x }` in a pattern"##,
809 default_severity: Severity::Warning,
810 warn_since: None,
811 deny_since: None,
812 },
813 Lint {
814 label: "non_snake_case",
815 description: r##"variables, methods, functions, lifetime parameters and modules should have snake case names"##,
816 default_severity: Severity::Warning,
817 warn_since: None,
818 deny_since: None,
819 },
820 Lint {
821 label: "non_upper_case_globals",
822 description: r##"static constants should have uppercase identifiers"##,
823 default_severity: Severity::Warning,
824 warn_since: None,
825 deny_since: None,
826 },
827 Lint {
828 label: "noop_method_call",
829 description: r##"detects the use of well-known noop methods"##,
830 default_severity: Severity::Warning,
831 warn_since: None,
832 deny_since: None,
833 },
834 Lint {
835 label: "opaque_hidden_inferred_bound",
836 description: r##"detects the use of nested `impl Trait` types in associated type bounds that are not general enough"##,
837 default_severity: Severity::Warning,
838 warn_since: None,
839 deny_since: None,
840 },
841 Lint {
842 label: "order_dependent_trait_objects",
843 description: r##"trait-object types were treated as different depending on marker-trait order"##,
844 default_severity: Severity::Error,
845 warn_since: None,
846 deny_since: None,
847 },
848 Lint {
849 label: "out_of_scope_macro_calls",
850 description: r##"detects out of scope calls to `macro_rules` in key-value attributes"##,
851 default_severity: Severity::Warning,
852 warn_since: None,
853 deny_since: None,
854 },
855 Lint {
856 label: "overflowing_literals",
857 description: r##"literal out of range for its type"##,
858 default_severity: Severity::Error,
859 warn_since: None,
860 deny_since: None,
861 },
862 Lint {
863 label: "overlapping_range_endpoints",
864 description: r##"detects range patterns with overlapping endpoints"##,
865 default_severity: Severity::Warning,
866 warn_since: None,
867 deny_since: None,
868 },
869 Lint {
870 label: "path_statements",
871 description: r##"path statements with no effect"##,
872 default_severity: Severity::Warning,
873 warn_since: None,
874 deny_since: None,
875 },
876 Lint {
877 label: "patterns_in_fns_without_body",
878 description: r##"patterns in functions without body were erroneously allowed"##,
879 default_severity: Severity::Error,
880 warn_since: None,
881 deny_since: None,
882 },
883 Lint {
884 label: "private_bounds",
885 description: r##"private type in secondary interface of an item"##,
886 default_severity: Severity::Warning,
887 warn_since: None,
888 deny_since: None,
889 },
890 Lint {
891 label: "private_interfaces",
892 description: r##"private type in primary interface of an item"##,
893 default_severity: Severity::Warning,
894 warn_since: None,
895 deny_since: None,
896 },
897 Lint {
898 label: "proc_macro_derive_resolution_fallback",
899 description: r##"detects proc macro derives using inaccessible names from parent modules"##,
900 default_severity: Severity::Error,
901 warn_since: None,
902 deny_since: None,
903 },
904 Lint {
905 label: "ptr_cast_add_auto_to_object",
906 description: r##"detects `as` casts from pointers to `dyn Trait` to pointers to `dyn Trait + Auto`"##,
907 default_severity: Severity::Warning,
908 warn_since: None,
909 deny_since: None,
910 },
911 Lint {
912 label: "ptr_to_integer_transmute_in_consts",
913 description: r##"detects pointer to integer transmutes in const functions and associated constants"##,
914 default_severity: Severity::Warning,
915 warn_since: None,
916 deny_since: None,
917 },
918 Lint {
919 label: "pub_use_of_private_extern_crate",
920 description: r##"detect public re-exports of private extern crates"##,
921 default_severity: Severity::Error,
922 warn_since: None,
923 deny_since: None,
924 },
925 Lint {
926 label: "redundant_imports",
927 description: r##"imports that are redundant due to being imported already"##,
928 default_severity: Severity::Allow,
929 warn_since: None,
930 deny_since: None,
931 },
932 Lint {
933 label: "redundant_lifetimes",
934 description: r##"detects lifetime parameters that are redundant because they are equal to some other named lifetime"##,
935 default_severity: Severity::Allow,
936 warn_since: None,
937 deny_since: None,
938 },
939 Lint {
940 label: "redundant_semicolons",
941 description: r##"detects unnecessary trailing semicolons"##,
942 default_severity: Severity::Warning,
943 warn_since: None,
944 deny_since: None,
945 },
946 Lint {
947 label: "refining_impl_trait_internal",
948 description: r##"impl trait in impl method signature does not match trait method signature"##,
949 default_severity: Severity::Warning,
950 warn_since: None,
951 deny_since: None,
952 },
953 Lint {
954 label: "refining_impl_trait_reachable",
955 description: r##"impl trait in impl method signature does not match trait method signature"##,
956 default_severity: Severity::Warning,
957 warn_since: None,
958 deny_since: None,
959 },
960 Lint {
961 label: "renamed_and_removed_lints",
962 description: r##"lints that have been renamed or removed"##,
963 default_severity: Severity::Warning,
964 warn_since: None,
965 deny_since: None,
966 },
967 Lint {
968 label: "repr_transparent_external_private_fields",
969 description: r##"transparent type contains an external ZST that is marked #[non_exhaustive] or contains private fields"##,
970 default_severity: Severity::Warning,
971 warn_since: None,
972 deny_since: None,
973 },
974 Lint {
975 label: "rust_2021_incompatible_closure_captures",
976 description: r##"detects closures affected by Rust 2021 changes"##,
977 default_severity: Severity::Allow,
978 warn_since: None,
979 deny_since: None,
980 },
981 Lint {
982 label: "rust_2021_incompatible_or_patterns",
983 description: r##"detects usage of old versions of or-patterns"##,
984 default_severity: Severity::Allow,
985 warn_since: None,
986 deny_since: None,
987 },
988 Lint {
989 label: "rust_2021_prefixes_incompatible_syntax",
990 description: r##"identifiers that will be parsed as a prefix in Rust 2021"##,
991 default_severity: Severity::Allow,
992 warn_since: None,
993 deny_since: None,
994 },
995 Lint {
996 label: "rust_2021_prelude_collisions",
997 description: r##"detects the usage of trait methods which are ambiguous with traits added to the prelude in future editions"##,
998 default_severity: Severity::Allow,
999 warn_since: None,
1000 deny_since: None,
1001 },
1002 Lint {
1003 label: "rust_2024_guarded_string_incompatible_syntax",
1004 description: r##"will be parsed as a guarded string in Rust 2024"##,
1005 default_severity: Severity::Allow,
1006 warn_since: None,
1007 deny_since: None,
1008 },
1009 Lint {
1010 label: "rust_2024_incompatible_pat",
1011 description: r##"detects patterns whose meaning will change in Rust 2024"##,
1012 default_severity: Severity::Allow,
1013 warn_since: None,
1014 deny_since: None,
1015 },
1016 Lint {
1017 label: "rust_2024_prelude_collisions",
1018 description: r##"detects the usage of trait methods which are ambiguous with traits added to the prelude in future editions"##,
1019 default_severity: Severity::Allow,
1020 warn_since: None,
1021 deny_since: None,
1022 },
1023 Lint {
1024 label: "self_constructor_from_outer_item",
1025 description: r##"detect unsupported use of `Self` from outer item"##,
1026 default_severity: Severity::Warning,
1027 warn_since: None,
1028 deny_since: None,
1029 },
1030 Lint {
1031 label: "semicolon_in_expressions_from_macros",
1032 description: r##"trailing semicolon in macro body used as expression"##,
1033 default_severity: Severity::Warning,
1034 warn_since: None,
1035 deny_since: None,
1036 },
1037 Lint {
1038 label: "single_use_lifetimes",
1039 description: r##"detects lifetime parameters that are only used once"##,
1040 default_severity: Severity::Allow,
1041 warn_since: None,
1042 deny_since: None,
1043 },
1044 Lint {
1045 label: "soft_unstable",
1046 description: r##"a feature gate that doesn't break dependent crates"##,
1047 default_severity: Severity::Error,
1048 warn_since: None,
1049 deny_since: None,
1050 },
1051 Lint {
1052 label: "special_module_name",
1053 description: r##"module declarations for files with a special meaning"##,
1054 default_severity: Severity::Warning,
1055 warn_since: None,
1056 deny_since: None,
1057 },
1058 Lint {
1059 label: "stable_features",
1060 description: r##"stable features found in `#[feature]` directive"##,
1061 default_severity: Severity::Warning,
1062 warn_since: None,
1063 deny_since: None,
1064 },
1065 Lint {
1066 label: "static_mut_refs",
1067 description: r##"shared references or mutable references of mutable static is discouraged"##,
1068 default_severity: Severity::Warning,
1069 warn_since: None,
1070 deny_since: Some(Edition::Edition2024),
1071 },
1072 Lint {
1073 label: "suspicious_double_ref_op",
1074 description: r##"suspicious call of trait method on `&&T`"##,
1075 default_severity: Severity::Warning,
1076 warn_since: None,
1077 deny_since: None,
1078 },
1079 Lint {
1080 label: "tail_expr_drop_order",
1081 description: r##"Detect and warn on significant change in drop order in tail expression location"##,
1082 default_severity: Severity::Allow,
1083 warn_since: None,
1084 deny_since: None,
1085 },
1086 Lint {
1087 label: "test_unstable_lint",
1088 description: r##"this unstable lint is only for testing"##,
1089 default_severity: Severity::Error,
1090 warn_since: None,
1091 deny_since: None,
1092 },
1093 Lint {
1094 label: "text_direction_codepoint_in_comment",
1095 description: r##"invisible directionality-changing codepoints in comment"##,
1096 default_severity: Severity::Error,
1097 warn_since: None,
1098 deny_since: None,
1099 },
1100 Lint {
1101 label: "text_direction_codepoint_in_literal",
1102 description: r##"detect special Unicode codepoints that affect the visual representation of text on screen, changing the direction in which text flows"##,
1103 default_severity: Severity::Error,
1104 warn_since: None,
1105 deny_since: None,
1106 },
1107 Lint {
1108 label: "trivial_bounds",
1109 description: r##"these bounds don't depend on an type parameters"##,
1110 default_severity: Severity::Warning,
1111 warn_since: None,
1112 deny_since: None,
1113 },
1114 Lint {
1115 label: "trivial_casts",
1116 description: r##"detects trivial casts which could be removed"##,
1117 default_severity: Severity::Allow,
1118 warn_since: None,
1119 deny_since: None,
1120 },
1121 Lint {
1122 label: "trivial_numeric_casts",
1123 description: r##"detects trivial casts of numeric types which could be removed"##,
1124 default_severity: Severity::Allow,
1125 warn_since: None,
1126 deny_since: None,
1127 },
1128 Lint {
1129 label: "type_alias_bounds",
1130 description: r##"bounds in type aliases are not enforced"##,
1131 default_severity: Severity::Warning,
1132 warn_since: None,
1133 deny_since: None,
1134 },
1135 Lint {
1136 label: "tyvar_behind_raw_pointer",
1137 description: r##"raw pointer to an inference variable"##,
1138 default_severity: Severity::Warning,
1139 warn_since: None,
1140 deny_since: None,
1141 },
1142 Lint {
1143 label: "uncommon_codepoints",
1144 description: r##"detects uncommon Unicode codepoints in identifiers"##,
1145 default_severity: Severity::Warning,
1146 warn_since: None,
1147 deny_since: None,
1148 },
1149 Lint {
1150 label: "unconditional_panic",
1151 description: r##"operation will cause a panic at runtime"##,
1152 default_severity: Severity::Error,
1153 warn_since: None,
1154 deny_since: None,
1155 },
1156 Lint {
1157 label: "unconditional_recursion",
1158 description: r##"functions that cannot return without calling themselves"##,
1159 default_severity: Severity::Warning,
1160 warn_since: None,
1161 deny_since: None,
1162 },
1163 Lint {
1164 label: "uncovered_param_in_projection",
1165 description: r##"impl contains type parameters that are not covered"##,
1166 default_severity: Severity::Warning,
1167 warn_since: None,
1168 deny_since: None,
1169 },
1170 Lint {
1171 label: "undefined_naked_function_abi",
1172 description: r##"undefined naked function ABI"##,
1173 default_severity: Severity::Warning,
1174 warn_since: None,
1175 deny_since: None,
1176 },
1177 Lint {
1178 label: "undropped_manually_drops",
1179 description: r##"calls to `std::mem::drop` with `std::mem::ManuallyDrop` instead of it's inner value"##,
1180 default_severity: Severity::Error,
1181 warn_since: None,
1182 deny_since: None,
1183 },
1184 Lint {
1185 label: "unexpected_cfgs",
1186 description: r##"detects unexpected names and values in `#[cfg]` conditions"##,
1187 default_severity: Severity::Warning,
1188 warn_since: None,
1189 deny_since: None,
1190 },
1191 Lint {
1192 label: "unfulfilled_lint_expectations",
1193 description: r##"unfulfilled lint expectation"##,
1194 default_severity: Severity::Warning,
1195 warn_since: None,
1196 deny_since: None,
1197 },
1198 Lint {
1199 label: "ungated_async_fn_track_caller",
1200 description: r##"enabling track_caller on an async fn is a no-op unless the async_fn_track_caller feature is enabled"##,
1201 default_severity: Severity::Warning,
1202 warn_since: None,
1203 deny_since: None,
1204 },
1205 Lint {
1206 label: "uninhabited_static",
1207 description: r##"uninhabited static"##,
1208 default_severity: Severity::Warning,
1209 warn_since: None,
1210 deny_since: None,
1211 },
1212 Lint {
1213 label: "unit_bindings",
1214 description: r##"binding is useless because it has the unit `()` type"##,
1215 default_severity: Severity::Allow,
1216 warn_since: None,
1217 deny_since: None,
1218 },
1219 Lint {
1220 label: "unknown_crate_types",
1221 description: r##"unknown crate type found in `#[crate_type]` directive"##,
1222 default_severity: Severity::Error,
1223 warn_since: None,
1224 deny_since: None,
1225 },
1226 Lint {
1227 label: "unknown_lints",
1228 description: r##"unrecognized lint attribute"##,
1229 default_severity: Severity::Warning,
1230 warn_since: None,
1231 deny_since: None,
1232 },
1233 Lint {
1234 label: "unknown_or_malformed_diagnostic_attributes",
1235 description: r##"unrecognized or malformed diagnostic attribute"##,
1236 default_severity: Severity::Warning,
1237 warn_since: None,
1238 deny_since: None,
1239 },
1240 Lint {
1241 label: "unnameable_test_items",
1242 description: r##"detects an item that cannot be named being marked as `#[test_case]`"##,
1243 default_severity: Severity::Warning,
1244 warn_since: None,
1245 deny_since: None,
1246 },
1247 Lint {
1248 label: "unnameable_types",
1249 description: r##"effective visibility of a type is larger than the area in which it can be named"##,
1250 default_severity: Severity::Allow,
1251 warn_since: None,
1252 deny_since: None,
1253 },
1254 Lint {
1255 label: "unqualified_local_imports",
1256 description: r##"`use` of a local item without leading `self::`, `super::`, or `crate::`"##,
1257 default_severity: Severity::Allow,
1258 warn_since: None,
1259 deny_since: None,
1260 },
1261 Lint {
1262 label: "unreachable_code",
1263 description: r##"detects unreachable code paths"##,
1264 default_severity: Severity::Warning,
1265 warn_since: None,
1266 deny_since: None,
1267 },
1268 Lint {
1269 label: "unreachable_patterns",
1270 description: r##"detects unreachable patterns"##,
1271 default_severity: Severity::Warning,
1272 warn_since: None,
1273 deny_since: None,
1274 },
1275 Lint {
1276 label: "unreachable_pub",
1277 description: r##"`pub` items not reachable from crate root"##,
1278 default_severity: Severity::Allow,
1279 warn_since: None,
1280 deny_since: None,
1281 },
1282 Lint {
1283 label: "unsafe_attr_outside_unsafe",
1284 description: r##"detects unsafe attributes outside of unsafe"##,
1285 default_severity: Severity::Allow,
1286 warn_since: None,
1287 deny_since: None,
1288 },
1289 Lint {
1290 label: "unsafe_code",
1291 description: r##"usage of `unsafe` code and other potentially unsound constructs"##,
1292 default_severity: Severity::Allow,
1293 warn_since: None,
1294 deny_since: None,
1295 },
1296 Lint {
1297 label: "unsafe_op_in_unsafe_fn",
1298 description: r##"unsafe operations in unsafe functions without an explicit unsafe block are deprecated"##,
1299 default_severity: Severity::Allow,
1300 warn_since: Some(Edition::Edition2024),
1301 deny_since: None,
1302 },
1303 Lint {
1304 label: "unstable_features",
1305 description: r##"enabling unstable features"##,
1306 default_severity: Severity::Allow,
1307 warn_since: None,
1308 deny_since: None,
1309 },
1310 Lint {
1311 label: "unstable_name_collisions",
1312 description: r##"detects name collision with an existing but unstable method"##,
1313 default_severity: Severity::Warning,
1314 warn_since: None,
1315 deny_since: None,
1316 },
1317 Lint {
1318 label: "unstable_syntax_pre_expansion",
1319 description: r##"unstable syntax can change at any point in the future, causing a hard error!"##,
1320 default_severity: Severity::Warning,
1321 warn_since: None,
1322 deny_since: None,
1323 },
1324 Lint {
1325 label: "unsupported_fn_ptr_calling_conventions",
1326 description: r##"use of unsupported calling convention for function pointer"##,
1327 default_severity: Severity::Warning,
1328 warn_since: None,
1329 deny_since: None,
1330 },
1331 Lint {
1332 label: "unused_allocation",
1333 description: r##"detects unnecessary allocations that can be eliminated"##,
1334 default_severity: Severity::Warning,
1335 warn_since: None,
1336 deny_since: None,
1337 },
1338 Lint {
1339 label: "unused_assignments",
1340 description: r##"detect assignments that will never be read"##,
1341 default_severity: Severity::Warning,
1342 warn_since: None,
1343 deny_since: None,
1344 },
1345 Lint {
1346 label: "unused_associated_type_bounds",
1347 description: r##"detects unused `Foo = Bar` bounds in `dyn Trait<Foo = Bar>`"##,
1348 default_severity: Severity::Warning,
1349 warn_since: None,
1350 deny_since: None,
1351 },
1352 Lint {
1353 label: "unused_attributes",
1354 description: r##"detects attributes that were not used by the compiler"##,
1355 default_severity: Severity::Warning,
1356 warn_since: None,
1357 deny_since: None,
1358 },
1359 Lint {
1360 label: "unused_braces",
1361 description: r##"unnecessary braces around an expression"##,
1362 default_severity: Severity::Warning,
1363 warn_since: None,
1364 deny_since: None,
1365 },
1366 Lint {
1367 label: "unused_comparisons",
1368 description: r##"comparisons made useless by limits of the types involved"##,
1369 default_severity: Severity::Warning,
1370 warn_since: None,
1371 deny_since: None,
1372 },
1373 Lint {
1374 label: "unused_crate_dependencies",
1375 description: r##"crate dependencies that are never used"##,
1376 default_severity: Severity::Allow,
1377 warn_since: None,
1378 deny_since: None,
1379 },
1380 Lint {
1381 label: "unused_doc_comments",
1382 description: r##"detects doc comments that aren't used by rustdoc"##,
1383 default_severity: Severity::Warning,
1384 warn_since: None,
1385 deny_since: None,
1386 },
1387 Lint {
1388 label: "unused_extern_crates",
1389 description: r##"extern crates that are never used"##,
1390 default_severity: Severity::Allow,
1391 warn_since: None,
1392 deny_since: None,
1393 },
1394 Lint {
1395 label: "unused_features",
1396 description: r##"unused features found in crate-level `#[feature]` directives"##,
1397 default_severity: Severity::Warning,
1398 warn_since: None,
1399 deny_since: None,
1400 },
1401 Lint {
1402 label: "unused_import_braces",
1403 description: r##"unnecessary braces around an imported item"##,
1404 default_severity: Severity::Allow,
1405 warn_since: None,
1406 deny_since: None,
1407 },
1408 Lint {
1409 label: "unused_imports",
1410 description: r##"imports that are never used"##,
1411 default_severity: Severity::Warning,
1412 warn_since: None,
1413 deny_since: None,
1414 },
1415 Lint {
1416 label: "unused_labels",
1417 description: r##"detects labels that are never used"##,
1418 default_severity: Severity::Warning,
1419 warn_since: None,
1420 deny_since: None,
1421 },
1422 Lint {
1423 label: "unused_lifetimes",
1424 description: r##"detects lifetime parameters that are never used"##,
1425 default_severity: Severity::Allow,
1426 warn_since: None,
1427 deny_since: None,
1428 },
1429 Lint {
1430 label: "unused_macro_rules",
1431 description: r##"detects macro rules that were not used"##,
1432 default_severity: Severity::Allow,
1433 warn_since: None,
1434 deny_since: None,
1435 },
1436 Lint {
1437 label: "unused_macros",
1438 description: r##"detects macros that were not used"##,
1439 default_severity: Severity::Warning,
1440 warn_since: None,
1441 deny_since: None,
1442 },
1443 Lint {
1444 label: "unused_must_use",
1445 description: r##"unused result of a type flagged as `#[must_use]`"##,
1446 default_severity: Severity::Warning,
1447 warn_since: None,
1448 deny_since: None,
1449 },
1450 Lint {
1451 label: "unused_mut",
1452 description: r##"detect mut variables which don't need to be mutable"##,
1453 default_severity: Severity::Warning,
1454 warn_since: None,
1455 deny_since: None,
1456 },
1457 Lint {
1458 label: "unused_parens",
1459 description: r##"`if`, `match`, `while` and `return` do not need parentheses"##,
1460 default_severity: Severity::Warning,
1461 warn_since: None,
1462 deny_since: None,
1463 },
1464 Lint {
1465 label: "unused_qualifications",
1466 description: r##"detects unnecessarily qualified names"##,
1467 default_severity: Severity::Allow,
1468 warn_since: None,
1469 deny_since: None,
1470 },
1471 Lint {
1472 label: "unused_results",
1473 description: r##"unused result of an expression in a statement"##,
1474 default_severity: Severity::Allow,
1475 warn_since: None,
1476 deny_since: None,
1477 },
1478 Lint {
1479 label: "unused_unsafe",
1480 description: r##"unnecessary use of an `unsafe` block"##,
1481 default_severity: Severity::Warning,
1482 warn_since: None,
1483 deny_since: None,
1484 },
1485 Lint {
1486 label: "unused_variables",
1487 description: r##"detect variables which are not used in any way"##,
1488 default_severity: Severity::Warning,
1489 warn_since: None,
1490 deny_since: None,
1491 },
1492 Lint {
1493 label: "useless_deprecated",
1494 description: r##"detects deprecation attributes with no effect"##,
1495 default_severity: Severity::Error,
1496 warn_since: None,
1497 deny_since: None,
1498 },
1499 Lint {
1500 label: "useless_ptr_null_checks",
1501 description: r##"useless checking of non-null-typed pointer"##,
1502 default_severity: Severity::Warning,
1503 warn_since: None,
1504 deny_since: None,
1505 },
1506 Lint {
1507 label: "variant_size_differences",
1508 description: r##"detects enums with widely varying variant sizes"##,
1509 default_severity: Severity::Allow,
1510 warn_since: None,
1511 deny_since: None,
1512 },
1513 Lint {
1514 label: "warnings",
1515 description: r##"mass-change the level for lints which produce warnings"##,
1516 default_severity: Severity::Warning,
1517 warn_since: None,
1518 deny_since: None,
1519 },
1520 Lint {
1521 label: "wasm_c_abi",
1522 description: r##"detects dependencies that are incompatible with the Wasm C ABI"##,
1523 default_severity: Severity::Error,
1524 warn_since: None,
1525 deny_since: None,
1526 },
1527 Lint {
1528 label: "while_true",
1529 description: r##"suggest using `loop { }` instead of `while true { }`"##,
1530 default_severity: Severity::Warning,
1531 warn_since: None,
1532 deny_since: None,
1533 },
1534 Lint {
1535 label: "deprecated_safe",
1536 description: r##"lint group for: deprecated-safe-2024"##,
1537 default_severity: Severity::Allow,
1538 warn_since: None,
1539 deny_since: None,
1540 },
1541 Lint {
1542 label: "future_incompatible",
1543 description: r##"lint group for: deref-into-dyn-supertrait, abi-unsupported-vector-types, ambiguous-associated-items, ambiguous-glob-imports, cenum-impl-drop-cast, coherence-leak-check, conflicting-repr-hints, const-evaluatable-unchecked, elided-lifetimes-in-associated-constant, forbidden-lint-groups, ill-formed-attribute-input, invalid-type-param-default, late-bound-lifetime-arguments, legacy-derive-helpers, macro-expanded-macro-exports-accessed-by-absolute-paths, missing-fragment-specifier, order-dependent-trait-objects, out-of-scope-macro-calls, patterns-in-fns-without-body, proc-macro-derive-resolution-fallback, ptr-cast-add-auto-to-object, pub-use-of-private-extern-crate, repr-transparent-external-private-fields, self-constructor-from-outer-item, semicolon-in-expressions-from-macros, soft-unstable, uncovered-param-in-projection, uninhabited-static, unstable-name-collisions, unstable-syntax-pre-expansion, unsupported-fn-ptr-calling-conventions, wasm-c-abi"##,
1544 default_severity: Severity::Allow,
1545 warn_since: None,
1546 deny_since: None,
1547 },
1548 Lint {
1549 label: "keyword_idents",
1550 description: r##"lint group for: keyword-idents-2018, keyword-idents-2024"##,
1551 default_severity: Severity::Allow,
1552 warn_since: None,
1553 deny_since: None,
1554 },
1555 Lint {
1556 label: "let_underscore",
1557 description: r##"lint group for: let-underscore-drop, let-underscore-lock"##,
1558 default_severity: Severity::Allow,
1559 warn_since: None,
1560 deny_since: None,
1561 },
1562 Lint {
1563 label: "nonstandard_style",
1564 description: r##"lint group for: non-camel-case-types, non-snake-case, non-upper-case-globals"##,
1565 default_severity: Severity::Allow,
1566 warn_since: None,
1567 deny_since: None,
1568 },
1569 Lint {
1570 label: "refining_impl_trait",
1571 description: r##"lint group for: refining-impl-trait-reachable, refining-impl-trait-internal"##,
1572 default_severity: Severity::Allow,
1573 warn_since: None,
1574 deny_since: None,
1575 },
1576 Lint {
1577 label: "rust_2018_compatibility",
1578 description: r##"lint group for: keyword-idents-2018, anonymous-parameters, absolute-paths-not-starting-with-crate, tyvar-behind-raw-pointer"##,
1579 default_severity: Severity::Allow,
1580 warn_since: None,
1581 deny_since: None,
1582 },
1583 Lint {
1584 label: "rust_2018_idioms",
1585 description: r##"lint group for: bare-trait-objects, unused-extern-crates, ellipsis-inclusive-range-patterns, elided-lifetimes-in-paths, explicit-outlives-requirements"##,
1586 default_severity: Severity::Allow,
1587 warn_since: None,
1588 deny_since: None,
1589 },
1590 Lint {
1591 label: "rust_2021_compatibility",
1592 description: r##"lint group for: ellipsis-inclusive-range-patterns, array-into-iter, non-fmt-panics, bare-trait-objects, rust-2021-incompatible-closure-captures, rust-2021-incompatible-or-patterns, rust-2021-prefixes-incompatible-syntax, rust-2021-prelude-collisions"##,
1593 default_severity: Severity::Allow,
1594 warn_since: None,
1595 deny_since: None,
1596 },
1597 Lint {
1598 label: "rust_2024_compatibility",
1599 description: r##"lint group for: keyword-idents-2024, edition-2024-expr-fragment-specifier, boxed-slice-into-iter, impl-trait-overcaptures, if-let-rescope, static-mut-refs, dependency-on-unit-never-type-fallback, deprecated-safe-2024, missing-unsafe-on-extern, never-type-fallback-flowing-into-unsafe, rust-2024-guarded-string-incompatible-syntax, rust-2024-incompatible-pat, rust-2024-prelude-collisions, tail-expr-drop-order, unsafe-attr-outside-unsafe, unsafe-op-in-unsafe-fn"##,
1600 default_severity: Severity::Allow,
1601 warn_since: None,
1602 deny_since: None,
1603 },
1604 Lint {
1605 label: "unused",
1606 description: r##"lint group for: unused-imports, unused-variables, unused-assignments, dead-code, unused-mut, unreachable-code, unreachable-patterns, unused-must-use, unused-unsafe, path-statements, unused-attributes, unused-macros, unused-macro-rules, unused-allocation, unused-doc-comments, unused-extern-crates, unused-features, unused-labels, unused-parens, unused-braces, redundant-semicolons, map-unit-fn"##,
1607 default_severity: Severity::Allow,
1608 warn_since: None,
1609 deny_since: None,
1610 },
1611 Lint {
1612 label: "warnings",
1613 description: r##"lint group for: all lints that are set to issue warnings"##,
1614 default_severity: Severity::Allow,
1615 warn_since: None,
1616 deny_since: None,
1617 },
1618];
1619
1620pub const DEFAULT_LINT_GROUPS: &[LintGroup] = &[
1621 LintGroup {
1622 lint: Lint {
1623 label: "deprecated_safe",
1624 description: r##"lint group for: deprecated-safe-2024"##,
1625 default_severity: Severity::Allow,
1626 warn_since: None,
1627 deny_since: None,
1628 },
1629 children: &["deprecated_safe_2024"],
1630 },
1631 LintGroup {
1632 lint: Lint {
1633 label: "future_incompatible",
1634 description: r##"lint group for: deref-into-dyn-supertrait, abi-unsupported-vector-types, ambiguous-associated-items, ambiguous-glob-imports, cenum-impl-drop-cast, coherence-leak-check, conflicting-repr-hints, const-evaluatable-unchecked, elided-lifetimes-in-associated-constant, forbidden-lint-groups, ill-formed-attribute-input, invalid-type-param-default, late-bound-lifetime-arguments, legacy-derive-helpers, macro-expanded-macro-exports-accessed-by-absolute-paths, missing-fragment-specifier, order-dependent-trait-objects, out-of-scope-macro-calls, patterns-in-fns-without-body, proc-macro-derive-resolution-fallback, ptr-cast-add-auto-to-object, pub-use-of-private-extern-crate, repr-transparent-external-private-fields, self-constructor-from-outer-item, semicolon-in-expressions-from-macros, soft-unstable, uncovered-param-in-projection, uninhabited-static, unstable-name-collisions, unstable-syntax-pre-expansion, unsupported-fn-ptr-calling-conventions, wasm-c-abi"##,
1635 default_severity: Severity::Allow,
1636 warn_since: None,
1637 deny_since: None,
1638 },
1639 children: &[
1640 "deref_into_dyn_supertrait",
1641 "abi_unsupported_vector_types",
1642 "ambiguous_associated_items",
1643 "ambiguous_glob_imports",
1644 "cenum_impl_drop_cast",
1645 "coherence_leak_check",
1646 "conflicting_repr_hints",
1647 "const_evaluatable_unchecked",
1648 "elided_lifetimes_in_associated_constant",
1649 "forbidden_lint_groups",
1650 "ill_formed_attribute_input",
1651 "invalid_type_param_default",
1652 "late_bound_lifetime_arguments",
1653 "legacy_derive_helpers",
1654 "macro_expanded_macro_exports_accessed_by_absolute_paths",
1655 "missing_fragment_specifier",
1656 "order_dependent_trait_objects",
1657 "out_of_scope_macro_calls",
1658 "patterns_in_fns_without_body",
1659 "proc_macro_derive_resolution_fallback",
1660 "ptr_cast_add_auto_to_object",
1661 "pub_use_of_private_extern_crate",
1662 "repr_transparent_external_private_fields",
1663 "self_constructor_from_outer_item",
1664 "semicolon_in_expressions_from_macros",
1665 "soft_unstable",
1666 "uncovered_param_in_projection",
1667 "uninhabited_static",
1668 "unstable_name_collisions",
1669 "unstable_syntax_pre_expansion",
1670 "unsupported_fn_ptr_calling_conventions",
1671 "wasm_c_abi",
1672 ],
1673 },
1674 LintGroup {
1675 lint: Lint {
1676 label: "keyword_idents",
1677 description: r##"lint group for: keyword-idents-2018, keyword-idents-2024"##,
1678 default_severity: Severity::Allow,
1679 warn_since: None,
1680 deny_since: None,
1681 },
1682 children: &["keyword_idents_2018", "keyword_idents_2024"],
1683 },
1684 LintGroup {
1685 lint: Lint {
1686 label: "let_underscore",
1687 description: r##"lint group for: let-underscore-drop, let-underscore-lock"##,
1688 default_severity: Severity::Allow,
1689 warn_since: None,
1690 deny_since: None,
1691 },
1692 children: &["let_underscore_drop", "let_underscore_lock"],
1693 },
1694 LintGroup {
1695 lint: Lint {
1696 label: "nonstandard_style",
1697 description: r##"lint group for: non-camel-case-types, non-snake-case, non-upper-case-globals"##,
1698 default_severity: Severity::Allow,
1699 warn_since: None,
1700 deny_since: None,
1701 },
1702 children: &["non_camel_case_types", "non_snake_case", "non_upper_case_globals"],
1703 },
1704 LintGroup {
1705 lint: Lint {
1706 label: "refining_impl_trait",
1707 description: r##"lint group for: refining-impl-trait-reachable, refining-impl-trait-internal"##,
1708 default_severity: Severity::Allow,
1709 warn_since: None,
1710 deny_since: None,
1711 },
1712 children: &["refining_impl_trait_reachable", "refining_impl_trait_internal"],
1713 },
1714 LintGroup {
1715 lint: Lint {
1716 label: "rust_2018_compatibility",
1717 description: r##"lint group for: keyword-idents-2018, anonymous-parameters, absolute-paths-not-starting-with-crate, tyvar-behind-raw-pointer"##,
1718 default_severity: Severity::Allow,
1719 warn_since: None,
1720 deny_since: None,
1721 },
1722 children: &[
1723 "keyword_idents_2018",
1724 "anonymous_parameters",
1725 "absolute_paths_not_starting_with_crate",
1726 "tyvar_behind_raw_pointer",
1727 ],
1728 },
1729 LintGroup {
1730 lint: Lint {
1731 label: "rust_2018_idioms",
1732 description: r##"lint group for: bare-trait-objects, unused-extern-crates, ellipsis-inclusive-range-patterns, elided-lifetimes-in-paths, explicit-outlives-requirements"##,
1733 default_severity: Severity::Allow,
1734 warn_since: None,
1735 deny_since: None,
1736 },
1737 children: &[
1738 "bare_trait_objects",
1739 "unused_extern_crates",
1740 "ellipsis_inclusive_range_patterns",
1741 "elided_lifetimes_in_paths",
1742 "explicit_outlives_requirements",
1743 ],
1744 },
1745 LintGroup {
1746 lint: Lint {
1747 label: "rust_2021_compatibility",
1748 description: r##"lint group for: ellipsis-inclusive-range-patterns, array-into-iter, non-fmt-panics, bare-trait-objects, rust-2021-incompatible-closure-captures, rust-2021-incompatible-or-patterns, rust-2021-prefixes-incompatible-syntax, rust-2021-prelude-collisions"##,
1749 default_severity: Severity::Allow,
1750 warn_since: None,
1751 deny_since: None,
1752 },
1753 children: &[
1754 "ellipsis_inclusive_range_patterns",
1755 "array_into_iter",
1756 "non_fmt_panics",
1757 "bare_trait_objects",
1758 "rust_2021_incompatible_closure_captures",
1759 "rust_2021_incompatible_or_patterns",
1760 "rust_2021_prefixes_incompatible_syntax",
1761 "rust_2021_prelude_collisions",
1762 ],
1763 },
1764 LintGroup {
1765 lint: Lint {
1766 label: "rust_2024_compatibility",
1767 description: r##"lint group for: keyword-idents-2024, edition-2024-expr-fragment-specifier, boxed-slice-into-iter, impl-trait-overcaptures, if-let-rescope, static-mut-refs, dependency-on-unit-never-type-fallback, deprecated-safe-2024, missing-unsafe-on-extern, never-type-fallback-flowing-into-unsafe, rust-2024-guarded-string-incompatible-syntax, rust-2024-incompatible-pat, rust-2024-prelude-collisions, tail-expr-drop-order, unsafe-attr-outside-unsafe, unsafe-op-in-unsafe-fn"##,
1768 default_severity: Severity::Allow,
1769 warn_since: None,
1770 deny_since: None,
1771 },
1772 children: &[
1773 "keyword_idents_2024",
1774 "edition_2024_expr_fragment_specifier",
1775 "boxed_slice_into_iter",
1776 "impl_trait_overcaptures",
1777 "if_let_rescope",
1778 "static_mut_refs",
1779 "dependency_on_unit_never_type_fallback",
1780 "deprecated_safe_2024",
1781 "missing_unsafe_on_extern",
1782 "never_type_fallback_flowing_into_unsafe",
1783 "rust_2024_guarded_string_incompatible_syntax",
1784 "rust_2024_incompatible_pat",
1785 "rust_2024_prelude_collisions",
1786 "tail_expr_drop_order",
1787 "unsafe_attr_outside_unsafe",
1788 "unsafe_op_in_unsafe_fn",
1789 ],
1790 },
1791 LintGroup {
1792 lint: Lint {
1793 label: "unused",
1794 description: r##"lint group for: unused-imports, unused-variables, unused-assignments, dead-code, unused-mut, unreachable-code, unreachable-patterns, unused-must-use, unused-unsafe, path-statements, unused-attributes, unused-macros, unused-macro-rules, unused-allocation, unused-doc-comments, unused-extern-crates, unused-features, unused-labels, unused-parens, unused-braces, redundant-semicolons, map-unit-fn"##,
1795 default_severity: Severity::Allow,
1796 warn_since: None,
1797 deny_since: None,
1798 },
1799 children: &[
1800 "unused_imports",
1801 "unused_variables",
1802 "unused_assignments",
1803 "dead_code",
1804 "unused_mut",
1805 "unreachable_code",
1806 "unreachable_patterns",
1807 "unused_must_use",
1808 "unused_unsafe",
1809 "path_statements",
1810 "unused_attributes",
1811 "unused_macros",
1812 "unused_macro_rules",
1813 "unused_allocation",
1814 "unused_doc_comments",
1815 "unused_extern_crates",
1816 "unused_features",
1817 "unused_labels",
1818 "unused_parens",
1819 "unused_braces",
1820 "redundant_semicolons",
1821 "map_unit_fn",
1822 ],
1823 },
1824];
1825
1826pub const RUSTDOC_LINTS: &[Lint] = &[
1827 Lint {
1828 label: "rustdoc::bare_urls",
1829 description: r##"detects URLs that are not hyperlinks"##,
1830 default_severity: Severity::Warning,
1831 warn_since: None,
1832 deny_since: None,
1833 },
1834 Lint {
1835 label: "rustdoc::broken_intra_doc_links",
1836 description: r##"failures in resolving intra-doc link targets"##,
1837 default_severity: Severity::Warning,
1838 warn_since: None,
1839 deny_since: None,
1840 },
1841 Lint {
1842 label: "rustdoc::invalid_codeblock_attributes",
1843 description: r##"codeblock attribute looks a lot like a known one"##,
1844 default_severity: Severity::Warning,
1845 warn_since: None,
1846 deny_since: None,
1847 },
1848 Lint {
1849 label: "rustdoc::invalid_html_tags",
1850 description: r##"detects invalid HTML tags in doc comments"##,
1851 default_severity: Severity::Warning,
1852 warn_since: None,
1853 deny_since: None,
1854 },
1855 Lint {
1856 label: "rustdoc::invalid_rust_codeblocks",
1857 description: r##"codeblock could not be parsed as valid Rust or is empty"##,
1858 default_severity: Severity::Warning,
1859 warn_since: None,
1860 deny_since: None,
1861 },
1862 Lint {
1863 label: "rustdoc::missing_crate_level_docs",
1864 description: r##"detects crates with no crate-level documentation"##,
1865 default_severity: Severity::Allow,
1866 warn_since: None,
1867 deny_since: None,
1868 },
1869 Lint {
1870 label: "rustdoc::missing_doc_code_examples",
1871 description: r##"detects publicly-exported items without code samples in their documentation"##,
1872 default_severity: Severity::Allow,
1873 warn_since: None,
1874 deny_since: None,
1875 },
1876 Lint {
1877 label: "rustdoc::private_doc_tests",
1878 description: r##"detects code samples in docs of private items not documented by rustdoc"##,
1879 default_severity: Severity::Allow,
1880 warn_since: None,
1881 deny_since: None,
1882 },
1883 Lint {
1884 label: "rustdoc::private_intra_doc_links",
1885 description: r##"linking from a public item to a private one"##,
1886 default_severity: Severity::Warning,
1887 warn_since: None,
1888 deny_since: None,
1889 },
1890 Lint {
1891 label: "rustdoc::redundant_explicit_links",
1892 description: r##"detects redundant explicit links in doc comments"##,
1893 default_severity: Severity::Warning,
1894 warn_since: None,
1895 deny_since: None,
1896 },
1897 Lint {
1898 label: "rustdoc::unescaped_backticks",
1899 description: r##"detects unescaped backticks in doc comments"##,
1900 default_severity: Severity::Allow,
1901 warn_since: None,
1902 deny_since: None,
1903 },
1904 Lint {
1905 label: "rustdoc::unportable_markdown",
1906 description: r##"detects markdown that is interpreted differently in different parser"##,
1907 default_severity: Severity::Warning,
1908 warn_since: None,
1909 deny_since: None,
1910 },
1911 Lint {
1912 label: "rustdoc::all",
1913 description: r##"lint group for: rustdoc::broken-intra-doc-links, rustdoc::private-intra-doc-links, rustdoc::private-doc-tests, rustdoc::invalid-codeblock-attributes, rustdoc::invalid-rust-codeblocks, rustdoc::invalid-html-tags, rustdoc::bare-urls, rustdoc::missing-crate-level-docs, rustdoc::unescaped-backticks, rustdoc::redundant-explicit-links, rustdoc::unportable-markdown"##,
1914 default_severity: Severity::Allow,
1915 warn_since: None,
1916 deny_since: None,
1917 },
1918];
1919
1920pub const RUSTDOC_LINT_GROUPS: &[LintGroup] = &[LintGroup {
1921 lint: Lint {
1922 label: "rustdoc::all",
1923 description: r##"lint group for: rustdoc::broken-intra-doc-links, rustdoc::private-intra-doc-links, rustdoc::private-doc-tests, rustdoc::invalid-codeblock-attributes, rustdoc::invalid-rust-codeblocks, rustdoc::invalid-html-tags, rustdoc::bare-urls, rustdoc::missing-crate-level-docs, rustdoc::unescaped-backticks, rustdoc::redundant-explicit-links, rustdoc::unportable-markdown"##,
1924 default_severity: Severity::Allow,
1925 warn_since: None,
1926 deny_since: None,
1927 },
1928 children: &[
1929 "rustdoc::broken_intra_doc_links",
1930 "rustdoc::private_intra_doc_links",
1931 "rustdoc::private_doc_tests",
1932 "rustdoc::invalid_codeblock_attributes",
1933 "rustdoc::invalid_rust_codeblocks",
1934 "rustdoc::invalid_html_tags",
1935 "rustdoc::bare_urls",
1936 "rustdoc::missing_crate_level_docs",
1937 "rustdoc::unescaped_backticks",
1938 "rustdoc::redundant_explicit_links",
1939 "rustdoc::unportable_markdown",
1940 ],
1941}];
1942
1943pub const FEATURES: &[Lint] = &[
1944 Lint {
1945 label: "aarch64_unstable_target_feature",
1946 description: r##"# `aarch64_unstable_target_feature`
1947
1948The tracking issue for this feature is: [#44839]
1949
1950[#44839]: https://github.com/rust-lang/rust/issues/44839
1951
1952------------------------
1953"##,
1954 default_severity: Severity::Allow,
1955 warn_since: None,
1956 deny_since: None,
1957 },
1958 Lint {
1959 label: "aarch64_ver_target_feature",
1960 description: r##"# `aarch64_ver_target_feature`
1961
1962The tracking issue for this feature is: [#44839]
1963
1964[#44839]: https://github.com/rust-lang/rust/issues/44839
1965
1966------------------------
1967"##,
1968 default_severity: Severity::Allow,
1969 warn_since: None,
1970 deny_since: None,
1971 },
1972 Lint {
1973 label: "abi_avr_interrupt",
1974 description: r##"# `abi_avr_interrupt`
1975
1976The tracking issue for this feature is: [#69664]
1977
1978[#69664]: https://github.com/rust-lang/rust/issues/69664
1979
1980------------------------
1981"##,
1982 default_severity: Severity::Allow,
1983 warn_since: None,
1984 deny_since: None,
1985 },
1986 Lint {
1987 label: "abi_c_cmse_nonsecure_call",
1988 description: r##"# `abi_c_cmse_nonsecure_call`
1989
1990The tracking issue for this feature is: [#81391]
1991
1992[#81391]: https://github.com/rust-lang/rust/issues/81391
1993
1994------------------------
1995
1996The [TrustZone-M
1997feature](https://developer.arm.com/documentation/100690/latest/) is available
1998for targets with the Armv8-M architecture profile (`thumbv8m` in their target
1999name).
2000LLVM, the Rust compiler and the linker are providing
2001[support](https://developer.arm.com/documentation/ecm0359818/latest/) for the
2002TrustZone-M feature.
2003
2004One of the things provided, with this unstable feature, is the
2005`C-cmse-nonsecure-call` function ABI. This ABI is used on function pointers to
2006non-secure code to mark a non-secure function call (see [section
20075.5](https://developer.arm.com/documentation/ecm0359818/latest/) for details).
2008
2009With this ABI, the compiler will do the following to perform the call:
2010* save registers needed after the call to Secure memory
2011* clear all registers that might contain confidential information
2012* clear the Least Significant Bit of the function address
2013* branches using the BLXNS instruction
2014
2015To avoid using the non-secure stack, the compiler will constrain the number and
2016type of parameters/return value.
2017
2018The `extern "C-cmse-nonsecure-call"` ABI is otherwise equivalent to the
2019`extern "C"` ABI.
2020
2021<!-- NOTE(ignore) this example is specific to thumbv8m targets -->
2022
2023``` rust,ignore
2024#![no_std]
2025#![feature(abi_c_cmse_nonsecure_call)]
2026
2027#[no_mangle]
2028pub fn call_nonsecure_function(addr: usize) -> u32 {
2029 let non_secure_function =
2030 unsafe { core::mem::transmute::<usize, extern "C-cmse-nonsecure-call" fn() -> u32>(addr) };
2031 non_secure_function()
2032}
2033```
2034
2035``` text
2036$ rustc --emit asm --crate-type lib --target thumbv8m.main-none-eabi function.rs
2037
2038call_nonsecure_function:
2039 .fnstart
2040 .save {r7, lr}
2041 push {r7, lr}
2042 .setfp r7, sp
2043 mov r7, sp
2044 .pad #16
2045 sub sp, #16
2046 str r0, [sp, #12]
2047 ldr r0, [sp, #12]
2048 str r0, [sp, #8]
2049 b .LBB0_1
2050.LBB0_1:
2051 ldr r0, [sp, #8]
2052 push.w {r4, r5, r6, r7, r8, r9, r10, r11}
2053 bic r0, r0, #1
2054 mov r1, r0
2055 mov r2, r0
2056 mov r3, r0
2057 mov r4, r0
2058 mov r5, r0
2059 mov r6, r0
2060 mov r7, r0
2061 mov r8, r0
2062 mov r9, r0
2063 mov r10, r0
2064 mov r11, r0
2065 mov r12, r0
2066 msr apsr_nzcvq, r0
2067 blxns r0
2068 pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
2069 str r0, [sp, #4]
2070 b .LBB0_2
2071.LBB0_2:
2072 ldr r0, [sp, #4]
2073 add sp, #16
2074 pop {r7, pc}
2075```
2076"##,
2077 default_severity: Severity::Allow,
2078 warn_since: None,
2079 deny_since: None,
2080 },
2081 Lint {
2082 label: "abi_msp430_interrupt",
2083 description: r##"# `abi_msp430_interrupt`
2084
2085The tracking issue for this feature is: [#38487]
2086
2087[#38487]: https://github.com/rust-lang/rust/issues/38487
2088
2089------------------------
2090
2091In the MSP430 architecture, interrupt handlers have a special calling
2092convention. You can use the `"msp430-interrupt"` ABI to make the compiler apply
2093the right calling convention to the interrupt handlers you define.
2094
2095<!-- NOTE(ignore) this example is specific to the msp430 target -->
2096
2097``` rust,ignore
2098#![feature(abi_msp430_interrupt)]
2099#![no_std]
2100
2101// Place the interrupt handler at the appropriate memory address
2102// (Alternatively, you can use `#[used]` and remove `pub` and `#[no_mangle]`)
2103#[link_section = "__interrupt_vector_10"]
2104#[no_mangle]
2105pub static TIM0_VECTOR: extern "msp430-interrupt" fn() = tim0;
2106
2107// The interrupt handler
2108extern "msp430-interrupt" fn tim0() {
2109 // ..
2110}
2111```
2112
2113``` text
2114$ msp430-elf-objdump -CD ./target/msp430/release/app
2115Disassembly of section __interrupt_vector_10:
2116
21170000fff2 <TIM0_VECTOR>:
2118 fff2: 00 c0 interrupt service routine at 0xc000
2119
2120Disassembly of section .text:
2121
21220000c000 <int::tim0>:
2123 c000: 00 13 reti
2124```
2125"##,
2126 default_severity: Severity::Allow,
2127 warn_since: None,
2128 deny_since: None,
2129 },
2130 Lint {
2131 label: "abi_ptx",
2132 description: r##"# `abi_ptx`
2133
2134The tracking issue for this feature is: [#38788]
2135
2136[#38788]: https://github.com/rust-lang/rust/issues/38788
2137
2138------------------------
2139
2140When emitting PTX code, all vanilla Rust functions (`fn`) get translated to
2141"device" functions. These functions are *not* callable from the host via the
2142CUDA API so a crate with only device functions is not too useful!
2143
2144OTOH, "global" functions *can* be called by the host; you can think of them
2145as the real public API of your crate. To produce a global function use the
2146`"ptx-kernel"` ABI.
2147
2148<!-- NOTE(ignore) this example is specific to the nvptx targets -->
2149
2150``` rust,ignore
2151#![feature(abi_ptx)]
2152#![no_std]
2153
2154pub unsafe extern "ptx-kernel" fn global_function() {
2155 device_function();
2156}
2157
2158pub fn device_function() {
2159 // ..
2160}
2161```
2162
2163``` text
2164$ xargo rustc --target nvptx64-nvidia-cuda --release -- --emit=asm
2165
2166$ cat $(find -name '*.s')
2167//
2168// Generated by LLVM NVPTX Back-End
2169//
2170
2171.version 3.2
2172.target sm_20
2173.address_size 64
2174
2175 // .globl _ZN6kernel15global_function17h46111ebe6516b382E
2176
2177.visible .entry _ZN6kernel15global_function17h46111ebe6516b382E()
2178{
2179
2180
2181 ret;
2182}
2183
2184 // .globl _ZN6kernel15device_function17hd6a0e4993bbf3f78E
2185.visible .func _ZN6kernel15device_function17hd6a0e4993bbf3f78E()
2186{
2187
2188
2189 ret;
2190}
2191```
2192"##,
2193 default_severity: Severity::Allow,
2194 warn_since: None,
2195 deny_since: None,
2196 },
2197 Lint {
2198 label: "abi_riscv_interrupt",
2199 description: r##"# `abi_riscv_interrupt`
2200
2201The tracking issue for this feature is: [#111889]
2202
2203[#111889]: https://github.com/rust-lang/rust/issues/111889
2204
2205------------------------
2206"##,
2207 default_severity: Severity::Allow,
2208 warn_since: None,
2209 deny_since: None,
2210 },
2211 Lint {
2212 label: "abi_unadjusted",
2213 description: r##"# `abi_unadjusted`
2214
2215This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
2216
2217------------------------
2218"##,
2219 default_severity: Severity::Allow,
2220 warn_since: None,
2221 deny_since: None,
2222 },
2223 Lint {
2224 label: "abi_vectorcall",
2225 description: r##"# `abi_vectorcall`
2226
2227The tracking issue for this feature is: [#124485]
2228
2229[#124485]: https://github.com/rust-lang/rust/issues/124485
2230
2231------------------------
2232
2233Adds support for the Windows `"vectorcall"` ABI, the equivalent of `__vectorcall` in MSVC.
2234
2235```rust,ignore (only-windows-or-x86-or-x86-64)
2236extern "vectorcall" {
2237 fn add_f64s(x: f64, y: f64) -> f64;
2238}
2239
2240fn main() {
2241 println!("{}", add_f64s(2.0, 4.0));
2242}
2243```
2244"##,
2245 default_severity: Severity::Allow,
2246 warn_since: None,
2247 deny_since: None,
2248 },
2249 Lint {
2250 label: "abi_x86_interrupt",
2251 description: r##"# `abi_x86_interrupt`
2252
2253The tracking issue for this feature is: [#40180]
2254
2255[#40180]: https://github.com/rust-lang/rust/issues/40180
2256
2257------------------------
2258"##,
2259 default_severity: Severity::Allow,
2260 warn_since: None,
2261 deny_since: None,
2262 },
2263 Lint {
2264 label: "abort_unwind",
2265 description: r##"# `abort_unwind`
2266
2267The tracking issue for this feature is: [#130338]
2268
2269[#130338]: https://github.com/rust-lang/rust/issues/130338
2270
2271------------------------
2272"##,
2273 default_severity: Severity::Allow,
2274 warn_since: None,
2275 deny_since: None,
2276 },
2277 Lint {
2278 label: "acceptfilter",
2279 description: r##"# `acceptfilter`
2280
2281The tracking issue for this feature is: [#121891]
2282
2283[#121891]: https://github.com/rust-lang/rust/issues/121891
2284
2285------------------------
2286"##,
2287 default_severity: Severity::Allow,
2288 warn_since: None,
2289 deny_since: None,
2290 },
2291 Lint {
2292 label: "addr_parse_ascii",
2293 description: r##"# `addr_parse_ascii`
2294
2295The tracking issue for this feature is: [#101035]
2296
2297[#101035]: https://github.com/rust-lang/rust/issues/101035
2298
2299------------------------
2300"##,
2301 default_severity: Severity::Allow,
2302 warn_since: None,
2303 deny_since: None,
2304 },
2305 Lint {
2306 label: "adt_const_params",
2307 description: r##"# `adt_const_params`
2308
2309The tracking issue for this feature is: [#95174]
2310
2311[#95174]: https://github.com/rust-lang/rust/issues/95174
2312
2313------------------------
2314
2315Allows for using more complex types for const parameters, such as structs or enums.
2316
2317```rust
2318#![feature(adt_const_params)]
2319#![allow(incomplete_features)]
2320
2321use std::marker::ConstParamTy;
2322
2323#[derive(ConstParamTy, PartialEq, Eq)]
2324enum Foo {
2325 A,
2326 B,
2327 C,
2328}
2329
2330#[derive(ConstParamTy, PartialEq, Eq)]
2331struct Bar {
2332 flag: bool,
2333}
2334
2335fn is_foo_a_and_bar_true<const F: Foo, const B: Bar>() -> bool {
2336 match (F, B.flag) {
2337 (Foo::A, true) => true,
2338 _ => false,
2339 }
2340}
2341```
2342"##,
2343 default_severity: Severity::Allow,
2344 warn_since: None,
2345 deny_since: None,
2346 },
2347 Lint {
2348 label: "alloc_error_handler",
2349 description: r##"# `alloc_error_handler`
2350
2351The tracking issue for this feature is: [#51540]
2352
2353[#51540]: https://github.com/rust-lang/rust/issues/51540
2354
2355------------------------
2356"##,
2357 default_severity: Severity::Allow,
2358 warn_since: None,
2359 deny_since: None,
2360 },
2361 Lint {
2362 label: "alloc_error_hook",
2363 description: r##"# `alloc_error_hook`
2364
2365The tracking issue for this feature is: [#51245]
2366
2367[#51245]: https://github.com/rust-lang/rust/issues/51245
2368
2369------------------------
2370"##,
2371 default_severity: Severity::Allow,
2372 warn_since: None,
2373 deny_since: None,
2374 },
2375 Lint {
2376 label: "alloc_internals",
2377 description: r##"# `alloc_internals`
2378
2379This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
2380
2381------------------------
2382"##,
2383 default_severity: Severity::Allow,
2384 warn_since: None,
2385 deny_since: None,
2386 },
2387 Lint {
2388 label: "alloc_layout_extra",
2389 description: r##"# `alloc_layout_extra`
2390
2391The tracking issue for this feature is: [#55724]
2392
2393[#55724]: https://github.com/rust-lang/rust/issues/55724
2394
2395------------------------
2396"##,
2397 default_severity: Severity::Allow,
2398 warn_since: None,
2399 deny_since: None,
2400 },
2401 Lint {
2402 label: "allocator_api",
2403 description: r##"# `allocator_api`
2404
2405The tracking issue for this feature is [#32838]
2406
2407[#32838]: https://github.com/rust-lang/rust/issues/32838
2408
2409------------------------
2410
2411Sometimes you want the memory for one collection to use a different
2412allocator than the memory for another collection. In this case,
2413replacing the global allocator is not a workable option. Instead,
2414you need to pass in an instance of an `AllocRef` to each collection
2415for which you want a custom allocator.
2416
2417TBD
2418"##,
2419 default_severity: Severity::Allow,
2420 warn_since: None,
2421 deny_since: None,
2422 },
2423 Lint {
2424 label: "allocator_internals",
2425 description: r##"# `allocator_internals`
2426
2427This feature does not have a tracking issue, it is an unstable implementation
2428detail of the `global_allocator` feature not intended for use outside the
2429compiler.
2430
2431------------------------
2432"##,
2433 default_severity: Severity::Allow,
2434 warn_since: None,
2435 deny_since: None,
2436 },
2437 Lint {
2438 label: "allow_internal_unsafe",
2439 description: r##"# `allow_internal_unsafe`
2440
2441This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
2442
2443------------------------
2444"##,
2445 default_severity: Severity::Allow,
2446 warn_since: None,
2447 deny_since: None,
2448 },
2449 Lint {
2450 label: "allow_internal_unstable",
2451 description: r##"# `allow_internal_unstable`
2452
2453This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
2454
2455------------------------
2456"##,
2457 default_severity: Severity::Allow,
2458 warn_since: None,
2459 deny_since: None,
2460 },
2461 Lint {
2462 label: "anonymous_lifetime_in_impl_trait",
2463 description: r##"# `anonymous_lifetime_in_impl_trait`
2464
2465This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
2466
2467------------------------
2468"##,
2469 default_severity: Severity::Allow,
2470 warn_since: None,
2471 deny_since: None,
2472 },
2473 Lint {
2474 label: "anonymous_pipe",
2475 description: r##"# `anonymous_pipe`
2476
2477The tracking issue for this feature is: [#127154]
2478
2479[#127154]: https://github.com/rust-lang/rust/issues/127154
2480
2481------------------------
2482"##,
2483 default_severity: Severity::Allow,
2484 warn_since: None,
2485 deny_since: None,
2486 },
2487 Lint {
2488 label: "arbitrary_self_types",
2489 description: r##"# `arbitrary_self_types`
2490
2491The tracking issue for this feature is: [#44874]
2492
2493[#44874]: https://github.com/rust-lang/rust/issues/44874
2494
2495------------------------
2496"##,
2497 default_severity: Severity::Allow,
2498 warn_since: None,
2499 deny_since: None,
2500 },
2501 Lint {
2502 label: "arbitrary_self_types_pointers",
2503 description: r##"# `arbitrary_self_types_pointers`
2504
2505The tracking issue for this feature is: [#44874]
2506
2507[#44874]: https://github.com/rust-lang/rust/issues/44874
2508
2509------------------------
2510"##,
2511 default_severity: Severity::Allow,
2512 warn_since: None,
2513 deny_since: None,
2514 },
2515 Lint {
2516 label: "arm_target_feature",
2517 description: r##"# `arm_target_feature`
2518
2519The tracking issue for this feature is: [#44839]
2520
2521[#44839]: https://github.com/rust-lang/rust/issues/44839
2522
2523------------------------
2524"##,
2525 default_severity: Severity::Allow,
2526 warn_since: None,
2527 deny_since: None,
2528 },
2529 Lint {
2530 label: "array_chunks",
2531 description: r##"# `array_chunks`
2532
2533The tracking issue for this feature is: [#74985]
2534
2535[#74985]: https://github.com/rust-lang/rust/issues/74985
2536
2537------------------------
2538"##,
2539 default_severity: Severity::Allow,
2540 warn_since: None,
2541 deny_since: None,
2542 },
2543 Lint {
2544 label: "array_into_iter_constructors",
2545 description: r##"# `array_into_iter_constructors`
2546
2547The tracking issue for this feature is: [#91583]
2548
2549[#91583]: https://github.com/rust-lang/rust/issues/91583
2550
2551------------------------
2552"##,
2553 default_severity: Severity::Allow,
2554 warn_since: None,
2555 deny_since: None,
2556 },
2557 Lint {
2558 label: "array_ptr_get",
2559 description: r##"# `array_ptr_get`
2560
2561The tracking issue for this feature is: [#119834]
2562
2563[#119834]: https://github.com/rust-lang/rust/issues/119834
2564
2565------------------------
2566"##,
2567 default_severity: Severity::Allow,
2568 warn_since: None,
2569 deny_since: None,
2570 },
2571 Lint {
2572 label: "array_repeat",
2573 description: r##"# `array_repeat`
2574
2575The tracking issue for this feature is: [#126695]
2576
2577[#126695]: https://github.com/rust-lang/rust/issues/126695
2578
2579------------------------
2580"##,
2581 default_severity: Severity::Allow,
2582 warn_since: None,
2583 deny_since: None,
2584 },
2585 Lint {
2586 label: "array_try_from_fn",
2587 description: r##"# `array_try_from_fn`
2588
2589The tracking issue for this feature is: [#89379]
2590
2591[#89379]: https://github.com/rust-lang/rust/issues/89379
2592
2593------------------------
2594"##,
2595 default_severity: Severity::Allow,
2596 warn_since: None,
2597 deny_since: None,
2598 },
2599 Lint {
2600 label: "array_try_map",
2601 description: r##"# `array_try_map`
2602
2603The tracking issue for this feature is: [#79711]
2604
2605[#79711]: https://github.com/rust-lang/rust/issues/79711
2606
2607------------------------
2608"##,
2609 default_severity: Severity::Allow,
2610 warn_since: None,
2611 deny_since: None,
2612 },
2613 Lint {
2614 label: "array_windows",
2615 description: r##"# `array_windows`
2616
2617The tracking issue for this feature is: [#75027]
2618
2619[#75027]: https://github.com/rust-lang/rust/issues/75027
2620
2621------------------------
2622"##,
2623 default_severity: Severity::Allow,
2624 warn_since: None,
2625 deny_since: None,
2626 },
2627 Lint {
2628 label: "as_array_of_cells",
2629 description: r##"# `as_array_of_cells`
2630
2631The tracking issue for this feature is: [#88248]
2632
2633[#88248]: https://github.com/rust-lang/rust/issues/88248
2634
2635------------------------
2636"##,
2637 default_severity: Severity::Allow,
2638 warn_since: None,
2639 deny_since: None,
2640 },
2641 Lint {
2642 label: "ascii_char",
2643 description: r##"# `ascii_char`
2644
2645The tracking issue for this feature is: [#110998]
2646
2647[#110998]: https://github.com/rust-lang/rust/issues/110998
2648
2649------------------------
2650"##,
2651 default_severity: Severity::Allow,
2652 warn_since: None,
2653 deny_since: None,
2654 },
2655 Lint {
2656 label: "ascii_char_variants",
2657 description: r##"# `ascii_char_variants`
2658
2659The tracking issue for this feature is: [#110998]
2660
2661[#110998]: https://github.com/rust-lang/rust/issues/110998
2662
2663------------------------
2664"##,
2665 default_severity: Severity::Allow,
2666 warn_since: None,
2667 deny_since: None,
2668 },
2669 Lint {
2670 label: "asm_experimental_arch",
2671 description: r##"# `asm_experimental_arch`
2672
2673The tracking issue for this feature is: [#93335]
2674
2675[#93335]: https://github.com/rust-lang/rust/issues/93335
2676
2677------------------------
2678
2679This feature tracks `asm!` and `global_asm!` support for the following architectures:
2680- NVPTX
2681- PowerPC
2682- Hexagon
2683- MIPS32r2 and MIPS64r2
2684- wasm32
2685- BPF
2686- SPIR-V
2687- AVR
2688- MSP430
2689- M68k
2690- CSKY
2691- SPARC
2692
2693## Register classes
2694
2695| Architecture | Register class | Registers | LLVM constraint code |
2696| ------------ | -------------- | ---------------------------------- | -------------------- |
2697| MIPS | `reg` | `$[2-25]` | `r` |
2698| MIPS | `freg` | `$f[0-31]` | `f` |
2699| NVPTX | `reg16` | None\* | `h` |
2700| NVPTX | `reg32` | None\* | `r` |
2701| NVPTX | `reg64` | None\* | `l` |
2702| Hexagon | `reg` | `r[0-28]` | `r` |
2703| Hexagon | `preg` | `p[0-3]` | Only clobbers |
2704| PowerPC | `reg` | `r0`, `r[3-12]`, `r[14-28]` | `r` |
2705| PowerPC | `reg_nonzero` | `r[3-12]`, `r[14-28]` | `b` |
2706| PowerPC | `freg` | `f[0-31]` | `f` |
2707| PowerPC | `vreg` | `v[0-31]` | `v` |
2708| PowerPC | `cr` | `cr[0-7]`, `cr` | Only clobbers |
2709| PowerPC | `xer` | `xer` | Only clobbers |
2710| wasm32 | `local` | None\* | `r` |
2711| BPF | `reg` | `r[0-10]` | `r` |
2712| BPF | `wreg` | `w[0-10]` | `w` |
2713| AVR | `reg` | `r[2-25]`, `XH`, `XL`, `ZH`, `ZL` | `r` |
2714| AVR | `reg_upper` | `r[16-25]`, `XH`, `XL`, `ZH`, `ZL` | `d` |
2715| AVR | `reg_pair` | `r3r2` .. `r25r24`, `X`, `Z` | `r` |
2716| AVR | `reg_iw` | `r25r24`, `X`, `Z` | `w` |
2717| AVR | `reg_ptr` | `X`, `Z` | `e` |
2718| MSP430 | `reg` | `r[0-15]` | `r` |
2719| M68k | `reg` | `d[0-7]`, `a[0-7]` | `r` |
2720| M68k | `reg_data` | `d[0-7]` | `d` |
2721| M68k | `reg_addr` | `a[0-3]` | `a` |
2722| CSKY | `reg` | `r[0-31]` | `r` |
2723| CSKY | `freg` | `f[0-31]` | `f` |
2724| SPARC | `reg` | `r[2-29]` | `r` |
2725| SPARC | `yreg` | `y` | Only clobbers |
2726
2727> **Notes**:
2728> - NVPTX doesn't have a fixed register set, so named registers are not supported.
2729>
2730> - WebAssembly doesn't have registers, so named registers are not supported.
2731
2732# Register class supported types
2733
2734| Architecture | Register class | Target feature | Allowed types |
2735| ------------ | ------------------------------- | -------------- | --------------------------------------- |
2736| MIPS32 | `reg` | None | `i8`, `i16`, `i32`, `f32` |
2737| MIPS32 | `freg` | None | `f32`, `f64` |
2738| MIPS64 | `reg` | None | `i8`, `i16`, `i32`, `i64`, `f32`, `f64` |
2739| MIPS64 | `freg` | None | `f32`, `f64` |
2740| NVPTX | `reg16` | None | `i8`, `i16` |
2741| NVPTX | `reg32` | None | `i8`, `i16`, `i32`, `f32` |
2742| NVPTX | `reg64` | None | `i8`, `i16`, `i32`, `f32`, `i64`, `f64` |
2743| Hexagon | `reg` | None | `i8`, `i16`, `i32`, `f32` |
2744| Hexagon | `preg` | N/A | Only clobbers |
2745| PowerPC | `reg` | None | `i8`, `i16`, `i32`, `i64` (powerpc64 only) |
2746| PowerPC | `reg_nonzero` | None | `i8`, `i16`, `i32`, `i64` (powerpc64 only) |
2747| PowerPC | `freg` | None | `f32`, `f64` |
2748| PowerPC | `vreg` | `altivec` | `i8x16`, `i16x8`, `i32x4`, `f32x4` |
2749| PowerPC | `vreg` | `vsx` | `f32`, `f64`, `i64x2`, `f64x2` |
2750| PowerPC | `cr` | N/A | Only clobbers |
2751| PowerPC | `xer` | N/A | Only clobbers |
2752| wasm32 | `local` | None | `i8` `i16` `i32` `i64` `f32` `f64` |
2753| BPF | `reg` | None | `i8` `i16` `i32` `i64` |
2754| BPF | `wreg` | `alu32` | `i8` `i16` `i32` |
2755| AVR | `reg`, `reg_upper` | None | `i8` |
2756| AVR | `reg_pair`, `reg_iw`, `reg_ptr` | None | `i16` |
2757| MSP430 | `reg` | None | `i8`, `i16` |
2758| M68k | `reg`, `reg_addr` | None | `i16`, `i32` |
2759| M68k | `reg_data` | None | `i8`, `i16`, `i32` |
2760| CSKY | `reg` | None | `i8`, `i16`, `i32` |
2761| CSKY | `freg` | None | `f32`, |
2762| SPARC | `reg` | None | `i8`, `i16`, `i32`, `i64` (SPARC64 only) |
2763| SPARC | `yreg` | N/A | Only clobbers |
2764
2765## Register aliases
2766
2767| Architecture | Base register | Aliases |
2768| ------------ | ------------- | --------- |
2769| Hexagon | `r29` | `sp` |
2770| Hexagon | `r30` | `fr` |
2771| Hexagon | `r31` | `lr` |
2772| PowerPC | `r1` | `sp` |
2773| PowerPC | `r31` | `fp` |
2774| PowerPC | `r[0-31]` | `[0-31]` |
2775| PowerPC | `f[0-31]` | `fr[0-31]`|
2776| BPF | `r[0-10]` | `w[0-10]` |
2777| AVR | `XH` | `r27` |
2778| AVR | `XL` | `r26` |
2779| AVR | `ZH` | `r31` |
2780| AVR | `ZL` | `r30` |
2781| MSP430 | `r0` | `pc` |
2782| MSP430 | `r1` | `sp` |
2783| MSP430 | `r2` | `sr` |
2784| MSP430 | `r3` | `cg` |
2785| MSP430 | `r4` | `fp` |
2786| M68k | `a5` | `bp` |
2787| M68k | `a6` | `fp` |
2788| M68k | `a7` | `sp`, `usp`, `ssp`, `isp` |
2789| CSKY | `r[0-3]` | `a[0-3]` |
2790| CSKY | `r[4-11]` | `l[0-7]` |
2791| CSKY | `r[12-13]` | `t[0-1]` |
2792| CSKY | `r14` | `sp` |
2793| CSKY | `r15` | `lr` |
2794| CSKY | `r[16-17]` | `l[8-9]` |
2795| CSKY | `r[18-25]` | `t[2-9]` |
2796| CSKY | `r28` | `rgb` |
2797| CSKY | `r29` | `rtb` |
2798| CSKY | `r30` | `svbr` |
2799| CSKY | `r31` | `tls` |
2800| SPARC | `r[0-7]` | `g[0-7]` |
2801| SPARC | `r[8-15]` | `o[0-7]` |
2802| SPARC | `r[16-23]` | `l[0-7]` |
2803| SPARC | `r[24-31]` | `i[0-7]` |
2804
2805> **Notes**:
2806> - TI does not mandate a frame pointer for MSP430, but toolchains are allowed
2807 to use one; LLVM uses `r4`.
2808
2809## Unsupported registers
2810
2811| Architecture | Unsupported register | Reason |
2812| ------------ | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
2813| All | `sp`, `r14`/`o6` (SPARC) | The stack pointer must be restored to its original value at the end of an asm code block. |
2814| All | `fr` (Hexagon), `fp` (PowerPC), `$fp` (MIPS), `Y` (AVR), `r4` (MSP430), `a6` (M68k), `r30`/`i6` (SPARC) | The frame pointer cannot be used as an input or output. |
2815| All | `r19` (Hexagon), `r29` (PowerPC), `r30` (PowerPC) | These are used internally by LLVM as "base pointer" for functions with complex stack frames. |
2816| MIPS | `$0` or `$zero` | This is a constant zero register which can't be modified. |
2817| MIPS | `$1` or `$at` | Reserved for assembler. |
2818| MIPS | `$26`/`$k0`, `$27`/`$k1` | OS-reserved registers. |
2819| MIPS | `$28`/`$gp` | Global pointer cannot be used as inputs or outputs. |
2820| MIPS | `$ra` | Return address cannot be used as inputs or outputs. |
2821| Hexagon | `lr` | This is the link register which cannot be used as an input or output. |
2822| PowerPC | `r2`, `r13` | These are system reserved registers. |
2823| PowerPC | `lr` | The link register cannot be used as an input or output. |
2824| PowerPC | `ctr` | The counter register cannot be used as an input or output. |
2825| PowerPC | `vrsave` | The vrsave register cannot be used as an input or output. |
2826| AVR | `r0`, `r1`, `r1r0` | Due to an issue in LLVM, the `r0` and `r1` registers cannot be used as inputs or outputs. If modified, they must be restored to their original values before the end of the block. |
2827|MSP430 | `r0`, `r2`, `r3` | These are the program counter, status register, and constant generator respectively. Neither the status register nor constant generator can be written to. |
2828| M68k | `a4`, `a5` | Used internally by LLVM for the base pointer and global base pointer. |
2829| CSKY | `r7`, `r28` | Used internally by LLVM for the base pointer and global base pointer. |
2830| CSKY | `r8` | Used internally by LLVM for the frame pointer. |
2831| CSKY | `r14` | Used internally by LLVM for the stack pointer. |
2832| CSKY | `r15` | This is the link register. |
2833| CSKY | `r[26-30]` | Reserved by its ABI. |
2834| CSKY | `r31` | This is the TLS register. |
2835| SPARC | `r0`/`g0` | This is always zero and cannot be used as inputs or outputs. |
2836| SPARC | `r1`/`g1` | Used internally by LLVM. |
2837| SPARC | `r5`/`g5` | Reserved for system. (SPARC32 only) |
2838| SPARC | `r6`/`g6`, `r7`/`g7` | Reserved for system. |
2839| SPARC | `r31`/`i7` | Return address cannot be used as inputs or outputs. |
2840
2841
2842## Template modifiers
2843
2844| Architecture | Register class | Modifier | Example output | LLVM modifier |
2845| ------------ | -------------- | -------- | -------------- | ------------- |
2846| MIPS | `reg` | None | `$2` | None |
2847| MIPS | `freg` | None | `$f0` | None |
2848| NVPTX | `reg16` | None | `rs0` | None |
2849| NVPTX | `reg32` | None | `r0` | None |
2850| NVPTX | `reg64` | None | `rd0` | None |
2851| Hexagon | `reg` | None | `r0` | None |
2852| PowerPC | `reg` | None | `0` | None |
2853| PowerPC | `reg_nonzero` | None | `3` | None |
2854| PowerPC | `freg` | None | `0` | None |
2855| PowerPC | `vreg` | None | `0` | None |
2856| SPARC | `reg` | None | `%o0` | None |
2857| CSKY | `reg` | None | `r0` | None |
2858| CSKY | `freg` | None | `f0` | None |
2859
2860# Flags covered by `preserves_flags`
2861
2862These flags registers must be restored upon exiting the asm block if the `preserves_flags` option is set:
2863- AVR
2864 - The status register `SREG`.
2865- MSP430
2866 - The status register `r2`.
2867- M68k
2868 - The condition code register `ccr`.
2869- SPARC
2870 - Integer condition codes (`icc` and `xcc`)
2871 - Floating-point condition codes (`fcc[0-3]`)
2872"##,
2873 default_severity: Severity::Allow,
2874 warn_since: None,
2875 deny_since: None,
2876 },
2877 Lint {
2878 label: "asm_experimental_reg",
2879 description: r##"# `asm_experimental_arch`
2880
2881The tracking issue for this feature is: [#133416]
2882
2883[#133416]: https://github.com/rust-lang/rust/issues/133416
2884
2885------------------------
2886
2887This tracks support for additional registers in architectures where inline assembly is already stable.
2888
2889## Register classes
2890
2891| Architecture | Register class | Registers | LLVM constraint code |
2892| ------------ | -------------- | --------- | -------------------- |
2893| s390x | `vreg` | `v[0-31]` | `v` |
2894
2895> **Notes**:
2896> - s390x `vreg` is clobber-only in stable.
2897
2898## Register class supported types
2899
2900| Architecture | Register class | Target feature | Allowed types |
2901| ------------ | -------------- | -------------- | ------------- |
2902| s390x | `vreg` | `vector` | `i32`, `f32`, `i64`, `f64`, `i128`, `f128`, `i8x16`, `i16x8`, `i32x4`, `i64x2`, `f32x4`, `f64x2` |
2903
2904## Register aliases
2905
2906| Architecture | Base register | Aliases |
2907| ------------ | ------------- | ------- |
2908
2909## Unsupported registers
2910
2911| Architecture | Unsupported register | Reason |
2912| ------------ | -------------------- | ------ |
2913
2914## Template modifiers
2915
2916| Architecture | Register class | Modifier | Example output | LLVM modifier |
2917| ------------ | -------------- | -------- | -------------- | ------------- |
2918| s390x | `vreg` | None | `%v0` | None |
2919"##,
2920 default_severity: Severity::Allow,
2921 warn_since: None,
2922 deny_since: None,
2923 },
2924 Lint {
2925 label: "asm_goto",
2926 description: r##"# `asm_goto`
2927
2928The tracking issue for this feature is: [#119364]
2929
2930[#119364]: https://github.com/rust-lang/rust/issues/119364
2931
2932------------------------
2933
2934This feature adds a `label <block>` operand type to `asm!`.
2935
2936Example:
2937```rust,ignore (partial-example, x86-only)
2938
2939unsafe {
2940 asm!(
2941 "jmp {}",
2942 label {
2943 println!("Jumped from asm!");
2944 }
2945 );
2946}
2947```
2948
2949The block must have unit type or diverge. The block starts a new safety context,
2950so despite outer `unsafe`, you need extra unsafe to perform unsafe operations
2951within `label <block>`.
2952
2953When `label <block>` is used together with `noreturn` option, it means that the
2954assembly will not fallthrough. It's allowed to jump to a label within the
2955assembly. In this case, the entire `asm!` expression will have an unit type as
2956opposed to diverging, if not all label blocks diverge. The `asm!` expression
2957still diverges if `noreturn` option is used and all label blocks diverge.
2958"##,
2959 default_severity: Severity::Allow,
2960 warn_since: None,
2961 deny_since: None,
2962 },
2963 Lint {
2964 label: "asm_goto_with_outputs",
2965 description: r##"# `asm_goto_with_outputs`
2966
2967The tracking issue for this feature is: [#119364]
2968
2969[#119364]: https://github.com/rust-lang/rust/issues/119364
2970
2971------------------------
2972"##,
2973 default_severity: Severity::Allow,
2974 warn_since: None,
2975 deny_since: None,
2976 },
2977 Lint {
2978 label: "asm_unwind",
2979 description: r##"# `asm_unwind`
2980
2981The tracking issue for this feature is: [#93334]
2982
2983[#93334]: https://github.com/rust-lang/rust/issues/93334
2984
2985------------------------
2986
2987This feature adds a `may_unwind` option to `asm!` which allows an `asm` block to unwind stack and be part of the stack unwinding process. This option is only supported by the LLVM backend right now.
2988"##,
2989 default_severity: Severity::Allow,
2990 warn_since: None,
2991 deny_since: None,
2992 },
2993 Lint {
2994 label: "assert_matches",
2995 description: r##"# `assert_matches`
2996
2997The tracking issue for this feature is: [#82775]
2998
2999[#82775]: https://github.com/rust-lang/rust/issues/82775
3000
3001------------------------
3002"##,
3003 default_severity: Severity::Allow,
3004 warn_since: None,
3005 deny_since: None,
3006 },
3007 Lint {
3008 label: "associated_const_equality",
3009 description: r##"# `associated_const_equality`
3010
3011The tracking issue for this feature is: [#92827]
3012
3013[#92827]: https://github.com/rust-lang/rust/issues/92827
3014
3015------------------------
3016"##,
3017 default_severity: Severity::Allow,
3018 warn_since: None,
3019 deny_since: None,
3020 },
3021 Lint {
3022 label: "associated_type_defaults",
3023 description: r##"# `associated_type_defaults`
3024
3025The tracking issue for this feature is: [#29661]
3026
3027[#29661]: https://github.com/rust-lang/rust/issues/29661
3028
3029------------------------
3030"##,
3031 default_severity: Severity::Allow,
3032 warn_since: None,
3033 deny_since: None,
3034 },
3035 Lint {
3036 label: "async_closure",
3037 description: r##"# `async_closure`
3038
3039The tracking issue for this feature is: [#62290]
3040
3041[#62290]: https://github.com/rust-lang/rust/issues/62290
3042
3043------------------------
3044"##,
3045 default_severity: Severity::Allow,
3046 warn_since: None,
3047 deny_since: None,
3048 },
3049 Lint {
3050 label: "async_drop",
3051 description: r##"# `async_drop`
3052
3053The tracking issue for this feature is: [#126482]
3054
3055[#126482]: https://github.com/rust-lang/rust/issues/126482
3056
3057------------------------
3058"##,
3059 default_severity: Severity::Allow,
3060 warn_since: None,
3061 deny_since: None,
3062 },
3063 Lint {
3064 label: "async_fn_track_caller",
3065 description: r##"# `async_fn_track_caller`
3066
3067The tracking issue for this feature is: [#110011]
3068
3069[#110011]: https://github.com/rust-lang/rust/issues/110011
3070
3071------------------------
3072"##,
3073 default_severity: Severity::Allow,
3074 warn_since: None,
3075 deny_since: None,
3076 },
3077 Lint {
3078 label: "async_fn_traits",
3079 description: r##"# `async_fn_traits`
3080
3081See Also: [`fn_traits`](../library-features/fn-traits.md)
3082
3083----
3084
3085The `async_fn_traits` feature allows for implementation of the [`AsyncFn*`] traits
3086for creating custom closure-like types that return futures.
3087
3088[`AsyncFn*`]: ../../std/ops/trait.AsyncFn.html
3089
3090The main difference to the `Fn*` family of traits is that `AsyncFn` can return a future
3091that borrows from itself (`FnOnce::Output` has no lifetime parameters, while `AsyncFnMut::CallRefFuture` does).
3092"##,
3093 default_severity: Severity::Allow,
3094 warn_since: None,
3095 deny_since: None,
3096 },
3097 Lint {
3098 label: "async_for_loop",
3099 description: r##"# `async_for_loop`
3100
3101The tracking issue for this feature is: [#118898]
3102
3103[#118898]: https://github.com/rust-lang/rust/issues/118898
3104
3105------------------------
3106"##,
3107 default_severity: Severity::Allow,
3108 warn_since: None,
3109 deny_since: None,
3110 },
3111 Lint {
3112 label: "async_gen_internals",
3113 description: r##"# `async_gen_internals`
3114
3115This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
3116
3117------------------------
3118"##,
3119 default_severity: Severity::Allow,
3120 warn_since: None,
3121 deny_since: None,
3122 },
3123 Lint {
3124 label: "async_iter_from_iter",
3125 description: r##"# `async_iter_from_iter`
3126
3127The tracking issue for this feature is: [#81798]
3128
3129[#81798]: https://github.com/rust-lang/rust/issues/81798
3130
3131------------------------
3132"##,
3133 default_severity: Severity::Allow,
3134 warn_since: None,
3135 deny_since: None,
3136 },
3137 Lint {
3138 label: "async_iterator",
3139 description: r##"# `async_iterator`
3140
3141The tracking issue for this feature is: [#79024]
3142
3143[#79024]: https://github.com/rust-lang/rust/issues/79024
3144
3145------------------------
3146"##,
3147 default_severity: Severity::Allow,
3148 warn_since: None,
3149 deny_since: None,
3150 },
3151 Lint {
3152 label: "async_trait_bounds",
3153 description: r##"# `async_trait_bounds`
3154
3155The tracking issue for this feature is: [#62290]
3156
3157[#62290]: https://github.com/rust-lang/rust/issues/62290
3158
3159------------------------
3160"##,
3161 default_severity: Severity::Allow,
3162 warn_since: None,
3163 deny_since: None,
3164 },
3165 Lint {
3166 label: "atomic_from_mut",
3167 description: r##"# `atomic_from_mut`
3168
3169The tracking issue for this feature is: [#76314]
3170
3171[#76314]: https://github.com/rust-lang/rust/issues/76314
3172
3173------------------------
3174"##,
3175 default_severity: Severity::Allow,
3176 warn_since: None,
3177 deny_since: None,
3178 },
3179 Lint {
3180 label: "auto_traits",
3181 description: r##"# `auto_traits`
3182
3183The tracking issue for this feature is [#13231]
3184
3185[#13231]: https://github.com/rust-lang/rust/issues/13231
3186
3187----
3188
3189The `auto_traits` feature gate allows you to define auto traits.
3190
3191Auto traits, like [`Send`] or [`Sync`] in the standard library, are marker traits
3192that are automatically implemented for every type, unless the type, or a type it contains,
3193has explicitly opted out via a negative impl. (Negative impls are separately controlled
3194by the `negative_impls` feature.)
3195
3196[`Send`]: ../../std/marker/trait.Send.html
3197[`Sync`]: ../../std/marker/trait.Sync.html
3198
3199```rust,ignore (partial-example)
3200impl !Trait for Type {}
3201```
3202
3203Example:
3204
3205```rust
3206#![feature(negative_impls)]
3207#![feature(auto_traits)]
3208
3209auto trait Valid {}
3210
3211struct True;
3212struct False;
3213
3214impl !Valid for False {}
3215
3216struct MaybeValid<T>(T);
3217
3218fn must_be_valid<T: Valid>(_t: T) { }
3219
3220fn main() {
3221 // works
3222 must_be_valid( MaybeValid(True) );
3223
3224 // compiler error - trait bound not satisfied
3225 // must_be_valid( MaybeValid(False) );
3226}
3227```
3228
3229## Automatic trait implementations
3230
3231When a type is declared as an `auto trait`, we will automatically
3232create impls for every struct/enum/union, unless an explicit impl is
3233provided. These automatic impls contain a where clause for each field
3234of the form `T: AutoTrait`, where `T` is the type of the field and
3235`AutoTrait` is the auto trait in question. As an example, consider the
3236struct `List` and the auto trait `Send`:
3237
3238```rust
3239struct List<T> {
3240 data: T,
3241 next: Option<Box<List<T>>>,
3242}
3243```
3244
3245Presuming that there is no explicit impl of `Send` for `List`, the
3246compiler will supply an automatic impl of the form:
3247
3248```rust
3249struct List<T> {
3250 data: T,
3251 next: Option<Box<List<T>>>,
3252}
3253
3254unsafe impl<T> Send for List<T>
3255where
3256 T: Send, // from the field `data`
3257 Option<Box<List<T>>>: Send, // from the field `next`
3258{ }
3259```
3260
3261Explicit impls may be either positive or negative. They take the form:
3262
3263```rust,ignore (partial-example)
3264impl<...> AutoTrait for StructName<..> { }
3265impl<...> !AutoTrait for StructName<..> { }
3266```
3267
3268## Coinduction: Auto traits permit cyclic matching
3269
3270Unlike ordinary trait matching, auto traits are **coinductive**. This
3271means, in short, that cycles which occur in trait matching are
3272considered ok. As an example, consider the recursive struct `List`
3273introduced in the previous section. In attempting to determine whether
3274`List: Send`, we would wind up in a cycle: to apply the impl, we must
3275show that `Option<Box<List>>: Send`, which will in turn require
3276`Box<List>: Send` and then finally `List: Send` again. Under ordinary
3277trait matching, this cycle would be an error, but for an auto trait it
3278is considered a successful match.
3279
3280## Items
3281
3282Auto traits cannot have any trait items, such as methods or associated types. This ensures that we can generate default implementations.
3283
3284## Supertraits
3285
3286Auto traits cannot have supertraits. This is for soundness reasons, as the interaction of coinduction with implied bounds is difficult to reconcile.
3287"##,
3288 default_severity: Severity::Allow,
3289 warn_since: None,
3290 deny_since: None,
3291 },
3292 Lint {
3293 label: "autodiff",
3294 description: r##"# `autodiff`
3295
3296The tracking issue for this feature is: [#124509]
3297
3298[#124509]: https://github.com/rust-lang/rust/issues/124509
3299
3300------------------------
3301"##,
3302 default_severity: Severity::Allow,
3303 warn_since: None,
3304 deny_since: None,
3305 },
3306 Lint {
3307 label: "avx512_target_feature",
3308 description: r##"# `avx512_target_feature`
3309
3310The tracking issue for this feature is: [#44839]
3311
3312[#44839]: https://github.com/rust-lang/rust/issues/44839
3313
3314------------------------
3315"##,
3316 default_severity: Severity::Allow,
3317 warn_since: None,
3318 deny_since: None,
3319 },
3320 Lint {
3321 label: "backtrace_frames",
3322 description: r##"# `backtrace_frames`
3323
3324The tracking issue for this feature is: [#79676]
3325
3326[#79676]: https://github.com/rust-lang/rust/issues/79676
3327
3328------------------------
3329"##,
3330 default_severity: Severity::Allow,
3331 warn_since: None,
3332 deny_since: None,
3333 },
3334 Lint {
3335 label: "bigint_helper_methods",
3336 description: r##"# `bigint_helper_methods`
3337
3338The tracking issue for this feature is: [#85532]
3339
3340[#85532]: https://github.com/rust-lang/rust/issues/85532
3341
3342------------------------
3343"##,
3344 default_severity: Severity::Allow,
3345 warn_since: None,
3346 deny_since: None,
3347 },
3348 Lint {
3349 label: "binary_heap_drain_sorted",
3350 description: r##"# `binary_heap_drain_sorted`
3351
3352The tracking issue for this feature is: [#59278]
3353
3354[#59278]: https://github.com/rust-lang/rust/issues/59278
3355
3356------------------------
3357"##,
3358 default_severity: Severity::Allow,
3359 warn_since: None,
3360 deny_since: None,
3361 },
3362 Lint {
3363 label: "binary_heap_into_iter_sorted",
3364 description: r##"# `binary_heap_into_iter_sorted`
3365
3366The tracking issue for this feature is: [#59278]
3367
3368[#59278]: https://github.com/rust-lang/rust/issues/59278
3369
3370------------------------
3371"##,
3372 default_severity: Severity::Allow,
3373 warn_since: None,
3374 deny_since: None,
3375 },
3376 Lint {
3377 label: "bound_as_ref",
3378 description: r##"# `bound_as_ref`
3379
3380The tracking issue for this feature is: [#80996]
3381
3382[#80996]: https://github.com/rust-lang/rust/issues/80996
3383
3384------------------------
3385"##,
3386 default_severity: Severity::Allow,
3387 warn_since: None,
3388 deny_since: None,
3389 },
3390 Lint {
3391 label: "box_as_ptr",
3392 description: r##"# `box_as_ptr`
3393
3394The tracking issue for this feature is: [#129090]
3395
3396[#129090]: https://github.com/rust-lang/rust/issues/129090
3397
3398------------------------
3399"##,
3400 default_severity: Severity::Allow,
3401 warn_since: None,
3402 deny_since: None,
3403 },
3404 Lint {
3405 label: "box_into_boxed_slice",
3406 description: r##"# `box_into_boxed_slice`
3407
3408The tracking issue for this feature is: [#71582]
3409
3410[#71582]: https://github.com/rust-lang/rust/issues/71582
3411
3412------------------------
3413"##,
3414 default_severity: Severity::Allow,
3415 warn_since: None,
3416 deny_since: None,
3417 },
3418 Lint {
3419 label: "box_into_inner",
3420 description: r##"# `box_into_inner`
3421
3422The tracking issue for this feature is: [#80437]
3423
3424[#80437]: https://github.com/rust-lang/rust/issues/80437
3425
3426------------------------
3427"##,
3428 default_severity: Severity::Allow,
3429 warn_since: None,
3430 deny_since: None,
3431 },
3432 Lint {
3433 label: "box_patterns",
3434 description: r##"# `box_patterns`
3435
3436The tracking issue for this feature is: [#29641]
3437
3438[#29641]: https://github.com/rust-lang/rust/issues/29641
3439
3440------------------------
3441
3442Box patterns let you match on `Box<T>`s:
3443
3444
3445```rust
3446#![feature(box_patterns)]
3447
3448fn main() {
3449 let b = Some(Box::new(5));
3450 match b {
3451 Some(box n) if n < 0 => {
3452 println!("Box contains negative number {n}");
3453 },
3454 Some(box n) if n >= 0 => {
3455 println!("Box contains non-negative number {n}");
3456 },
3457 None => {
3458 println!("No box");
3459 },
3460 _ => unreachable!()
3461 }
3462}
3463```
3464"##,
3465 default_severity: Severity::Allow,
3466 warn_since: None,
3467 deny_since: None,
3468 },
3469 Lint {
3470 label: "box_uninit_write",
3471 description: r##"# `box_uninit_write`
3472
3473The tracking issue for this feature is: [#129397]
3474
3475[#129397]: https://github.com/rust-lang/rust/issues/129397
3476
3477------------------------
3478"##,
3479 default_severity: Severity::Allow,
3480 warn_since: None,
3481 deny_since: None,
3482 },
3483 Lint {
3484 label: "box_vec_non_null",
3485 description: r##"# `box_vec_non_null`
3486
3487The tracking issue for this feature is: [#130364]
3488
3489[#130364]: https://github.com/rust-lang/rust/issues/130364
3490
3491------------------------
3492"##,
3493 default_severity: Severity::Allow,
3494 warn_since: None,
3495 deny_since: None,
3496 },
3497 Lint {
3498 label: "bpf_target_feature",
3499 description: r##"# `bpf_target_feature`
3500
3501The tracking issue for this feature is: [#44839]
3502
3503[#44839]: https://github.com/rust-lang/rust/issues/44839
3504
3505------------------------
3506"##,
3507 default_severity: Severity::Allow,
3508 warn_since: None,
3509 deny_since: None,
3510 },
3511 Lint {
3512 label: "breakpoint",
3513 description: r##"# `breakpoint`
3514
3515The tracking issue for this feature is: [#133724]
3516
3517[#133724]: https://github.com/rust-lang/rust/issues/133724
3518
3519------------------------
3520"##,
3521 default_severity: Severity::Allow,
3522 warn_since: None,
3523 deny_since: None,
3524 },
3525 Lint {
3526 label: "btree_cursors",
3527 description: r##"# `btree_cursors`
3528
3529The tracking issue for this feature is: [#107540]
3530
3531[#107540]: https://github.com/rust-lang/rust/issues/107540
3532
3533------------------------
3534"##,
3535 default_severity: Severity::Allow,
3536 warn_since: None,
3537 deny_since: None,
3538 },
3539 Lint {
3540 label: "btree_entry_insert",
3541 description: r##"# `btree_entry_insert`
3542
3543The tracking issue for this feature is: [#65225]
3544
3545[#65225]: https://github.com/rust-lang/rust/issues/65225
3546
3547------------------------
3548"##,
3549 default_severity: Severity::Allow,
3550 warn_since: None,
3551 deny_since: None,
3552 },
3553 Lint {
3554 label: "btree_extract_if",
3555 description: r##"# `btree_extract_if`
3556
3557The tracking issue for this feature is: [#70530]
3558
3559[#70530]: https://github.com/rust-lang/rust/issues/70530
3560
3561------------------------
3562"##,
3563 default_severity: Severity::Allow,
3564 warn_since: None,
3565 deny_since: None,
3566 },
3567 Lint {
3568 label: "btree_set_entry",
3569 description: r##"# `btree_set_entry`
3570
3571The tracking issue for this feature is: [#133549]
3572
3573[#133549]: https://github.com/rust-lang/rust/issues/133549
3574
3575------------------------
3576"##,
3577 default_severity: Severity::Allow,
3578 warn_since: None,
3579 deny_since: None,
3580 },
3581 Lint {
3582 label: "btreemap_alloc",
3583 description: r##"# `btreemap_alloc`
3584
3585The tracking issue for this feature is: [#32838]
3586
3587[#32838]: https://github.com/rust-lang/rust/issues/32838
3588
3589------------------------
3590"##,
3591 default_severity: Severity::Allow,
3592 warn_since: None,
3593 deny_since: None,
3594 },
3595 Lint {
3596 label: "buf_read_has_data_left",
3597 description: r##"# `buf_read_has_data_left`
3598
3599The tracking issue for this feature is: [#86423]
3600
3601[#86423]: https://github.com/rust-lang/rust/issues/86423
3602
3603------------------------
3604"##,
3605 default_severity: Severity::Allow,
3606 warn_since: None,
3607 deny_since: None,
3608 },
3609 Lint {
3610 label: "bufreader_peek",
3611 description: r##"# `bufreader_peek`
3612
3613The tracking issue for this feature is: [#128405]
3614
3615[#128405]: https://github.com/rust-lang/rust/issues/128405
3616
3617------------------------
3618"##,
3619 default_severity: Severity::Allow,
3620 warn_since: None,
3621 deny_since: None,
3622 },
3623 Lint {
3624 label: "builtin_syntax",
3625 description: r##"# `builtin_syntax`
3626
3627The tracking issue for this feature is: [#110680]
3628
3629[#110680]: https://github.com/rust-lang/rust/issues/110680
3630
3631------------------------
3632"##,
3633 default_severity: Severity::Allow,
3634 warn_since: None,
3635 deny_since: None,
3636 },
3637 Lint {
3638 label: "c_size_t",
3639 description: r##"# `c_size_t`
3640
3641The tracking issue for this feature is: [#88345]
3642
3643[#88345]: https://github.com/rust-lang/rust/issues/88345
3644
3645------------------------
3646"##,
3647 default_severity: Severity::Allow,
3648 warn_since: None,
3649 deny_since: None,
3650 },
3651 Lint {
3652 label: "c_str_module",
3653 description: r##"# `c_str_module`
3654
3655The tracking issue for this feature is: [#112134]
3656
3657[#112134]: https://github.com/rust-lang/rust/issues/112134
3658
3659------------------------
3660"##,
3661 default_severity: Severity::Allow,
3662 warn_since: None,
3663 deny_since: None,
3664 },
3665 Lint {
3666 label: "c_variadic",
3667 description: r##"# `c_variadic`
3668
3669The tracking issue for this feature is: [#44930]
3670
3671[#44930]: https://github.com/rust-lang/rust/issues/44930
3672
3673------------------------
3674
3675The `c_variadic` language feature enables C-variadic functions to be
3676defined in Rust. They may be called both from within Rust and via FFI.
3677
3678## Examples
3679
3680```rust
3681#![feature(c_variadic)]
3682
3683pub unsafe extern "C" fn add(n: usize, mut args: ...) -> usize {
3684 let mut sum = 0;
3685 for _ in 0..n {
3686 sum += args.arg::<usize>();
3687 }
3688 sum
3689}
3690```
3691"##,
3692 default_severity: Severity::Allow,
3693 warn_since: None,
3694 deny_since: None,
3695 },
3696 Lint {
3697 label: "c_variadic",
3698 description: r##"# `c_variadic`
3699
3700The tracking issue for this feature is: [#44930]
3701
3702[#44930]: https://github.com/rust-lang/rust/issues/44930
3703
3704------------------------
3705
3706The `c_variadic` library feature exposes the `VaList` structure,
3707Rust's analogue of C's `va_list` type.
3708
3709## Examples
3710
3711```rust
3712#![feature(c_variadic)]
3713
3714use std::ffi::VaList;
3715
3716pub unsafe extern "C" fn vadd(n: usize, mut args: VaList) -> usize {
3717 let mut sum = 0;
3718 for _ in 0..n {
3719 sum += args.arg::<usize>();
3720 }
3721 sum
3722}
3723```
3724"##,
3725 default_severity: Severity::Allow,
3726 warn_since: None,
3727 deny_since: None,
3728 },
3729 Lint {
3730 label: "c_void_variant",
3731 description: r##"# `c_void_variant`
3732
3733This feature is internal to the Rust compiler and is not intended for general use.
3734
3735------------------------
3736"##,
3737 default_severity: Severity::Allow,
3738 warn_since: None,
3739 deny_since: None,
3740 },
3741 Lint {
3742 label: "can_vector",
3743 description: r##"# `can_vector`
3744
3745The tracking issue for this feature is: [#69941]
3746
3747[#69941]: https://github.com/rust-lang/rust/issues/69941
3748
3749------------------------
3750"##,
3751 default_severity: Severity::Allow,
3752 warn_since: None,
3753 deny_since: None,
3754 },
3755 Lint {
3756 label: "cell_leak",
3757 description: r##"# `cell_leak`
3758
3759The tracking issue for this feature is: [#69099]
3760
3761[#69099]: https://github.com/rust-lang/rust/issues/69099
3762
3763------------------------
3764"##,
3765 default_severity: Severity::Allow,
3766 warn_since: None,
3767 deny_since: None,
3768 },
3769 Lint {
3770 label: "cell_update",
3771 description: r##"# `cell_update`
3772
3773The tracking issue for this feature is: [#50186]
3774
3775[#50186]: https://github.com/rust-lang/rust/issues/50186
3776
3777------------------------
3778"##,
3779 default_severity: Severity::Allow,
3780 warn_since: None,
3781 deny_since: None,
3782 },
3783 Lint {
3784 label: "cfg_accessible",
3785 description: r##"# `cfg_accessible`
3786
3787The tracking issue for this feature is: [#64797]
3788
3789[#64797]: https://github.com/rust-lang/rust/issues/64797
3790
3791------------------------
3792"##,
3793 default_severity: Severity::Allow,
3794 warn_since: None,
3795 deny_since: None,
3796 },
3797 Lint {
3798 label: "cfg_eval",
3799 description: r##"# `cfg_eval`
3800
3801The tracking issue for this feature is: [#82679]
3802
3803[#82679]: https://github.com/rust-lang/rust/issues/82679
3804
3805------------------------
3806"##,
3807 default_severity: Severity::Allow,
3808 warn_since: None,
3809 deny_since: None,
3810 },
3811 Lint {
3812 label: "cfg_match",
3813 description: r##"# `cfg_match`
3814
3815The tracking issue for this feature is: [#115585]
3816
3817[#115585]: https://github.com/rust-lang/rust/issues/115585
3818
3819------------------------
3820"##,
3821 default_severity: Severity::Allow,
3822 warn_since: None,
3823 deny_since: None,
3824 },
3825 Lint {
3826 label: "cfg_overflow_checks",
3827 description: r##"# `cfg_overflow_checks`
3828
3829The tracking issue for this feature is: [#111466]
3830
3831[#111466]: https://github.com/rust-lang/rust/issues/111466
3832
3833------------------------
3834"##,
3835 default_severity: Severity::Allow,
3836 warn_since: None,
3837 deny_since: None,
3838 },
3839 Lint {
3840 label: "cfg_relocation_model",
3841 description: r##"# `cfg_relocation_model`
3842
3843The tracking issue for this feature is: [#114929]
3844
3845[#114929]: https://github.com/rust-lang/rust/issues/114929
3846
3847------------------------
3848"##,
3849 default_severity: Severity::Allow,
3850 warn_since: None,
3851 deny_since: None,
3852 },
3853 Lint {
3854 label: "cfg_sanitize",
3855 description: r##"# `cfg_sanitize`
3856
3857The tracking issue for this feature is: [#39699]
3858
3859[#39699]: https://github.com/rust-lang/rust/issues/39699
3860
3861------------------------
3862
3863The `cfg_sanitize` feature makes it possible to execute different code
3864depending on whether a particular sanitizer is enabled or not.
3865
3866## Examples
3867
3868```rust
3869#![feature(cfg_sanitize)]
3870
3871#[cfg(sanitize = "thread")]
3872fn a() {
3873 // ...
3874}
3875
3876#[cfg(not(sanitize = "thread"))]
3877fn a() {
3878 // ...
3879}
3880
3881fn b() {
3882 if cfg!(sanitize = "leak") {
3883 // ...
3884 } else {
3885 // ...
3886 }
3887}
3888```
3889"##,
3890 default_severity: Severity::Allow,
3891 warn_since: None,
3892 deny_since: None,
3893 },
3894 Lint {
3895 label: "cfg_sanitizer_cfi",
3896 description: r##"# `cfg_sanitizer_cfi`
3897
3898The tracking issue for this feature is: [#89653]
3899
3900[#89653]: https://github.com/rust-lang/rust/issues/89653
3901
3902------------------------
3903"##,
3904 default_severity: Severity::Allow,
3905 warn_since: None,
3906 deny_since: None,
3907 },
3908 Lint {
3909 label: "cfg_target_compact",
3910 description: r##"# `cfg_target_compact`
3911
3912The tracking issue for this feature is: [#96901]
3913
3914[#96901]: https://github.com/rust-lang/rust/issues/96901
3915
3916------------------------
3917"##,
3918 default_severity: Severity::Allow,
3919 warn_since: None,
3920 deny_since: None,
3921 },
3922 Lint {
3923 label: "cfg_target_has_atomic",
3924 description: r##"# `cfg_target_has_atomic`
3925
3926The tracking issue for this feature is: [#94039]
3927
3928[#94039]: https://github.com/rust-lang/rust/issues/94039
3929
3930------------------------
3931"##,
3932 default_severity: Severity::Allow,
3933 warn_since: None,
3934 deny_since: None,
3935 },
3936 Lint {
3937 label: "cfg_target_has_atomic_equal_alignment",
3938 description: r##"# `cfg_target_has_atomic_equal_alignment`
3939
3940The tracking issue for this feature is: [#93822]
3941
3942[#93822]: https://github.com/rust-lang/rust/issues/93822
3943
3944------------------------
3945"##,
3946 default_severity: Severity::Allow,
3947 warn_since: None,
3948 deny_since: None,
3949 },
3950 Lint {
3951 label: "cfg_target_thread_local",
3952 description: r##"# `cfg_target_thread_local`
3953
3954The tracking issue for this feature is: [#29594]
3955
3956[#29594]: https://github.com/rust-lang/rust/issues/29594
3957
3958------------------------
3959"##,
3960 default_severity: Severity::Allow,
3961 warn_since: None,
3962 deny_since: None,
3963 },
3964 Lint {
3965 label: "cfg_ub_checks",
3966 description: r##"# `cfg_ub_checks`
3967
3968The tracking issue for this feature is: [#123499]
3969
3970[#123499]: https://github.com/rust-lang/rust/issues/123499
3971
3972------------------------
3973"##,
3974 default_severity: Severity::Allow,
3975 warn_since: None,
3976 deny_since: None,
3977 },
3978 Lint {
3979 label: "cfg_version",
3980 description: r##"# `cfg_version`
3981
3982The tracking issue for this feature is: [#64796]
3983
3984[#64796]: https://github.com/rust-lang/rust/issues/64796
3985
3986------------------------
3987
3988The `cfg_version` feature makes it possible to execute different code
3989depending on the compiler version. It will return true if the compiler
3990version is greater than or equal to the specified version.
3991
3992## Examples
3993
3994```rust
3995#![feature(cfg_version)]
3996
3997#[cfg(version("1.42"))] // 1.42 and above
3998fn a() {
3999 // ...
4000}
4001
4002#[cfg(not(version("1.42")))] // 1.41 and below
4003fn a() {
4004 // ...
4005}
4006
4007fn b() {
4008 if cfg!(version("1.42")) {
4009 // ...
4010 } else {
4011 // ...
4012 }
4013}
4014```
4015"##,
4016 default_severity: Severity::Allow,
4017 warn_since: None,
4018 deny_since: None,
4019 },
4020 Lint {
4021 label: "cfi_encoding",
4022 description: r##"# `cfi_encoding`
4023
4024The tracking issue for this feature is: [#89653]
4025
4026[#89653]: https://github.com/rust-lang/rust/issues/89653
4027
4028------------------------
4029
4030The `cfi_encoding` feature allows the user to define a CFI encoding for a type.
4031It allows the user to use a different names for types that otherwise would be
4032required to have the same name as used in externally defined C functions.
4033
4034## Examples
4035
4036```rust
4037#![feature(cfi_encoding, extern_types)]
4038
4039#[cfi_encoding = "3Foo"]
4040pub struct Type1(i32);
4041
4042extern {
4043 #[cfi_encoding = "3Bar"]
4044 type Type2;
4045}
4046```
4047"##,
4048 default_severity: Severity::Allow,
4049 warn_since: None,
4050 deny_since: None,
4051 },
4052 Lint {
4053 label: "char_internals",
4054 description: r##"# `char_internals`
4055
4056This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
4057
4058------------------------
4059"##,
4060 default_severity: Severity::Allow,
4061 warn_since: None,
4062 deny_since: None,
4063 },
4064 Lint {
4065 label: "clone_to_uninit",
4066 description: r##"# `clone_to_uninit`
4067
4068The tracking issue for this feature is: [#126799]
4069
4070[#126799]: https://github.com/rust-lang/rust/issues/126799
4071
4072------------------------
4073"##,
4074 default_severity: Severity::Allow,
4075 warn_since: None,
4076 deny_since: None,
4077 },
4078 Lint {
4079 label: "closure_lifetime_binder",
4080 description: r##"# `closure_lifetime_binder`
4081
4082The tracking issue for this feature is: [#97362]
4083
4084[#97362]: https://github.com/rust-lang/rust/issues/97362
4085
4086------------------------
4087"##,
4088 default_severity: Severity::Allow,
4089 warn_since: None,
4090 deny_since: None,
4091 },
4092 Lint {
4093 label: "closure_track_caller",
4094 description: r##"# `closure_track_caller`
4095
4096The tracking issue for this feature is: [#87417]
4097
4098[#87417]: https://github.com/rust-lang/rust/issues/87417
4099
4100------------------------
4101
4102Allows using the `#[track_caller]` attribute on closures and coroutines.
4103Calls made to the closure or coroutine will have caller information
4104available through `std::panic::Location::caller()`, just like using
4105`#[track_caller]` on a function.
4106"##,
4107 default_severity: Severity::Allow,
4108 warn_since: None,
4109 deny_since: None,
4110 },
4111 Lint {
4112 label: "cmp_minmax",
4113 description: r##"# `cmp_minmax`
4114
4115The tracking issue for this feature is: [#115939]
4116
4117[#115939]: https://github.com/rust-lang/rust/issues/115939
4118
4119------------------------
4120"##,
4121 default_severity: Severity::Allow,
4122 warn_since: None,
4123 deny_since: None,
4124 },
4125 Lint {
4126 label: "cmse_nonsecure_entry",
4127 description: r##"# `cmse_nonsecure_entry`
4128
4129The tracking issue for this feature is: [#75835]
4130
4131[#75835]: https://github.com/rust-lang/rust/issues/75835
4132
4133------------------------
4134
4135The [TrustZone-M
4136feature](https://developer.arm.com/documentation/100690/latest/) is available
4137for targets with the Armv8-M architecture profile (`thumbv8m` in their target
4138name).
4139LLVM, the Rust compiler and the linker are providing
4140[support](https://developer.arm.com/documentation/ecm0359818/latest/) for the
4141TrustZone-M feature.
4142
4143One of the things provided, with this unstable feature, is the
4144`C-cmse-nonsecure-entry` ABI. This ABI marks a Secure function as an
4145entry function (see [section
41465.4](https://developer.arm.com/documentation/ecm0359818/latest/) for details).
4147With this ABI, the compiler will do the following:
4148* add a special symbol on the function which is the `__acle_se_` prefix and the
4149 standard function name
4150* constrain the number of parameters to avoid using the Non-Secure stack
4151* before returning from the function, clear registers that might contain Secure
4152 information
4153* use the `BXNS` instruction to return
4154
4155Because the stack can not be used to pass parameters, there will be compilation
4156errors if:
4157* the total size of all parameters is too big (for example more than four 32
4158 bits integers)
4159* the entry function is not using a C ABI
4160
4161The special symbol `__acle_se_` will be used by the linker to generate a secure
4162gateway veneer.
4163
4164<!-- NOTE(ignore) this example is specific to thumbv8m targets -->
4165
4166``` rust,ignore
4167#![no_std]
4168#![feature(cmse_nonsecure_entry)]
4169
4170#[no_mangle]
4171pub extern "C-cmse-nonsecure-entry" fn entry_function(input: u32) -> u32 {
4172 input + 6
4173}
4174```
4175
4176``` text
4177$ rustc --emit obj --crate-type lib --target thumbv8m.main-none-eabi function.rs
4178$ arm-none-eabi-objdump -D function.o
4179
418000000000 <entry_function>:
4181 0: b580 push {r7, lr}
4182 2: 466f mov r7, sp
4183 4: b082 sub sp, #8
4184 6: 9001 str r0, [sp, #4]
4185 8: 1d81 adds r1, r0, #6
4186 a: 460a mov r2, r1
4187 c: 4281 cmp r1, r0
4188 e: 9200 str r2, [sp, #0]
4189 10: d30b bcc.n 2a <entry_function+0x2a>
4190 12: e7ff b.n 14 <entry_function+0x14>
4191 14: 9800 ldr r0, [sp, #0]
4192 16: b002 add sp, #8
4193 18: e8bd 4080 ldmia.w sp!, {r7, lr}
4194 1c: 4671 mov r1, lr
4195 1e: 4672 mov r2, lr
4196 20: 4673 mov r3, lr
4197 22: 46f4 mov ip, lr
4198 24: f38e 8800 msr CPSR_f, lr
4199 28: 4774 bxns lr
4200 2a: f240 0000 movw r0, #0
4201 2e: f2c0 0000 movt r0, #0
4202 32: f240 0200 movw r2, #0
4203 36: f2c0 0200 movt r2, #0
4204 3a: 211c movs r1, #28
4205 3c: f7ff fffe bl 0 <_ZN4core9panicking5panic17h5c028258ca2fb3f5E>
4206 40: defe udf #254 ; 0xfe
4207```
4208"##,
4209 default_severity: Severity::Allow,
4210 warn_since: None,
4211 deny_since: None,
4212 },
4213 Lint {
4214 label: "coerce_unsized",
4215 description: r##"# `coerce_unsized`
4216
4217The tracking issue for this feature is: [#18598]
4218
4219[#18598]: https://github.com/rust-lang/rust/issues/18598
4220
4221------------------------
4222"##,
4223 default_severity: Severity::Allow,
4224 warn_since: None,
4225 deny_since: None,
4226 },
4227 Lint {
4228 label: "compiler_builtins",
4229 description: r##"# `compiler_builtins`
4230
4231This feature is internal to the Rust compiler and is not intended for general use.
4232
4233------------------------
4234"##,
4235 default_severity: Severity::Allow,
4236 warn_since: None,
4237 deny_since: None,
4238 },
4239 Lint {
4240 label: "concat_bytes",
4241 description: r##"# `concat_bytes`
4242
4243The tracking issue for this feature is: [#87555]
4244
4245[#87555]: https://github.com/rust-lang/rust/issues/87555
4246
4247------------------------
4248"##,
4249 default_severity: Severity::Allow,
4250 warn_since: None,
4251 deny_since: None,
4252 },
4253 Lint {
4254 label: "concat_idents",
4255 description: r##"# `concat_idents`
4256
4257The tracking issue for this feature is: [#29599]
4258
4259[#29599]: https://github.com/rust-lang/rust/issues/29599
4260
4261------------------------
4262
4263The `concat_idents` feature adds a macro for concatenating multiple identifiers
4264into one identifier.
4265
4266## Examples
4267
4268```rust
4269#![feature(concat_idents)]
4270
4271fn main() {
4272 fn foobar() -> u32 { 23 }
4273 let f = concat_idents!(foo, bar);
4274 assert_eq!(f(), 23);
4275}
4276```
4277"##,
4278 default_severity: Severity::Allow,
4279 warn_since: None,
4280 deny_since: None,
4281 },
4282 Lint {
4283 label: "const_alloc_error",
4284 description: r##"# `const_alloc_error`
4285
4286The tracking issue for this feature is: [#92523]
4287
4288[#92523]: https://github.com/rust-lang/rust/issues/92523
4289
4290------------------------
4291"##,
4292 default_severity: Severity::Allow,
4293 warn_since: None,
4294 deny_since: None,
4295 },
4296 Lint {
4297 label: "const_alloc_layout",
4298 description: r##"# `const_alloc_layout`
4299
4300The tracking issue for this feature is: [#67521]
4301
4302[#67521]: https://github.com/rust-lang/rust/issues/67521
4303
4304------------------------
4305"##,
4306 default_severity: Severity::Allow,
4307 warn_since: None,
4308 deny_since: None,
4309 },
4310 Lint {
4311 label: "const_array_as_mut_slice",
4312 description: r##"# `const_array_as_mut_slice`
4313
4314The tracking issue for this feature is: [#133333]
4315
4316[#133333]: https://github.com/rust-lang/rust/issues/133333
4317
4318------------------------
4319"##,
4320 default_severity: Severity::Allow,
4321 warn_since: None,
4322 deny_since: None,
4323 },
4324 Lint {
4325 label: "const_array_each_ref",
4326 description: r##"# `const_array_each_ref`
4327
4328The tracking issue for this feature is: [#133289]
4329
4330[#133289]: https://github.com/rust-lang/rust/issues/133289
4331
4332------------------------
4333"##,
4334 default_severity: Severity::Allow,
4335 warn_since: None,
4336 deny_since: None,
4337 },
4338 Lint {
4339 label: "const_async_blocks",
4340 description: r##"# `const_async_blocks`
4341
4342The tracking issue for this feature is: [#85368]
4343
4344[#85368]: https://github.com/rust-lang/rust/issues/85368
4345
4346------------------------
4347"##,
4348 default_severity: Severity::Allow,
4349 warn_since: None,
4350 deny_since: None,
4351 },
4352 Lint {
4353 label: "const_black_box",
4354 description: r##"# `const_black_box`
4355
4356This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
4357
4358------------------------
4359"##,
4360 default_severity: Severity::Allow,
4361 warn_since: None,
4362 deny_since: None,
4363 },
4364 Lint {
4365 label: "const_box",
4366 description: r##"# `const_box`
4367
4368The tracking issue for this feature is: [#92521]
4369
4370[#92521]: https://github.com/rust-lang/rust/issues/92521
4371
4372------------------------
4373"##,
4374 default_severity: Severity::Allow,
4375 warn_since: None,
4376 deny_since: None,
4377 },
4378 Lint {
4379 label: "const_btree_len",
4380 description: r##"# `const_btree_len`
4381
4382This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
4383
4384------------------------
4385"##,
4386 default_severity: Severity::Allow,
4387 warn_since: None,
4388 deny_since: None,
4389 },
4390 Lint {
4391 label: "const_cell",
4392 description: r##"# `const_cell`
4393
4394The tracking issue for this feature is: [#131283]
4395
4396[#131283]: https://github.com/rust-lang/rust/issues/131283
4397
4398------------------------
4399"##,
4400 default_severity: Severity::Allow,
4401 warn_since: None,
4402 deny_since: None,
4403 },
4404 Lint {
4405 label: "const_char_classify",
4406 description: r##"# `const_char_classify`
4407
4408The tracking issue for this feature is: [#132241]
4409
4410[#132241]: https://github.com/rust-lang/rust/issues/132241
4411
4412------------------------
4413"##,
4414 default_severity: Severity::Allow,
4415 warn_since: None,
4416 deny_since: None,
4417 },
4418 Lint {
4419 label: "const_closures",
4420 description: r##"# `const_closures`
4421
4422The tracking issue for this feature is: [#106003]
4423
4424[#106003]: https://github.com/rust-lang/rust/issues/106003
4425
4426------------------------
4427"##,
4428 default_severity: Severity::Allow,
4429 warn_since: None,
4430 deny_since: None,
4431 },
4432 Lint {
4433 label: "const_copy_from_slice",
4434 description: r##"# `const_copy_from_slice`
4435
4436The tracking issue for this feature is: [#131415]
4437
4438[#131415]: https://github.com/rust-lang/rust/issues/131415
4439
4440------------------------
4441"##,
4442 default_severity: Severity::Allow,
4443 warn_since: None,
4444 deny_since: None,
4445 },
4446 Lint {
4447 label: "const_destruct",
4448 description: r##"# `const_destruct`
4449
4450The tracking issue for this feature is: [#133214]
4451
4452[#133214]: https://github.com/rust-lang/rust/issues/133214
4453
4454------------------------
4455"##,
4456 default_severity: Severity::Allow,
4457 warn_since: None,
4458 deny_since: None,
4459 },
4460 Lint {
4461 label: "const_eval_select",
4462 description: r##"# `const_eval_select`
4463
4464The tracking issue for this feature is: [#124625]
4465
4466[#124625]: https://github.com/rust-lang/rust/issues/124625
4467
4468------------------------
4469"##,
4470 default_severity: Severity::Allow,
4471 warn_since: None,
4472 deny_since: None,
4473 },
4474 Lint {
4475 label: "const_for",
4476 description: r##"# `const_for`
4477
4478The tracking issue for this feature is: [#87575]
4479
4480[#87575]: https://github.com/rust-lang/rust/issues/87575
4481
4482------------------------
4483"##,
4484 default_severity: Severity::Allow,
4485 warn_since: None,
4486 deny_since: None,
4487 },
4488 Lint {
4489 label: "const_format_args",
4490 description: r##"# `const_format_args`
4491
4492This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
4493
4494------------------------
4495"##,
4496 default_severity: Severity::Allow,
4497 warn_since: None,
4498 deny_since: None,
4499 },
4500 Lint {
4501 label: "const_heap",
4502 description: r##"# `const_heap`
4503
4504The tracking issue for this feature is: [#79597]
4505
4506[#79597]: https://github.com/rust-lang/rust/issues/79597
4507
4508------------------------
4509"##,
4510 default_severity: Severity::Allow,
4511 warn_since: None,
4512 deny_since: None,
4513 },
4514 Lint {
4515 label: "const_is_char_boundary",
4516 description: r##"# `const_is_char_boundary`
4517
4518The tracking issue for this feature is: [#131516]
4519
4520[#131516]: https://github.com/rust-lang/rust/issues/131516
4521
4522------------------------
4523"##,
4524 default_severity: Severity::Allow,
4525 warn_since: None,
4526 deny_since: None,
4527 },
4528 Lint {
4529 label: "const_mut_cursor",
4530 description: r##"# `const_mut_cursor`
4531
4532The tracking issue for this feature is: [#130801]
4533
4534[#130801]: https://github.com/rust-lang/rust/issues/130801
4535
4536------------------------
4537"##,
4538 default_severity: Severity::Allow,
4539 warn_since: None,
4540 deny_since: None,
4541 },
4542 Lint {
4543 label: "const_precise_live_drops",
4544 description: r##"# `const_precise_live_drops`
4545
4546The tracking issue for this feature is: [#73255]
4547
4548[#73255]: https://github.com/rust-lang/rust/issues/73255
4549
4550------------------------
4551"##,
4552 default_severity: Severity::Allow,
4553 warn_since: None,
4554 deny_since: None,
4555 },
4556 Lint {
4557 label: "const_ptr_sub_ptr",
4558 description: r##"# `const_ptr_sub_ptr`
4559
4560The tracking issue for this feature is: [#95892]
4561
4562[#95892]: https://github.com/rust-lang/rust/issues/95892
4563
4564------------------------
4565"##,
4566 default_severity: Severity::Allow,
4567 warn_since: None,
4568 deny_since: None,
4569 },
4570 Lint {
4571 label: "const_range_bounds",
4572 description: r##"# `const_range_bounds`
4573
4574The tracking issue for this feature is: [#108082]
4575
4576[#108082]: https://github.com/rust-lang/rust/issues/108082
4577
4578------------------------
4579"##,
4580 default_severity: Severity::Allow,
4581 warn_since: None,
4582 deny_since: None,
4583 },
4584 Lint {
4585 label: "const_raw_ptr_comparison",
4586 description: r##"# `const_raw_ptr_comparison`
4587
4588The tracking issue for this feature is: [#53020]
4589
4590[#53020]: https://github.com/rust-lang/rust/issues/53020
4591
4592------------------------
4593"##,
4594 default_severity: Severity::Allow,
4595 warn_since: None,
4596 deny_since: None,
4597 },
4598 Lint {
4599 label: "const_slice_flatten",
4600 description: r##"# `const_slice_flatten`
4601
4602The tracking issue for this feature is: [#95629]
4603
4604[#95629]: https://github.com/rust-lang/rust/issues/95629
4605
4606------------------------
4607"##,
4608 default_severity: Severity::Allow,
4609 warn_since: None,
4610 deny_since: None,
4611 },
4612 Lint {
4613 label: "const_slice_from_mut_ptr_range",
4614 description: r##"# `const_slice_from_mut_ptr_range`
4615
4616The tracking issue for this feature is: [#89792]
4617
4618[#89792]: https://github.com/rust-lang/rust/issues/89792
4619
4620------------------------
4621"##,
4622 default_severity: Severity::Allow,
4623 warn_since: None,
4624 deny_since: None,
4625 },
4626 Lint {
4627 label: "const_slice_from_ptr_range",
4628 description: r##"# `const_slice_from_ptr_range`
4629
4630The tracking issue for this feature is: [#89792]
4631
4632[#89792]: https://github.com/rust-lang/rust/issues/89792
4633
4634------------------------
4635"##,
4636 default_severity: Severity::Allow,
4637 warn_since: None,
4638 deny_since: None,
4639 },
4640 Lint {
4641 label: "const_sockaddr_setters",
4642 description: r##"# `const_sockaddr_setters`
4643
4644The tracking issue for this feature is: [#131714]
4645
4646[#131714]: https://github.com/rust-lang/rust/issues/131714
4647
4648------------------------
4649"##,
4650 default_severity: Severity::Allow,
4651 warn_since: None,
4652 deny_since: None,
4653 },
4654 Lint {
4655 label: "const_str_from_utf8",
4656 description: r##"# `const_str_from_utf8`
4657
4658The tracking issue for this feature is: [#91006]
4659
4660[#91006]: https://github.com/rust-lang/rust/issues/91006
4661
4662------------------------
4663"##,
4664 default_severity: Severity::Allow,
4665 warn_since: None,
4666 deny_since: None,
4667 },
4668 Lint {
4669 label: "const_str_split_at",
4670 description: r##"# `const_str_split_at`
4671
4672The tracking issue for this feature is: [#131518]
4673
4674[#131518]: https://github.com/rust-lang/rust/issues/131518
4675
4676------------------------
4677"##,
4678 default_severity: Severity::Allow,
4679 warn_since: None,
4680 deny_since: None,
4681 },
4682 Lint {
4683 label: "const_swap",
4684 description: r##"# `const_swap`
4685
4686The tracking issue for this feature is: [#83163]
4687
4688[#83163]: https://github.com/rust-lang/rust/issues/83163
4689
4690------------------------
4691"##,
4692 default_severity: Severity::Allow,
4693 warn_since: None,
4694 deny_since: None,
4695 },
4696 Lint {
4697 label: "const_swap_nonoverlapping",
4698 description: r##"# `const_swap_nonoverlapping`
4699
4700The tracking issue for this feature is: [#133668]
4701
4702[#133668]: https://github.com/rust-lang/rust/issues/133668
4703
4704------------------------
4705"##,
4706 default_severity: Severity::Allow,
4707 warn_since: None,
4708 deny_since: None,
4709 },
4710 Lint {
4711 label: "const_trait_impl",
4712 description: r##"# `const_trait_impl`
4713
4714The tracking issue for this feature is: [#143874]
4715
4716[#143874]: https://github.com/rust-lang/rust/issues/143874
4717
4718------------------------
4719"##,
4720 default_severity: Severity::Allow,
4721 warn_since: None,
4722 deny_since: None,
4723 },
4724 Lint {
4725 label: "const_try",
4726 description: r##"# `const_try`
4727
4728The tracking issue for this feature is: [#74935]
4729
4730[#74935]: https://github.com/rust-lang/rust/issues/74935
4731
4732------------------------
4733"##,
4734 default_severity: Severity::Allow,
4735 warn_since: None,
4736 deny_since: None,
4737 },
4738 Lint {
4739 label: "const_type_id",
4740 description: r##"# `const_type_id`
4741
4742The tracking issue for this feature is: [#77125]
4743
4744[#77125]: https://github.com/rust-lang/rust/issues/77125
4745
4746------------------------
4747"##,
4748 default_severity: Severity::Allow,
4749 warn_since: None,
4750 deny_since: None,
4751 },
4752 Lint {
4753 label: "const_type_name",
4754 description: r##"# `const_type_name`
4755
4756The tracking issue for this feature is: [#63084]
4757
4758[#63084]: https://github.com/rust-lang/rust/issues/63084
4759
4760------------------------
4761"##,
4762 default_severity: Severity::Allow,
4763 warn_since: None,
4764 deny_since: None,
4765 },
4766 Lint {
4767 label: "const_typed_swap",
4768 description: r##"# `const_typed_swap`
4769
4770This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
4771
4772------------------------
4773"##,
4774 default_severity: Severity::Allow,
4775 warn_since: None,
4776 deny_since: None,
4777 },
4778 Lint {
4779 label: "const_vec_string_slice",
4780 description: r##"# `const_vec_string_slice`
4781
4782The tracking issue for this feature is: [#129041]
4783
4784[#129041]: https://github.com/rust-lang/rust/issues/129041
4785
4786------------------------
4787"##,
4788 default_severity: Severity::Allow,
4789 warn_since: None,
4790 deny_since: None,
4791 },
4792 Lint {
4793 label: "container_error_extra",
4794 description: r##"# `container_error_extra`
4795
4796This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
4797
4798------------------------
4799"##,
4800 default_severity: Severity::Allow,
4801 warn_since: None,
4802 deny_since: None,
4803 },
4804 Lint {
4805 label: "context_ext",
4806 description: r##"# `context_ext`
4807
4808The tracking issue for this feature is: [#123392]
4809
4810[#123392]: https://github.com/rust-lang/rust/issues/123392
4811
4812------------------------
4813"##,
4814 default_severity: Severity::Allow,
4815 warn_since: None,
4816 deny_since: None,
4817 },
4818 Lint {
4819 label: "convert_float_to_int",
4820 description: r##"# `convert_float_to_int`
4821
4822The tracking issue for this feature is: [#67057]
4823
4824[#67057]: https://github.com/rust-lang/rust/issues/67057
4825
4826------------------------
4827"##,
4828 default_severity: Severity::Allow,
4829 warn_since: None,
4830 deny_since: None,
4831 },
4832 Lint {
4833 label: "core_intrinsics",
4834 description: r##"# `core_intrinsics`
4835
4836This feature is internal to the Rust compiler and is not intended for general use.
4837
4838------------------------
4839"##,
4840 default_severity: Severity::Allow,
4841 warn_since: None,
4842 deny_since: None,
4843 },
4844 Lint {
4845 label: "core_io_borrowed_buf",
4846 description: r##"# `core_io_borrowed_buf`
4847
4848The tracking issue for this feature is: [#117693]
4849
4850[#117693]: https://github.com/rust-lang/rust/issues/117693
4851
4852------------------------
4853"##,
4854 default_severity: Severity::Allow,
4855 warn_since: None,
4856 deny_since: None,
4857 },
4858 Lint {
4859 label: "core_private_bignum",
4860 description: r##"# `core_private_bignum`
4861
4862This feature is internal to the Rust compiler and is not intended for general use.
4863
4864------------------------
4865"##,
4866 default_severity: Severity::Allow,
4867 warn_since: None,
4868 deny_since: None,
4869 },
4870 Lint {
4871 label: "core_private_diy_float",
4872 description: r##"# `core_private_diy_float`
4873
4874This feature is internal to the Rust compiler and is not intended for general use.
4875
4876------------------------
4877"##,
4878 default_severity: Severity::Allow,
4879 warn_since: None,
4880 deny_since: None,
4881 },
4882 Lint {
4883 label: "coroutine_clone",
4884 description: r##"# `coroutine_clone`
4885
4886The tracking issue for this feature is: [#95360]
4887
4888[#95360]: https://github.com/rust-lang/rust/issues/95360
4889
4890------------------------
4891"##,
4892 default_severity: Severity::Allow,
4893 warn_since: None,
4894 deny_since: None,
4895 },
4896 Lint {
4897 label: "coroutine_trait",
4898 description: r##"# `coroutine_trait`
4899
4900The tracking issue for this feature is: [#43122]
4901
4902[#43122]: https://github.com/rust-lang/rust/issues/43122
4903
4904------------------------
4905"##,
4906 default_severity: Severity::Allow,
4907 warn_since: None,
4908 deny_since: None,
4909 },
4910 Lint {
4911 label: "coroutines",
4912 description: r##"# `coroutines`
4913
4914The tracking issue for this feature is: [#43122]
4915
4916[#43122]: https://github.com/rust-lang/rust/issues/43122
4917
4918------------------------
4919
4920The `coroutines` feature gate in Rust allows you to define coroutine or
4921coroutine literals. A coroutine is a "resumable function" that syntactically
4922resembles a closure but compiles to much different semantics in the compiler
4923itself. The primary feature of a coroutine is that it can be suspended during
4924execution to be resumed at a later date. Coroutines use the `yield` keyword to
4925"return", and then the caller can `resume` a coroutine to resume execution just
4926after the `yield` keyword.
4927
4928Coroutines are an extra-unstable feature in the compiler right now. Added in
4929[RFC 2033] they're mostly intended right now as a information/constraint
4930gathering phase. The intent is that experimentation can happen on the nightly
4931compiler before actual stabilization. A further RFC will be required to
4932stabilize coroutines and will likely contain at least a few small
4933tweaks to the overall design.
4934
4935[RFC 2033]: https://github.com/rust-lang/rfcs/pull/2033
4936
4937A syntactical example of a coroutine is:
4938
4939```rust
4940#![feature(coroutines, coroutine_trait, stmt_expr_attributes)]
4941
4942use std::ops::{Coroutine, CoroutineState};
4943use std::pin::Pin;
4944
4945fn main() {
4946 let mut coroutine = #[coroutine] || {
4947 yield 1;
4948 return "foo"
4949 };
4950
4951 match Pin::new(&mut coroutine).resume(()) {
4952 CoroutineState::Yielded(1) => {}
4953 _ => panic!("unexpected value from resume"),
4954 }
4955 match Pin::new(&mut coroutine).resume(()) {
4956 CoroutineState::Complete("foo") => {}
4957 _ => panic!("unexpected value from resume"),
4958 }
4959}
4960```
4961
4962Coroutines are closure-like literals which are annotated with `#[coroutine]`
4963and can contain a `yield` statement. The
4964`yield` statement takes an optional expression of a value to yield out of the
4965coroutine. All coroutine literals implement the `Coroutine` trait in the
4966`std::ops` module. The `Coroutine` trait has one main method, `resume`, which
4967resumes execution of the coroutine at the previous suspension point.
4968
4969An example of the control flow of coroutines is that the following example
4970prints all numbers in order:
4971
4972```rust
4973#![feature(coroutines, coroutine_trait, stmt_expr_attributes)]
4974
4975use std::ops::Coroutine;
4976use std::pin::Pin;
4977
4978fn main() {
4979 let mut coroutine = #[coroutine] || {
4980 println!("2");
4981 yield;
4982 println!("4");
4983 };
4984
4985 println!("1");
4986 Pin::new(&mut coroutine).resume(());
4987 println!("3");
4988 Pin::new(&mut coroutine).resume(());
4989 println!("5");
4990}
4991```
4992
4993At this time the main use case of coroutines is an implementation
4994primitive for `async`/`await` and `gen` syntax, but coroutines
4995will likely be extended to other primitives in the future.
4996Feedback on the design and usage is always appreciated!
4997
4998### The `Coroutine` trait
4999
5000The `Coroutine` trait in `std::ops` currently looks like:
5001
5002```rust
5003# #![feature(arbitrary_self_types, coroutine_trait)]
5004# use std::ops::CoroutineState;
5005# use std::pin::Pin;
5006
5007pub trait Coroutine<R = ()> {
5008 type Yield;
5009 type Return;
5010 fn resume(self: Pin<&mut Self>, resume: R) -> CoroutineState<Self::Yield, Self::Return>;
5011}
5012```
5013
5014The `Coroutine::Yield` type is the type of values that can be yielded with the
5015`yield` statement. The `Coroutine::Return` type is the returned type of the
5016coroutine. This is typically the last expression in a coroutine's definition or
5017any value passed to `return` in a coroutine. The `resume` function is the entry
5018point for executing the `Coroutine` itself.
5019
5020The return value of `resume`, `CoroutineState`, looks like:
5021
5022```rust
5023pub enum CoroutineState<Y, R> {
5024 Yielded(Y),
5025 Complete(R),
5026}
5027```
5028
5029The `Yielded` variant indicates that the coroutine can later be resumed. This
5030corresponds to a `yield` point in a coroutine. The `Complete` variant indicates
5031that the coroutine is complete and cannot be resumed again. Calling `resume`
5032after a coroutine has returned `Complete` will likely result in a panic of the
5033program.
5034
5035### Closure-like semantics
5036
5037The closure-like syntax for coroutines alludes to the fact that they also have
5038closure-like semantics. Namely:
5039
5040* When created, a coroutine executes no code. A closure literal does not
5041 actually execute any of the closure's code on construction, and similarly a
5042 coroutine literal does not execute any code inside the coroutine when
5043 constructed.
5044
5045* Coroutines can capture outer variables by reference or by move, and this can
5046 be tweaked with the `move` keyword at the beginning of the closure. Like
5047 closures all coroutines will have an implicit environment which is inferred by
5048 the compiler. Outer variables can be moved into a coroutine for use as the
5049 coroutine progresses.
5050
5051* Coroutine literals produce a value with a unique type which implements the
5052 `std::ops::Coroutine` trait. This allows actual execution of the coroutine
5053 through the `Coroutine::resume` method as well as also naming it in return
5054 types and such.
5055
5056* Traits like `Send` and `Sync` are automatically implemented for a `Coroutine`
5057 depending on the captured variables of the environment. Unlike closures,
5058 coroutines also depend on variables live across suspension points. This means
5059 that although the ambient environment may be `Send` or `Sync`, the coroutine
5060 itself may not be due to internal variables live across `yield` points being
5061 not-`Send` or not-`Sync`. Note that coroutines do
5062 not implement traits like `Copy` or `Clone` automatically.
5063
5064* Whenever a coroutine is dropped it will drop all captured environment
5065 variables.
5066
5067### Coroutines as state machines
5068
5069In the compiler, coroutines are currently compiled as state machines. Each
5070`yield` expression will correspond to a different state that stores all live
5071variables over that suspension point. Resumption of a coroutine will dispatch on
5072the current state and then execute internally until a `yield` is reached, at
5073which point all state is saved off in the coroutine and a value is returned.
5074
5075Let's take a look at an example to see what's going on here:
5076
5077```rust
5078#![feature(coroutines, coroutine_trait, stmt_expr_attributes)]
5079
5080use std::ops::Coroutine;
5081use std::pin::Pin;
5082
5083fn main() {
5084 let ret = "foo";
5085 let mut coroutine = #[coroutine] move || {
5086 yield 1;
5087 return ret
5088 };
5089
5090 Pin::new(&mut coroutine).resume(());
5091 Pin::new(&mut coroutine).resume(());
5092}
5093```
5094
5095This coroutine literal will compile down to something similar to:
5096
5097```rust
5098#![feature(arbitrary_self_types, coroutine_trait)]
5099
5100use std::ops::{Coroutine, CoroutineState};
5101use std::pin::Pin;
5102
5103fn main() {
5104 let ret = "foo";
5105 let mut coroutine = {
5106 enum __Coroutine {
5107 Start(&'static str),
5108 Yield1(&'static str),
5109 Done,
5110 }
5111
5112 impl Coroutine for __Coroutine {
5113 type Yield = i32;
5114 type Return = &'static str;
5115
5116 fn resume(mut self: Pin<&mut Self>, resume: ()) -> CoroutineState<i32, &'static str> {
5117 use std::mem;
5118 match mem::replace(&mut *self, __Coroutine::Done) {
5119 __Coroutine::Start(s) => {
5120 *self = __Coroutine::Yield1(s);
5121 CoroutineState::Yielded(1)
5122 }
5123
5124 __Coroutine::Yield1(s) => {
5125 *self = __Coroutine::Done;
5126 CoroutineState::Complete(s)
5127 }
5128
5129 __Coroutine::Done => {
5130 panic!("coroutine resumed after completion")
5131 }
5132 }
5133 }
5134 }
5135
5136 __Coroutine::Start(ret)
5137 };
5138
5139 Pin::new(&mut coroutine).resume(());
5140 Pin::new(&mut coroutine).resume(());
5141}
5142```
5143
5144Notably here we can see that the compiler is generating a fresh type,
5145`__Coroutine` in this case. This type has a number of states (represented here
5146as an `enum`) corresponding to each of the conceptual states of the coroutine.
5147At the beginning we're closing over our outer variable `foo` and then that
5148variable is also live over the `yield` point, so it's stored in both states.
5149
5150When the coroutine starts it'll immediately yield 1, but it saves off its state
5151just before it does so indicating that it has reached the yield point. Upon
5152resuming again we'll execute the `return ret` which returns the `Complete`
5153state.
5154
5155Here we can also note that the `Done` state, if resumed, panics immediately as
5156it's invalid to resume a completed coroutine. It's also worth noting that this
5157is just a rough desugaring, not a normative specification for what the compiler
5158does.
5159"##,
5160 default_severity: Severity::Allow,
5161 warn_since: None,
5162 deny_since: None,
5163 },
5164 Lint {
5165 label: "coverage_attribute",
5166 description: r##"# `coverage_attribute`
5167
5168The tracking issue for this feature is: [#84605]
5169
5170[#84605]: https://github.com/rust-lang/rust/issues/84605
5171
5172---
5173
5174The `coverage` attribute can be used to selectively disable coverage
5175instrumentation in an annotated function. This might be useful to:
5176
5177- Avoid instrumentation overhead in a performance critical function
5178- Avoid generating coverage for a function that is not meant to be executed,
5179 but still target 100% coverage for the rest of the program.
5180
5181## Example
5182
5183```rust
5184#![feature(coverage_attribute)]
5185
5186// `foo()` will get coverage instrumentation (by default)
5187fn foo() {
5188 // ...
5189}
5190
5191#[coverage(off)]
5192fn bar() {
5193 // ...
5194}
5195```
5196"##,
5197 default_severity: Severity::Allow,
5198 warn_since: None,
5199 deny_since: None,
5200 },
5201 Lint {
5202 label: "cow_is_borrowed",
5203 description: r##"# `cow_is_borrowed`
5204
5205The tracking issue for this feature is: [#65143]
5206
5207[#65143]: https://github.com/rust-lang/rust/issues/65143
5208
5209------------------------
5210"##,
5211 default_severity: Severity::Allow,
5212 warn_since: None,
5213 deny_since: None,
5214 },
5215 Lint {
5216 label: "csky_target_feature",
5217 description: r##"# `csky_target_feature`
5218
5219The tracking issue for this feature is: [#44839]
5220
5221[#44839]: https://github.com/rust-lang/rust/issues/44839
5222
5223------------------------
5224"##,
5225 default_severity: Severity::Allow,
5226 warn_since: None,
5227 deny_since: None,
5228 },
5229 Lint {
5230 label: "cstr_bytes",
5231 description: r##"# `cstr_bytes`
5232
5233The tracking issue for this feature is: [#112115]
5234
5235[#112115]: https://github.com/rust-lang/rust/issues/112115
5236
5237------------------------
5238"##,
5239 default_severity: Severity::Allow,
5240 warn_since: None,
5241 deny_since: None,
5242 },
5243 Lint {
5244 label: "cstr_internals",
5245 description: r##"# `cstr_internals`
5246
5247This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
5248
5249------------------------
5250"##,
5251 default_severity: Severity::Allow,
5252 warn_since: None,
5253 deny_since: None,
5254 },
5255 Lint {
5256 label: "cursor_split",
5257 description: r##"# `cursor_split`
5258
5259The tracking issue for this feature is: [#86369]
5260
5261[#86369]: https://github.com/rust-lang/rust/issues/86369
5262
5263------------------------
5264"##,
5265 default_severity: Severity::Allow,
5266 warn_since: None,
5267 deny_since: None,
5268 },
5269 Lint {
5270 label: "custom_inner_attributes",
5271 description: r##"# `custom_inner_attributes`
5272
5273The tracking issue for this feature is: [#54726]
5274
5275[#54726]: https://github.com/rust-lang/rust/issues/54726
5276
5277------------------------
5278"##,
5279 default_severity: Severity::Allow,
5280 warn_since: None,
5281 deny_since: None,
5282 },
5283 Lint {
5284 label: "custom_mir",
5285 description: r##"# `custom_mir`
5286
5287This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
5288
5289------------------------
5290"##,
5291 default_severity: Severity::Allow,
5292 warn_since: None,
5293 deny_since: None,
5294 },
5295 Lint {
5296 label: "custom_test_frameworks",
5297 description: r##"# `custom_test_frameworks`
5298
5299The tracking issue for this feature is: [#50297]
5300
5301[#50297]: https://github.com/rust-lang/rust/issues/50297
5302
5303------------------------
5304
5305The `custom_test_frameworks` feature allows the use of `#[test_case]` and `#![test_runner]`.
5306Any function, const, or static can be annotated with `#[test_case]` causing it to be aggregated (like `#[test]`)
5307and be passed to the test runner determined by the `#![test_runner]` crate attribute.
5308
5309```rust
5310#![feature(custom_test_frameworks)]
5311#![test_runner(my_runner)]
5312
5313fn my_runner(tests: &[&i32]) {
5314 for t in tests {
5315 if **t == 0 {
5316 println!("PASSED");
5317 } else {
5318 println!("FAILED");
5319 }
5320 }
5321}
5322
5323#[test_case]
5324const WILL_PASS: i32 = 0;
5325
5326#[test_case]
5327const WILL_FAIL: i32 = 4;
5328```
5329"##,
5330 default_severity: Severity::Allow,
5331 warn_since: None,
5332 deny_since: None,
5333 },
5334 Lint {
5335 label: "deadline_api",
5336 description: r##"# `deadline_api`
5337
5338The tracking issue for this feature is: [#46316]
5339
5340[#46316]: https://github.com/rust-lang/rust/issues/46316
5341
5342------------------------
5343"##,
5344 default_severity: Severity::Allow,
5345 warn_since: None,
5346 deny_since: None,
5347 },
5348 Lint {
5349 label: "debug_closure_helpers",
5350 description: r##"# `debug_closure_helpers`
5351
5352The tracking issue for this feature is: [#117729]
5353
5354[#117729]: https://github.com/rust-lang/rust/issues/117729
5355
5356------------------------
5357"##,
5358 default_severity: Severity::Allow,
5359 warn_since: None,
5360 deny_since: None,
5361 },
5362 Lint {
5363 label: "dec2flt",
5364 description: r##"# `dec2flt`
5365
5366This feature is internal to the Rust compiler and is not intended for general use.
5367
5368------------------------
5369"##,
5370 default_severity: Severity::Allow,
5371 warn_since: None,
5372 deny_since: None,
5373 },
5374 Lint {
5375 label: "decl_macro",
5376 description: r##"# `decl_macro`
5377
5378The tracking issue for this feature is: [#39412]
5379
5380[#39412]: https://github.com/rust-lang/rust/issues/39412
5381
5382------------------------
5383"##,
5384 default_severity: Severity::Allow,
5385 warn_since: None,
5386 deny_since: None,
5387 },
5388 Lint {
5389 label: "default_field_values",
5390 description: r##"# `default_field_values`
5391
5392The tracking issue for this feature is: [#132162]
5393
5394[#132162]: https://github.com/rust-lang/rust/issues/132162
5395
5396------------------------
5397"##,
5398 default_severity: Severity::Allow,
5399 warn_since: None,
5400 deny_since: None,
5401 },
5402 Lint {
5403 label: "deprecated_safe",
5404 description: r##"# `deprecated_safe`
5405
5406The tracking issue for this feature is: [#94978]
5407
5408[#94978]: https://github.com/rust-lang/rust/issues/94978
5409
5410------------------------
5411"##,
5412 default_severity: Severity::Allow,
5413 warn_since: None,
5414 deny_since: None,
5415 },
5416 Lint {
5417 label: "deprecated_suggestion",
5418 description: r##"# `deprecated_suggestion`
5419
5420The tracking issue for this feature is: [#94785]
5421
5422[#94785]: https://github.com/rust-lang/rust/issues/94785
5423
5424------------------------
5425"##,
5426 default_severity: Severity::Allow,
5427 warn_since: None,
5428 deny_since: None,
5429 },
5430 Lint {
5431 label: "deref_patterns",
5432 description: r##"# `deref_patterns`
5433
5434The tracking issue for this feature is: [#87121]
5435
5436[#87121]: https://github.com/rust-lang/rust/issues/87121
5437
5438------------------------
5439"##,
5440 default_severity: Severity::Allow,
5441 warn_since: None,
5442 deny_since: None,
5443 },
5444 Lint {
5445 label: "deref_pure_trait",
5446 description: r##"# `deref_pure_trait`
5447
5448The tracking issue for this feature is: [#87121]
5449
5450[#87121]: https://github.com/rust-lang/rust/issues/87121
5451
5452------------------------
5453"##,
5454 default_severity: Severity::Allow,
5455 warn_since: None,
5456 deny_since: None,
5457 },
5458 Lint {
5459 label: "derive_clone_copy",
5460 description: r##"# `derive_clone_copy`
5461
5462This feature is internal to the Rust compiler and is not intended for general use.
5463
5464------------------------
5465"##,
5466 default_severity: Severity::Allow,
5467 warn_since: None,
5468 deny_since: None,
5469 },
5470 Lint {
5471 label: "derive_coerce_pointee",
5472 description: r##"# `derive_coerce_pointee`
5473
5474The tracking issue for this feature is: [#123430]
5475
5476[#123430]: https://github.com/rust-lang/rust/issues/123430
5477
5478------------------------
5479"##,
5480 default_severity: Severity::Allow,
5481 warn_since: None,
5482 deny_since: None,
5483 },
5484 Lint {
5485 label: "derive_const",
5486 description: r##"# `derive_const`
5487
5488This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
5489
5490------------------------
5491"##,
5492 default_severity: Severity::Allow,
5493 warn_since: None,
5494 deny_since: None,
5495 },
5496 Lint {
5497 label: "derive_eq",
5498 description: r##"# `derive_eq`
5499
5500This feature is internal to the Rust compiler and is not intended for general use.
5501
5502------------------------
5503"##,
5504 default_severity: Severity::Allow,
5505 warn_since: None,
5506 deny_since: None,
5507 },
5508 Lint {
5509 label: "dir_entry_ext2",
5510 description: r##"# `dir_entry_ext2`
5511
5512The tracking issue for this feature is: [#85573]
5513
5514[#85573]: https://github.com/rust-lang/rust/issues/85573
5515
5516------------------------
5517"##,
5518 default_severity: Severity::Allow,
5519 warn_since: None,
5520 deny_since: None,
5521 },
5522 Lint {
5523 label: "discriminant_kind",
5524 description: r##"# `discriminant_kind`
5525
5526This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
5527
5528------------------------
5529"##,
5530 default_severity: Severity::Allow,
5531 warn_since: None,
5532 deny_since: None,
5533 },
5534 Lint {
5535 label: "dispatch_from_dyn",
5536 description: r##"# `dispatch_from_dyn`
5537
5538This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
5539
5540------------------------
5541"##,
5542 default_severity: Severity::Allow,
5543 warn_since: None,
5544 deny_since: None,
5545 },
5546 Lint {
5547 label: "do_not_recommend",
5548 description: r##"# `do_not_recommend`
5549
5550The tracking issue for this feature is: [#51992]
5551
5552[#51992]: https://github.com/rust-lang/rust/issues/51992
5553
5554------------------------
5555"##,
5556 default_severity: Severity::Allow,
5557 warn_since: None,
5558 deny_since: None,
5559 },
5560 Lint {
5561 label: "doc_auto_cfg",
5562 description: r##"# `doc_auto_cfg`
5563
5564The tracking issue for this feature is: [#43781]
5565
5566[#43781]: https://github.com/rust-lang/rust/issues/43781
5567
5568------------------------
5569"##,
5570 default_severity: Severity::Allow,
5571 warn_since: None,
5572 deny_since: None,
5573 },
5574 Lint {
5575 label: "doc_cfg",
5576 description: r##"# `doc_cfg`
5577
5578The tracking issue for this feature is: [#43781]
5579
5580------
5581
5582The `doc_cfg` feature allows an API be documented as only available in some specific platforms.
5583This attribute has two effects:
5584
55851. In the annotated item's documentation, there will be a message saying "Available on
5586 (platform) only".
5587
55882. The item's doc-tests will only run on the specific platform.
5589
5590In addition to allowing the use of the `#[doc(cfg)]` attribute, this feature enables the use of a
5591special conditional compilation flag, `#[cfg(doc)]`, set whenever building documentation on your
5592crate.
5593
5594This feature was introduced as part of PR [#43348] to allow the platform-specific parts of the
5595standard library be documented.
5596
5597```rust
5598#![feature(doc_cfg)]
5599
5600#[cfg(any(windows, doc))]
5601#[doc(cfg(windows))]
5602/// The application's icon in the notification area (a.k.a. system tray).
5603///
5604/// # Examples
5605///
5606/// ```no_run
5607/// extern crate my_awesome_ui_library;
5608/// use my_awesome_ui_library::current_app;
5609/// use my_awesome_ui_library::windows::notification;
5610///
5611/// let icon = current_app().get::<notification::Icon>();
5612/// icon.show();
5613/// icon.show_message("Hello");
5614/// ```
5615pub struct Icon {
5616 // ...
5617}
5618```
5619
5620[#43781]: https://github.com/rust-lang/rust/issues/43781
5621[#43348]: https://github.com/rust-lang/rust/issues/43348
5622"##,
5623 default_severity: Severity::Allow,
5624 warn_since: None,
5625 deny_since: None,
5626 },
5627 Lint {
5628 label: "doc_cfg_hide",
5629 description: r##"# `doc_cfg_hide`
5630
5631The tracking issue for this feature is: [#43781]
5632
5633[#43781]: https://github.com/rust-lang/rust/issues/43781
5634
5635------------------------
5636"##,
5637 default_severity: Severity::Allow,
5638 warn_since: None,
5639 deny_since: None,
5640 },
5641 Lint {
5642 label: "doc_masked",
5643 description: r##"# `doc_masked`
5644
5645The tracking issue for this feature is: [#44027]
5646
5647-----
5648
5649The `doc_masked` feature allows a crate to exclude types from a given crate from appearing in lists
5650of trait implementations. The specifics of the feature are as follows:
5651
56521. When rustdoc encounters an `extern crate` statement annotated with a `#[doc(masked)]` attribute,
5653 it marks the crate as being masked.
5654
56552. When listing traits a given type implements, rustdoc ensures that traits from masked crates are
5656 not emitted into the documentation.
5657
56583. When listing types that implement a given trait, rustdoc ensures that types from masked crates
5659 are not emitted into the documentation.
5660
5661This feature was introduced in PR [#44026] to ensure that compiler-internal and
5662implementation-specific types and traits were not included in the standard library's documentation.
5663Such types would introduce broken links into the documentation.
5664
5665[#44026]: https://github.com/rust-lang/rust/pull/44026
5666[#44027]: https://github.com/rust-lang/rust/pull/44027
5667"##,
5668 default_severity: Severity::Allow,
5669 warn_since: None,
5670 deny_since: None,
5671 },
5672 Lint {
5673 label: "doc_notable_trait",
5674 description: r##"# `doc_notable_trait`
5675
5676The tracking issue for this feature is: [#45040]
5677
5678The `doc_notable_trait` feature allows the use of the `#[doc(notable_trait)]`
5679attribute, which will display the trait in a "Notable traits" dialog for
5680functions returning types that implement the trait. For example, this attribute
5681is applied to the `Iterator`, `Future`, `io::Read`, and `io::Write` traits in
5682the standard library.
5683
5684You can do this on your own traits like so:
5685
5686```
5687#![feature(doc_notable_trait)]
5688
5689#[doc(notable_trait)]
5690pub trait MyTrait {}
5691
5692pub struct MyStruct;
5693impl MyTrait for MyStruct {}
5694
5695/// The docs for this function will have a button that displays a dialog about
5696/// `MyStruct` implementing `MyTrait`.
5697pub fn my_fn() -> MyStruct { MyStruct }
5698```
5699
5700This feature was originally implemented in PR [#45039].
5701
5702See also its documentation in [the rustdoc book][rustdoc-book-notable_trait].
5703
5704[#45040]: https://github.com/rust-lang/rust/issues/45040
5705[#45039]: https://github.com/rust-lang/rust/pull/45039
5706[rustdoc-book-notable_trait]: ../../rustdoc/unstable-features.html#adding-your-trait-to-the-notable-traits-dialog
5707"##,
5708 default_severity: Severity::Allow,
5709 warn_since: None,
5710 deny_since: None,
5711 },
5712 Lint {
5713 label: "downcast_unchecked",
5714 description: r##"# `downcast_unchecked`
5715
5716The tracking issue for this feature is: [#90850]
5717
5718[#90850]: https://github.com/rust-lang/rust/issues/90850
5719
5720------------------------
5721"##,
5722 default_severity: Severity::Allow,
5723 warn_since: None,
5724 deny_since: None,
5725 },
5726 Lint {
5727 label: "drain_keep_rest",
5728 description: r##"# `drain_keep_rest`
5729
5730The tracking issue for this feature is: [#101122]
5731
5732[#101122]: https://github.com/rust-lang/rust/issues/101122
5733
5734------------------------
5735"##,
5736 default_severity: Severity::Allow,
5737 warn_since: None,
5738 deny_since: None,
5739 },
5740 Lint {
5741 label: "dropck_eyepatch",
5742 description: r##"# `dropck_eyepatch`
5743
5744The tracking issue for this feature is: [#34761]
5745
5746[#34761]: https://github.com/rust-lang/rust/issues/34761
5747
5748------------------------
5749"##,
5750 default_severity: Severity::Allow,
5751 warn_since: None,
5752 deny_since: None,
5753 },
5754 Lint {
5755 label: "duration_constants",
5756 description: r##"# `duration_constants`
5757
5758The tracking issue for this feature is: [#57391]
5759
5760[#57391]: https://github.com/rust-lang/rust/issues/57391
5761
5762------------------------
5763"##,
5764 default_severity: Severity::Allow,
5765 warn_since: None,
5766 deny_since: None,
5767 },
5768 Lint {
5769 label: "duration_constructors",
5770 description: r##"# `duration_constructors`
5771
5772The tracking issue for this feature is: [#120301]
5773
5774[#120301]: https://github.com/rust-lang/rust/issues/120301
5775
5776------------------------
5777
5778Add the methods `from_days` and `from_weeks` to `Duration`.
5779"##,
5780 default_severity: Severity::Allow,
5781 warn_since: None,
5782 deny_since: None,
5783 },
5784 Lint {
5785 label: "duration_millis_float",
5786 description: r##"# `duration_millis_float`
5787
5788The tracking issue for this feature is: [#122451]
5789
5790[#122451]: https://github.com/rust-lang/rust/issues/122451
5791
5792------------------------
5793"##,
5794 default_severity: Severity::Allow,
5795 warn_since: None,
5796 deny_since: None,
5797 },
5798 Lint {
5799 label: "duration_units",
5800 description: r##"# `duration_units`
5801
5802The tracking issue for this feature is: [#120301]
5803
5804[#120301]: https://github.com/rust-lang/rust/issues/120301
5805
5806------------------------
5807"##,
5808 default_severity: Severity::Allow,
5809 warn_since: None,
5810 deny_since: None,
5811 },
5812 Lint {
5813 label: "dyn_compatible_for_dispatch",
5814 description: r##"# `dyn_compatible_for_dispatch`
5815
5816The tracking issue for this feature is: [#43561]
5817
5818[#43561]: https://github.com/rust-lang/rust/issues/43561
5819
5820------------------------
5821"##,
5822 default_severity: Severity::Allow,
5823 warn_since: None,
5824 deny_since: None,
5825 },
5826 Lint {
5827 label: "dyn_star",
5828 description: r##"# `dyn_star`
5829
5830The tracking issue for this feature is: [#102425]
5831
5832[#102425]: https://github.com/rust-lang/rust/issues/102425
5833
5834------------------------
5835"##,
5836 default_severity: Severity::Allow,
5837 warn_since: None,
5838 deny_since: None,
5839 },
5840 Lint {
5841 label: "edition_panic",
5842 description: r##"# `edition_panic`
5843
5844This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
5845
5846------------------------
5847"##,
5848 default_severity: Severity::Allow,
5849 warn_since: None,
5850 deny_since: None,
5851 },
5852 Lint {
5853 label: "ermsb_target_feature",
5854 description: r##"# `ermsb_target_feature`
5855
5856The tracking issue for this feature is: [#44839]
5857
5858[#44839]: https://github.com/rust-lang/rust/issues/44839
5859
5860------------------------
5861"##,
5862 default_severity: Severity::Allow,
5863 warn_since: None,
5864 deny_since: None,
5865 },
5866 Lint {
5867 label: "error_generic_member_access",
5868 description: r##"# `error_generic_member_access`
5869
5870The tracking issue for this feature is: [#99301]
5871
5872[#99301]: https://github.com/rust-lang/rust/issues/99301
5873
5874------------------------
5875"##,
5876 default_severity: Severity::Allow,
5877 warn_since: None,
5878 deny_since: None,
5879 },
5880 Lint {
5881 label: "error_iter",
5882 description: r##"# `error_iter`
5883
5884The tracking issue for this feature is: [#58520]
5885
5886[#58520]: https://github.com/rust-lang/rust/issues/58520
5887
5888------------------------
5889"##,
5890 default_severity: Severity::Allow,
5891 warn_since: None,
5892 deny_since: None,
5893 },
5894 Lint {
5895 label: "error_reporter",
5896 description: r##"# `error_reporter`
5897
5898The tracking issue for this feature is: [#90172]
5899
5900[#90172]: https://github.com/rust-lang/rust/issues/90172
5901
5902------------------------
5903"##,
5904 default_severity: Severity::Allow,
5905 warn_since: None,
5906 deny_since: None,
5907 },
5908 Lint {
5909 label: "error_type_id",
5910 description: r##"# `error_type_id`
5911
5912The tracking issue for this feature is: [#60784]
5913
5914[#60784]: https://github.com/rust-lang/rust/issues/60784
5915
5916------------------------
5917"##,
5918 default_severity: Severity::Allow,
5919 warn_since: None,
5920 deny_since: None,
5921 },
5922 Lint {
5923 label: "exact_size_is_empty",
5924 description: r##"# `exact_size_is_empty`
5925
5926The tracking issue for this feature is: [#35428]
5927
5928[#35428]: https://github.com/rust-lang/rust/issues/35428
5929
5930------------------------
5931"##,
5932 default_severity: Severity::Allow,
5933 warn_since: None,
5934 deny_since: None,
5935 },
5936 Lint {
5937 label: "exclusive_wrapper",
5938 description: r##"# `exclusive_wrapper`
5939
5940The tracking issue for this feature is: [#98407]
5941
5942[#98407]: https://github.com/rust-lang/rust/issues/98407
5943
5944------------------------
5945"##,
5946 default_severity: Severity::Allow,
5947 warn_since: None,
5948 deny_since: None,
5949 },
5950 Lint {
5951 label: "exhaustive_patterns",
5952 description: r##"# `exhaustive_patterns`
5953
5954The tracking issue for this feature is: [#51085]
5955
5956[#51085]: https://github.com/rust-lang/rust/issues/51085
5957
5958------------------------
5959"##,
5960 default_severity: Severity::Allow,
5961 warn_since: None,
5962 deny_since: None,
5963 },
5964 Lint {
5965 label: "exit_status_error",
5966 description: r##"# `exit_status_error`
5967
5968The tracking issue for this feature is: [#84908]
5969
5970[#84908]: https://github.com/rust-lang/rust/issues/84908
5971
5972------------------------
5973"##,
5974 default_severity: Severity::Allow,
5975 warn_since: None,
5976 deny_since: None,
5977 },
5978 Lint {
5979 label: "exitcode_exit_method",
5980 description: r##"# `exitcode_exit_method`
5981
5982The tracking issue for this feature is: [#97100]
5983
5984[#97100]: https://github.com/rust-lang/rust/issues/97100
5985
5986------------------------
5987"##,
5988 default_severity: Severity::Allow,
5989 warn_since: None,
5990 deny_since: None,
5991 },
5992 Lint {
5993 label: "explicit_tail_calls",
5994 description: r##"# `explicit_tail_calls`
5995
5996The tracking issue for this feature is: [#112788]
5997
5998[#112788]: https://github.com/rust-lang/rust/issues/112788
5999
6000------------------------
6001"##,
6002 default_severity: Severity::Allow,
6003 warn_since: None,
6004 deny_since: None,
6005 },
6006 Lint {
6007 label: "extend_one",
6008 description: r##"# `extend_one`
6009
6010The tracking issue for this feature is: [#72631]
6011
6012[#72631]: https://github.com/rust-lang/rust/issues/72631
6013
6014------------------------
6015"##,
6016 default_severity: Severity::Allow,
6017 warn_since: None,
6018 deny_since: None,
6019 },
6020 Lint {
6021 label: "extend_one_unchecked",
6022 description: r##"# `extend_one_unchecked`
6023
6024This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
6025
6026------------------------
6027"##,
6028 default_severity: Severity::Allow,
6029 warn_since: None,
6030 deny_since: None,
6031 },
6032 Lint {
6033 label: "extern_types",
6034 description: r##"# `extern_types`
6035
6036The tracking issue for this feature is: [#43467]
6037
6038[#43467]: https://github.com/rust-lang/rust/issues/43467
6039
6040------------------------
6041"##,
6042 default_severity: Severity::Allow,
6043 warn_since: None,
6044 deny_since: None,
6045 },
6046 Lint {
6047 label: "extract_if",
6048 description: r##"# `extract_if`
6049
6050The tracking issue for this feature is: [#43244]
6051
6052[#43244]: https://github.com/rust-lang/rust/issues/43244
6053
6054------------------------
6055"##,
6056 default_severity: Severity::Allow,
6057 warn_since: None,
6058 deny_since: None,
6059 },
6060 Lint {
6061 label: "f128",
6062 description: r##"# `f128`
6063
6064The tracking issue for this feature is: [#116909]
6065
6066[#116909]: https://github.com/rust-lang/rust/issues/116909
6067
6068---
6069
6070Enable the `f128` type for IEEE 128-bit floating numbers (quad precision).
6071"##,
6072 default_severity: Severity::Allow,
6073 warn_since: None,
6074 deny_since: None,
6075 },
6076 Lint {
6077 label: "f16",
6078 description: r##"# `f16`
6079
6080The tracking issue for this feature is: [#116909]
6081
6082[#116909]: https://github.com/rust-lang/rust/issues/116909
6083
6084---
6085
6086Enable the `f16` type for IEEE 16-bit floating numbers (half precision).
6087"##,
6088 default_severity: Severity::Allow,
6089 warn_since: None,
6090 deny_since: None,
6091 },
6092 Lint {
6093 label: "fd",
6094 description: r##"# `fd`
6095
6096This feature is internal to the Rust compiler and is not intended for general use.
6097
6098------------------------
6099"##,
6100 default_severity: Severity::Allow,
6101 warn_since: None,
6102 deny_since: None,
6103 },
6104 Lint {
6105 label: "fd_read",
6106 description: r##"# `fd_read`
6107
6108This feature is internal to the Rust compiler and is not intended for general use.
6109
6110------------------------
6111"##,
6112 default_severity: Severity::Allow,
6113 warn_since: None,
6114 deny_since: None,
6115 },
6116 Lint {
6117 label: "ffi_const",
6118 description: r##"# `ffi_const`
6119
6120The tracking issue for this feature is: [#58328]
6121
6122------
6123
6124The `#[ffi_const]` attribute applies clang's `const` attribute to foreign
6125functions declarations.
6126
6127That is, `#[ffi_const]` functions shall have no effects except for its return
6128value, which can only depend on the values of the function parameters, and is
6129not affected by changes to the observable state of the program.
6130
6131Applying the `#[ffi_const]` attribute to a function that violates these
6132requirements is undefined behaviour.
6133
6134This attribute enables Rust to perform common optimizations, like sub-expression
6135elimination, and it can avoid emitting some calls in repeated invocations of the
6136function with the same argument values regardless of other operations being
6137performed in between these functions calls (as opposed to `#[ffi_pure]`
6138functions).
6139
6140## Pitfalls
6141
6142A `#[ffi_const]` function can only read global memory that would not affect
6143its return value for the whole execution of the program (e.g. immutable global
6144memory). `#[ffi_const]` functions are referentially-transparent and therefore
6145more strict than `#[ffi_pure]` functions.
6146
6147A common pitfall involves applying the `#[ffi_const]` attribute to a
6148function that reads memory through pointer arguments which do not necessarily
6149point to immutable global memory.
6150
6151A `#[ffi_const]` function that returns unit has no effect on the abstract
6152machine's state, and a `#[ffi_const]` function cannot be `#[ffi_pure]`.
6153
6154A `#[ffi_const]` function must not diverge, neither via a side effect (e.g. a
6155call to `abort`) nor by infinite loops.
6156
6157When translating C headers to Rust FFI, it is worth verifying for which targets
6158the `const` attribute is enabled in those headers, and using the appropriate
6159`cfg` macros in the Rust side to match those definitions. While the semantics of
6160`const` are implemented identically by many C and C++ compilers, e.g., clang,
6161[GCC], [ARM C/C++ compiler], [IBM ILE C/C++], etc. they are not necessarily
6162implemented in this way on all of them. It is therefore also worth verifying
6163that the semantics of the C toolchain used to compile the binary being linked
6164against are compatible with those of the `#[ffi_const]`.
6165
6166[#58328]: https://github.com/rust-lang/rust/issues/58328
6167[ARM C/C++ compiler]: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491c/Cacgigch.html
6168[GCC]: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-const-function-attribute
6169[IBM ILE C/C++]: https://www.ibm.com/support/knowledgecenter/fr/ssw_ibm_i_71/rzarg/fn_attrib_const.htm
6170"##,
6171 default_severity: Severity::Allow,
6172 warn_since: None,
6173 deny_since: None,
6174 },
6175 Lint {
6176 label: "ffi_pure",
6177 description: r##"# `ffi_pure`
6178
6179The tracking issue for this feature is: [#58329]
6180
6181------
6182
6183The `#[ffi_pure]` attribute applies clang's `pure` attribute to foreign
6184functions declarations.
6185
6186That is, `#[ffi_pure]` functions shall have no effects except for its return
6187value, which shall not change across two consecutive function calls with
6188the same parameters.
6189
6190Applying the `#[ffi_pure]` attribute to a function that violates these
6191requirements is undefined behavior.
6192
6193This attribute enables Rust to perform common optimizations, like sub-expression
6194elimination and loop optimizations. Some common examples of pure functions are
6195`strlen` or `memcmp`.
6196
6197These optimizations are only applicable when the compiler can prove that no
6198program state observable by the `#[ffi_pure]` function has changed between calls
6199of the function, which could alter the result. See also the `#[ffi_const]`
6200attribute, which provides stronger guarantees regarding the allowable behavior
6201of a function, enabling further optimization.
6202
6203## Pitfalls
6204
6205A `#[ffi_pure]` function can read global memory through the function
6206parameters (e.g. pointers), globals, etc. `#[ffi_pure]` functions are not
6207referentially-transparent, and are therefore more relaxed than `#[ffi_const]`
6208functions.
6209
6210However, accessing global memory through volatile or atomic reads can violate the
6211requirement that two consecutive function calls shall return the same value.
6212
6213A `pure` function that returns unit has no effect on the abstract machine's
6214state.
6215
6216A `#[ffi_pure]` function must not diverge, neither via a side effect (e.g. a
6217call to `abort`) nor by infinite loops.
6218
6219When translating C headers to Rust FFI, it is worth verifying for which targets
6220the `pure` attribute is enabled in those headers, and using the appropriate
6221`cfg` macros in the Rust side to match those definitions. While the semantics of
6222`pure` are implemented identically by many C and C++ compilers, e.g., clang,
6223[GCC], [ARM C/C++ compiler], [IBM ILE C/C++], etc. they are not necessarily
6224implemented in this way on all of them. It is therefore also worth verifying
6225that the semantics of the C toolchain used to compile the binary being linked
6226against are compatible with those of the `#[ffi_pure]`.
6227
6228
6229[#58329]: https://github.com/rust-lang/rust/issues/58329
6230[ARM C/C++ compiler]: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491c/Cacigdac.html
6231[GCC]: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-pure-function-attribute
6232[IBM ILE C/C++]: https://www.ibm.com/support/knowledgecenter/fr/ssw_ibm_i_71/rzarg/fn_attrib_pure.htm
6233"##,
6234 default_severity: Severity::Allow,
6235 warn_since: None,
6236 deny_since: None,
6237 },
6238 Lint {
6239 label: "file_buffered",
6240 description: r##"# `file_buffered`
6241
6242The tracking issue for this feature is: [#130804]
6243
6244[#130804]: https://github.com/rust-lang/rust/issues/130804
6245
6246------------------------
6247"##,
6248 default_severity: Severity::Allow,
6249 warn_since: None,
6250 deny_since: None,
6251 },
6252 Lint {
6253 label: "file_lock",
6254 description: r##"# `file_lock`
6255
6256The tracking issue for this feature is: [#130994]
6257
6258[#130994]: https://github.com/rust-lang/rust/issues/130994
6259
6260------------------------
6261"##,
6262 default_severity: Severity::Allow,
6263 warn_since: None,
6264 deny_since: None,
6265 },
6266 Lint {
6267 label: "float_gamma",
6268 description: r##"# `float_gamma`
6269
6270The tracking issue for this feature is: [#99842]
6271
6272[#99842]: https://github.com/rust-lang/rust/issues/99842
6273
6274------------------------
6275"##,
6276 default_severity: Severity::Allow,
6277 warn_since: None,
6278 deny_since: None,
6279 },
6280 Lint {
6281 label: "float_minimum_maximum",
6282 description: r##"# `float_minimum_maximum`
6283
6284The tracking issue for this feature is: [#91079]
6285
6286[#91079]: https://github.com/rust-lang/rust/issues/91079
6287
6288------------------------
6289"##,
6290 default_severity: Severity::Allow,
6291 warn_since: None,
6292 deny_since: None,
6293 },
6294 Lint {
6295 label: "float_next_up_down",
6296 description: r##"# `float_next_up_down`
6297
6298The tracking issue for this feature is: [#91399]
6299
6300[#91399]: https://github.com/rust-lang/rust/issues/91399
6301
6302------------------------
6303"##,
6304 default_severity: Severity::Allow,
6305 warn_since: None,
6306 deny_since: None,
6307 },
6308 Lint {
6309 label: "flt2dec",
6310 description: r##"# `flt2dec`
6311
6312This feature is internal to the Rust compiler and is not intended for general use.
6313
6314------------------------
6315"##,
6316 default_severity: Severity::Allow,
6317 warn_since: None,
6318 deny_since: None,
6319 },
6320 Lint {
6321 label: "fmt_debug",
6322 description: r##"# `fmt_debug`
6323
6324The tracking issue for this feature is: [#129709]
6325
6326[#129709]: https://github.com/rust-lang/rust/issues/129709
6327
6328------------------------
6329"##,
6330 default_severity: Severity::Allow,
6331 warn_since: None,
6332 deny_since: None,
6333 },
6334 Lint {
6335 label: "fmt_helpers_for_derive",
6336 description: r##"# `fmt_helpers_for_derive`
6337
6338This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
6339
6340------------------------
6341"##,
6342 default_severity: Severity::Allow,
6343 warn_since: None,
6344 deny_since: None,
6345 },
6346 Lint {
6347 label: "fmt_internals",
6348 description: r##"# `fmt_internals`
6349
6350This feature is internal to the Rust compiler and is not intended for general use.
6351
6352------------------------
6353"##,
6354 default_severity: Severity::Allow,
6355 warn_since: None,
6356 deny_since: None,
6357 },
6358 Lint {
6359 label: "fn_align",
6360 description: r##"# `fn_align`
6361
6362The tracking issue for this feature is: [#82232]
6363
6364[#82232]: https://github.com/rust-lang/rust/issues/82232
6365
6366------------------------
6367"##,
6368 default_severity: Severity::Allow,
6369 warn_since: None,
6370 deny_since: None,
6371 },
6372 Lint {
6373 label: "fn_delegation",
6374 description: r##"# `fn_delegation`
6375
6376The tracking issue for this feature is: [#118212]
6377
6378[#118212]: https://github.com/rust-lang/rust/issues/118212
6379
6380------------------------
6381"##,
6382 default_severity: Severity::Allow,
6383 warn_since: None,
6384 deny_since: None,
6385 },
6386 Lint {
6387 label: "fn_ptr_trait",
6388 description: r##"# `fn_ptr_trait`
6389
6390This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
6391
6392------------------------
6393"##,
6394 default_severity: Severity::Allow,
6395 warn_since: None,
6396 deny_since: None,
6397 },
6398 Lint {
6399 label: "fn_traits",
6400 description: r##"# `fn_traits`
6401
6402The tracking issue for this feature is [#29625]
6403
6404See Also: [`unboxed_closures`](../language-features/unboxed-closures.md)
6405
6406[#29625]: https://github.com/rust-lang/rust/issues/29625
6407
6408----
6409
6410The `fn_traits` feature allows for implementation of the [`Fn*`] traits
6411for creating custom closure-like types.
6412
6413[`Fn*`]: ../../std/ops/trait.Fn.html
6414
6415```rust
6416#![feature(unboxed_closures)]
6417#![feature(fn_traits)]
6418
6419struct Adder {
6420 a: u32
6421}
6422
6423impl FnOnce<(u32, )> for Adder {
6424 type Output = u32;
6425 extern "rust-call" fn call_once(self, b: (u32, )) -> Self::Output {
6426 self.a + b.0
6427 }
6428}
6429
6430fn main() {
6431 let adder = Adder { a: 3 };
6432 assert_eq!(adder(2), 5);
6433}
6434```
6435"##,
6436 default_severity: Severity::Allow,
6437 warn_since: None,
6438 deny_since: None,
6439 },
6440 Lint {
6441 label: "forget_unsized",
6442 description: r##"# `forget_unsized`
6443
6444This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
6445
6446------------------------
6447"##,
6448 default_severity: Severity::Allow,
6449 warn_since: None,
6450 deny_since: None,
6451 },
6452 Lint {
6453 label: "format_args_nl",
6454 description: r##"# `format_args_nl`
6455
6456This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
6457
6458------------------------
6459"##,
6460 default_severity: Severity::Allow,
6461 warn_since: None,
6462 deny_since: None,
6463 },
6464 Lint {
6465 label: "formatting_options",
6466 description: r##"# `formatting_options`
6467
6468The tracking issue for this feature is: [#118117]
6469
6470[#118117]: https://github.com/rust-lang/rust/issues/118117
6471
6472------------------------
6473"##,
6474 default_severity: Severity::Allow,
6475 warn_since: None,
6476 deny_since: None,
6477 },
6478 Lint {
6479 label: "freeze",
6480 description: r##"# `freeze`
6481
6482The tracking issue for this feature is: [#121675]
6483
6484[#121675]: https://github.com/rust-lang/rust/issues/121675
6485
6486------------------------
6487"##,
6488 default_severity: Severity::Allow,
6489 warn_since: None,
6490 deny_since: None,
6491 },
6492 Lint {
6493 label: "freeze_impls",
6494 description: r##"# `freeze_impls`
6495
6496The tracking issue for this feature is: [#121675]
6497
6498[#121675]: https://github.com/rust-lang/rust/issues/121675
6499
6500------------------------
6501"##,
6502 default_severity: Severity::Allow,
6503 warn_since: None,
6504 deny_since: None,
6505 },
6506 Lint {
6507 label: "fundamental",
6508 description: r##"# `fundamental`
6509
6510The tracking issue for this feature is: [#29635]
6511
6512[#29635]: https://github.com/rust-lang/rust/issues/29635
6513
6514------------------------
6515"##,
6516 default_severity: Severity::Allow,
6517 warn_since: None,
6518 deny_since: None,
6519 },
6520 Lint {
6521 label: "future_join",
6522 description: r##"# `future_join`
6523
6524The tracking issue for this feature is: [#91642]
6525
6526[#91642]: https://github.com/rust-lang/rust/issues/91642
6527
6528------------------------
6529"##,
6530 default_severity: Severity::Allow,
6531 warn_since: None,
6532 deny_since: None,
6533 },
6534 Lint {
6535 label: "gen_blocks",
6536 description: r##"# `gen_blocks`
6537
6538The tracking issue for this feature is: [#117078]
6539
6540[#117078]: https://github.com/rust-lang/rust/issues/117078
6541
6542------------------------
6543"##,
6544 default_severity: Severity::Allow,
6545 warn_since: None,
6546 deny_since: None,
6547 },
6548 Lint {
6549 label: "gen_future",
6550 description: r##"# `gen_future`
6551
6552The tracking issue for this feature is: [#50547]
6553
6554[#50547]: https://github.com/rust-lang/rust/issues/50547
6555
6556------------------------
6557"##,
6558 default_severity: Severity::Allow,
6559 warn_since: None,
6560 deny_since: None,
6561 },
6562 Lint {
6563 label: "generic_arg_infer",
6564 description: r##"# `generic_arg_infer`
6565
6566The tracking issue for this feature is: [#85077]
6567
6568[#85077]: https://github.com/rust-lang/rust/issues/85077
6569
6570------------------------
6571"##,
6572 default_severity: Severity::Allow,
6573 warn_since: None,
6574 deny_since: None,
6575 },
6576 Lint {
6577 label: "generic_assert",
6578 description: r##"# `generic_assert`
6579
6580This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
6581
6582------------------------
6583"##,
6584 default_severity: Severity::Allow,
6585 warn_since: None,
6586 deny_since: None,
6587 },
6588 Lint {
6589 label: "generic_assert_internals",
6590 description: r##"# `generic_assert_internals`
6591
6592The tracking issue for this feature is: [#44838]
6593
6594[#44838]: https://github.com/rust-lang/rust/issues/44838
6595
6596------------------------
6597"##,
6598 default_severity: Severity::Allow,
6599 warn_since: None,
6600 deny_since: None,
6601 },
6602 Lint {
6603 label: "generic_const_exprs",
6604 description: r##"# `generic_const_exprs`
6605
6606The tracking issue for this feature is: [#76560]
6607
6608[#76560]: https://github.com/rust-lang/rust/issues/76560
6609
6610------------------------
6611"##,
6612 default_severity: Severity::Allow,
6613 warn_since: None,
6614 deny_since: None,
6615 },
6616 Lint {
6617 label: "generic_const_items",
6618 description: r##"# `generic_const_items`
6619
6620The tracking issue for this feature is: [#113521]
6621
6622[#113521]: https://github.com/rust-lang/rust/issues/113521
6623
6624------------------------
6625"##,
6626 default_severity: Severity::Allow,
6627 warn_since: None,
6628 deny_since: None,
6629 },
6630 Lint {
6631 label: "get_many_mut",
6632 description: r##"# `get_many_mut`
6633
6634The tracking issue for this feature is: [#104642]
6635
6636[#104642]: https://github.com/rust-lang/rust/issues/104642
6637
6638------------------------
6639"##,
6640 default_severity: Severity::Allow,
6641 warn_since: None,
6642 deny_since: None,
6643 },
6644 Lint {
6645 label: "get_many_mut_helpers",
6646 description: r##"# `get_many_mut_helpers`
6647
6648This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
6649
6650------------------------
6651"##,
6652 default_severity: Severity::Allow,
6653 warn_since: None,
6654 deny_since: None,
6655 },
6656 Lint {
6657 label: "get_mut_unchecked",
6658 description: r##"# `get_mut_unchecked`
6659
6660The tracking issue for this feature is: [#63292]
6661
6662[#63292]: https://github.com/rust-lang/rust/issues/63292
6663
6664------------------------
6665"##,
6666 default_severity: Severity::Allow,
6667 warn_since: None,
6668 deny_since: None,
6669 },
6670 Lint {
6671 label: "global_registration",
6672 description: r##"# `global_registration`
6673
6674The tracking issue for this feature is: [#125119]
6675
6676[#125119]: https://github.com/rust-lang/rust/issues/125119
6677
6678------------------------
6679"##,
6680 default_severity: Severity::Allow,
6681 warn_since: None,
6682 deny_since: None,
6683 },
6684 Lint {
6685 label: "guard_patterns",
6686 description: r##"# `guard_patterns`
6687
6688The tracking issue for this feature is: [#129967]
6689
6690[#129967]: https://github.com/rust-lang/rust/issues/129967
6691
6692------------------------
6693"##,
6694 default_severity: Severity::Allow,
6695 warn_since: None,
6696 deny_since: None,
6697 },
6698 Lint {
6699 label: "half_open_range_patterns_in_slices",
6700 description: r##"# `half_open_range_patterns_in_slices`
6701
6702The tracking issue for this feature is: [#67264]
6703It is a future part of the `exclusive_range_pattern` feature,
6704tracked at [#37854].
6705
6706[#67264]: https://github.com/rust-lang/rust/issues/67264
6707[#37854]: https://github.com/rust-lang/rust/issues/37854
6708-----
6709
6710This feature allow using top-level half-open range patterns in slices.
6711
6712```rust
6713#![feature(half_open_range_patterns_in_slices)]
6714
6715fn main() {
6716 let xs = [13, 1, 5, 2, 3, 1, 21, 8];
6717 let [a @ 3.., b @ ..3, c @ 4..6, ..] = xs else { return; };
6718}
6719```
6720
6721Note that this feature is not required if the patterns are wrapped between parenthesis.
6722
6723```rust
6724fn main() {
6725 let xs = [13, 1];
6726 let [(a @ 3..), c] = xs else { return; };
6727}
6728```
6729"##,
6730 default_severity: Severity::Allow,
6731 warn_since: None,
6732 deny_since: None,
6733 },
6734 Lint {
6735 label: "hash_extract_if",
6736 description: r##"# `hash_extract_if`
6737
6738The tracking issue for this feature is: [#59618]
6739
6740[#59618]: https://github.com/rust-lang/rust/issues/59618
6741
6742------------------------
6743"##,
6744 default_severity: Severity::Allow,
6745 warn_since: None,
6746 deny_since: None,
6747 },
6748 Lint {
6749 label: "hash_raw_entry",
6750 description: r##"# `hash_raw_entry`
6751
6752The tracking issue for this feature is: [#56167]
6753
6754[#56167]: https://github.com/rust-lang/rust/issues/56167
6755
6756------------------------
6757"##,
6758 default_severity: Severity::Allow,
6759 warn_since: None,
6760 deny_since: None,
6761 },
6762 Lint {
6763 label: "hash_set_entry",
6764 description: r##"# `hash_set_entry`
6765
6766The tracking issue for this feature is: [#60896]
6767
6768[#60896]: https://github.com/rust-lang/rust/issues/60896
6769
6770------------------------
6771"##,
6772 default_severity: Severity::Allow,
6773 warn_since: None,
6774 deny_since: None,
6775 },
6776 Lint {
6777 label: "hasher_prefixfree_extras",
6778 description: r##"# `hasher_prefixfree_extras`
6779
6780The tracking issue for this feature is: [#96762]
6781
6782[#96762]: https://github.com/rust-lang/rust/issues/96762
6783
6784------------------------
6785"##,
6786 default_severity: Severity::Allow,
6787 warn_since: None,
6788 deny_since: None,
6789 },
6790 Lint {
6791 label: "hashmap_internals",
6792 description: r##"# `hashmap_internals`
6793
6794This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
6795
6796------------------------
6797"##,
6798 default_severity: Severity::Allow,
6799 warn_since: None,
6800 deny_since: None,
6801 },
6802 Lint {
6803 label: "hexagon_target_feature",
6804 description: r##"# `hexagon_target_feature`
6805
6806The tracking issue for this feature is: [#44839]
6807
6808[#44839]: https://github.com/rust-lang/rust/issues/44839
6809
6810------------------------
6811"##,
6812 default_severity: Severity::Allow,
6813 warn_since: None,
6814 deny_since: None,
6815 },
6816 Lint {
6817 label: "hint_must_use",
6818 description: r##"# `hint_must_use`
6819
6820The tracking issue for this feature is: [#94745]
6821
6822[#94745]: https://github.com/rust-lang/rust/issues/94745
6823
6824------------------------
6825"##,
6826 default_severity: Severity::Allow,
6827 warn_since: None,
6828 deny_since: None,
6829 },
6830 Lint {
6831 label: "if_let_guard",
6832 description: r##"# `if_let_guard`
6833
6834The tracking issue for this feature is: [#51114]
6835
6836[#51114]: https://github.com/rust-lang/rust/issues/51114
6837
6838------------------------
6839"##,
6840 default_severity: Severity::Allow,
6841 warn_since: None,
6842 deny_since: None,
6843 },
6844 Lint {
6845 label: "impl_trait_in_assoc_type",
6846 description: r##"# `impl_trait_in_assoc_type`
6847
6848The tracking issue for this feature is: [#63063]
6849
6850[#63063]: https://github.com/rust-lang/rust/issues/63063
6851
6852------------------------
6853"##,
6854 default_severity: Severity::Allow,
6855 warn_since: None,
6856 deny_since: None,
6857 },
6858 Lint {
6859 label: "impl_trait_in_fn_trait_return",
6860 description: r##"# `impl_trait_in_fn_trait_return`
6861
6862The tracking issue for this feature is: [#99697]
6863
6864[#99697]: https://github.com/rust-lang/rust/issues/99697
6865
6866------------------------
6867"##,
6868 default_severity: Severity::Allow,
6869 warn_since: None,
6870 deny_since: None,
6871 },
6872 Lint {
6873 label: "inherent_associated_types",
6874 description: r##"# `inherent_associated_types`
6875
6876The tracking issue for this feature is: [#8995]
6877
6878[#8995]: https://github.com/rust-lang/rust/issues/8995
6879
6880------------------------
6881"##,
6882 default_severity: Severity::Allow,
6883 warn_since: None,
6884 deny_since: None,
6885 },
6886 Lint {
6887 label: "inline_const_pat",
6888 description: r##"# `inline_const_pat`
6889
6890The tracking issue for this feature is: [#76001]
6891
6892------
6893
6894This feature allows you to use inline constant expressions in pattern position:
6895
6896```rust
6897#![feature(inline_const_pat)]
6898
6899const fn one() -> i32 { 1 }
6900
6901let some_int = 3;
6902match some_int {
6903 const { 1 + 2 } => println!("Matched 1 + 2"),
6904 const { one() } => println!("Matched const fn returning 1"),
6905 _ => println!("Didn't match anything :("),
6906}
6907```
6908
6909[#76001]: https://github.com/rust-lang/rust/issues/76001
6910"##,
6911 default_severity: Severity::Allow,
6912 warn_since: None,
6913 deny_since: None,
6914 },
6915 Lint {
6916 label: "inplace_iteration",
6917 description: r##"# `inplace_iteration`
6918
6919This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
6920
6921------------------------
6922"##,
6923 default_severity: Severity::Allow,
6924 warn_since: None,
6925 deny_since: None,
6926 },
6927 Lint {
6928 label: "int_roundings",
6929 description: r##"# `int_roundings`
6930
6931The tracking issue for this feature is: [#88581]
6932
6933[#88581]: https://github.com/rust-lang/rust/issues/88581
6934
6935------------------------
6936"##,
6937 default_severity: Severity::Allow,
6938 warn_since: None,
6939 deny_since: None,
6940 },
6941 Lint {
6942 label: "integer_atomics",
6943 description: r##"# `integer_atomics`
6944
6945The tracking issue for this feature is: [#99069]
6946
6947[#99069]: https://github.com/rust-lang/rust/issues/99069
6948
6949------------------------
6950"##,
6951 default_severity: Severity::Allow,
6952 warn_since: None,
6953 deny_since: None,
6954 },
6955 Lint {
6956 label: "integer_sign_cast",
6957 description: r##"# `integer_sign_cast`
6958
6959The tracking issue for this feature is: [#125882]
6960
6961[#125882]: https://github.com/rust-lang/rust/issues/125882
6962
6963------------------------
6964"##,
6965 default_severity: Severity::Allow,
6966 warn_since: None,
6967 deny_since: None,
6968 },
6969 Lint {
6970 label: "internal_impls_macro",
6971 description: r##"# `internal_impls_macro`
6972
6973This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
6974
6975------------------------
6976"##,
6977 default_severity: Severity::Allow,
6978 warn_since: None,
6979 deny_since: None,
6980 },
6981 Lint {
6982 label: "internal_output_capture",
6983 description: r##"# `internal_output_capture`
6984
6985This feature is internal to the Rust compiler and is not intended for general use.
6986
6987------------------------
6988"##,
6989 default_severity: Severity::Allow,
6990 warn_since: None,
6991 deny_since: None,
6992 },
6993 Lint {
6994 label: "intra_doc_pointers",
6995 description: r##"# `intra-doc-pointers`
6996
6997The tracking issue for this feature is: [#80896]
6998
6999[#80896]: https://github.com/rust-lang/rust/issues/80896
7000
7001------------------------
7002
7003Rustdoc does not currently allow disambiguating between `*const` and `*mut`, and
7004raw pointers in intra-doc links are unstable until it does.
7005
7006```rust
7007#![feature(intra_doc_pointers)]
7008//! [pointer::add]
7009```
7010"##,
7011 default_severity: Severity::Allow,
7012 warn_since: None,
7013 deny_since: None,
7014 },
7015 Lint {
7016 label: "intrinsics",
7017 description: r##"# `intrinsics`
7018
7019The tracking issue for this feature is: None.
7020
7021Intrinsics are rarely intended to be stable directly, but are usually
7022exported in some sort of stable manner. Prefer using the stable interfaces to
7023the intrinsic directly when you can.
7024
7025------------------------
7026
7027
7028## Intrinsics with fallback logic
7029
7030Many intrinsics can be written in pure rust, albeit inefficiently or without supporting
7031some features that only exist on some backends. Backends can simply not implement those
7032intrinsics without causing any code miscompilations or failures to compile.
7033All intrinsic fallback bodies are automatically made cross-crate inlineable (like `#[inline]`)
7034by the codegen backend, but not the MIR inliner.
7035
7036```rust
7037#![feature(intrinsics)]
7038#![allow(internal_features)]
7039
7040#[rustc_intrinsic]
7041const unsafe fn const_deallocate(_ptr: *mut u8, _size: usize, _align: usize) {}
7042```
7043
7044Since these are just regular functions, it is perfectly ok to create the intrinsic twice:
7045
7046```rust
7047#![feature(intrinsics)]
7048#![allow(internal_features)]
7049
7050#[rustc_intrinsic]
7051const unsafe fn const_deallocate(_ptr: *mut u8, _size: usize, _align: usize) {}
7052
7053mod foo {
7054 #[rustc_intrinsic]
7055 const unsafe fn const_deallocate(_ptr: *mut u8, _size: usize, _align: usize) {
7056 panic!("noisy const dealloc")
7057 }
7058}
7059
7060```
7061
7062The behaviour on backends that override the intrinsic is exactly the same. On other
7063backends, the intrinsic behaviour depends on which implementation is called, just like
7064with any regular function.
7065
7066## Intrinsics lowered to MIR instructions
7067
7068Various intrinsics have native MIR operations that they correspond to. Instead of requiring
7069backends to implement both the intrinsic and the MIR operation, the `lower_intrinsics` pass
7070will convert the calls to the MIR operation. Backends do not need to know about these intrinsics
7071at all. These intrinsics only make sense without a body, and can either be declared as a "rust-intrinsic"
7072or as a `#[rustc_intrinsic]`. The body is never used, as calls to the intrinsic do not exist
7073anymore after MIR analyses.
7074
7075## Intrinsics without fallback logic
7076
7077These must be implemented by all backends.
7078
7079### `#[rustc_intrinsic]` declarations
7080
7081These are written like intrinsics with fallback bodies, but the body is irrelevant.
7082Use `loop {}` for the body or call the intrinsic recursively and add
7083`#[rustc_intrinsic_must_be_overridden]` to the function to ensure that backends don't
7084invoke the body.
7085
7086### Legacy extern ABI based intrinsics
7087
7088These are imported as if they were FFI functions, with the special
7089`rust-intrinsic` ABI. For example, if one was in a freestanding
7090context, but wished to be able to `transmute` between types, and
7091perform efficient pointer arithmetic, one would import those functions
7092via a declaration like
7093
7094```rust
7095#![feature(intrinsics)]
7096#![allow(internal_features)]
7097# fn main() {}
7098
7099extern "rust-intrinsic" {
7100 fn transmute<T, U>(x: T) -> U;
7101
7102 fn arith_offset<T>(dst: *const T, offset: isize) -> *const T;
7103}
7104```
7105
7106As with any other FFI functions, these are by default always `unsafe` to call.
7107You can add `#[rustc_safe_intrinsic]` to the intrinsic to make it safe to call.
7108"##,
7109 default_severity: Severity::Allow,
7110 warn_since: None,
7111 deny_since: None,
7112 },
7113 Lint {
7114 label: "io_const_error",
7115 description: r##"# `io_const_error`
7116
7117The tracking issue for this feature is: [#133448]
7118
7119[#133448]: https://github.com/rust-lang/rust/issues/133448
7120
7121------------------------
7122"##,
7123 default_severity: Severity::Allow,
7124 warn_since: None,
7125 deny_since: None,
7126 },
7127 Lint {
7128 label: "io_const_error_internals",
7129 description: r##"# `io_const_error_internals`
7130
7131This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
7132
7133------------------------
7134"##,
7135 default_severity: Severity::Allow,
7136 warn_since: None,
7137 deny_since: None,
7138 },
7139 Lint {
7140 label: "io_error_inprogress",
7141 description: r##"# `io_error_inprogress`
7142
7143The tracking issue for this feature is: [#130840]
7144
7145[#130840]: https://github.com/rust-lang/rust/issues/130840
7146
7147------------------------
7148"##,
7149 default_severity: Severity::Allow,
7150 warn_since: None,
7151 deny_since: None,
7152 },
7153 Lint {
7154 label: "io_error_more",
7155 description: r##"# `io_error_more`
7156
7157The tracking issue for this feature is: [#86442]
7158
7159[#86442]: https://github.com/rust-lang/rust/issues/86442
7160
7161------------------------
7162"##,
7163 default_severity: Severity::Allow,
7164 warn_since: None,
7165 deny_since: None,
7166 },
7167 Lint {
7168 label: "io_error_uncategorized",
7169 description: r##"# `io_error_uncategorized`
7170
7171This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
7172
7173------------------------
7174"##,
7175 default_severity: Severity::Allow,
7176 warn_since: None,
7177 deny_since: None,
7178 },
7179 Lint {
7180 label: "io_slice_as_bytes",
7181 description: r##"# `io_slice_as_bytes`
7182
7183The tracking issue for this feature is: [#132818]
7184
7185[#132818]: https://github.com/rust-lang/rust/issues/132818
7186
7187------------------------
7188"##,
7189 default_severity: Severity::Allow,
7190 warn_since: None,
7191 deny_since: None,
7192 },
7193 Lint {
7194 label: "ip",
7195 description: r##"# `ip`
7196
7197The tracking issue for this feature is: [#27709]
7198
7199[#27709]: https://github.com/rust-lang/rust/issues/27709
7200
7201------------------------
7202"##,
7203 default_severity: Severity::Allow,
7204 warn_since: None,
7205 deny_since: None,
7206 },
7207 Lint {
7208 label: "ip_from",
7209 description: r##"# `ip_from`
7210
7211The tracking issue for this feature is: [#131360]
7212
7213[#131360]: https://github.com/rust-lang/rust/issues/131360
7214
7215------------------------
7216"##,
7217 default_severity: Severity::Allow,
7218 warn_since: None,
7219 deny_since: None,
7220 },
7221 Lint {
7222 label: "is_ascii_octdigit",
7223 description: r##"# `is_ascii_octdigit`
7224
7225The tracking issue for this feature is: [#101288]
7226
7227[#101288]: https://github.com/rust-lang/rust/issues/101288
7228
7229------------------------
7230"##,
7231 default_severity: Severity::Allow,
7232 warn_since: None,
7233 deny_since: None,
7234 },
7235 Lint {
7236 label: "is_loongarch_feature_detected",
7237 description: r##"# `is_loongarch_feature_detected`
7238
7239The tracking issue for this feature is: [#117425]
7240
7241[#117425]: https://github.com/rust-lang/rust/issues/117425
7242
7243------------------------
7244"##,
7245 default_severity: Severity::Allow,
7246 warn_since: None,
7247 deny_since: None,
7248 },
7249 Lint {
7250 label: "is_riscv_feature_detected",
7251 description: r##"# `is_riscv_feature_detected`
7252
7253The tracking issue for this feature is: [#111192]
7254
7255[#111192]: https://github.com/rust-lang/rust/issues/111192
7256
7257------------------------
7258"##,
7259 default_severity: Severity::Allow,
7260 warn_since: None,
7261 deny_since: None,
7262 },
7263 Lint {
7264 label: "iter_advance_by",
7265 description: r##"# `iter_advance_by`
7266
7267The tracking issue for this feature is: [#77404]
7268
7269[#77404]: https://github.com/rust-lang/rust/issues/77404
7270
7271------------------------
7272"##,
7273 default_severity: Severity::Allow,
7274 warn_since: None,
7275 deny_since: None,
7276 },
7277 Lint {
7278 label: "iter_array_chunks",
7279 description: r##"# `iter_array_chunks`
7280
7281The tracking issue for this feature is: [#100450]
7282
7283[#100450]: https://github.com/rust-lang/rust/issues/100450
7284
7285------------------------
7286"##,
7287 default_severity: Severity::Allow,
7288 warn_since: None,
7289 deny_since: None,
7290 },
7291 Lint {
7292 label: "iter_chain",
7293 description: r##"# `iter_chain`
7294
7295The tracking issue for this feature is: [#125964]
7296
7297[#125964]: https://github.com/rust-lang/rust/issues/125964
7298
7299------------------------
7300"##,
7301 default_severity: Severity::Allow,
7302 warn_since: None,
7303 deny_since: None,
7304 },
7305 Lint {
7306 label: "iter_collect_into",
7307 description: r##"# `iter_collect_into`
7308
7309The tracking issue for this feature is: [#94780]
7310
7311[#94780]: https://github.com/rust-lang/rust/issues/94780
7312
7313------------------------
7314"##,
7315 default_severity: Severity::Allow,
7316 warn_since: None,
7317 deny_since: None,
7318 },
7319 Lint {
7320 label: "iter_from_coroutine",
7321 description: r##"# `iter_from_coroutine`
7322
7323The tracking issue for this feature is: [#43122]
7324
7325[#43122]: https://github.com/rust-lang/rust/issues/43122
7326
7327------------------------
7328"##,
7329 default_severity: Severity::Allow,
7330 warn_since: None,
7331 deny_since: None,
7332 },
7333 Lint {
7334 label: "iter_intersperse",
7335 description: r##"# `iter_intersperse`
7336
7337The tracking issue for this feature is: [#79524]
7338
7339[#79524]: https://github.com/rust-lang/rust/issues/79524
7340
7341------------------------
7342"##,
7343 default_severity: Severity::Allow,
7344 warn_since: None,
7345 deny_since: None,
7346 },
7347 Lint {
7348 label: "iter_is_partitioned",
7349 description: r##"# `iter_is_partitioned`
7350
7351The tracking issue for this feature is: [#62544]
7352
7353[#62544]: https://github.com/rust-lang/rust/issues/62544
7354
7355------------------------
7356"##,
7357 default_severity: Severity::Allow,
7358 warn_since: None,
7359 deny_since: None,
7360 },
7361 Lint {
7362 label: "iter_map_windows",
7363 description: r##"# `iter_map_windows`
7364
7365The tracking issue for this feature is: [#87155]
7366
7367[#87155]: https://github.com/rust-lang/rust/issues/87155
7368
7369------------------------
7370"##,
7371 default_severity: Severity::Allow,
7372 warn_since: None,
7373 deny_since: None,
7374 },
7375 Lint {
7376 label: "iter_next_chunk",
7377 description: r##"# `iter_next_chunk`
7378
7379The tracking issue for this feature is: [#98326]
7380
7381[#98326]: https://github.com/rust-lang/rust/issues/98326
7382
7383------------------------
7384"##,
7385 default_severity: Severity::Allow,
7386 warn_since: None,
7387 deny_since: None,
7388 },
7389 Lint {
7390 label: "iter_order_by",
7391 description: r##"# `iter_order_by`
7392
7393The tracking issue for this feature is: [#64295]
7394
7395[#64295]: https://github.com/rust-lang/rust/issues/64295
7396
7397------------------------
7398"##,
7399 default_severity: Severity::Allow,
7400 warn_since: None,
7401 deny_since: None,
7402 },
7403 Lint {
7404 label: "iter_partition_in_place",
7405 description: r##"# `iter_partition_in_place`
7406
7407The tracking issue for this feature is: [#62543]
7408
7409[#62543]: https://github.com/rust-lang/rust/issues/62543
7410
7411------------------------
7412"##,
7413 default_severity: Severity::Allow,
7414 warn_since: None,
7415 deny_since: None,
7416 },
7417 Lint {
7418 label: "iterator_try_collect",
7419 description: r##"# `iterator_try_collect`
7420
7421The tracking issue for this feature is: [#94047]
7422
7423[#94047]: https://github.com/rust-lang/rust/issues/94047
7424
7425------------------------
7426"##,
7427 default_severity: Severity::Allow,
7428 warn_since: None,
7429 deny_since: None,
7430 },
7431 Lint {
7432 label: "iterator_try_reduce",
7433 description: r##"# `iterator_try_reduce`
7434
7435The tracking issue for this feature is: [#87053]
7436
7437[#87053]: https://github.com/rust-lang/rust/issues/87053
7438
7439------------------------
7440"##,
7441 default_severity: Severity::Allow,
7442 warn_since: None,
7443 deny_since: None,
7444 },
7445 Lint {
7446 label: "junction_point",
7447 description: r##"# `junction_point`
7448
7449The tracking issue for this feature is: [#121709]
7450
7451[#121709]: https://github.com/rust-lang/rust/issues/121709
7452
7453------------------------
7454"##,
7455 default_severity: Severity::Allow,
7456 warn_since: None,
7457 deny_since: None,
7458 },
7459 Lint {
7460 label: "lahfsahf_target_feature",
7461 description: r##"# `lahfsahf_target_feature`
7462
7463The tracking issue for this feature is: [#44839]
7464
7465[#44839]: https://github.com/rust-lang/rust/issues/44839
7466
7467------------------------
7468"##,
7469 default_severity: Severity::Allow,
7470 warn_since: None,
7471 deny_since: None,
7472 },
7473 Lint {
7474 label: "lang_items",
7475 description: r##"# `lang_items`
7476
7477The tracking issue for this feature is: None.
7478
7479------------------------
7480
7481The `rustc` compiler has certain pluggable operations, that is,
7482functionality that isn't hard-coded into the language, but is
7483implemented in libraries, with a special marker to tell the compiler
7484it exists. The marker is the attribute `#[lang = "..."]` and there are
7485various different values of `...`, i.e. various different 'lang
7486items'. Most of them can only be defined once.
7487
7488Lang items are loaded lazily by the compiler; e.g. if one never uses `Box`
7489then there is no need to define a function for `exchange_malloc`.
7490`rustc` will emit an error when an item is needed but not found in the current
7491crate or any that it depends on.
7492
7493Some features provided by lang items:
7494
7495- overloadable operators via traits: the traits corresponding to the
7496 `==`, `<`, dereferencing (`*`) and `+` (etc.) operators are all
7497 marked with lang items; those specific four are `eq`, `partial_ord`,
7498 `deref`/`deref_mut`, and `add` respectively.
7499- panicking: the `panic` and `panic_impl` lang items, among others.
7500- stack unwinding: the lang item `eh_personality` is a function used by the
7501 failure mechanisms of the compiler. This is often mapped to GCC's personality
7502 function (see the [`std` implementation][personality] for more information),
7503 but programs which don't trigger a panic can be assured that this function is
7504 never called. Additionally, a `eh_catch_typeinfo` static is needed for certain
7505 targets which implement Rust panics on top of C++ exceptions.
7506- the traits in `core::marker` used to indicate types of
7507 various kinds; e.g. lang items `sized`, `sync` and `copy`.
7508- memory allocation, see below.
7509
7510Most lang items are defined by `core`, but if you're trying to build
7511an executable without the `std` crate, you might run into the need
7512for lang item definitions.
7513
7514[personality]: https://github.com/rust-lang/rust/blob/master/library/std/src/sys/personality/gcc.rs
7515
7516## Example: Implementing a `Box`
7517
7518`Box` pointers require two lang items: one for the type itself and one for
7519allocation. A freestanding program that uses the `Box` sugar for dynamic
7520allocations via `malloc` and `free`:
7521
7522```rust,ignore (libc-is-finicky)
7523#![feature(lang_items, start, core_intrinsics, rustc_private, panic_unwind, rustc_attrs)]
7524#![allow(internal_features)]
7525#![no_std]
7526
7527extern crate libc;
7528extern crate unwind;
7529
7530use core::ffi::c_void;
7531use core::intrinsics;
7532use core::panic::PanicInfo;
7533use core::ptr::NonNull;
7534
7535pub struct Global; // the global allocator
7536struct Unique<T>(NonNull<T>);
7537
7538#[lang = "owned_box"]
7539pub struct Box<T, A = Global>(Unique<T>, A);
7540
7541impl<T> Box<T> {
7542 pub fn new(x: T) -> Self {
7543 #[rustc_box]
7544 Box::new(x)
7545 }
7546}
7547
7548impl<T, A> Drop for Box<T, A> {
7549 fn drop(&mut self) {
7550 unsafe {
7551 libc::free(self.0.0.as_ptr() as *mut c_void);
7552 }
7553 }
7554}
7555
7556#[lang = "exchange_malloc"]
7557unsafe fn allocate(size: usize, _align: usize) -> *mut u8 {
7558 let p = libc::malloc(size) as *mut u8;
7559
7560 // Check if `malloc` failed:
7561 if p.is_null() {
7562 intrinsics::abort();
7563 }
7564
7565 p
7566}
7567
7568#[start]
7569fn main(_argc: isize, _argv: *const *const u8) -> isize {
7570 let _x = Box::new(1);
7571
7572 0
7573}
7574
7575#[lang = "eh_personality"]
7576fn rust_eh_personality() {}
7577
7578#[panic_handler]
7579fn panic_handler(_info: &PanicInfo) -> ! { intrinsics::abort() }
7580```
7581
7582Note the use of `abort`: the `exchange_malloc` lang item is assumed to
7583return a valid pointer, and so needs to do the check internally.
7584
7585## List of all language items
7586
7587An up-to-date list of all language items can be found [here] in the compiler code.
7588
7589[here]: https://github.com/rust-lang/rust/blob/master/compiler/rustc_hir/src/lang_items.rs
7590"##,
7591 default_severity: Severity::Allow,
7592 warn_since: None,
7593 deny_since: None,
7594 },
7595 Lint {
7596 label: "large_assignments",
7597 description: r##"# `large_assignments`
7598
7599The tracking issue for this feature is: [#83518]
7600
7601[#83518]: https://github.com/rust-lang/rust/issues/83518
7602
7603------------------------
7604"##,
7605 default_severity: Severity::Allow,
7606 warn_since: None,
7607 deny_since: None,
7608 },
7609 Lint {
7610 label: "layout_for_ptr",
7611 description: r##"# `layout_for_ptr`
7612
7613The tracking issue for this feature is: [#69835]
7614
7615[#69835]: https://github.com/rust-lang/rust/issues/69835
7616
7617------------------------
7618"##,
7619 default_severity: Severity::Allow,
7620 warn_since: None,
7621 deny_since: None,
7622 },
7623 Lint {
7624 label: "lazy_cell_into_inner",
7625 description: r##"# `lazy_cell_into_inner`
7626
7627The tracking issue for this feature is: [#125623]
7628
7629[#125623]: https://github.com/rust-lang/rust/issues/125623
7630
7631------------------------
7632"##,
7633 default_severity: Severity::Allow,
7634 warn_since: None,
7635 deny_since: None,
7636 },
7637 Lint {
7638 label: "lazy_get",
7639 description: r##"# `lazy_get`
7640
7641The tracking issue for this feature is: [#129333]
7642
7643[#129333]: https://github.com/rust-lang/rust/issues/129333
7644
7645------------------------
7646"##,
7647 default_severity: Severity::Allow,
7648 warn_since: None,
7649 deny_since: None,
7650 },
7651 Lint {
7652 label: "lazy_type_alias",
7653 description: r##"# `lazy_type_alias`
7654
7655The tracking issue for this feature is: [#112792]
7656
7657[#112792]: https://github.com/rust-lang/rust/issues/112792
7658
7659------------------------
7660"##,
7661 default_severity: Severity::Allow,
7662 warn_since: None,
7663 deny_since: None,
7664 },
7665 Lint {
7666 label: "legacy_receiver_trait",
7667 description: r##"# `legacy_receiver_trait`
7668
7669This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
7670
7671------------------------
7672"##,
7673 default_severity: Severity::Allow,
7674 warn_since: None,
7675 deny_since: None,
7676 },
7677 Lint {
7678 label: "let_chains",
7679 description: r##"# `let_chains`
7680
7681The tracking issue for this feature is: [#53667]
7682
7683[#53667]: https://github.com/rust-lang/rust/issues/53667
7684
7685------------------------
7686"##,
7687 default_severity: Severity::Allow,
7688 warn_since: None,
7689 deny_since: None,
7690 },
7691 Lint {
7692 label: "liballoc_internals",
7693 description: r##"# `liballoc_internals`
7694
7695This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
7696
7697------------------------
7698"##,
7699 default_severity: Severity::Allow,
7700 warn_since: None,
7701 deny_since: None,
7702 },
7703 Lint {
7704 label: "libstd_sys_internals",
7705 description: r##"# `libstd_sys_internals`
7706
7707This feature is internal to the Rust compiler and is not intended for general use.
7708
7709------------------------
7710"##,
7711 default_severity: Severity::Allow,
7712 warn_since: None,
7713 deny_since: None,
7714 },
7715 Lint {
7716 label: "lifetime_capture_rules_2024",
7717 description: r##"# `lifetime_capture_rules_2024`
7718
7719This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
7720
7721------------------------
7722"##,
7723 default_severity: Severity::Allow,
7724 warn_since: None,
7725 deny_since: None,
7726 },
7727 Lint {
7728 label: "link_arg_attribute",
7729 description: r##"# `link_arg_attribute`
7730
7731The tracking issue for this feature is: [#99427]
7732
7733------
7734
7735The `link_arg_attribute` feature allows passing arguments into the linker
7736from inside of the source code. Order is preserved for link attributes as
7737they were defined on a single extern block:
7738
7739```rust,no_run
7740#![feature(link_arg_attribute)]
7741
7742#[link(kind = "link-arg", name = "--start-group")]
7743#[link(kind = "static", name = "c")]
7744#[link(kind = "static", name = "gcc")]
7745#[link(kind = "link-arg", name = "--end-group")]
7746extern "C" {}
7747```
7748
7749[#99427]: https://github.com/rust-lang/rust/issues/99427
7750"##,
7751 default_severity: Severity::Allow,
7752 warn_since: None,
7753 deny_since: None,
7754 },
7755 Lint {
7756 label: "link_cfg",
7757 description: r##"# `link_cfg`
7758
7759This feature is internal to the Rust compiler and is not intended for general use.
7760
7761------------------------
7762"##,
7763 default_severity: Severity::Allow,
7764 warn_since: None,
7765 deny_since: None,
7766 },
7767 Lint {
7768 label: "link_llvm_intrinsics",
7769 description: r##"# `link_llvm_intrinsics`
7770
7771The tracking issue for this feature is: [#29602]
7772
7773[#29602]: https://github.com/rust-lang/rust/issues/29602
7774
7775------------------------
7776"##,
7777 default_severity: Severity::Allow,
7778 warn_since: None,
7779 deny_since: None,
7780 },
7781 Lint {
7782 label: "linkage",
7783 description: r##"# `linkage`
7784
7785The tracking issue for this feature is: [#29603]
7786
7787[#29603]: https://github.com/rust-lang/rust/issues/29603
7788
7789------------------------
7790"##,
7791 default_severity: Severity::Allow,
7792 warn_since: None,
7793 deny_since: None,
7794 },
7795 Lint {
7796 label: "linked_list_cursors",
7797 description: r##"# `linked_list_cursors`
7798
7799The tracking issue for this feature is: [#58533]
7800
7801[#58533]: https://github.com/rust-lang/rust/issues/58533
7802
7803------------------------
7804"##,
7805 default_severity: Severity::Allow,
7806 warn_since: None,
7807 deny_since: None,
7808 },
7809 Lint {
7810 label: "linked_list_remove",
7811 description: r##"# `linked_list_remove`
7812
7813The tracking issue for this feature is: [#69210]
7814
7815[#69210]: https://github.com/rust-lang/rust/issues/69210
7816
7817------------------------
7818"##,
7819 default_severity: Severity::Allow,
7820 warn_since: None,
7821 deny_since: None,
7822 },
7823 Lint {
7824 label: "linked_list_retain",
7825 description: r##"# `linked_list_retain`
7826
7827The tracking issue for this feature is: [#114135]
7828
7829[#114135]: https://github.com/rust-lang/rust/issues/114135
7830
7831------------------------
7832"##,
7833 default_severity: Severity::Allow,
7834 warn_since: None,
7835 deny_since: None,
7836 },
7837 Lint {
7838 label: "linux_pidfd",
7839 description: r##"# `linux_pidfd`
7840
7841The tracking issue for this feature is: [#82971]
7842
7843[#82971]: https://github.com/rust-lang/rust/issues/82971
7844
7845------------------------
7846"##,
7847 default_severity: Severity::Allow,
7848 warn_since: None,
7849 deny_since: None,
7850 },
7851 Lint {
7852 label: "local_waker",
7853 description: r##"# `local_waker`
7854
7855The tracking issue for this feature is: [#118959]
7856
7857[#118959]: https://github.com/rust-lang/rust/issues/118959
7858
7859------------------------
7860"##,
7861 default_severity: Severity::Allow,
7862 warn_since: None,
7863 deny_since: None,
7864 },
7865 Lint {
7866 label: "log_syntax",
7867 description: r##"# `log_syntax`
7868
7869The tracking issue for this feature is: [#29598]
7870
7871[#29598]: https://github.com/rust-lang/rust/issues/29598
7872
7873------------------------
7874"##,
7875 default_severity: Severity::Allow,
7876 warn_since: None,
7877 deny_since: None,
7878 },
7879 Lint {
7880 label: "loongarch_target_feature",
7881 description: r##"# `loongarch_target_feature`
7882
7883The tracking issue for this feature is: [#44839]
7884
7885[#44839]: https://github.com/rust-lang/rust/issues/44839
7886
7887------------------------
7888"##,
7889 default_severity: Severity::Allow,
7890 warn_since: None,
7891 deny_since: None,
7892 },
7893 Lint {
7894 label: "macro_metavar_expr",
7895 description: r##"# `macro_metavar_expr`
7896
7897The tracking issue for this feature is: [#83527]
7898
7899[#83527]: https://github.com/rust-lang/rust/issues/83527
7900
7901------------------------
7902"##,
7903 default_severity: Severity::Allow,
7904 warn_since: None,
7905 deny_since: None,
7906 },
7907 Lint {
7908 label: "macro_metavar_expr_concat",
7909 description: r##"# `macro_metavar_expr_concat`
7910
7911The tracking issue for this feature is: [#124225]
7912
7913[#124225]: https://github.com/rust-lang/rust/issues/124225
7914
7915------------------------
7916"##,
7917 default_severity: Severity::Allow,
7918 warn_since: None,
7919 deny_since: None,
7920 },
7921 Lint {
7922 label: "map_many_mut",
7923 description: r##"# `map_many_mut`
7924
7925The tracking issue for this feature is: [#97601]
7926
7927[#97601]: https://github.com/rust-lang/rust/issues/97601
7928
7929------------------------
7930"##,
7931 default_severity: Severity::Allow,
7932 warn_since: None,
7933 deny_since: None,
7934 },
7935 Lint {
7936 label: "map_try_insert",
7937 description: r##"# `map_try_insert`
7938
7939The tracking issue for this feature is: [#82766]
7940
7941[#82766]: https://github.com/rust-lang/rust/issues/82766
7942
7943------------------------
7944"##,
7945 default_severity: Severity::Allow,
7946 warn_since: None,
7947 deny_since: None,
7948 },
7949 Lint {
7950 label: "mapped_lock_guards",
7951 description: r##"# `mapped_lock_guards`
7952
7953The tracking issue for this feature is: [#117108]
7954
7955[#117108]: https://github.com/rust-lang/rust/issues/117108
7956
7957------------------------
7958"##,
7959 default_severity: Severity::Allow,
7960 warn_since: None,
7961 deny_since: None,
7962 },
7963 Lint {
7964 label: "marker_trait_attr",
7965 description: r##"# `marker_trait_attr`
7966
7967The tracking issue for this feature is: [#29864]
7968
7969[#29864]: https://github.com/rust-lang/rust/issues/29864
7970
7971------------------------
7972
7973Normally, Rust keeps you from adding trait implementations that could
7974overlap with each other, as it would be ambiguous which to use. This
7975feature, however, carves out an exception to that rule: a trait can
7976opt-in to having overlapping implementations, at the cost that those
7977implementations are not allowed to override anything (and thus the
7978trait itself cannot have any associated items, as they're pointless
7979when they'd need to do the same thing for every type anyway).
7980
7981```rust
7982#![feature(marker_trait_attr)]
7983
7984#[marker] trait CheapToClone: Clone {}
7985
7986impl<T: Copy> CheapToClone for T {}
7987
7988// These could potentially overlap with the blanket implementation above,
7989// so are only allowed because CheapToClone is a marker trait.
7990impl<T: CheapToClone, U: CheapToClone> CheapToClone for (T, U) {}
7991impl<T: CheapToClone> CheapToClone for std::ops::Range<T> {}
7992
7993fn cheap_clone<T: CheapToClone>(t: T) -> T {
7994 t.clone()
7995}
7996```
7997
7998This is expected to replace the unstable `overlapping_marker_traits`
7999feature, which applied to all empty traits (without needing an opt-in).
8000"##,
8001 default_severity: Severity::Allow,
8002 warn_since: None,
8003 deny_since: None,
8004 },
8005 Lint {
8006 label: "maybe_uninit_array_assume_init",
8007 description: r##"# `maybe_uninit_array_assume_init`
8008
8009The tracking issue for this feature is: [#96097]
8010
8011[#96097]: https://github.com/rust-lang/rust/issues/96097
8012
8013------------------------
8014"##,
8015 default_severity: Severity::Allow,
8016 warn_since: None,
8017 deny_since: None,
8018 },
8019 Lint {
8020 label: "maybe_uninit_as_bytes",
8021 description: r##"# `maybe_uninit_as_bytes`
8022
8023The tracking issue for this feature is: [#93092]
8024
8025[#93092]: https://github.com/rust-lang/rust/issues/93092
8026
8027------------------------
8028"##,
8029 default_severity: Severity::Allow,
8030 warn_since: None,
8031 deny_since: None,
8032 },
8033 Lint {
8034 label: "maybe_uninit_fill",
8035 description: r##"# `maybe_uninit_fill`
8036
8037The tracking issue for this feature is: [#117428]
8038
8039[#117428]: https://github.com/rust-lang/rust/issues/117428
8040
8041------------------------
8042"##,
8043 default_severity: Severity::Allow,
8044 warn_since: None,
8045 deny_since: None,
8046 },
8047 Lint {
8048 label: "maybe_uninit_slice",
8049 description: r##"# `maybe_uninit_slice`
8050
8051The tracking issue for this feature is: [#63569]
8052
8053[#63569]: https://github.com/rust-lang/rust/issues/63569
8054
8055------------------------
8056"##,
8057 default_severity: Severity::Allow,
8058 warn_since: None,
8059 deny_since: None,
8060 },
8061 Lint {
8062 label: "maybe_uninit_uninit_array",
8063 description: r##"# `maybe_uninit_uninit_array`
8064
8065The tracking issue for this feature is: [#96097]
8066
8067[#96097]: https://github.com/rust-lang/rust/issues/96097
8068
8069------------------------
8070"##,
8071 default_severity: Severity::Allow,
8072 warn_since: None,
8073 deny_since: None,
8074 },
8075 Lint {
8076 label: "maybe_uninit_uninit_array_transpose",
8077 description: r##"# `maybe_uninit_uninit_array_transpose`
8078
8079The tracking issue for this feature is: [#96097]
8080
8081[#96097]: https://github.com/rust-lang/rust/issues/96097
8082
8083------------------------
8084"##,
8085 default_severity: Severity::Allow,
8086 warn_since: None,
8087 deny_since: None,
8088 },
8089 Lint {
8090 label: "maybe_uninit_write_slice",
8091 description: r##"# `maybe_uninit_write_slice`
8092
8093The tracking issue for this feature is: [#79995]
8094
8095[#79995]: https://github.com/rust-lang/rust/issues/79995
8096
8097------------------------
8098"##,
8099 default_severity: Severity::Allow,
8100 warn_since: None,
8101 deny_since: None,
8102 },
8103 Lint {
8104 label: "mem_copy_fn",
8105 description: r##"# `mem_copy_fn`
8106
8107The tracking issue for this feature is: [#98262]
8108
8109[#98262]: https://github.com/rust-lang/rust/issues/98262
8110
8111------------------------
8112"##,
8113 default_severity: Severity::Allow,
8114 warn_since: None,
8115 deny_since: None,
8116 },
8117 Lint {
8118 label: "min_generic_const_args",
8119 description: r##"# `min_generic_const_args`
8120
8121The tracking issue for this feature is: [#132980]
8122
8123[#132980]: https://github.com/rust-lang/rust/issues/132980
8124
8125------------------------
8126"##,
8127 default_severity: Severity::Allow,
8128 warn_since: None,
8129 deny_since: None,
8130 },
8131 Lint {
8132 label: "min_specialization",
8133 description: r##"# `min_specialization`
8134
8135The tracking issue for this feature is: [#31844]
8136
8137[#31844]: https://github.com/rust-lang/rust/issues/31844
8138
8139------------------------
8140"##,
8141 default_severity: Severity::Allow,
8142 warn_since: None,
8143 deny_since: None,
8144 },
8145 Lint {
8146 label: "mips_target_feature",
8147 description: r##"# `mips_target_feature`
8148
8149The tracking issue for this feature is: [#44839]
8150
8151[#44839]: https://github.com/rust-lang/rust/issues/44839
8152
8153------------------------
8154"##,
8155 default_severity: Severity::Allow,
8156 warn_since: None,
8157 deny_since: None,
8158 },
8159 Lint {
8160 label: "mixed_integer_ops_unsigned_sub",
8161 description: r##"# `mixed_integer_ops_unsigned_sub`
8162
8163The tracking issue for this feature is: [#126043]
8164
8165[#126043]: https://github.com/rust-lang/rust/issues/126043
8166
8167------------------------
8168"##,
8169 default_severity: Severity::Allow,
8170 warn_since: None,
8171 deny_since: None,
8172 },
8173 Lint {
8174 label: "more_float_constants",
8175 description: r##"# `more_float_constants`
8176
8177The tracking issue for this feature is: [#103883]
8178
8179[#103883]: https://github.com/rust-lang/rust/issues/103883
8180
8181------------------------
8182"##,
8183 default_severity: Severity::Allow,
8184 warn_since: None,
8185 deny_since: None,
8186 },
8187 Lint {
8188 label: "more_maybe_bounds",
8189 description: r##"# `more_maybe_bounds`
8190
8191This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
8192
8193------------------------
8194"##,
8195 default_severity: Severity::Allow,
8196 warn_since: None,
8197 deny_since: None,
8198 },
8199 Lint {
8200 label: "more_qualified_paths",
8201 description: r##"# `more_qualified_paths`
8202
8203The `more_qualified_paths` feature can be used in order to enable the
8204use of qualified paths in patterns.
8205
8206The tracking issue for this feature is: [#86935](https://github.com/rust-lang/rust/issues/86935).
8207
8208------------------------
8209
8210## Example
8211
8212```rust
8213#![feature(more_qualified_paths)]
8214
8215fn main() {
8216 // destructure through a qualified path
8217 let <Foo as A>::Assoc { br } = StructStruct { br: 2 };
8218}
8219
8220struct StructStruct {
8221 br: i8,
8222}
8223
8224struct Foo;
8225
8226trait A {
8227 type Assoc;
8228}
8229
8230impl A for Foo {
8231 type Assoc = StructStruct;
8232}
8233```
8234"##,
8235 default_severity: Severity::Allow,
8236 warn_since: None,
8237 deny_since: None,
8238 },
8239 Lint {
8240 label: "mpmc_channel",
8241 description: r##"# `mpmc_channel`
8242
8243The tracking issue for this feature is: [#126840]
8244
8245[#126840]: https://github.com/rust-lang/rust/issues/126840
8246
8247------------------------
8248"##,
8249 default_severity: Severity::Allow,
8250 warn_since: None,
8251 deny_since: None,
8252 },
8253 Lint {
8254 label: "multiple_supertrait_upcastable",
8255 description: r##"# `multiple_supertrait_upcastable`
8256
8257This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
8258
8259------------------------
8260"##,
8261 default_severity: Severity::Allow,
8262 warn_since: None,
8263 deny_since: None,
8264 },
8265 Lint {
8266 label: "must_not_suspend",
8267 description: r##"# `must_not_suspend`
8268
8269The tracking issue for this feature is: [#83310]
8270
8271[#83310]: https://github.com/rust-lang/rust/issues/83310
8272
8273------------------------
8274"##,
8275 default_severity: Severity::Allow,
8276 warn_since: None,
8277 deny_since: None,
8278 },
8279 Lint {
8280 label: "mut_ref",
8281 description: r##"# `mut_ref`
8282
8283The tracking issue for this feature is: [#123076]
8284
8285[#123076]: https://github.com/rust-lang/rust/issues/123076
8286
8287------------------------
8288"##,
8289 default_severity: Severity::Allow,
8290 warn_since: None,
8291 deny_since: None,
8292 },
8293 Lint {
8294 label: "naked_functions",
8295 description: r##"# `naked_functions`
8296
8297The tracking issue for this feature is: [#90957]
8298
8299[#90957]: https://github.com/rust-lang/rust/issues/90957
8300
8301------------------------
8302"##,
8303 default_severity: Severity::Allow,
8304 warn_since: None,
8305 deny_since: None,
8306 },
8307 Lint {
8308 label: "native_link_modifiers_as_needed",
8309 description: r##"# `native_link_modifiers_as_needed`
8310
8311The tracking issue for this feature is: [#81490]
8312
8313[#81490]: https://github.com/rust-lang/rust/issues/81490
8314
8315------------------------
8316
8317The `native_link_modifiers_as_needed` feature allows you to use the `as-needed` modifier.
8318
8319`as-needed` is only compatible with the `dynamic` and `framework` linking kinds. Using any other kind will result in a compiler error.
8320
8321`+as-needed` means that the library will be actually linked only if it satisfies some undefined symbols at the point at which it is specified on the command line, making it similar to static libraries in this regard.
8322
8323This modifier translates to `--as-needed` for ld-like linkers, and to `-dead_strip_dylibs` / `-needed_library` / `-needed_framework` for ld64.
8324The modifier does nothing for linkers that don't support it (e.g. `link.exe`).
8325
8326The default for this modifier is unclear, some targets currently specify it as `+as-needed`, some do not. We may want to try making `+as-needed` a default for all targets.
8327"##,
8328 default_severity: Severity::Allow,
8329 warn_since: None,
8330 deny_since: None,
8331 },
8332 Lint {
8333 label: "needs_panic_runtime",
8334 description: r##"# `needs_panic_runtime`
8335
8336The tracking issue for this feature is: [#32837]
8337
8338[#32837]: https://github.com/rust-lang/rust/issues/32837
8339
8340------------------------
8341"##,
8342 default_severity: Severity::Allow,
8343 warn_since: None,
8344 deny_since: None,
8345 },
8346 Lint {
8347 label: "negative_bounds",
8348 description: r##"# `negative_bounds`
8349
8350This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
8351
8352------------------------
8353"##,
8354 default_severity: Severity::Allow,
8355 warn_since: None,
8356 deny_since: None,
8357 },
8358 Lint {
8359 label: "negative_impls",
8360 description: r##"# `negative_impls`
8361
8362The tracking issue for this feature is [#68318].
8363
8364[#68318]: https://github.com/rust-lang/rust/issues/68318
8365
8366----
8367
8368With the feature gate `negative_impls`, you can write negative impls as well as positive ones:
8369
8370```rust
8371#![feature(negative_impls)]
8372trait DerefMut { }
8373impl<T: ?Sized> !DerefMut for &T { }
8374```
8375
8376Negative impls indicate a semver guarantee that the given trait will not be implemented for the given types. Negative impls play an additional purpose for auto traits, described below.
8377
8378Negative impls have the following characteristics:
8379
8380* They do not have any items.
8381* They must obey the orphan rules as if they were a positive impl.
8382* They cannot "overlap" with any positive impls.
8383
8384## Semver interaction
8385
8386It is a breaking change to remove a negative impl. Negative impls are a commitment not to implement the given trait for the named types.
8387
8388## Orphan and overlap rules
8389
8390Negative impls must obey the same orphan rules as a positive impl. This implies you cannot add a negative impl for types defined in upstream crates and so forth.
8391
8392Similarly, negative impls cannot overlap with positive impls, again using the same "overlap" check that we ordinarily use to determine if two impls overlap. (Note that positive impls typically cannot overlap with one another either, except as permitted by specialization.)
8393
8394## Interaction with auto traits
8395
8396Declaring a negative impl `impl !SomeAutoTrait for SomeType` for an
8397auto-trait serves two purposes:
8398
8399* as with any trait, it declares that `SomeType` will never implement `SomeAutoTrait`;
8400* it disables the automatic `SomeType: SomeAutoTrait` impl that would otherwise have been generated.
8401
8402Note that, at present, there is no way to indicate that a given type
8403does not implement an auto trait *but that it may do so in the
8404future*. For ordinary types, this is done by simply not declaring any
8405impl at all, but that is not an option for auto traits. A workaround
8406is that one could embed a marker type as one of the fields, where the
8407marker type is `!AutoTrait`.
8408
8409## Immediate uses
8410
8411Negative impls are used to declare that `&T: !DerefMut` and `&mut T: !Clone`, as required to fix the soundness of `Pin` described in [#66544](https://github.com/rust-lang/rust/issues/66544).
8412
8413This serves two purposes:
8414
8415* For proving the correctness of unsafe code, we can use that impl as evidence that no `DerefMut` or `Clone` impl exists.
8416* It prevents downstream crates from creating such impls.
8417"##,
8418 default_severity: Severity::Allow,
8419 warn_since: None,
8420 deny_since: None,
8421 },
8422 Lint {
8423 label: "never_patterns",
8424 description: r##"# `never_patterns`
8425
8426The tracking issue for this feature is: [#118155]
8427
8428[#118155]: https://github.com/rust-lang/rust/issues/118155
8429
8430------------------------
8431"##,
8432 default_severity: Severity::Allow,
8433 warn_since: None,
8434 deny_since: None,
8435 },
8436 Lint {
8437 label: "never_type",
8438 description: r##"# `never_type`
8439
8440The tracking issue for this feature is: [#35121]
8441
8442[#35121]: https://github.com/rust-lang/rust/issues/35121
8443
8444------------------------
8445"##,
8446 default_severity: Severity::Allow,
8447 warn_since: None,
8448 deny_since: None,
8449 },
8450 Lint {
8451 label: "never_type_fallback",
8452 description: r##"# `never_type_fallback`
8453
8454The tracking issue for this feature is: [#65992]
8455
8456[#65992]: https://github.com/rust-lang/rust/issues/65992
8457
8458------------------------
8459"##,
8460 default_severity: Severity::Allow,
8461 warn_since: None,
8462 deny_since: None,
8463 },
8464 Lint {
8465 label: "new_range_api",
8466 description: r##"# `new_range_api`
8467
8468The tracking issue for this feature is: [#125687]
8469
8470[#125687]: https://github.com/rust-lang/rust/issues/125687
8471
8472------------------------
8473"##,
8474 default_severity: Severity::Allow,
8475 warn_since: None,
8476 deny_since: None,
8477 },
8478 Lint {
8479 label: "new_zeroed_alloc",
8480 description: r##"# `new_zeroed_alloc`
8481
8482The tracking issue for this feature is: [#129396]
8483
8484[#129396]: https://github.com/rust-lang/rust/issues/129396
8485
8486------------------------
8487"##,
8488 default_severity: Severity::Allow,
8489 warn_since: None,
8490 deny_since: None,
8491 },
8492 Lint {
8493 label: "no_core",
8494 description: r##"# `no_core`
8495
8496The tracking issue for this feature is: [#29639]
8497
8498[#29639]: https://github.com/rust-lang/rust/issues/29639
8499
8500------------------------
8501"##,
8502 default_severity: Severity::Allow,
8503 warn_since: None,
8504 deny_since: None,
8505 },
8506 Lint {
8507 label: "no_sanitize",
8508 description: r##"# `no_sanitize`
8509
8510The tracking issue for this feature is: [#39699]
8511
8512[#39699]: https://github.com/rust-lang/rust/issues/39699
8513
8514------------------------
8515
8516The `no_sanitize` attribute can be used to selectively disable sanitizer
8517instrumentation in an annotated function. This might be useful to: avoid
8518instrumentation overhead in a performance critical function, or avoid
8519instrumenting code that contains constructs unsupported by given sanitizer.
8520
8521The precise effect of this annotation depends on particular sanitizer in use.
8522For example, with `no_sanitize(thread)`, the thread sanitizer will no longer
8523instrument non-atomic store / load operations, but it will instrument atomic
8524operations to avoid reporting false positives and provide meaning full stack
8525traces.
8526
8527## Examples
8528
8529``` rust
8530#![feature(no_sanitize)]
8531
8532#[no_sanitize(address)]
8533fn foo() {
8534 // ...
8535}
8536```
8537"##,
8538 default_severity: Severity::Allow,
8539 warn_since: None,
8540 deny_since: None,
8541 },
8542 Lint {
8543 label: "non_exhaustive_omitted_patterns_lint",
8544 description: r##"# `non_exhaustive_omitted_patterns_lint`
8545
8546The tracking issue for this feature is: [#89554]
8547
8548[#89554]: https://github.com/rust-lang/rust/issues/89554
8549
8550------------------------
8551"##,
8552 default_severity: Severity::Allow,
8553 warn_since: None,
8554 deny_since: None,
8555 },
8556 Lint {
8557 label: "non_lifetime_binders",
8558 description: r##"# `non_lifetime_binders`
8559
8560The tracking issue for this feature is: [#108185]
8561
8562[#108185]: https://github.com/rust-lang/rust/issues/108185
8563
8564------------------------
8565"##,
8566 default_severity: Severity::Allow,
8567 warn_since: None,
8568 deny_since: None,
8569 },
8570 Lint {
8571 label: "non_null_from_ref",
8572 description: r##"# `non_null_from_ref`
8573
8574The tracking issue for this feature is: [#130823]
8575
8576[#130823]: https://github.com/rust-lang/rust/issues/130823
8577
8578------------------------
8579"##,
8580 default_severity: Severity::Allow,
8581 warn_since: None,
8582 deny_since: None,
8583 },
8584 Lint {
8585 label: "non_zero_count_ones",
8586 description: r##"# `non_zero_count_ones`
8587
8588The tracking issue for this feature is: [#120287]
8589
8590[#120287]: https://github.com/rust-lang/rust/issues/120287
8591
8592------------------------
8593"##,
8594 default_severity: Severity::Allow,
8595 warn_since: None,
8596 deny_since: None,
8597 },
8598 Lint {
8599 label: "nonzero_bitwise",
8600 description: r##"# `nonzero_bitwise`
8601
8602The tracking issue for this feature is: [#128281]
8603
8604[#128281]: https://github.com/rust-lang/rust/issues/128281
8605
8606------------------------
8607"##,
8608 default_severity: Severity::Allow,
8609 warn_since: None,
8610 deny_since: None,
8611 },
8612 Lint {
8613 label: "nonzero_from_mut",
8614 description: r##"# `nonzero_from_mut`
8615
8616The tracking issue for this feature is: [#106290]
8617
8618[#106290]: https://github.com/rust-lang/rust/issues/106290
8619
8620------------------------
8621"##,
8622 default_severity: Severity::Allow,
8623 warn_since: None,
8624 deny_since: None,
8625 },
8626 Lint {
8627 label: "nonzero_internals",
8628 description: r##"# `nonzero_internals`
8629
8630This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
8631
8632------------------------
8633"##,
8634 default_severity: Severity::Allow,
8635 warn_since: None,
8636 deny_since: None,
8637 },
8638 Lint {
8639 label: "nonzero_ops",
8640 description: r##"# `nonzero_ops`
8641
8642The tracking issue for this feature is: [#84186]
8643
8644[#84186]: https://github.com/rust-lang/rust/issues/84186
8645
8646------------------------
8647"##,
8648 default_severity: Severity::Allow,
8649 warn_since: None,
8650 deny_since: None,
8651 },
8652 Lint {
8653 label: "num_midpoint_signed",
8654 description: r##"# `num_midpoint_signed`
8655
8656The tracking issue for this feature is: [#110840]
8657
8658[#110840]: https://github.com/rust-lang/rust/issues/110840
8659
8660------------------------
8661"##,
8662 default_severity: Severity::Allow,
8663 warn_since: None,
8664 deny_since: None,
8665 },
8666 Lint {
8667 label: "numfmt",
8668 description: r##"# `numfmt`
8669
8670This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
8671
8672------------------------
8673"##,
8674 default_severity: Severity::Allow,
8675 warn_since: None,
8676 deny_since: None,
8677 },
8678 Lint {
8679 label: "offset_of_enum",
8680 description: r##"# `offset_of_enum`
8681
8682The tracking issue for this feature is: [#120141]
8683
8684[#120141]: https://github.com/rust-lang/rust/issues/120141
8685
8686------------------------
8687"##,
8688 default_severity: Severity::Allow,
8689 warn_since: None,
8690 deny_since: None,
8691 },
8692 Lint {
8693 label: "offset_of_slice",
8694 description: r##"# `offset_of_slice`
8695
8696The tracking issue for this feature is: [#126151]
8697
8698[#126151]: https://github.com/rust-lang/rust/issues/126151
8699
8700------------------------
8701"##,
8702 default_severity: Severity::Allow,
8703 warn_since: None,
8704 deny_since: None,
8705 },
8706 Lint {
8707 label: "omit_gdb_pretty_printer_section",
8708 description: r##"# `omit_gdb_pretty_printer_section`
8709
8710This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
8711
8712------------------------
8713"##,
8714 default_severity: Severity::Allow,
8715 warn_since: None,
8716 deny_since: None,
8717 },
8718 Lint {
8719 label: "once_cell_get_mut",
8720 description: r##"# `once_cell_get_mut`
8721
8722The tracking issue for this feature is: [#121641]
8723
8724[#121641]: https://github.com/rust-lang/rust/issues/121641
8725
8726------------------------
8727"##,
8728 default_severity: Severity::Allow,
8729 warn_since: None,
8730 deny_since: None,
8731 },
8732 Lint {
8733 label: "once_cell_try",
8734 description: r##"# `once_cell_try`
8735
8736The tracking issue for this feature is: [#109737]
8737
8738[#109737]: https://github.com/rust-lang/rust/issues/109737
8739
8740------------------------
8741"##,
8742 default_severity: Severity::Allow,
8743 warn_since: None,
8744 deny_since: None,
8745 },
8746 Lint {
8747 label: "once_cell_try_insert",
8748 description: r##"# `once_cell_try_insert`
8749
8750The tracking issue for this feature is: [#116693]
8751
8752[#116693]: https://github.com/rust-lang/rust/issues/116693
8753
8754------------------------
8755"##,
8756 default_severity: Severity::Allow,
8757 warn_since: None,
8758 deny_since: None,
8759 },
8760 Lint {
8761 label: "once_wait",
8762 description: r##"# `once_wait`
8763
8764The tracking issue for this feature is: [#127527]
8765
8766[#127527]: https://github.com/rust-lang/rust/issues/127527
8767
8768------------------------
8769"##,
8770 default_severity: Severity::Allow,
8771 warn_since: None,
8772 deny_since: None,
8773 },
8774 Lint {
8775 label: "one_sided_range",
8776 description: r##"# `one_sided_range`
8777
8778The tracking issue for this feature is: [#69780]
8779
8780[#69780]: https://github.com/rust-lang/rust/issues/69780
8781
8782------------------------
8783"##,
8784 default_severity: Severity::Allow,
8785 warn_since: None,
8786 deny_since: None,
8787 },
8788 Lint {
8789 label: "optimize_attribute",
8790 description: r##"# `optimize_attribute`
8791
8792The tracking issue for this feature is: [#54882]
8793
8794[#54882]: https://github.com/rust-lang/rust/issues/54882
8795
8796------------------------
8797"##,
8798 default_severity: Severity::Allow,
8799 warn_since: None,
8800 deny_since: None,
8801 },
8802 Lint {
8803 label: "option_array_transpose",
8804 description: r##"# `option_array_transpose`
8805
8806The tracking issue for this feature is: [#130828]
8807
8808[#130828]: https://github.com/rust-lang/rust/issues/130828
8809
8810------------------------
8811"##,
8812 default_severity: Severity::Allow,
8813 warn_since: None,
8814 deny_since: None,
8815 },
8816 Lint {
8817 label: "option_zip",
8818 description: r##"# `option_zip`
8819
8820The tracking issue for this feature is: [#70086]
8821
8822[#70086]: https://github.com/rust-lang/rust/issues/70086
8823
8824------------------------
8825"##,
8826 default_severity: Severity::Allow,
8827 warn_since: None,
8828 deny_since: None,
8829 },
8830 Lint {
8831 label: "os_str_display",
8832 description: r##"# `os_str_display`
8833
8834The tracking issue for this feature is: [#120048]
8835
8836[#120048]: https://github.com/rust-lang/rust/issues/120048
8837
8838------------------------
8839"##,
8840 default_severity: Severity::Allow,
8841 warn_since: None,
8842 deny_since: None,
8843 },
8844 Lint {
8845 label: "os_str_slice",
8846 description: r##"# `os_str_slice`
8847
8848The tracking issue for this feature is: [#118485]
8849
8850[#118485]: https://github.com/rust-lang/rust/issues/118485
8851
8852------------------------
8853"##,
8854 default_severity: Severity::Allow,
8855 warn_since: None,
8856 deny_since: None,
8857 },
8858 Lint {
8859 label: "os_string_pathbuf_leak",
8860 description: r##"# `os_string_pathbuf_leak`
8861
8862The tracking issue for this feature is: [#125965]
8863
8864[#125965]: https://github.com/rust-lang/rust/issues/125965
8865
8866------------------------
8867"##,
8868 default_severity: Severity::Allow,
8869 warn_since: None,
8870 deny_since: None,
8871 },
8872 Lint {
8873 label: "os_string_truncate",
8874 description: r##"# `os_string_truncate`
8875
8876The tracking issue for this feature is: [#133262]
8877
8878[#133262]: https://github.com/rust-lang/rust/issues/133262
8879
8880------------------------
8881"##,
8882 default_severity: Severity::Allow,
8883 warn_since: None,
8884 deny_since: None,
8885 },
8886 Lint {
8887 label: "panic_abort",
8888 description: r##"# `panic_abort`
8889
8890The tracking issue for this feature is: [#32837]
8891
8892[#32837]: https://github.com/rust-lang/rust/issues/32837
8893
8894------------------------
8895"##,
8896 default_severity: Severity::Allow,
8897 warn_since: None,
8898 deny_since: None,
8899 },
8900 Lint {
8901 label: "panic_always_abort",
8902 description: r##"# `panic_always_abort`
8903
8904The tracking issue for this feature is: [#84438]
8905
8906[#84438]: https://github.com/rust-lang/rust/issues/84438
8907
8908------------------------
8909"##,
8910 default_severity: Severity::Allow,
8911 warn_since: None,
8912 deny_since: None,
8913 },
8914 Lint {
8915 label: "panic_backtrace_config",
8916 description: r##"# `panic_backtrace_config`
8917
8918The tracking issue for this feature is: [#93346]
8919
8920[#93346]: https://github.com/rust-lang/rust/issues/93346
8921
8922------------------------
8923"##,
8924 default_severity: Severity::Allow,
8925 warn_since: None,
8926 deny_since: None,
8927 },
8928 Lint {
8929 label: "panic_can_unwind",
8930 description: r##"# `panic_can_unwind`
8931
8932The tracking issue for this feature is: [#92988]
8933
8934[#92988]: https://github.com/rust-lang/rust/issues/92988
8935
8936------------------------
8937"##,
8938 default_severity: Severity::Allow,
8939 warn_since: None,
8940 deny_since: None,
8941 },
8942 Lint {
8943 label: "panic_internals",
8944 description: r##"# `panic_internals`
8945
8946This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
8947
8948------------------------
8949"##,
8950 default_severity: Severity::Allow,
8951 warn_since: None,
8952 deny_since: None,
8953 },
8954 Lint {
8955 label: "panic_payload_as_str",
8956 description: r##"# `panic_payload_as_str`
8957
8958The tracking issue for this feature is: [#125175]
8959
8960[#125175]: https://github.com/rust-lang/rust/issues/125175
8961
8962------------------------
8963"##,
8964 default_severity: Severity::Allow,
8965 warn_since: None,
8966 deny_since: None,
8967 },
8968 Lint {
8969 label: "panic_runtime",
8970 description: r##"# `panic_runtime`
8971
8972The tracking issue for this feature is: [#32837]
8973
8974[#32837]: https://github.com/rust-lang/rust/issues/32837
8975
8976------------------------
8977"##,
8978 default_severity: Severity::Allow,
8979 warn_since: None,
8980 deny_since: None,
8981 },
8982 Lint {
8983 label: "panic_unwind",
8984 description: r##"# `panic_unwind`
8985
8986The tracking issue for this feature is: [#32837]
8987
8988[#32837]: https://github.com/rust-lang/rust/issues/32837
8989
8990------------------------
8991"##,
8992 default_severity: Severity::Allow,
8993 warn_since: None,
8994 deny_since: None,
8995 },
8996 Lint {
8997 label: "panic_update_hook",
8998 description: r##"# `panic_update_hook`
8999
9000The tracking issue for this feature is: [#92649]
9001
9002[#92649]: https://github.com/rust-lang/rust/issues/92649
9003
9004------------------------
9005"##,
9006 default_severity: Severity::Allow,
9007 warn_since: None,
9008 deny_since: None,
9009 },
9010 Lint {
9011 label: "patchable_function_entry",
9012 description: r##"# `patchable_function_entry`
9013
9014The tracking issue for this feature is: [#123115]
9015
9016[#123115]: https://github.com/rust-lang/rust/issues/123115
9017
9018------------------------
9019"##,
9020 default_severity: Severity::Allow,
9021 warn_since: None,
9022 deny_since: None,
9023 },
9024 Lint {
9025 label: "path_add_extension",
9026 description: r##"# `path_add_extension`
9027
9028The tracking issue for this feature is: [#127292]
9029
9030[#127292]: https://github.com/rust-lang/rust/issues/127292
9031
9032------------------------
9033"##,
9034 default_severity: Severity::Allow,
9035 warn_since: None,
9036 deny_since: None,
9037 },
9038 Lint {
9039 label: "path_file_prefix",
9040 description: r##"# `path_file_prefix`
9041
9042The tracking issue for this feature is: [#86319]
9043
9044[#86319]: https://github.com/rust-lang/rust/issues/86319
9045
9046------------------------
9047"##,
9048 default_severity: Severity::Allow,
9049 warn_since: None,
9050 deny_since: None,
9051 },
9052 Lint {
9053 label: "pattern",
9054 description: r##"# `pattern`
9055
9056The tracking issue for this feature is: [#27721]
9057
9058[#27721]: https://github.com/rust-lang/rust/issues/27721
9059
9060------------------------
9061"##,
9062 default_severity: Severity::Allow,
9063 warn_since: None,
9064 deny_since: None,
9065 },
9066 Lint {
9067 label: "pattern_complexity_limit",
9068 description: r##"# `pattern_complexity_limit`
9069
9070This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
9071
9072------------------------
9073"##,
9074 default_severity: Severity::Allow,
9075 warn_since: None,
9076 deny_since: None,
9077 },
9078 Lint {
9079 label: "pattern_type_macro",
9080 description: r##"# `pattern_type_macro`
9081
9082The tracking issue for this feature is: [#123646]
9083
9084[#123646]: https://github.com/rust-lang/rust/issues/123646
9085
9086------------------------
9087"##,
9088 default_severity: Severity::Allow,
9089 warn_since: None,
9090 deny_since: None,
9091 },
9092 Lint {
9093 label: "pattern_types",
9094 description: r##"# `pattern_types`
9095
9096The tracking issue for this feature is: [#123646]
9097
9098[#123646]: https://github.com/rust-lang/rust/issues/123646
9099
9100------------------------
9101"##,
9102 default_severity: Severity::Allow,
9103 warn_since: None,
9104 deny_since: None,
9105 },
9106 Lint {
9107 label: "peer_credentials_unix_socket",
9108 description: r##"# `peer_credentials_unix_socket`
9109
9110The tracking issue for this feature is: [#42839]
9111
9112[#42839]: https://github.com/rust-lang/rust/issues/42839
9113
9114------------------------
9115"##,
9116 default_severity: Severity::Allow,
9117 warn_since: None,
9118 deny_since: None,
9119 },
9120 Lint {
9121 label: "pin_coerce_unsized_trait",
9122 description: r##"# `pin_coerce_unsized_trait`
9123
9124The tracking issue for this feature is: [#123430]
9125
9126[#123430]: https://github.com/rust-lang/rust/issues/123430
9127
9128------------------------
9129"##,
9130 default_severity: Severity::Allow,
9131 warn_since: None,
9132 deny_since: None,
9133 },
9134 Lint {
9135 label: "pin_ergonomics",
9136 description: r##"# `pin_ergonomics`
9137
9138The tracking issue for this feature is: [#130494]
9139
9140[#130494]: https://github.com/rust-lang/rust/issues/130494
9141
9142------------------------
9143"##,
9144 default_severity: Severity::Allow,
9145 warn_since: None,
9146 deny_since: None,
9147 },
9148 Lint {
9149 label: "pointer_is_aligned_to",
9150 description: r##"# `pointer_is_aligned_to`
9151
9152The tracking issue for this feature is: [#96284]
9153
9154[#96284]: https://github.com/rust-lang/rust/issues/96284
9155
9156------------------------
9157"##,
9158 default_severity: Severity::Allow,
9159 warn_since: None,
9160 deny_since: None,
9161 },
9162 Lint {
9163 label: "pointer_like_trait",
9164 description: r##"# `pointer_like_trait`
9165
9166This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
9167
9168------------------------
9169"##,
9170 default_severity: Severity::Allow,
9171 warn_since: None,
9172 deny_since: None,
9173 },
9174 Lint {
9175 label: "portable_simd",
9176 description: r##"# `portable_simd`
9177
9178The tracking issue for this feature is: [#86656]
9179
9180[#86656]: https://github.com/rust-lang/rust/issues/86656
9181
9182------------------------
9183"##,
9184 default_severity: Severity::Allow,
9185 warn_since: None,
9186 deny_since: None,
9187 },
9188 Lint {
9189 label: "postfix_match",
9190 description: r##"# `postfix-match`
9191
9192`postfix-match` adds the feature for matching upon values postfix
9193the expressions that generate the values.
9194
9195The tracking issue for this feature is: [#121618](https://github.com/rust-lang/rust/issues/121618).
9196
9197------------------------
9198
9199```rust,edition2021
9200#![feature(postfix_match)]
9201
9202enum Foo {
9203 Bar,
9204 Baz
9205}
9206
9207fn get_foo() -> Foo {
9208 Foo::Bar
9209}
9210
9211get_foo().match {
9212 Foo::Bar => {},
9213 Foo::Baz => panic!(),
9214}
9215```
9216"##,
9217 default_severity: Severity::Allow,
9218 warn_since: None,
9219 deny_since: None,
9220 },
9221 Lint {
9222 label: "powerpc_target_feature",
9223 description: r##"# `powerpc_target_feature`
9224
9225The tracking issue for this feature is: [#44839]
9226
9227[#44839]: https://github.com/rust-lang/rust/issues/44839
9228
9229------------------------
9230"##,
9231 default_severity: Severity::Allow,
9232 warn_since: None,
9233 deny_since: None,
9234 },
9235 Lint {
9236 label: "precise_capturing_in_traits",
9237 description: r##"# `precise_capturing_in_traits`
9238
9239The tracking issue for this feature is: [#130044]
9240
9241[#130044]: https://github.com/rust-lang/rust/issues/130044
9242
9243------------------------
9244"##,
9245 default_severity: Severity::Allow,
9246 warn_since: None,
9247 deny_since: None,
9248 },
9249 Lint {
9250 label: "prelude_2024",
9251 description: r##"# `prelude_2024`
9252
9253The tracking issue for this feature is: [#121042]
9254
9255[#121042]: https://github.com/rust-lang/rust/issues/121042
9256
9257------------------------
9258"##,
9259 default_severity: Severity::Allow,
9260 warn_since: None,
9261 deny_since: None,
9262 },
9263 Lint {
9264 label: "prelude_import",
9265 description: r##"# `prelude_import`
9266
9267This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
9268
9269------------------------
9270"##,
9271 default_severity: Severity::Allow,
9272 warn_since: None,
9273 deny_since: None,
9274 },
9275 Lint {
9276 label: "prfchw_target_feature",
9277 description: r##"# `prfchw_target_feature`
9278
9279The tracking issue for this feature is: [#44839]
9280
9281[#44839]: https://github.com/rust-lang/rust/issues/44839
9282
9283------------------------
9284"##,
9285 default_severity: Severity::Allow,
9286 warn_since: None,
9287 deny_since: None,
9288 },
9289 Lint {
9290 label: "print_internals",
9291 description: r##"# `print_internals`
9292
9293This feature is internal to the Rust compiler and is not intended for general use.
9294
9295------------------------
9296"##,
9297 default_severity: Severity::Allow,
9298 warn_since: None,
9299 deny_since: None,
9300 },
9301 Lint {
9302 label: "proc_macro_def_site",
9303 description: r##"# `proc_macro_def_site`
9304
9305The tracking issue for this feature is: [#54724]
9306
9307[#54724]: https://github.com/rust-lang/rust/issues/54724
9308
9309------------------------
9310"##,
9311 default_severity: Severity::Allow,
9312 warn_since: None,
9313 deny_since: None,
9314 },
9315 Lint {
9316 label: "proc_macro_diagnostic",
9317 description: r##"# `proc_macro_diagnostic`
9318
9319The tracking issue for this feature is: [#54140]
9320
9321[#54140]: https://github.com/rust-lang/rust/issues/54140
9322
9323------------------------
9324"##,
9325 default_severity: Severity::Allow,
9326 warn_since: None,
9327 deny_since: None,
9328 },
9329 Lint {
9330 label: "proc_macro_expand",
9331 description: r##"# `proc_macro_expand`
9332
9333The tracking issue for this feature is: [#90765]
9334
9335[#90765]: https://github.com/rust-lang/rust/issues/90765
9336
9337------------------------
9338"##,
9339 default_severity: Severity::Allow,
9340 warn_since: None,
9341 deny_since: None,
9342 },
9343 Lint {
9344 label: "proc_macro_hygiene",
9345 description: r##"# `proc_macro_hygiene`
9346
9347The tracking issue for this feature is: [#54727]
9348
9349[#54727]: https://github.com/rust-lang/rust/issues/54727
9350
9351------------------------
9352"##,
9353 default_severity: Severity::Allow,
9354 warn_since: None,
9355 deny_since: None,
9356 },
9357 Lint {
9358 label: "proc_macro_internals",
9359 description: r##"# `proc_macro_internals`
9360
9361The tracking issue for this feature is: [#27812]
9362
9363[#27812]: https://github.com/rust-lang/rust/issues/27812
9364
9365------------------------
9366"##,
9367 default_severity: Severity::Allow,
9368 warn_since: None,
9369 deny_since: None,
9370 },
9371 Lint {
9372 label: "proc_macro_quote",
9373 description: r##"# `proc_macro_quote`
9374
9375The tracking issue for this feature is: [#54722]
9376
9377[#54722]: https://github.com/rust-lang/rust/issues/54722
9378
9379------------------------
9380"##,
9381 default_severity: Severity::Allow,
9382 warn_since: None,
9383 deny_since: None,
9384 },
9385 Lint {
9386 label: "proc_macro_span",
9387 description: r##"# `proc_macro_span`
9388
9389The tracking issue for this feature is: [#54725]
9390
9391[#54725]: https://github.com/rust-lang/rust/issues/54725
9392
9393------------------------
9394"##,
9395 default_severity: Severity::Allow,
9396 warn_since: None,
9397 deny_since: None,
9398 },
9399 Lint {
9400 label: "proc_macro_totokens",
9401 description: r##"# `proc_macro_totokens`
9402
9403The tracking issue for this feature is: [#130977]
9404
9405[#130977]: https://github.com/rust-lang/rust/issues/130977
9406
9407------------------------
9408"##,
9409 default_severity: Severity::Allow,
9410 warn_since: None,
9411 deny_since: None,
9412 },
9413 Lint {
9414 label: "proc_macro_tracked_env",
9415 description: r##"# `proc_macro_tracked_env`
9416
9417The tracking issue for this feature is: [#99515]
9418
9419[#99515]: https://github.com/rust-lang/rust/issues/99515
9420
9421------------------------
9422"##,
9423 default_severity: Severity::Allow,
9424 warn_since: None,
9425 deny_since: None,
9426 },
9427 Lint {
9428 label: "process_exitcode_internals",
9429 description: r##"# `process_exitcode_internals`
9430
9431This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
9432
9433------------------------
9434"##,
9435 default_severity: Severity::Allow,
9436 warn_since: None,
9437 deny_since: None,
9438 },
9439 Lint {
9440 label: "process_internals",
9441 description: r##"# `process_internals`
9442
9443This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
9444
9445------------------------
9446"##,
9447 default_severity: Severity::Allow,
9448 warn_since: None,
9449 deny_since: None,
9450 },
9451 Lint {
9452 label: "profiler_runtime",
9453 description: r##"# `profiler_runtime`
9454
9455The tracking issue for this feature is: [#42524](https://github.com/rust-lang/rust/issues/42524).
9456
9457------------------------
9458"##,
9459 default_severity: Severity::Allow,
9460 warn_since: None,
9461 deny_since: None,
9462 },
9463 Lint {
9464 label: "profiler_runtime_lib",
9465 description: r##"# `profiler_runtime_lib`
9466
9467This feature is internal to the Rust compiler and is not intended for general use.
9468
9469------------------------
9470"##,
9471 default_severity: Severity::Allow,
9472 warn_since: None,
9473 deny_since: None,
9474 },
9475 Lint {
9476 label: "ptr_alignment_type",
9477 description: r##"# `ptr_alignment_type`
9478
9479The tracking issue for this feature is: [#102070]
9480
9481[#102070]: https://github.com/rust-lang/rust/issues/102070
9482
9483------------------------
9484"##,
9485 default_severity: Severity::Allow,
9486 warn_since: None,
9487 deny_since: None,
9488 },
9489 Lint {
9490 label: "ptr_as_ref_unchecked",
9491 description: r##"# `ptr_as_ref_unchecked`
9492
9493The tracking issue for this feature is: [#122034]
9494
9495[#122034]: https://github.com/rust-lang/rust/issues/122034
9496
9497------------------------
9498"##,
9499 default_severity: Severity::Allow,
9500 warn_since: None,
9501 deny_since: None,
9502 },
9503 Lint {
9504 label: "ptr_as_uninit",
9505 description: r##"# `ptr_as_uninit`
9506
9507The tracking issue for this feature is: [#75402]
9508
9509[#75402]: https://github.com/rust-lang/rust/issues/75402
9510
9511------------------------
9512"##,
9513 default_severity: Severity::Allow,
9514 warn_since: None,
9515 deny_since: None,
9516 },
9517 Lint {
9518 label: "ptr_internals",
9519 description: r##"# `ptr_internals`
9520
9521This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
9522
9523------------------------
9524"##,
9525 default_severity: Severity::Allow,
9526 warn_since: None,
9527 deny_since: None,
9528 },
9529 Lint {
9530 label: "ptr_mask",
9531 description: r##"# `ptr_mask`
9532
9533The tracking issue for this feature is: [#98290]
9534
9535[#98290]: https://github.com/rust-lang/rust/issues/98290
9536
9537------------------------
9538"##,
9539 default_severity: Severity::Allow,
9540 warn_since: None,
9541 deny_since: None,
9542 },
9543 Lint {
9544 label: "ptr_metadata",
9545 description: r##"# `ptr_metadata`
9546
9547The tracking issue for this feature is: [#81513]
9548
9549[#81513]: https://github.com/rust-lang/rust/issues/81513
9550
9551------------------------
9552"##,
9553 default_severity: Severity::Allow,
9554 warn_since: None,
9555 deny_since: None,
9556 },
9557 Lint {
9558 label: "ptr_sub_ptr",
9559 description: r##"# `ptr_sub_ptr`
9560
9561The tracking issue for this feature is: [#95892]
9562
9563[#95892]: https://github.com/rust-lang/rust/issues/95892
9564
9565------------------------
9566"##,
9567 default_severity: Severity::Allow,
9568 warn_since: None,
9569 deny_since: None,
9570 },
9571 Lint {
9572 label: "pub_crate_should_not_need_unstable_attr",
9573 description: r##"# `pub_crate_should_not_need_unstable_attr`
9574
9575This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
9576
9577------------------------
9578"##,
9579 default_severity: Severity::Allow,
9580 warn_since: None,
9581 deny_since: None,
9582 },
9583 Lint {
9584 label: "random",
9585 description: r##"# `random`
9586
9587The tracking issue for this feature is: [#130703]
9588
9589[#130703]: https://github.com/rust-lang/rust/issues/130703
9590
9591------------------------
9592"##,
9593 default_severity: Severity::Allow,
9594 warn_since: None,
9595 deny_since: None,
9596 },
9597 Lint {
9598 label: "raw_os_error_ty",
9599 description: r##"# `raw_os_error_ty`
9600
9601The tracking issue for this feature is: [#107792]
9602
9603[#107792]: https://github.com/rust-lang/rust/issues/107792
9604
9605------------------------
9606"##,
9607 default_severity: Severity::Allow,
9608 warn_since: None,
9609 deny_since: None,
9610 },
9611 Lint {
9612 label: "raw_slice_split",
9613 description: r##"# `raw_slice_split`
9614
9615The tracking issue for this feature is: [#95595]
9616
9617[#95595]: https://github.com/rust-lang/rust/issues/95595
9618
9619------------------------
9620"##,
9621 default_severity: Severity::Allow,
9622 warn_since: None,
9623 deny_since: None,
9624 },
9625 Lint {
9626 label: "raw_vec_internals",
9627 description: r##"# `raw_vec_internals`
9628
9629This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
9630
9631------------------------
9632"##,
9633 default_severity: Severity::Allow,
9634 warn_since: None,
9635 deny_since: None,
9636 },
9637 Lint {
9638 label: "read_buf",
9639 description: r##"# `read_buf`
9640
9641The tracking issue for this feature is: [#78485]
9642
9643[#78485]: https://github.com/rust-lang/rust/issues/78485
9644
9645------------------------
9646"##,
9647 default_severity: Severity::Allow,
9648 warn_since: None,
9649 deny_since: None,
9650 },
9651 Lint {
9652 label: "reentrant_lock",
9653 description: r##"# `reentrant_lock`
9654
9655The tracking issue for this feature is: [#121440]
9656
9657[#121440]: https://github.com/rust-lang/rust/issues/121440
9658
9659------------------------
9660"##,
9661 default_severity: Severity::Allow,
9662 warn_since: None,
9663 deny_since: None,
9664 },
9665 Lint {
9666 label: "ref_pat_eat_one_layer_2024",
9667 description: r##"# `ref_pat_eat_one_layer_2024`
9668
9669The tracking issue for this feature is: [#123076]
9670
9671[#123076]: https://github.com/rust-lang/rust/issues/123076
9672
9673------------------------
9674"##,
9675 default_severity: Severity::Allow,
9676 warn_since: None,
9677 deny_since: None,
9678 },
9679 Lint {
9680 label: "ref_pat_eat_one_layer_2024_structural",
9681 description: r##"# `ref_pat_eat_one_layer_2024_structural`
9682
9683The tracking issue for this feature is: [#123076]
9684
9685[#123076]: https://github.com/rust-lang/rust/issues/123076
9686
9687------------------------
9688"##,
9689 default_severity: Severity::Allow,
9690 warn_since: None,
9691 deny_since: None,
9692 },
9693 Lint {
9694 label: "register_tool",
9695 description: r##"# `register_tool`
9696
9697The tracking issue for this feature is: [#66079]
9698
9699[#66079]: https://github.com/rust-lang/rust/issues/66079
9700
9701------------------------
9702"##,
9703 default_severity: Severity::Allow,
9704 warn_since: None,
9705 deny_since: None,
9706 },
9707 Lint {
9708 label: "repr128",
9709 description: r##"# `repr128`
9710
9711The tracking issue for this feature is: [#56071]
9712
9713[#56071]: https://github.com/rust-lang/rust/issues/56071
9714
9715------------------------
9716
9717The `repr128` feature adds support for `#[repr(u128)]` on `enum`s.
9718
9719```rust
9720#![feature(repr128)]
9721
9722#[repr(u128)]
9723enum Foo {
9724 Bar(u64),
9725}
9726```
9727"##,
9728 default_severity: Severity::Allow,
9729 warn_since: None,
9730 deny_since: None,
9731 },
9732 Lint {
9733 label: "repr_simd",
9734 description: r##"# `repr_simd`
9735
9736The tracking issue for this feature is: [#27731]
9737
9738[#27731]: https://github.com/rust-lang/rust/issues/27731
9739
9740------------------------
9741"##,
9742 default_severity: Severity::Allow,
9743 warn_since: None,
9744 deny_since: None,
9745 },
9746 Lint {
9747 label: "restricted_std",
9748 description: r##"# `restricted_std`
9749
9750This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
9751
9752------------------------
9753"##,
9754 default_severity: Severity::Allow,
9755 warn_since: None,
9756 deny_since: None,
9757 },
9758 Lint {
9759 label: "result_flattening",
9760 description: r##"# `result_flattening`
9761
9762The tracking issue for this feature is: [#70142]
9763
9764[#70142]: https://github.com/rust-lang/rust/issues/70142
9765
9766------------------------
9767"##,
9768 default_severity: Severity::Allow,
9769 warn_since: None,
9770 deny_since: None,
9771 },
9772 Lint {
9773 label: "return_type_notation",
9774 description: r##"# `return_type_notation`
9775
9776The tracking issue for this feature is: [#109417]
9777
9778[#109417]: https://github.com/rust-lang/rust/issues/109417
9779
9780------------------------
9781"##,
9782 default_severity: Severity::Allow,
9783 warn_since: None,
9784 deny_since: None,
9785 },
9786 Lint {
9787 label: "riscv_target_feature",
9788 description: r##"# `riscv_target_feature`
9789
9790The tracking issue for this feature is: [#44839]
9791
9792[#44839]: https://github.com/rust-lang/rust/issues/44839
9793
9794------------------------
9795"##,
9796 default_severity: Severity::Allow,
9797 warn_since: None,
9798 deny_since: None,
9799 },
9800 Lint {
9801 label: "round_char_boundary",
9802 description: r##"# `round_char_boundary`
9803
9804The tracking issue for this feature is: [#93743]
9805
9806[#93743]: https://github.com/rust-lang/rust/issues/93743
9807
9808------------------------
9809"##,
9810 default_severity: Severity::Allow,
9811 warn_since: None,
9812 deny_since: None,
9813 },
9814 Lint {
9815 label: "rt",
9816 description: r##"# `rt`
9817
9818This feature is internal to the Rust compiler and is not intended for general use.
9819
9820------------------------
9821"##,
9822 default_severity: Severity::Allow,
9823 warn_since: None,
9824 deny_since: None,
9825 },
9826 Lint {
9827 label: "rtm_target_feature",
9828 description: r##"# `rtm_target_feature`
9829
9830The tracking issue for this feature is: [#44839]
9831
9832[#44839]: https://github.com/rust-lang/rust/issues/44839
9833
9834------------------------
9835"##,
9836 default_severity: Severity::Allow,
9837 warn_since: None,
9838 deny_since: None,
9839 },
9840 Lint {
9841 label: "rust_cold_cc",
9842 description: r##"# `rust_cold_cc`
9843
9844The tracking issue for this feature is: [#97544]
9845
9846[#97544]: https://github.com/rust-lang/rust/issues/97544
9847
9848------------------------
9849"##,
9850 default_severity: Severity::Allow,
9851 warn_since: None,
9852 deny_since: None,
9853 },
9854 Lint {
9855 label: "rustc_allow_const_fn_unstable",
9856 description: r##"# `rustc_allow_const_fn_unstable`
9857
9858The tracking issue for this feature is: [#69399]
9859
9860[#69399]: https://github.com/rust-lang/rust/issues/69399
9861
9862------------------------
9863"##,
9864 default_severity: Severity::Allow,
9865 warn_since: None,
9866 deny_since: None,
9867 },
9868 Lint {
9869 label: "rustc_attrs",
9870 description: r##"# `rustc_attrs`
9871
9872This feature has no tracking issue, and is therefore internal to
9873the compiler, not being intended for general use.
9874
9875Note: `rustc_attrs` enables many rustc-internal attributes and this page
9876only discuss a few of them.
9877
9878------------------------
9879
9880The `rustc_attrs` feature allows debugging rustc type layouts by using
9881`#[rustc_layout(...)]` to debug layout at compile time (it even works
9882with `cargo check`) as an alternative to `rustc -Z print-type-sizes`
9883that is way more verbose.
9884
9885Options provided by `#[rustc_layout(...)]` are `debug`, `size`, `align`,
9886`abi`. Note that it only works on sized types without generics.
9887
9888## Examples
9889
9890```rust,compile_fail
9891#![feature(rustc_attrs)]
9892
9893#[rustc_layout(abi, size)]
9894pub enum X {
9895 Y(u8, u8, u8),
9896 Z(isize),
9897}
9898```
9899
9900When that is compiled, the compiler will error with something like
9901
9902```text
9903error: abi: Aggregate { sized: true }
9904 --> src/lib.rs:4:1
9905 |
99064 | / pub enum T {
99075 | | Y(u8, u8, u8),
99086 | | Z(isize),
99097 | | }
9910 | |_^
9911
9912error: size: Size { raw: 16 }
9913 --> src/lib.rs:4:1
9914 |
99154 | / pub enum T {
99165 | | Y(u8, u8, u8),
99176 | | Z(isize),
99187 | | }
9919 | |_^
9920
9921error: aborting due to 2 previous errors
9922```
9923"##,
9924 default_severity: Severity::Allow,
9925 warn_since: None,
9926 deny_since: None,
9927 },
9928 Lint {
9929 label: "rustc_encodable_decodable",
9930 description: r##"# `rustc_encodable_decodable`
9931
9932This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
9933
9934------------------------
9935"##,
9936 default_severity: Severity::Allow,
9937 warn_since: None,
9938 deny_since: None,
9939 },
9940 Lint {
9941 label: "rustc_private",
9942 description: r##"# `rustc_private`
9943
9944The tracking issue for this feature is: [#27812]
9945
9946[#27812]: https://github.com/rust-lang/rust/issues/27812
9947
9948------------------------
9949
9950This feature allows access to unstable internal compiler crates.
9951
9952Additionally it changes the linking behavior of crates which have this feature enabled. It will prevent linking to a dylib if there's a static variant of it already statically linked into another dylib dependency. This is required to successfully link to `rustc_driver`.
9953"##,
9954 default_severity: Severity::Allow,
9955 warn_since: None,
9956 deny_since: None,
9957 },
9958 Lint {
9959 label: "rustdoc_internals",
9960 description: r##"# `rustdoc_internals`
9961
9962The tracking issue for this feature is: [#90418]
9963
9964[#90418]: https://github.com/rust-lang/rust/issues/90418
9965
9966------------------------
9967"##,
9968 default_severity: Severity::Allow,
9969 warn_since: None,
9970 deny_since: None,
9971 },
9972 Lint {
9973 label: "rustdoc_missing_doc_code_examples",
9974 description: r##"# `rustdoc_missing_doc_code_examples`
9975
9976The tracking issue for this feature is: [#101730]
9977
9978[#101730]: https://github.com/rust-lang/rust/issues/101730
9979
9980------------------------
9981"##,
9982 default_severity: Severity::Allow,
9983 warn_since: None,
9984 deny_since: None,
9985 },
9986 Lint {
9987 label: "rwlock_downgrade",
9988 description: r##"# `rwlock_downgrade`
9989
9990The tracking issue for this feature is: [#128203]
9991
9992[#128203]: https://github.com/rust-lang/rust/issues/128203
9993
9994------------------------
9995"##,
9996 default_severity: Severity::Allow,
9997 warn_since: None,
9998 deny_since: None,
9999 },
10000 Lint {
10001 label: "s390x_target_feature",
10002 description: r##"# `s390x_target_feature`
10003
10004The tracking issue for this feature is: [#44839]
10005
10006[#44839]: https://github.com/rust-lang/rust/issues/44839
10007
10008------------------------
10009"##,
10010 default_severity: Severity::Allow,
10011 warn_since: None,
10012 deny_since: None,
10013 },
10014 Lint {
10015 label: "sealed",
10016 description: r##"# `sealed`
10017
10018This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
10019
10020------------------------
10021"##,
10022 default_severity: Severity::Allow,
10023 warn_since: None,
10024 deny_since: None,
10025 },
10026 Lint {
10027 label: "seek_stream_len",
10028 description: r##"# `seek_stream_len`
10029
10030The tracking issue for this feature is: [#59359]
10031
10032[#59359]: https://github.com/rust-lang/rust/issues/59359
10033
10034------------------------
10035"##,
10036 default_severity: Severity::Allow,
10037 warn_since: None,
10038 deny_since: None,
10039 },
10040 Lint {
10041 label: "set_ptr_value",
10042 description: r##"# `set_ptr_value`
10043
10044The tracking issue for this feature is: [#75091]
10045
10046[#75091]: https://github.com/rust-lang/rust/issues/75091
10047
10048------------------------
10049"##,
10050 default_severity: Severity::Allow,
10051 warn_since: None,
10052 deny_since: None,
10053 },
10054 Lint {
10055 label: "setgroups",
10056 description: r##"# `setgroups`
10057
10058The tracking issue for this feature is: [#90747]
10059
10060[#90747]: https://github.com/rust-lang/rust/issues/90747
10061
10062------------------------
10063"##,
10064 default_severity: Severity::Allow,
10065 warn_since: None,
10066 deny_since: None,
10067 },
10068 Lint {
10069 label: "sgx_platform",
10070 description: r##"# `sgx_platform`
10071
10072The tracking issue for this feature is: [#56975]
10073
10074[#56975]: https://github.com/rust-lang/rust/issues/56975
10075
10076------------------------
10077"##,
10078 default_severity: Severity::Allow,
10079 warn_since: None,
10080 deny_since: None,
10081 },
10082 Lint {
10083 label: "sha512_sm_x86",
10084 description: r##"# `sha512_sm_x86`
10085
10086The tracking issue for this feature is: [#126624]
10087
10088[#126624]: https://github.com/rust-lang/rust/issues/126624
10089
10090------------------------
10091"##,
10092 default_severity: Severity::Allow,
10093 warn_since: None,
10094 deny_since: None,
10095 },
10096 Lint {
10097 label: "simd_ffi",
10098 description: r##"# `simd_ffi`
10099
10100The tracking issue for this feature is: [#27731]
10101
10102[#27731]: https://github.com/rust-lang/rust/issues/27731
10103
10104------------------------
10105"##,
10106 default_severity: Severity::Allow,
10107 warn_since: None,
10108 deny_since: None,
10109 },
10110 Lint {
10111 label: "sized_type_properties",
10112 description: r##"# `sized_type_properties`
10113
10114This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
10115
10116------------------------
10117"##,
10118 default_severity: Severity::Allow,
10119 warn_since: None,
10120 deny_since: None,
10121 },
10122 Lint {
10123 label: "slice_as_array",
10124 description: r##"# `slice_as_array`
10125
10126The tracking issue for this feature is: [#133508]
10127
10128[#133508]: https://github.com/rust-lang/rust/issues/133508
10129
10130------------------------
10131"##,
10132 default_severity: Severity::Allow,
10133 warn_since: None,
10134 deny_since: None,
10135 },
10136 Lint {
10137 label: "slice_as_chunks",
10138 description: r##"# `slice_as_chunks`
10139
10140The tracking issue for this feature is: [#74985]
10141
10142[#74985]: https://github.com/rust-lang/rust/issues/74985
10143
10144------------------------
10145"##,
10146 default_severity: Severity::Allow,
10147 warn_since: None,
10148 deny_since: None,
10149 },
10150 Lint {
10151 label: "slice_concat_ext",
10152 description: r##"# `slice_concat_ext`
10153
10154The tracking issue for this feature is: [#27747]
10155
10156[#27747]: https://github.com/rust-lang/rust/issues/27747
10157
10158------------------------
10159"##,
10160 default_severity: Severity::Allow,
10161 warn_since: None,
10162 deny_since: None,
10163 },
10164 Lint {
10165 label: "slice_concat_trait",
10166 description: r##"# `slice_concat_trait`
10167
10168The tracking issue for this feature is: [#27747]
10169
10170[#27747]: https://github.com/rust-lang/rust/issues/27747
10171
10172------------------------
10173"##,
10174 default_severity: Severity::Allow,
10175 warn_since: None,
10176 deny_since: None,
10177 },
10178 Lint {
10179 label: "slice_from_ptr_range",
10180 description: r##"# `slice_from_ptr_range`
10181
10182The tracking issue for this feature is: [#89792]
10183
10184[#89792]: https://github.com/rust-lang/rust/issues/89792
10185
10186------------------------
10187"##,
10188 default_severity: Severity::Allow,
10189 warn_since: None,
10190 deny_since: None,
10191 },
10192 Lint {
10193 label: "slice_index_methods",
10194 description: r##"# `slice_index_methods`
10195
10196This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
10197
10198------------------------
10199"##,
10200 default_severity: Severity::Allow,
10201 warn_since: None,
10202 deny_since: None,
10203 },
10204 Lint {
10205 label: "slice_internals",
10206 description: r##"# `slice_internals`
10207
10208This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
10209
10210------------------------
10211"##,
10212 default_severity: Severity::Allow,
10213 warn_since: None,
10214 deny_since: None,
10215 },
10216 Lint {
10217 label: "slice_iter_mut_as_mut_slice",
10218 description: r##"# `slice_iter_mut_as_mut_slice`
10219
10220The tracking issue for this feature is: [#93079]
10221
10222[#93079]: https://github.com/rust-lang/rust/issues/93079
10223
10224------------------------
10225"##,
10226 default_severity: Severity::Allow,
10227 warn_since: None,
10228 deny_since: None,
10229 },
10230 Lint {
10231 label: "slice_partition_dedup",
10232 description: r##"# `slice_partition_dedup`
10233
10234The tracking issue for this feature is: [#54279]
10235
10236[#54279]: https://github.com/rust-lang/rust/issues/54279
10237
10238------------------------
10239"##,
10240 default_severity: Severity::Allow,
10241 warn_since: None,
10242 deny_since: None,
10243 },
10244 Lint {
10245 label: "slice_pattern",
10246 description: r##"# `slice_pattern`
10247
10248The tracking issue for this feature is: [#56345]
10249
10250[#56345]: https://github.com/rust-lang/rust/issues/56345
10251
10252------------------------
10253"##,
10254 default_severity: Severity::Allow,
10255 warn_since: None,
10256 deny_since: None,
10257 },
10258 Lint {
10259 label: "slice_ptr_get",
10260 description: r##"# `slice_ptr_get`
10261
10262The tracking issue for this feature is: [#74265]
10263
10264[#74265]: https://github.com/rust-lang/rust/issues/74265
10265
10266------------------------
10267"##,
10268 default_severity: Severity::Allow,
10269 warn_since: None,
10270 deny_since: None,
10271 },
10272 Lint {
10273 label: "slice_range",
10274 description: r##"# `slice_range`
10275
10276The tracking issue for this feature is: [#76393]
10277
10278[#76393]: https://github.com/rust-lang/rust/issues/76393
10279
10280------------------------
10281"##,
10282 default_severity: Severity::Allow,
10283 warn_since: None,
10284 deny_since: None,
10285 },
10286 Lint {
10287 label: "slice_split_once",
10288 description: r##"# `slice_split_once`
10289
10290The tracking issue for this feature is: [#112811]
10291
10292[#112811]: https://github.com/rust-lang/rust/issues/112811
10293
10294------------------------
10295"##,
10296 default_severity: Severity::Allow,
10297 warn_since: None,
10298 deny_since: None,
10299 },
10300 Lint {
10301 label: "slice_swap_unchecked",
10302 description: r##"# `slice_swap_unchecked`
10303
10304The tracking issue for this feature is: [#88539]
10305
10306[#88539]: https://github.com/rust-lang/rust/issues/88539
10307
10308------------------------
10309"##,
10310 default_severity: Severity::Allow,
10311 warn_since: None,
10312 deny_since: None,
10313 },
10314 Lint {
10315 label: "slice_take",
10316 description: r##"# `slice_take`
10317
10318The tracking issue for this feature is: [#62280]
10319
10320[#62280]: https://github.com/rust-lang/rust/issues/62280
10321
10322------------------------
10323"##,
10324 default_severity: Severity::Allow,
10325 warn_since: None,
10326 deny_since: None,
10327 },
10328 Lint {
10329 label: "solid_ext",
10330 description: r##"# `solid_ext`
10331
10332This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
10333
10334------------------------
10335"##,
10336 default_severity: Severity::Allow,
10337 warn_since: None,
10338 deny_since: None,
10339 },
10340 Lint {
10341 label: "sort_floats",
10342 description: r##"# `sort_floats`
10343
10344The tracking issue for this feature is: [#93396]
10345
10346[#93396]: https://github.com/rust-lang/rust/issues/93396
10347
10348------------------------
10349"##,
10350 default_severity: Severity::Allow,
10351 warn_since: None,
10352 deny_since: None,
10353 },
10354 Lint {
10355 label: "sparc_target_feature",
10356 description: r##"# `sparc_target_feature`
10357
10358The tracking issue for this feature is: [#132783]
10359
10360[#132783]: https://github.com/rust-lang/rust/issues/132783
10361
10362------------------------
10363"##,
10364 default_severity: Severity::Allow,
10365 warn_since: None,
10366 deny_since: None,
10367 },
10368 Lint {
10369 label: "specialization",
10370 description: r##"# `specialization`
10371
10372The tracking issue for this feature is: [#31844]
10373
10374[#31844]: https://github.com/rust-lang/rust/issues/31844
10375
10376------------------------
10377"##,
10378 default_severity: Severity::Allow,
10379 warn_since: None,
10380 deny_since: None,
10381 },
10382 Lint {
10383 label: "split_array",
10384 description: r##"# `split_array`
10385
10386The tracking issue for this feature is: [#90091]
10387
10388[#90091]: https://github.com/rust-lang/rust/issues/90091
10389
10390------------------------
10391"##,
10392 default_severity: Severity::Allow,
10393 warn_since: None,
10394 deny_since: None,
10395 },
10396 Lint {
10397 label: "split_as_slice",
10398 description: r##"# `split_as_slice`
10399
10400The tracking issue for this feature is: [#96137]
10401
10402[#96137]: https://github.com/rust-lang/rust/issues/96137
10403
10404------------------------
10405"##,
10406 default_severity: Severity::Allow,
10407 warn_since: None,
10408 deny_since: None,
10409 },
10410 Lint {
10411 label: "sse4a_target_feature",
10412 description: r##"# `sse4a_target_feature`
10413
10414The tracking issue for this feature is: [#44839]
10415
10416[#44839]: https://github.com/rust-lang/rust/issues/44839
10417
10418------------------------
10419"##,
10420 default_severity: Severity::Allow,
10421 warn_since: None,
10422 deny_since: None,
10423 },
10424 Lint {
10425 label: "staged_api",
10426 description: r##"# `staged_api`
10427
10428This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
10429
10430------------------------
10431"##,
10432 default_severity: Severity::Allow,
10433 warn_since: None,
10434 deny_since: None,
10435 },
10436 Lint {
10437 label: "start",
10438 description: r##"# `start`
10439
10440The tracking issue for this feature is: [#29633]
10441
10442[#29633]: https://github.com/rust-lang/rust/issues/29633
10443
10444------------------------
10445
10446Allows you to mark a function as the entry point of the executable, which is
10447necessary in `#![no_std]` environments.
10448
10449The function marked `#[start]` is passed the command line parameters in the same
10450format as the C main function (aside from the integer types being used).
10451It has to be non-generic and have the following signature:
10452
10453```rust,ignore (only-for-syntax-highlight)
10454# let _:
10455fn(isize, *const *const u8) -> isize
10456# ;
10457```
10458
10459This feature should not be confused with the `start` *lang item* which is
10460defined by the `std` crate and is written `#[lang = "start"]`.
10461
10462## Usage together with the `std` crate
10463
10464`#[start]` can be used in combination with the `std` crate, in which case the
10465normal `main` function (which would get called from the `std` crate) won't be
10466used as an entry point.
10467The initialization code in `std` will be skipped this way.
10468
10469Example:
10470
10471```rust
10472#![feature(start)]
10473
10474#[start]
10475fn start(_argc: isize, _argv: *const *const u8) -> isize {
10476 0
10477}
10478```
10479
10480Unwinding the stack past the `#[start]` function is currently considered
10481Undefined Behavior (for any unwinding implementation):
10482
10483```rust,ignore (UB)
10484#![feature(start)]
10485
10486#[start]
10487fn start(_argc: isize, _argv: *const *const u8) -> isize {
10488 std::panic::catch_unwind(|| {
10489 panic!(); // panic safely gets caught or safely aborts execution
10490 });
10491
10492 panic!(); // UB!
10493
10494 0
10495}
10496```
10497"##,
10498 default_severity: Severity::Allow,
10499 warn_since: None,
10500 deny_since: None,
10501 },
10502 Lint {
10503 label: "std_internals",
10504 description: r##"# `std_internals`
10505
10506This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
10507
10508------------------------
10509"##,
10510 default_severity: Severity::Allow,
10511 warn_since: None,
10512 deny_since: None,
10513 },
10514 Lint {
10515 label: "stdarch_arm_feature_detection",
10516 description: r##"# `stdarch_arm_feature_detection`
10517
10518The tracking issue for this feature is: [#111190]
10519
10520[#111190]: https://github.com/rust-lang/rust/issues/111190
10521
10522------------------------
10523"##,
10524 default_severity: Severity::Allow,
10525 warn_since: None,
10526 deny_since: None,
10527 },
10528 Lint {
10529 label: "stdarch_mips_feature_detection",
10530 description: r##"# `stdarch_mips_feature_detection`
10531
10532The tracking issue for this feature is: [#111188]
10533
10534[#111188]: https://github.com/rust-lang/rust/issues/111188
10535
10536------------------------
10537"##,
10538 default_severity: Severity::Allow,
10539 warn_since: None,
10540 deny_since: None,
10541 },
10542 Lint {
10543 label: "stdarch_powerpc_feature_detection",
10544 description: r##"# `stdarch_powerpc_feature_detection`
10545
10546The tracking issue for this feature is: [#111191]
10547
10548[#111191]: https://github.com/rust-lang/rust/issues/111191
10549
10550------------------------
10551"##,
10552 default_severity: Severity::Allow,
10553 warn_since: None,
10554 deny_since: None,
10555 },
10556 Lint {
10557 label: "stdio_makes_pipe",
10558 description: r##"# `stdio_makes_pipe`
10559
10560The tracking issue for this feature is: [#98288]
10561
10562[#98288]: https://github.com/rust-lang/rust/issues/98288
10563
10564------------------------
10565"##,
10566 default_severity: Severity::Allow,
10567 warn_since: None,
10568 deny_since: None,
10569 },
10570 Lint {
10571 label: "step_trait",
10572 description: r##"# `step_trait`
10573
10574The tracking issue for this feature is: [#42168]
10575
10576[#42168]: https://github.com/rust-lang/rust/issues/42168
10577
10578------------------------
10579"##,
10580 default_severity: Severity::Allow,
10581 warn_since: None,
10582 deny_since: None,
10583 },
10584 Lint {
10585 label: "stmt_expr_attributes",
10586 description: r##"# `stmt_expr_attributes`
10587
10588The tracking issue for this feature is: [#15701]
10589
10590[#15701]: https://github.com/rust-lang/rust/issues/15701
10591
10592------------------------
10593"##,
10594 default_severity: Severity::Allow,
10595 warn_since: None,
10596 deny_since: None,
10597 },
10598 Lint {
10599 label: "str_as_str",
10600 description: r##"# `str_as_str`
10601
10602The tracking issue for this feature is: [#130366]
10603
10604[#130366]: https://github.com/rust-lang/rust/issues/130366
10605
10606------------------------
10607"##,
10608 default_severity: Severity::Allow,
10609 warn_since: None,
10610 deny_since: None,
10611 },
10612 Lint {
10613 label: "str_from_raw_parts",
10614 description: r##"# `str_from_raw_parts`
10615
10616The tracking issue for this feature is: [#119206]
10617
10618[#119206]: https://github.com/rust-lang/rust/issues/119206
10619
10620------------------------
10621"##,
10622 default_severity: Severity::Allow,
10623 warn_since: None,
10624 deny_since: None,
10625 },
10626 Lint {
10627 label: "str_from_utf16_endian",
10628 description: r##"# `str_from_utf16_endian`
10629
10630The tracking issue for this feature is: [#116258]
10631
10632[#116258]: https://github.com/rust-lang/rust/issues/116258
10633
10634------------------------
10635"##,
10636 default_severity: Severity::Allow,
10637 warn_since: None,
10638 deny_since: None,
10639 },
10640 Lint {
10641 label: "str_internals",
10642 description: r##"# `str_internals`
10643
10644This feature is internal to the Rust compiler and is not intended for general use.
10645
10646------------------------
10647"##,
10648 default_severity: Severity::Allow,
10649 warn_since: None,
10650 deny_since: None,
10651 },
10652 Lint {
10653 label: "str_lines_remainder",
10654 description: r##"# `str_lines_remainder`
10655
10656The tracking issue for this feature is: [#77998]
10657
10658[#77998]: https://github.com/rust-lang/rust/issues/77998
10659
10660------------------------
10661"##,
10662 default_severity: Severity::Allow,
10663 warn_since: None,
10664 deny_since: None,
10665 },
10666 Lint {
10667 label: "str_split_inclusive_remainder",
10668 description: r##"# `str_split_inclusive_remainder`
10669
10670The tracking issue for this feature is: [#77998]
10671
10672[#77998]: https://github.com/rust-lang/rust/issues/77998
10673
10674------------------------
10675"##,
10676 default_severity: Severity::Allow,
10677 warn_since: None,
10678 deny_since: None,
10679 },
10680 Lint {
10681 label: "str_split_remainder",
10682 description: r##"# `str_split_remainder`
10683
10684The tracking issue for this feature is: [#77998]
10685
10686[#77998]: https://github.com/rust-lang/rust/issues/77998
10687
10688------------------------
10689"##,
10690 default_severity: Severity::Allow,
10691 warn_since: None,
10692 deny_since: None,
10693 },
10694 Lint {
10695 label: "str_split_whitespace_remainder",
10696 description: r##"# `str_split_whitespace_remainder`
10697
10698The tracking issue for this feature is: [#77998]
10699
10700[#77998]: https://github.com/rust-lang/rust/issues/77998
10701
10702------------------------
10703"##,
10704 default_severity: Severity::Allow,
10705 warn_since: None,
10706 deny_since: None,
10707 },
10708 Lint {
10709 label: "strict_provenance_atomic_ptr",
10710 description: r##"# `strict_provenance_atomic_ptr`
10711
10712The tracking issue for this feature is: [#99108]
10713
10714[#99108]: https://github.com/rust-lang/rust/issues/99108
10715
10716------------------------
10717"##,
10718 default_severity: Severity::Allow,
10719 warn_since: None,
10720 deny_since: None,
10721 },
10722 Lint {
10723 label: "strict_provenance_lints",
10724 description: r##"# `strict_provenance_lints`
10725
10726The tracking issue for this feature is: [#95228]
10727
10728[#95228]: https://github.com/rust-lang/rust/issues/95228
10729-----
10730
10731The `strict_provenance_lints` feature allows to enable the `fuzzy_provenance_casts` and `lossy_provenance_casts` lints.
10732These lint on casts between integers and pointers, that are recommended against or invalid in the strict provenance model.
10733
10734## Example
10735
10736```rust
10737#![feature(strict_provenance_lints)]
10738#![warn(fuzzy_provenance_casts)]
10739
10740fn main() {
10741 let _dangling = 16_usize as *const u8;
10742 //~^ WARNING: strict provenance disallows casting integer `usize` to pointer `*const u8`
10743}
10744```
10745"##,
10746 default_severity: Severity::Allow,
10747 warn_since: None,
10748 deny_since: None,
10749 },
10750 Lint {
10751 label: "string_deref_patterns",
10752 description: r##"# `string_deref_patterns`
10753
10754The tracking issue for this feature is: [#87121]
10755
10756[#87121]: https://github.com/rust-lang/rust/issues/87121
10757
10758------------------------
10759
10760This feature permits pattern matching `String` to `&str` through [its `Deref` implementation].
10761
10762```rust
10763#![feature(string_deref_patterns)]
10764
10765pub enum Value {
10766 String(String),
10767 Number(u32),
10768}
10769
10770pub fn is_it_the_answer(value: Value) -> bool {
10771 match value {
10772 Value::String("42") => true,
10773 Value::Number(42) => true,
10774 _ => false,
10775 }
10776}
10777```
10778
10779Without this feature other constructs such as match guards have to be used.
10780
10781```rust
10782# pub enum Value {
10783# String(String),
10784# Number(u32),
10785# }
10786#
10787pub fn is_it_the_answer(value: Value) -> bool {
10788 match value {
10789 Value::String(s) if s == "42" => true,
10790 Value::Number(42) => true,
10791 _ => false,
10792 }
10793}
10794```
10795
10796[its `Deref` implementation]: https://doc.rust-lang.org/std/string/struct.String.html#impl-Deref-for-String
10797"##,
10798 default_severity: Severity::Allow,
10799 warn_since: None,
10800 deny_since: None,
10801 },
10802 Lint {
10803 label: "string_extend_from_within",
10804 description: r##"# `string_extend_from_within`
10805
10806The tracking issue for this feature is: [#103806]
10807
10808[#103806]: https://github.com/rust-lang/rust/issues/103806
10809
10810------------------------
10811"##,
10812 default_severity: Severity::Allow,
10813 warn_since: None,
10814 deny_since: None,
10815 },
10816 Lint {
10817 label: "string_from_utf8_lossy_owned",
10818 description: r##"# `string_from_utf8_lossy_owned`
10819
10820The tracking issue for this feature is: [#129436]
10821
10822[#129436]: https://github.com/rust-lang/rust/issues/129436
10823
10824------------------------
10825"##,
10826 default_severity: Severity::Allow,
10827 warn_since: None,
10828 deny_since: None,
10829 },
10830 Lint {
10831 label: "string_remove_matches",
10832 description: r##"# `string_remove_matches`
10833
10834The tracking issue for this feature is: [#72826]
10835
10836[#72826]: https://github.com/rust-lang/rust/issues/72826
10837
10838------------------------
10839"##,
10840 default_severity: Severity::Allow,
10841 warn_since: None,
10842 deny_since: None,
10843 },
10844 Lint {
10845 label: "structural_match",
10846 description: r##"# `structural_match`
10847
10848The tracking issue for this feature is: [#31434]
10849
10850[#31434]: https://github.com/rust-lang/rust/issues/31434
10851
10852------------------------
10853"##,
10854 default_severity: Severity::Allow,
10855 warn_since: None,
10856 deny_since: None,
10857 },
10858 Lint {
10859 label: "substr_range",
10860 description: r##"# `substr_range`
10861
10862The tracking issue for this feature is: [#126769]
10863
10864[#126769]: https://github.com/rust-lang/rust/issues/126769
10865
10866------------------------
10867"##,
10868 default_severity: Severity::Allow,
10869 warn_since: None,
10870 deny_since: None,
10871 },
10872 Lint {
10873 label: "sync_unsafe_cell",
10874 description: r##"# `sync_unsafe_cell`
10875
10876The tracking issue for this feature is: [#95439]
10877
10878[#95439]: https://github.com/rust-lang/rust/issues/95439
10879
10880------------------------
10881"##,
10882 default_severity: Severity::Allow,
10883 warn_since: None,
10884 deny_since: None,
10885 },
10886 Lint {
10887 label: "target_feature_11",
10888 description: r##"# `target_feature_11`
10889
10890The tracking issue for this feature is: [#69098]
10891
10892[#69098]: https://github.com/rust-lang/rust/issues/69098
10893
10894------------------------
10895"##,
10896 default_severity: Severity::Allow,
10897 warn_since: None,
10898 deny_since: None,
10899 },
10900 Lint {
10901 label: "tbm_target_feature",
10902 description: r##"# `tbm_target_feature`
10903
10904The tracking issue for this feature is: [#44839]
10905
10906[#44839]: https://github.com/rust-lang/rust/issues/44839
10907
10908------------------------
10909"##,
10910 default_severity: Severity::Allow,
10911 warn_since: None,
10912 deny_since: None,
10913 },
10914 Lint {
10915 label: "tcp_deferaccept",
10916 description: r##"# `tcp_deferaccept`
10917
10918The tracking issue for this feature is: [#119639]
10919
10920[#119639]: https://github.com/rust-lang/rust/issues/119639
10921
10922------------------------
10923"##,
10924 default_severity: Severity::Allow,
10925 warn_since: None,
10926 deny_since: None,
10927 },
10928 Lint {
10929 label: "tcp_linger",
10930 description: r##"# `tcp_linger`
10931
10932The tracking issue for this feature is: [#88494]
10933
10934[#88494]: https://github.com/rust-lang/rust/issues/88494
10935
10936------------------------
10937"##,
10938 default_severity: Severity::Allow,
10939 warn_since: None,
10940 deny_since: None,
10941 },
10942 Lint {
10943 label: "tcp_quickack",
10944 description: r##"# `tcp_quickack`
10945
10946The tracking issue for this feature is: [#96256]
10947
10948[#96256]: https://github.com/rust-lang/rust/issues/96256
10949
10950------------------------
10951"##,
10952 default_severity: Severity::Allow,
10953 warn_since: None,
10954 deny_since: None,
10955 },
10956 Lint {
10957 label: "tcplistener_into_incoming",
10958 description: r##"# `tcplistener_into_incoming`
10959
10960The tracking issue for this feature is: [#88373]
10961
10962[#88373]: https://github.com/rust-lang/rust/issues/88373
10963
10964------------------------
10965"##,
10966 default_severity: Severity::Allow,
10967 warn_since: None,
10968 deny_since: None,
10969 },
10970 Lint {
10971 label: "test",
10972 description: r##"# `test`
10973
10974The tracking issue for this feature is: None.
10975
10976------------------------
10977
10978The internals of the `test` crate are unstable, behind the `test` flag. The
10979most widely used part of the `test` crate are benchmark tests, which can test
10980the performance of your code. Let's make our `src/lib.rs` look like this
10981(comments elided):
10982
10983```rust,no_run
10984#![feature(test)]
10985
10986extern crate test;
10987
10988pub fn add_two(a: i32) -> i32 {
10989 a + 2
10990}
10991
10992#[cfg(test)]
10993mod tests {
10994 use super::*;
10995 use test::Bencher;
10996
10997 #[test]
10998 fn it_works() {
10999 assert_eq!(4, add_two(2));
11000 }
11001
11002 #[bench]
11003 fn bench_add_two(b: &mut Bencher) {
11004 b.iter(|| add_two(2));
11005 }
11006}
11007```
11008
11009Note the `test` feature gate, which enables this unstable feature.
11010
11011We've imported the `test` crate, which contains our benchmarking support.
11012We have a new function as well, with the `bench` attribute. Unlike regular
11013tests, which take no arguments, benchmark tests take a `&mut Bencher`. This
11014`Bencher` provides an `iter` method, which takes a closure. This closure
11015contains the code we'd like to benchmark.
11016
11017We can run benchmark tests with `cargo bench`:
11018
11019```bash
11020$ cargo bench
11021 Compiling adder v0.0.1 (file:///home/steve/tmp/adder)
11022 Running target/release/adder-91b3e234d4ed382a
11023
11024running 2 tests
11025test tests::it_works ... ignored
11026test tests::bench_add_two ... bench: 1 ns/iter (+/- 0)
11027
11028test result: ok. 0 passed; 0 failed; 1 ignored; 1 measured
11029```
11030
11031Our non-benchmark test was ignored. You may have noticed that `cargo bench`
11032takes a bit longer than `cargo test`. This is because Rust runs our benchmark
11033a number of times, and then takes the average. Because we're doing so little
11034work in this example, we have a `1 ns/iter (+/- 0)`, but this would show
11035the variance if there was one.
11036
11037Advice on writing benchmarks:
11038
11039
11040* Move setup code outside the `iter` loop; only put the part you want to measure inside
11041* Make the code do "the same thing" on each iteration; do not accumulate or change state
11042* Make the outer function idempotent too; the benchmark runner is likely to run
11043 it many times
11044* Make the inner `iter` loop short and fast so benchmark runs are fast and the
11045 calibrator can adjust the run-length at fine resolution
11046* Make the code in the `iter` loop do something simple, to assist in pinpointing
11047 performance improvements (or regressions)
11048
11049## Gotcha: optimizations
11050
11051There's another tricky part to writing benchmarks: benchmarks compiled with
11052optimizations activated can be dramatically changed by the optimizer so that
11053the benchmark is no longer benchmarking what one expects. For example, the
11054compiler might recognize that some calculation has no external effects and
11055remove it entirely.
11056
11057```rust,no_run
11058#![feature(test)]
11059
11060extern crate test;
11061use test::Bencher;
11062
11063#[bench]
11064fn bench_xor_1000_ints(b: &mut Bencher) {
11065 b.iter(|| {
11066 (0..1000).fold(0, |old, new| old ^ new);
11067 });
11068}
11069```
11070
11071gives the following results
11072
11073```text
11074running 1 test
11075test bench_xor_1000_ints ... bench: 0 ns/iter (+/- 0)
11076
11077test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured
11078```
11079
11080The benchmarking runner offers two ways to avoid this. Either, the closure that
11081the `iter` method receives can return an arbitrary value which forces the
11082optimizer to consider the result used and ensures it cannot remove the
11083computation entirely. This could be done for the example above by adjusting the
11084`b.iter` call to
11085
11086```rust
11087# struct X;
11088# impl X { fn iter<T, F>(&self, _: F) where F: FnMut() -> T {} } let b = X;
11089b.iter(|| {
11090 // Note lack of `;` (could also use an explicit `return`).
11091 (0..1000).fold(0, |old, new| old ^ new)
11092});
11093```
11094
11095Or, the other option is to call the generic `test::black_box` function, which
11096is an opaque "black box" to the optimizer and so forces it to consider any
11097argument as used.
11098
11099```rust
11100#![feature(test)]
11101
11102extern crate test;
11103
11104# fn main() {
11105# struct X;
11106# impl X { fn iter<T, F>(&self, _: F) where F: FnMut() -> T {} } let b = X;
11107b.iter(|| {
11108 let n = test::black_box(1000);
11109
11110 (0..n).fold(0, |a, b| a ^ b)
11111})
11112# }
11113```
11114
11115Neither of these read or modify the value, and are very cheap for small values.
11116Larger values can be passed indirectly to reduce overhead (e.g.
11117`black_box(&huge_struct)`).
11118
11119Performing either of the above changes gives the following benchmarking results
11120
11121```text
11122running 1 test
11123test bench_xor_1000_ints ... bench: 131 ns/iter (+/- 3)
11124
11125test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured
11126```
11127
11128However, the optimizer can still modify a testcase in an undesirable manner
11129even when using either of the above.
11130"##,
11131 default_severity: Severity::Allow,
11132 warn_since: None,
11133 deny_since: None,
11134 },
11135 Lint {
11136 label: "test_unstable_lint",
11137 description: r##"# `test_unstable_lint`
11138
11139This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
11140
11141------------------------
11142"##,
11143 default_severity: Severity::Allow,
11144 warn_since: None,
11145 deny_since: None,
11146 },
11147 Lint {
11148 label: "thin_box",
11149 description: r##"# `thin_box`
11150
11151The tracking issue for this feature is: [#92791]
11152
11153[#92791]: https://github.com/rust-lang/rust/issues/92791
11154
11155------------------------
11156"##,
11157 default_severity: Severity::Allow,
11158 warn_since: None,
11159 deny_since: None,
11160 },
11161 Lint {
11162 label: "thread_id_value",
11163 description: r##"# `thread_id_value`
11164
11165The tracking issue for this feature is: [#67939]
11166
11167[#67939]: https://github.com/rust-lang/rust/issues/67939
11168
11169------------------------
11170"##,
11171 default_severity: Severity::Allow,
11172 warn_since: None,
11173 deny_since: None,
11174 },
11175 Lint {
11176 label: "thread_local",
11177 description: r##"# `thread_local`
11178
11179The tracking issue for this feature is: [#29594]
11180
11181[#29594]: https://github.com/rust-lang/rust/issues/29594
11182
11183------------------------
11184"##,
11185 default_severity: Severity::Allow,
11186 warn_since: None,
11187 deny_since: None,
11188 },
11189 Lint {
11190 label: "thread_local_internals",
11191 description: r##"# `thread_local_internals`
11192
11193This feature is internal to the Rust compiler and is not intended for general use.
11194
11195------------------------
11196"##,
11197 default_severity: Severity::Allow,
11198 warn_since: None,
11199 deny_since: None,
11200 },
11201 Lint {
11202 label: "thread_raw",
11203 description: r##"# `thread_raw`
11204
11205The tracking issue for this feature is: [#97523]
11206
11207[#97523]: https://github.com/rust-lang/rust/issues/97523
11208
11209------------------------
11210"##,
11211 default_severity: Severity::Allow,
11212 warn_since: None,
11213 deny_since: None,
11214 },
11215 Lint {
11216 label: "thread_sleep_until",
11217 description: r##"# `thread_sleep_until`
11218
11219The tracking issue for this feature is: [#113752]
11220
11221[#113752]: https://github.com/rust-lang/rust/issues/113752
11222
11223------------------------
11224"##,
11225 default_severity: Severity::Allow,
11226 warn_since: None,
11227 deny_since: None,
11228 },
11229 Lint {
11230 label: "thread_spawn_hook",
11231 description: r##"# `thread_spawn_hook`
11232
11233The tracking issue for this feature is: [#132951]
11234
11235[#132951]: https://github.com/rust-lang/rust/issues/132951
11236
11237------------------------
11238"##,
11239 default_severity: Severity::Allow,
11240 warn_since: None,
11241 deny_since: None,
11242 },
11243 Lint {
11244 label: "trace_macros",
11245 description: r##"# `trace_macros`
11246
11247The tracking issue for this feature is [#29598].
11248
11249[#29598]: https://github.com/rust-lang/rust/issues/29598
11250
11251------------------------
11252
11253With `trace_macros` you can trace the expansion of macros in your code.
11254
11255## Examples
11256
11257```rust
11258#![feature(trace_macros)]
11259
11260fn main() {
11261 trace_macros!(true);
11262 println!("Hello, Rust!");
11263 trace_macros!(false);
11264}
11265```
11266
11267The `cargo build` output:
11268
11269```txt
11270note: trace_macro
11271 --> src/main.rs:5:5
11272 |
112735 | println!("Hello, Rust!");
11274 | ^^^^^^^^^^^^^^^^^^^^^^^^^
11275 |
11276 = note: expanding `println! { "Hello, Rust!" }`
11277 = note: to `print ! ( concat ! ( "Hello, Rust!" , "\n" ) )`
11278 = note: expanding `print! { concat ! ( "Hello, Rust!" , "\n" ) }`
11279 = note: to `$crate :: io :: _print ( format_args ! ( concat ! ( "Hello, Rust!" , "\n" ) )
11280 )`
11281
11282 Finished dev [unoptimized + debuginfo] target(s) in 0.60 secs
11283```
11284"##,
11285 default_severity: Severity::Allow,
11286 warn_since: None,
11287 deny_since: None,
11288 },
11289 Lint {
11290 label: "track_path",
11291 description: r##"# `track_path`
11292
11293The tracking issue for this feature is: [#99515]
11294
11295[#99515]: https://github.com/rust-lang/rust/issues/99515
11296
11297------------------------
11298"##,
11299 default_severity: Severity::Allow,
11300 warn_since: None,
11301 deny_since: None,
11302 },
11303 Lint {
11304 label: "trait_alias",
11305 description: r##"# `trait_alias`
11306
11307The tracking issue for this feature is: [#41517]
11308
11309[#41517]: https://github.com/rust-lang/rust/issues/41517
11310
11311------------------------
11312
11313The `trait_alias` feature adds support for trait aliases. These allow aliases
11314to be created for one or more traits (currently just a single regular trait plus
11315any number of auto-traits), and used wherever traits would normally be used as
11316either bounds or trait objects.
11317
11318```rust
11319#![feature(trait_alias)]
11320
11321trait Foo = std::fmt::Debug + Send;
11322trait Bar = Foo + Sync;
11323
11324// Use trait alias as bound on type parameter.
11325fn foo<T: Foo>(v: &T) {
11326 println!("{:?}", v);
11327}
11328
11329pub fn main() {
11330 foo(&1);
11331
11332 // Use trait alias for trait objects.
11333 let a: &Bar = &123;
11334 println!("{:?}", a);
11335 let b = Box::new(456) as Box<dyn Foo>;
11336 println!("{:?}", b);
11337}
11338```
11339"##,
11340 default_severity: Severity::Allow,
11341 warn_since: None,
11342 deny_since: None,
11343 },
11344 Lint {
11345 label: "trait_upcasting",
11346 description: r##"# `trait_upcasting`
11347
11348The tracking issue for this feature is: [#65991]
11349
11350[#65991]: https://github.com/rust-lang/rust/issues/65991
11351
11352------------------------
11353
11354The `trait_upcasting` feature adds support for trait upcasting coercion. This allows a
11355trait object of type `dyn Bar` to be cast to a trait object of type `dyn Foo`
11356so long as `Bar: Foo`.
11357
11358```rust,edition2018
11359#![feature(trait_upcasting)]
11360
11361trait Foo {}
11362
11363trait Bar: Foo {}
11364
11365impl Foo for i32 {}
11366
11367impl<T: Foo + ?Sized> Bar for T {}
11368
11369let bar: &dyn Bar = &123;
11370let foo: &dyn Foo = bar;
11371```
11372"##,
11373 default_severity: Severity::Allow,
11374 warn_since: None,
11375 deny_since: None,
11376 },
11377 Lint {
11378 label: "transmutability",
11379 description: r##"# `transmutability`
11380
11381The tracking issue for this feature is: [#99571]
11382
11383[#99571]: https://github.com/rust-lang/rust/issues/99571
11384
11385------------------------
11386"##,
11387 default_severity: Severity::Allow,
11388 warn_since: None,
11389 deny_since: None,
11390 },
11391 Lint {
11392 label: "transmute_generic_consts",
11393 description: r##"# `transmute_generic_consts`
11394
11395The tracking issue for this feature is: [#109929]
11396
11397[#109929]: https://github.com/rust-lang/rust/issues/109929
11398
11399------------------------
11400"##,
11401 default_severity: Severity::Allow,
11402 warn_since: None,
11403 deny_since: None,
11404 },
11405 Lint {
11406 label: "transparent_unions",
11407 description: r##"# `transparent_unions`
11408
11409The tracking issue for this feature is [#60405]
11410
11411[#60405]: https://github.com/rust-lang/rust/issues/60405
11412
11413----
11414
11415The `transparent_unions` feature allows you mark `union`s as
11416`#[repr(transparent)]`. A `union` may be `#[repr(transparent)]` in exactly the
11417same conditions in which a `struct` may be `#[repr(transparent)]` (generally,
11418this means the `union` must have exactly one non-zero-sized field). Some
11419concrete illustrations follow.
11420
11421```rust
11422#![feature(transparent_unions)]
11423
11424// This union has the same representation as `f32`.
11425#[repr(transparent)]
11426union SingleFieldUnion {
11427 field: f32,
11428}
11429
11430// This union has the same representation as `usize`.
11431#[repr(transparent)]
11432union MultiFieldUnion {
11433 field: usize,
11434 nothing: (),
11435}
11436```
11437
11438For consistency with transparent `struct`s, `union`s must have exactly one
11439non-zero-sized field. If all fields are zero-sized, the `union` must not be
11440`#[repr(transparent)]`:
11441
11442```rust
11443#![feature(transparent_unions)]
11444
11445// This (non-transparent) union is already valid in stable Rust:
11446pub union GoodUnion {
11447 pub nothing: (),
11448}
11449
11450// Error: transparent union needs exactly one non-zero-sized field, but has 0
11451// #[repr(transparent)]
11452// pub union BadUnion {
11453// pub nothing: (),
11454// }
11455```
11456
11457The one exception is if the `union` is generic over `T` and has a field of type
11458`T`, it may be `#[repr(transparent)]` even if `T` is a zero-sized type:
11459
11460```rust
11461#![feature(transparent_unions)]
11462
11463// This union has the same representation as `T`.
11464#[repr(transparent)]
11465pub union GenericUnion<T: Copy> { // Unions with non-`Copy` fields are unstable.
11466 pub field: T,
11467 pub nothing: (),
11468}
11469
11470// This is okay even though `()` is a zero-sized type.
11471pub const THIS_IS_OKAY: GenericUnion<()> = GenericUnion { field: () };
11472```
11473
11474Like transparent `struct`s, a transparent `union` of type `U` has the same
11475layout, size, and ABI as its single non-ZST field. If it is generic over a type
11476`T`, and all its fields are ZSTs except for exactly one field of type `T`, then
11477it has the same layout and ABI as `T` (even if `T` is a ZST when monomorphized).
11478
11479Like transparent `struct`s, transparent `union`s are FFI-safe if and only if
11480their underlying representation type is also FFI-safe.
11481
11482A `union` may not be eligible for the same nonnull-style optimizations that a
11483`struct` or `enum` (with the same fields) are eligible for. Adding
11484`#[repr(transparent)]` to `union` does not change this. To give a more concrete
11485example, it is unspecified whether `size_of::<T>()` is equal to
11486`size_of::<Option<T>>()`, where `T` is a `union` (regardless of whether or not
11487it is transparent). The Rust compiler is free to perform this optimization if
11488possible, but is not required to, and different compiler versions may differ in
11489their application of these optimizations.
11490"##,
11491 default_severity: Severity::Allow,
11492 warn_since: None,
11493 deny_since: None,
11494 },
11495 Lint {
11496 label: "trivial_bounds",
11497 description: r##"# `trivial_bounds`
11498
11499The tracking issue for this feature is: [#48214]
11500
11501[#48214]: https://github.com/rust-lang/rust/issues/48214
11502
11503------------------------
11504"##,
11505 default_severity: Severity::Allow,
11506 warn_since: None,
11507 deny_since: None,
11508 },
11509 Lint {
11510 label: "trusted_fused",
11511 description: r##"# `trusted_fused`
11512
11513This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
11514
11515------------------------
11516"##,
11517 default_severity: Severity::Allow,
11518 warn_since: None,
11519 deny_since: None,
11520 },
11521 Lint {
11522 label: "trusted_len",
11523 description: r##"# `trusted_len`
11524
11525The tracking issue for this feature is: [#37572]
11526
11527[#37572]: https://github.com/rust-lang/rust/issues/37572
11528
11529------------------------
11530"##,
11531 default_severity: Severity::Allow,
11532 warn_since: None,
11533 deny_since: None,
11534 },
11535 Lint {
11536 label: "trusted_len_next_unchecked",
11537 description: r##"# `trusted_len_next_unchecked`
11538
11539The tracking issue for this feature is: [#37572]
11540
11541[#37572]: https://github.com/rust-lang/rust/issues/37572
11542
11543------------------------
11544"##,
11545 default_severity: Severity::Allow,
11546 warn_since: None,
11547 deny_since: None,
11548 },
11549 Lint {
11550 label: "trusted_random_access",
11551 description: r##"# `trusted_random_access`
11552
11553This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
11554
11555------------------------
11556"##,
11557 default_severity: Severity::Allow,
11558 warn_since: None,
11559 deny_since: None,
11560 },
11561 Lint {
11562 label: "trusted_step",
11563 description: r##"# `trusted_step`
11564
11565The tracking issue for this feature is: [#85731]
11566
11567[#85731]: https://github.com/rust-lang/rust/issues/85731
11568
11569------------------------
11570"##,
11571 default_severity: Severity::Allow,
11572 warn_since: None,
11573 deny_since: None,
11574 },
11575 Lint {
11576 label: "try_blocks",
11577 description: r##"# `try_blocks`
11578
11579The tracking issue for this feature is: [#31436]
11580
11581[#31436]: https://github.com/rust-lang/rust/issues/31436
11582
11583------------------------
11584
11585The `try_blocks` feature adds support for `try` blocks. A `try`
11586block creates a new scope one can use the `?` operator in.
11587
11588```rust,edition2018
11589#![feature(try_blocks)]
11590
11591use std::num::ParseIntError;
11592
11593let result: Result<i32, ParseIntError> = try {
11594 "1".parse::<i32>()?
11595 + "2".parse::<i32>()?
11596 + "3".parse::<i32>()?
11597};
11598assert_eq!(result, Ok(6));
11599
11600let result: Result<i32, ParseIntError> = try {
11601 "1".parse::<i32>()?
11602 + "foo".parse::<i32>()?
11603 + "3".parse::<i32>()?
11604};
11605assert!(result.is_err());
11606```
11607"##,
11608 default_severity: Severity::Allow,
11609 warn_since: None,
11610 deny_since: None,
11611 },
11612 Lint {
11613 label: "try_find",
11614 description: r##"# `try_find`
11615
11616The tracking issue for this feature is: [#63178]
11617
11618[#63178]: https://github.com/rust-lang/rust/issues/63178
11619
11620------------------------
11621"##,
11622 default_severity: Severity::Allow,
11623 warn_since: None,
11624 deny_since: None,
11625 },
11626 Lint {
11627 label: "try_reserve_kind",
11628 description: r##"# `try_reserve_kind`
11629
11630The tracking issue for this feature is: [#48043]
11631
11632[#48043]: https://github.com/rust-lang/rust/issues/48043
11633
11634------------------------
11635"##,
11636 default_severity: Severity::Allow,
11637 warn_since: None,
11638 deny_since: None,
11639 },
11640 Lint {
11641 label: "try_trait_v2",
11642 description: r##"# `try_trait_v2`
11643
11644The tracking issue for this feature is: [#84277]
11645
11646[#84277]: https://github.com/rust-lang/rust/issues/84277
11647
11648------------------------
11649"##,
11650 default_severity: Severity::Allow,
11651 warn_since: None,
11652 deny_since: None,
11653 },
11654 Lint {
11655 label: "try_trait_v2_residual",
11656 description: r##"# `try_trait_v2_residual`
11657
11658The tracking issue for this feature is: [#91285]
11659
11660[#91285]: https://github.com/rust-lang/rust/issues/91285
11661
11662------------------------
11663"##,
11664 default_severity: Severity::Allow,
11665 warn_since: None,
11666 deny_since: None,
11667 },
11668 Lint {
11669 label: "try_trait_v2_yeet",
11670 description: r##"# `try_trait_v2_yeet`
11671
11672The tracking issue for this feature is: [#96374]
11673
11674[#96374]: https://github.com/rust-lang/rust/issues/96374
11675
11676------------------------
11677"##,
11678 default_severity: Severity::Allow,
11679 warn_since: None,
11680 deny_since: None,
11681 },
11682 Lint {
11683 label: "try_with_capacity",
11684 description: r##"# `try_with_capacity`
11685
11686The tracking issue for this feature is: [#91913]
11687
11688[#91913]: https://github.com/rust-lang/rust/issues/91913
11689
11690------------------------
11691"##,
11692 default_severity: Severity::Allow,
11693 warn_since: None,
11694 deny_since: None,
11695 },
11696 Lint {
11697 label: "tuple_trait",
11698 description: r##"# `tuple_trait`
11699
11700This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
11701
11702------------------------
11703"##,
11704 default_severity: Severity::Allow,
11705 warn_since: None,
11706 deny_since: None,
11707 },
11708 Lint {
11709 label: "type_alias_impl_trait",
11710 description: r##"# `type_alias_impl_trait`
11711
11712The tracking issue for this feature is: [#63063]
11713
11714[#63063]: https://github.com/rust-lang/rust/issues/63063
11715
11716------------------------
11717"##,
11718 default_severity: Severity::Allow,
11719 warn_since: None,
11720 deny_since: None,
11721 },
11722 Lint {
11723 label: "type_ascription",
11724 description: r##"# `type_ascription`
11725
11726The tracking issue for this feature is: [#23416]
11727
11728[#23416]: https://github.com/rust-lang/rust/issues/23416
11729
11730------------------------
11731"##,
11732 default_severity: Severity::Allow,
11733 warn_since: None,
11734 deny_since: None,
11735 },
11736 Lint {
11737 label: "type_changing_struct_update",
11738 description: r##"# `type_changing_struct_update`
11739
11740The tracking issue for this feature is: [#86555]
11741
11742[#86555]: https://github.com/rust-lang/rust/issues/86555
11743
11744------------------------
11745
11746This implements [RFC2528]. When turned on, you can create instances of the same struct
11747that have different generic type or lifetime parameters.
11748
11749[RFC2528]: https://github.com/rust-lang/rfcs/blob/master/text/2528-type-changing-struct-update-syntax.md
11750
11751```rust
11752#![allow(unused_variables, dead_code)]
11753#![feature(type_changing_struct_update)]
11754
11755fn main () {
11756 struct Foo<T, U> {
11757 field1: T,
11758 field2: U,
11759 }
11760
11761 let base: Foo<String, i32> = Foo {
11762 field1: String::from("hello"),
11763 field2: 1234,
11764 };
11765 let updated: Foo<f64, i32> = Foo {
11766 field1: 3.14,
11767 ..base
11768 };
11769}
11770```
11771"##,
11772 default_severity: Severity::Allow,
11773 warn_since: None,
11774 deny_since: None,
11775 },
11776 Lint {
11777 label: "ub_checks",
11778 description: r##"# `ub_checks`
11779
11780This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
11781
11782------------------------
11783"##,
11784 default_severity: Severity::Allow,
11785 warn_since: None,
11786 deny_since: None,
11787 },
11788 Lint {
11789 label: "uefi_std",
11790 description: r##"# `uefi_std`
11791
11792The tracking issue for this feature is: [#100499]
11793
11794[#100499]: https://github.com/rust-lang/rust/issues/100499
11795
11796------------------------
11797"##,
11798 default_severity: Severity::Allow,
11799 warn_since: None,
11800 deny_since: None,
11801 },
11802 Lint {
11803 label: "unbounded_shifts",
11804 description: r##"# `unbounded_shifts`
11805
11806The tracking issue for this feature is: [#129375]
11807
11808[#129375]: https://github.com/rust-lang/rust/issues/129375
11809
11810------------------------
11811"##,
11812 default_severity: Severity::Allow,
11813 warn_since: None,
11814 deny_since: None,
11815 },
11816 Lint {
11817 label: "unboxed_closures",
11818 description: r##"# `unboxed_closures`
11819
11820The tracking issue for this feature is [#29625]
11821
11822See Also: [`fn_traits`](../library-features/fn-traits.md)
11823
11824[#29625]: https://github.com/rust-lang/rust/issues/29625
11825
11826----
11827
11828The `unboxed_closures` feature allows you to write functions using the `"rust-call"` ABI,
11829required for implementing the [`Fn*`] family of traits. `"rust-call"` functions must have
11830exactly one (non self) argument, a tuple representing the argument list.
11831
11832[`Fn*`]: ../../std/ops/trait.Fn.html
11833
11834```rust
11835#![feature(unboxed_closures)]
11836
11837extern "rust-call" fn add_args(args: (u32, u32)) -> u32 {
11838 args.0 + args.1
11839}
11840
11841fn main() {}
11842```
11843"##,
11844 default_severity: Severity::Allow,
11845 warn_since: None,
11846 deny_since: None,
11847 },
11848 Lint {
11849 label: "unchecked_neg",
11850 description: r##"# `unchecked_neg`
11851
11852The tracking issue for this feature is: [#85122]
11853
11854[#85122]: https://github.com/rust-lang/rust/issues/85122
11855
11856------------------------
11857"##,
11858 default_severity: Severity::Allow,
11859 warn_since: None,
11860 deny_since: None,
11861 },
11862 Lint {
11863 label: "unchecked_shifts",
11864 description: r##"# `unchecked_shifts`
11865
11866The tracking issue for this feature is: [#85122]
11867
11868[#85122]: https://github.com/rust-lang/rust/issues/85122
11869
11870------------------------
11871"##,
11872 default_severity: Severity::Allow,
11873 warn_since: None,
11874 deny_since: None,
11875 },
11876 Lint {
11877 label: "unicode_internals",
11878 description: r##"# `unicode_internals`
11879
11880This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
11881
11882------------------------
11883"##,
11884 default_severity: Severity::Allow,
11885 warn_since: None,
11886 deny_since: None,
11887 },
11888 Lint {
11889 label: "unique_rc_arc",
11890 description: r##"# `unique_rc_arc`
11891
11892The tracking issue for this feature is: [#112566]
11893
11894[#112566]: https://github.com/rust-lang/rust/issues/112566
11895
11896------------------------
11897"##,
11898 default_severity: Severity::Allow,
11899 warn_since: None,
11900 deny_since: None,
11901 },
11902 Lint {
11903 label: "unix_file_vectored_at",
11904 description: r##"# `unix_file_vectored_at`
11905
11906The tracking issue for this feature is: [#89517]
11907
11908[#89517]: https://github.com/rust-lang/rust/issues/89517
11909
11910------------------------
11911"##,
11912 default_severity: Severity::Allow,
11913 warn_since: None,
11914 deny_since: None,
11915 },
11916 Lint {
11917 label: "unix_set_mark",
11918 description: r##"# `unix_set_mark`
11919
11920The tracking issue for this feature is: [#96467]
11921
11922[#96467]: https://github.com/rust-lang/rust/issues/96467
11923
11924------------------------
11925"##,
11926 default_severity: Severity::Allow,
11927 warn_since: None,
11928 deny_since: None,
11929 },
11930 Lint {
11931 label: "unix_socket_ancillary_data",
11932 description: r##"# `unix_socket_ancillary_data`
11933
11934The tracking issue for this feature is: [#76915]
11935
11936[#76915]: https://github.com/rust-lang/rust/issues/76915
11937
11938------------------------
11939"##,
11940 default_severity: Severity::Allow,
11941 warn_since: None,
11942 deny_since: None,
11943 },
11944 Lint {
11945 label: "unix_socket_peek",
11946 description: r##"# `unix_socket_peek`
11947
11948The tracking issue for this feature is: [#76923]
11949
11950[#76923]: https://github.com/rust-lang/rust/issues/76923
11951
11952------------------------
11953"##,
11954 default_severity: Severity::Allow,
11955 warn_since: None,
11956 deny_since: None,
11957 },
11958 Lint {
11959 label: "unqualified_local_imports",
11960 description: r##"# `unqualified_local_imports`
11961
11962This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
11963
11964------------------------
11965"##,
11966 default_severity: Severity::Allow,
11967 warn_since: None,
11968 deny_since: None,
11969 },
11970 Lint {
11971 label: "unsafe_fields",
11972 description: r##"# `unsafe_fields`
11973
11974The tracking issue for this feature is: [#132922]
11975
11976[#132922]: https://github.com/rust-lang/rust/issues/132922
11977
11978------------------------
11979"##,
11980 default_severity: Severity::Allow,
11981 warn_since: None,
11982 deny_since: None,
11983 },
11984 Lint {
11985 label: "unsafe_pin_internals",
11986 description: r##"# `unsafe_pin_internals`
11987
11988This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
11989
11990------------------------
11991"##,
11992 default_severity: Severity::Allow,
11993 warn_since: None,
11994 deny_since: None,
11995 },
11996 Lint {
11997 label: "unsigned_is_multiple_of",
11998 description: r##"# `unsigned_is_multiple_of`
11999
12000The tracking issue for this feature is: [#128101]
12001
12002[#128101]: https://github.com/rust-lang/rust/issues/128101
12003
12004------------------------
12005"##,
12006 default_severity: Severity::Allow,
12007 warn_since: None,
12008 deny_since: None,
12009 },
12010 Lint {
12011 label: "unsigned_nonzero_div_ceil",
12012 description: r##"# `unsigned_nonzero_div_ceil`
12013
12014The tracking issue for this feature is: [#132968]
12015
12016[#132968]: https://github.com/rust-lang/rust/issues/132968
12017
12018------------------------
12019"##,
12020 default_severity: Severity::Allow,
12021 warn_since: None,
12022 deny_since: None,
12023 },
12024 Lint {
12025 label: "unsigned_signed_diff",
12026 description: r##"# `unsigned_signed_diff`
12027
12028The tracking issue for this feature is: [#126041]
12029
12030[#126041]: https://github.com/rust-lang/rust/issues/126041
12031
12032------------------------
12033"##,
12034 default_severity: Severity::Allow,
12035 warn_since: None,
12036 deny_since: None,
12037 },
12038 Lint {
12039 label: "unsize",
12040 description: r##"# `unsize`
12041
12042The tracking issue for this feature is: [#18598]
12043
12044[#18598]: https://github.com/rust-lang/rust/issues/18598
12045
12046------------------------
12047"##,
12048 default_severity: Severity::Allow,
12049 warn_since: None,
12050 deny_since: None,
12051 },
12052 Lint {
12053 label: "unsized_const_params",
12054 description: r##"# `unsized_const_params`
12055
12056The tracking issue for this feature is: [#95174]
12057
12058[#95174]: https://github.com/rust-lang/rust/issues/95174
12059
12060------------------------
12061"##,
12062 default_severity: Severity::Allow,
12063 warn_since: None,
12064 deny_since: None,
12065 },
12066 Lint {
12067 label: "unsized_fn_params",
12068 description: r##"# `unsized_fn_params`
12069
12070The tracking issue for this feature is: [#48055]
12071
12072[#48055]: https://github.com/rust-lang/rust/issues/48055
12073
12074------------------------
12075"##,
12076 default_severity: Severity::Allow,
12077 warn_since: None,
12078 deny_since: None,
12079 },
12080 Lint {
12081 label: "unsized_locals",
12082 description: r##"# `unsized_locals`
12083
12084The tracking issue for this feature is: [#48055]
12085
12086[#48055]: https://github.com/rust-lang/rust/issues/48055
12087
12088------------------------
12089
12090This implements [RFC1909]. When turned on, you can have unsized arguments and locals:
12091
12092[RFC1909]: https://github.com/rust-lang/rfcs/blob/master/text/1909-unsized-rvalues.md
12093
12094```rust
12095#![allow(incomplete_features)]
12096#![feature(unsized_locals, unsized_fn_params)]
12097
12098use std::any::Any;
12099
12100fn main() {
12101 let x: Box<dyn Any> = Box::new(42);
12102 let x: dyn Any = *x;
12103 // ^ unsized local variable
12104 // ^^ unsized temporary
12105 foo(x);
12106}
12107
12108fn foo(_: dyn Any) {}
12109// ^^^^^^ unsized argument
12110```
12111
12112The RFC still forbids the following unsized expressions:
12113
12114```rust,compile_fail
12115#![feature(unsized_locals)]
12116
12117use std::any::Any;
12118
12119struct MyStruct<T: ?Sized> {
12120 content: T,
12121}
12122
12123struct MyTupleStruct<T: ?Sized>(T);
12124
12125fn answer() -> Box<dyn Any> {
12126 Box::new(42)
12127}
12128
12129fn main() {
12130 // You CANNOT have unsized statics.
12131 static X: dyn Any = *answer(); // ERROR
12132 const Y: dyn Any = *answer(); // ERROR
12133
12134 // You CANNOT have struct initialized unsized.
12135 MyStruct { content: *answer() }; // ERROR
12136 MyTupleStruct(*answer()); // ERROR
12137 (42, *answer()); // ERROR
12138
12139 // You CANNOT have unsized return types.
12140 fn my_function() -> dyn Any { *answer() } // ERROR
12141
12142 // You CAN have unsized local variables...
12143 let mut x: dyn Any = *answer(); // OK
12144 // ...but you CANNOT reassign to them.
12145 x = *answer(); // ERROR
12146
12147 // You CANNOT even initialize them separately.
12148 let y: dyn Any; // OK
12149 y = *answer(); // ERROR
12150
12151 // Not mentioned in the RFC, but by-move captured variables are also Sized.
12152 let x: dyn Any = *answer();
12153 (move || { // ERROR
12154 let y = x;
12155 })();
12156
12157 // You CAN create a closure with unsized arguments,
12158 // but you CANNOT call it.
12159 // This is an implementation detail and may be changed in the future.
12160 let f = |x: dyn Any| {};
12161 f(*answer()); // ERROR
12162}
12163```
12164
12165## By-value trait objects
12166
12167With this feature, you can have by-value `self` arguments without `Self: Sized` bounds.
12168
12169```rust
12170#![feature(unsized_fn_params)]
12171
12172trait Foo {
12173 fn foo(self) {}
12174}
12175
12176impl<T: ?Sized> Foo for T {}
12177
12178fn main() {
12179 let slice: Box<[i32]> = Box::new([1, 2, 3]);
12180 <[i32] as Foo>::foo(*slice);
12181}
12182```
12183
12184And `Foo` will also be object-safe.
12185
12186```rust
12187#![feature(unsized_fn_params)]
12188
12189trait Foo {
12190 fn foo(self) {}
12191}
12192
12193impl<T: ?Sized> Foo for T {}
12194
12195fn main () {
12196 let slice: Box<dyn Foo> = Box::new([1, 2, 3]);
12197 // doesn't compile yet
12198 <dyn Foo as Foo>::foo(*slice);
12199}
12200```
12201
12202One of the objectives of this feature is to allow `Box<dyn FnOnce>`.
12203
12204## Variable length arrays
12205
12206The RFC also describes an extension to the array literal syntax: `[e; dyn n]`. In the syntax, `n` isn't necessarily a constant expression. The array is dynamically allocated on the stack and has the type of `[T]`, instead of `[T; n]`.
12207
12208```rust,ignore (not-yet-implemented)
12209#![feature(unsized_locals)]
12210
12211fn mergesort<T: Ord>(a: &mut [T]) {
12212 let mut tmp = [T; dyn a.len()];
12213 // ...
12214}
12215
12216fn main() {
12217 let mut a = [3, 1, 5, 6];
12218 mergesort(&mut a);
12219 assert_eq!(a, [1, 3, 5, 6]);
12220}
12221```
12222
12223VLAs are not implemented yet. The syntax isn't final, either. We may need an alternative syntax for Rust 2015 because, in Rust 2015, expressions like `[e; dyn(1)]` would be ambiguous. One possible alternative proposed in the RFC is `[e; n]`: if `n` captures one or more local variables, then it is considered as `[e; dyn n]`.
12224
12225## Advisory on stack usage
12226
12227It's advised not to casually use the `#![feature(unsized_locals)]` feature. Typical use-cases are:
12228
12229- When you need a by-value trait objects.
12230- When you really need a fast allocation of small temporary arrays.
12231
12232Another pitfall is repetitive allocation and temporaries. Currently the compiler simply extends the stack frame every time it encounters an unsized assignment. So for example, the code
12233
12234```rust
12235#![feature(unsized_locals)]
12236
12237fn main() {
12238 let x: Box<[i32]> = Box::new([1, 2, 3, 4, 5]);
12239 let _x = {{{{{{{{{{*x}}}}}}}}}};
12240}
12241```
12242
12243and the code
12244
12245```rust
12246#![feature(unsized_locals)]
12247
12248fn main() {
12249 for _ in 0..10 {
12250 let x: Box<[i32]> = Box::new([1, 2, 3, 4, 5]);
12251 let _x = *x;
12252 }
12253}
12254```
12255
12256will unnecessarily extend the stack frame.
12257"##,
12258 default_severity: Severity::Allow,
12259 warn_since: None,
12260 deny_since: None,
12261 },
12262 Lint {
12263 label: "unwrap_infallible",
12264 description: r##"# `unwrap_infallible`
12265
12266The tracking issue for this feature is: [#61695]
12267
12268[#61695]: https://github.com/rust-lang/rust/issues/61695
12269
12270------------------------
12271"##,
12272 default_severity: Severity::Allow,
12273 warn_since: None,
12274 deny_since: None,
12275 },
12276 Lint {
12277 label: "update_panic_count",
12278 description: r##"# `update_panic_count`
12279
12280This feature is internal to the Rust compiler and is not intended for general use.
12281
12282------------------------
12283"##,
12284 default_severity: Severity::Allow,
12285 warn_since: None,
12286 deny_since: None,
12287 },
12288 Lint {
12289 label: "used_with_arg",
12290 description: r##"# `used_with_arg`
12291
12292The tracking issue for this feature is: [#93798]
12293
12294[#93798]: https://github.com/rust-lang/rust/issues/93798
12295
12296------------------------
12297"##,
12298 default_severity: Severity::Allow,
12299 warn_since: None,
12300 deny_since: None,
12301 },
12302 Lint {
12303 label: "utf16_extra",
12304 description: r##"# `utf16_extra`
12305
12306The tracking issue for this feature is: [#94919]
12307
12308[#94919]: https://github.com/rust-lang/rust/issues/94919
12309
12310------------------------
12311"##,
12312 default_severity: Severity::Allow,
12313 warn_since: None,
12314 deny_since: None,
12315 },
12316 Lint {
12317 label: "variant_count",
12318 description: r##"# `variant_count`
12319
12320The tracking issue for this feature is: [#73662]
12321
12322[#73662]: https://github.com/rust-lang/rust/issues/73662
12323
12324------------------------
12325"##,
12326 default_severity: Severity::Allow,
12327 warn_since: None,
12328 deny_since: None,
12329 },
12330 Lint {
12331 label: "vec_deque_iter_as_slices",
12332 description: r##"# `vec_deque_iter_as_slices`
12333
12334The tracking issue for this feature is: [#123947]
12335
12336[#123947]: https://github.com/rust-lang/rust/issues/123947
12337
12338------------------------
12339"##,
12340 default_severity: Severity::Allow,
12341 warn_since: None,
12342 deny_since: None,
12343 },
12344 Lint {
12345 label: "vec_into_raw_parts",
12346 description: r##"# `vec_into_raw_parts`
12347
12348The tracking issue for this feature is: [#65816]
12349
12350[#65816]: https://github.com/rust-lang/rust/issues/65816
12351
12352------------------------
12353"##,
12354 default_severity: Severity::Allow,
12355 warn_since: None,
12356 deny_since: None,
12357 },
12358 Lint {
12359 label: "vec_pop_if",
12360 description: r##"# `vec_pop_if`
12361
12362The tracking issue for this feature is: [#122741]
12363
12364[#122741]: https://github.com/rust-lang/rust/issues/122741
12365
12366------------------------
12367"##,
12368 default_severity: Severity::Allow,
12369 warn_since: None,
12370 deny_since: None,
12371 },
12372 Lint {
12373 label: "vec_push_within_capacity",
12374 description: r##"# `vec_push_within_capacity`
12375
12376The tracking issue for this feature is: [#100486]
12377
12378[#100486]: https://github.com/rust-lang/rust/issues/100486
12379
12380------------------------
12381"##,
12382 default_severity: Severity::Allow,
12383 warn_since: None,
12384 deny_since: None,
12385 },
12386 Lint {
12387 label: "vec_split_at_spare",
12388 description: r##"# `vec_split_at_spare`
12389
12390The tracking issue for this feature is: [#81944]
12391
12392[#81944]: https://github.com/rust-lang/rust/issues/81944
12393
12394------------------------
12395"##,
12396 default_severity: Severity::Allow,
12397 warn_since: None,
12398 deny_since: None,
12399 },
12400 Lint {
12401 label: "wasi_ext",
12402 description: r##"# `wasi_ext`
12403
12404The tracking issue for this feature is: [#71213]
12405
12406[#71213]: https://github.com/rust-lang/rust/issues/71213
12407
12408------------------------
12409"##,
12410 default_severity: Severity::Allow,
12411 warn_since: None,
12412 deny_since: None,
12413 },
12414 Lint {
12415 label: "wasm_target_feature",
12416 description: r##"# `wasm_target_feature`
12417
12418The tracking issue for this feature is: [#44839]
12419
12420[#44839]: https://github.com/rust-lang/rust/issues/44839
12421
12422------------------------
12423"##,
12424 default_severity: Severity::Allow,
12425 warn_since: None,
12426 deny_since: None,
12427 },
12428 Lint {
12429 label: "windows_by_handle",
12430 description: r##"# `windows_by_handle`
12431
12432The tracking issue for this feature is: [#63010]
12433
12434[#63010]: https://github.com/rust-lang/rust/issues/63010
12435
12436------------------------
12437"##,
12438 default_severity: Severity::Allow,
12439 warn_since: None,
12440 deny_since: None,
12441 },
12442 Lint {
12443 label: "windows_c",
12444 description: r##"# `windows_c`
12445
12446This feature is internal to the Rust compiler and is not intended for general use.
12447
12448------------------------
12449"##,
12450 default_severity: Severity::Allow,
12451 warn_since: None,
12452 deny_since: None,
12453 },
12454 Lint {
12455 label: "windows_change_time",
12456 description: r##"# `windows_change_time`
12457
12458The tracking issue for this feature is: [#121478]
12459
12460[#121478]: https://github.com/rust-lang/rust/issues/121478
12461
12462------------------------
12463"##,
12464 default_severity: Severity::Allow,
12465 warn_since: None,
12466 deny_since: None,
12467 },
12468 Lint {
12469 label: "windows_handle",
12470 description: r##"# `windows_handle`
12471
12472This feature is internal to the Rust compiler and is not intended for general use.
12473
12474------------------------
12475"##,
12476 default_severity: Severity::Allow,
12477 warn_since: None,
12478 deny_since: None,
12479 },
12480 Lint {
12481 label: "windows_net",
12482 description: r##"# `windows_net`
12483
12484This feature is internal to the Rust compiler and is not intended for general use.
12485
12486------------------------
12487"##,
12488 default_severity: Severity::Allow,
12489 warn_since: None,
12490 deny_since: None,
12491 },
12492 Lint {
12493 label: "windows_process_exit_code_from",
12494 description: r##"# `windows_process_exit_code_from`
12495
12496The tracking issue for this feature is: [#111688]
12497
12498[#111688]: https://github.com/rust-lang/rust/issues/111688
12499
12500------------------------
12501"##,
12502 default_severity: Severity::Allow,
12503 warn_since: None,
12504 deny_since: None,
12505 },
12506 Lint {
12507 label: "windows_process_extensions_async_pipes",
12508 description: r##"# `windows_process_extensions_async_pipes`
12509
12510The tracking issue for this feature is: [#98289]
12511
12512[#98289]: https://github.com/rust-lang/rust/issues/98289
12513
12514------------------------
12515"##,
12516 default_severity: Severity::Allow,
12517 warn_since: None,
12518 deny_since: None,
12519 },
12520 Lint {
12521 label: "windows_process_extensions_force_quotes",
12522 description: r##"# `windows_process_extensions_force_quotes`
12523
12524The tracking issue for this feature is: [#82227]
12525
12526[#82227]: https://github.com/rust-lang/rust/issues/82227
12527
12528------------------------
12529"##,
12530 default_severity: Severity::Allow,
12531 warn_since: None,
12532 deny_since: None,
12533 },
12534 Lint {
12535 label: "windows_process_extensions_main_thread_handle",
12536 description: r##"# `windows_process_extensions_main_thread_handle`
12537
12538The tracking issue for this feature is: [#96723]
12539
12540[#96723]: https://github.com/rust-lang/rust/issues/96723
12541
12542------------------------
12543"##,
12544 default_severity: Severity::Allow,
12545 warn_since: None,
12546 deny_since: None,
12547 },
12548 Lint {
12549 label: "windows_process_extensions_raw_attribute",
12550 description: r##"# `windows_process_extensions_raw_attribute`
12551
12552The tracking issue for this feature is: [#114854]
12553
12554[#114854]: https://github.com/rust-lang/rust/issues/114854
12555
12556------------------------
12557"##,
12558 default_severity: Severity::Allow,
12559 warn_since: None,
12560 deny_since: None,
12561 },
12562 Lint {
12563 label: "windows_process_extensions_show_window",
12564 description: r##"# `windows_process_extensions_show_window`
12565
12566The tracking issue for this feature is: [#127544]
12567
12568[#127544]: https://github.com/rust-lang/rust/issues/127544
12569
12570------------------------
12571"##,
12572 default_severity: Severity::Allow,
12573 warn_since: None,
12574 deny_since: None,
12575 },
12576 Lint {
12577 label: "windows_stdio",
12578 description: r##"# `windows_stdio`
12579
12580This feature is internal to the Rust compiler and is not intended for general use.
12581
12582------------------------
12583"##,
12584 default_severity: Severity::Allow,
12585 warn_since: None,
12586 deny_since: None,
12587 },
12588 Lint {
12589 label: "with_negative_coherence",
12590 description: r##"# `with_negative_coherence`
12591
12592This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
12593
12594------------------------
12595"##,
12596 default_severity: Severity::Allow,
12597 warn_since: None,
12598 deny_since: None,
12599 },
12600 Lint {
12601 label: "wrapping_int_impl",
12602 description: r##"# `wrapping_int_impl`
12603
12604The tracking issue for this feature is: [#32463]
12605
12606[#32463]: https://github.com/rust-lang/rust/issues/32463
12607
12608------------------------
12609"##,
12610 default_severity: Severity::Allow,
12611 warn_since: None,
12612 deny_since: None,
12613 },
12614 Lint {
12615 label: "wrapping_next_power_of_two",
12616 description: r##"# `wrapping_next_power_of_two`
12617
12618The tracking issue for this feature is: [#32463]
12619
12620[#32463]: https://github.com/rust-lang/rust/issues/32463
12621
12622------------------------
12623"##,
12624 default_severity: Severity::Allow,
12625 warn_since: None,
12626 deny_since: None,
12627 },
12628 Lint {
12629 label: "write_all_vectored",
12630 description: r##"# `write_all_vectored`
12631
12632The tracking issue for this feature is: [#70436]
12633
12634[#70436]: https://github.com/rust-lang/rust/issues/70436
12635
12636------------------------
12637"##,
12638 default_severity: Severity::Allow,
12639 warn_since: None,
12640 deny_since: None,
12641 },
12642 Lint {
12643 label: "x86_amx_intrinsics",
12644 description: r##"# `x86_amx_intrinsics`
12645
12646The tracking issue for this feature is: [#126622]
12647
12648[#126622]: https://github.com/rust-lang/rust/issues/126622
12649
12650------------------------
12651"##,
12652 default_severity: Severity::Allow,
12653 warn_since: None,
12654 deny_since: None,
12655 },
12656 Lint {
12657 label: "xop_target_feature",
12658 description: r##"# `xop_target_feature`
12659
12660The tracking issue for this feature is: [#127208]
12661
12662[#127208]: https://github.com/rust-lang/rust/issues/127208
12663
12664------------------------
12665"##,
12666 default_severity: Severity::Allow,
12667 warn_since: None,
12668 deny_since: None,
12669 },
12670 Lint {
12671 label: "yeet_desugar_details",
12672 description: r##"# `yeet_desugar_details`
12673
12674This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
12675
12676------------------------
12677"##,
12678 default_severity: Severity::Allow,
12679 warn_since: None,
12680 deny_since: None,
12681 },
12682 Lint {
12683 label: "yeet_expr",
12684 description: r##"# `yeet_expr`
12685
12686The tracking issue for this feature is: [#96373]
12687
12688[#96373]: https://github.com/rust-lang/rust/issues/96373
12689
12690------------------------
12691
12692The `yeet_expr` feature adds support for `do yeet` expressions,
12693which can be used to early-exit from a function or `try` block.
12694
12695These are highly experimental, thus the placeholder syntax.
12696
12697```rust,edition2021
12698#![feature(yeet_expr)]
12699
12700fn foo() -> Result<String, i32> {
12701 do yeet 4;
12702}
12703assert_eq!(foo(), Err(4));
12704
12705fn bar() -> Option<String> {
12706 do yeet;
12707}
12708assert_eq!(bar(), None);
12709```
12710"##,
12711 default_severity: Severity::Allow,
12712 warn_since: None,
12713 deny_since: None,
12714 },
12715];
12716
12717pub const CLIPPY_LINTS: &[Lint] = &[
12718 Lint {
12719 label: "clippy::absolute_paths",
12720 description: r##"Checks for usage of items through absolute paths, like `std::env::current_dir`."##,
12721 default_severity: Severity::Allow,
12722 warn_since: None,
12723 deny_since: None,
12724 },
12725 Lint {
12726 label: "clippy::absurd_extreme_comparisons",
12727 description: r##"Checks for comparisons where one side of the relation is
12728either the minimum or maximum value for its type and warns if it involves a
12729case that is always true or always false. Only integer and boolean types are
12730checked."##,
12731 default_severity: Severity::Allow,
12732 warn_since: None,
12733 deny_since: None,
12734 },
12735 Lint {
12736 label: "clippy::alloc_instead_of_core",
12737 description: r##"Finds items imported through `alloc` when available through `core`."##,
12738 default_severity: Severity::Allow,
12739 warn_since: None,
12740 deny_since: None,
12741 },
12742 Lint {
12743 label: "clippy::allow_attributes",
12744 description: r##"Checks for usage of the `#[allow]` attribute and suggests replacing it with
12745the `#[expect]` (See [RFC 2383](https://rust-lang.github.io/rfcs/2383-lint-reasons.html))
12746
12747This lint only warns outer attributes (`#[allow]`), as inner attributes
12748(`#![allow]`) are usually used to enable or disable lints on a global scale."##,
12749 default_severity: Severity::Allow,
12750 warn_since: None,
12751 deny_since: None,
12752 },
12753 Lint {
12754 label: "clippy::allow_attributes_without_reason",
12755 description: r##"Checks for attributes that allow lints without a reason."##,
12756 default_severity: Severity::Allow,
12757 warn_since: None,
12758 deny_since: None,
12759 },
12760 Lint {
12761 label: "clippy::almost_complete_range",
12762 description: r##"Checks for ranges which almost include the entire range of letters from 'a' to 'z'
12763or digits from '0' to '9', but don't because they're a half open range."##,
12764 default_severity: Severity::Allow,
12765 warn_since: None,
12766 deny_since: None,
12767 },
12768 Lint {
12769 label: "clippy::almost_swapped",
12770 description: r##"Checks for `foo = bar; bar = foo` sequences."##,
12771 default_severity: Severity::Allow,
12772 warn_since: None,
12773 deny_since: None,
12774 },
12775 Lint {
12776 label: "clippy::approx_constant",
12777 description: r##"Checks for floating point literals that approximate
12778constants which are defined in
12779[`std::f32::consts`](https://doc.rust-lang.org/stable/std/f32/consts/#constants)
12780or
12781[`std::f64::consts`](https://doc.rust-lang.org/stable/std/f64/consts/#constants),
12782respectively, suggesting to use the predefined constant."##,
12783 default_severity: Severity::Allow,
12784 warn_since: None,
12785 deny_since: None,
12786 },
12787 Lint {
12788 label: "clippy::arc_with_non_send_sync",
12789 description: r##".
12790This lint warns when you use `Arc` with a type that does not implement `Send` or `Sync`."##,
12791 default_severity: Severity::Allow,
12792 warn_since: None,
12793 deny_since: None,
12794 },
12795 Lint {
12796 label: "clippy::arithmetic_side_effects",
12797 description: r##"Checks any kind of arithmetic operation of any type.
12798
12799Operators like `+`, `-`, `*` or `<<` are usually capable of overflowing according to the [Rust
12800Reference](https://doc.rust-lang.org/reference/expressions/operator-expr.html#overflow),
12801or can panic (`/`, `%`).
12802
12803Known safe built-in types like `Wrapping` or `Saturating`, floats, operations in constant
12804environments, allowed types and non-constant operations that won't overflow are ignored."##,
12805 default_severity: Severity::Allow,
12806 warn_since: None,
12807 deny_since: None,
12808 },
12809 Lint {
12810 label: "clippy::as_conversions",
12811 description: r##"Checks for usage of `as` conversions.
12812
12813Note that this lint is specialized in linting *every single* use of `as`
12814regardless of whether good alternatives exist or not.
12815If you want more precise lints for `as`, please consider using these separate lints:
12816`unnecessary_cast`, `cast_lossless/cast_possible_truncation/cast_possible_wrap/cast_precision_loss/cast_sign_loss`,
12817`fn_to_numeric_cast(_with_truncation)`, `char_lit_as_u8`, `ref_to_mut` and `ptr_as_ptr`.
12818There is a good explanation the reason why this lint should work in this way and how it is useful
12819[in this issue](https://github.com/rust-lang/rust-clippy/issues/5122)."##,
12820 default_severity: Severity::Allow,
12821 warn_since: None,
12822 deny_since: None,
12823 },
12824 Lint {
12825 label: "clippy::as_ptr_cast_mut",
12826 description: r##"Checks for the result of a `&self`-taking `as_ptr` being cast to a mutable pointer."##,
12827 default_severity: Severity::Allow,
12828 warn_since: None,
12829 deny_since: None,
12830 },
12831 Lint {
12832 label: "clippy::as_underscore",
12833 description: r##"Checks for the usage of `as _` conversion using inferred type."##,
12834 default_severity: Severity::Allow,
12835 warn_since: None,
12836 deny_since: None,
12837 },
12838 Lint {
12839 label: "clippy::assertions_on_constants",
12840 description: r##"Checks for `assert!(true)` and `assert!(false)` calls."##,
12841 default_severity: Severity::Allow,
12842 warn_since: None,
12843 deny_since: None,
12844 },
12845 Lint {
12846 label: "clippy::assertions_on_result_states",
12847 description: r##"Checks for `assert!(r.is_ok())` or `assert!(r.is_err())` calls."##,
12848 default_severity: Severity::Allow,
12849 warn_since: None,
12850 deny_since: None,
12851 },
12852 Lint {
12853 label: "clippy::assign_op_pattern",
12854 description: r##"Checks for `a = a op b` or `a = b commutative_op a`
12855patterns."##,
12856 default_severity: Severity::Allow,
12857 warn_since: None,
12858 deny_since: None,
12859 },
12860 Lint {
12861 label: "clippy::assign_ops",
12862 description: r##"Nothing. This lint has been deprecated"##,
12863 default_severity: Severity::Allow,
12864 warn_since: None,
12865 deny_since: None,
12866 },
12867 Lint {
12868 label: "clippy::assigning_clones",
12869 description: r##"Checks for code like `foo = bar.clone();`"##,
12870 default_severity: Severity::Allow,
12871 warn_since: None,
12872 deny_since: None,
12873 },
12874 Lint {
12875 label: "clippy::async_yields_async",
12876 description: r##"Checks for async blocks that yield values of types
12877that can themselves be awaited."##,
12878 default_severity: Severity::Allow,
12879 warn_since: None,
12880 deny_since: None,
12881 },
12882 Lint {
12883 label: "clippy::await_holding_invalid_type",
12884 description: r##"Allows users to configure types which should not be held across await
12885suspension points."##,
12886 default_severity: Severity::Allow,
12887 warn_since: None,
12888 deny_since: None,
12889 },
12890 Lint {
12891 label: "clippy::await_holding_lock",
12892 description: r##"Checks for calls to `await` while holding a non-async-aware
12893`MutexGuard`."##,
12894 default_severity: Severity::Allow,
12895 warn_since: None,
12896 deny_since: None,
12897 },
12898 Lint {
12899 label: "clippy::await_holding_refcell_ref",
12900 description: r##"Checks for calls to `await` while holding a `RefCell`, `Ref`, or `RefMut`."##,
12901 default_severity: Severity::Allow,
12902 warn_since: None,
12903 deny_since: None,
12904 },
12905 Lint {
12906 label: "clippy::bad_bit_mask",
12907 description: r##"Checks for incompatible bit masks in comparisons.
12908
12909The formula for detecting if an expression of the type `_ <bit_op> m
12910<cmp_op> c` (where `<bit_op>` is one of {`&`, `|`} and `<cmp_op>` is one of
12911{`!=`, `>=`, `>`, `!=`, `>=`, `>`}) can be determined from the following
12912table:
12913
12914|Comparison |Bit Op|Example |is always|Formula |
12915|------------|------|-------------|---------|----------------------|
12916|`==` or `!=`| `&` |`x & 2 == 3` |`false` |`c & m != c` |
12917|`<` or `>=`| `&` |`x & 2 < 3` |`true` |`m < c` |
12918|`>` or `<=`| `&` |`x & 1 > 1` |`false` |`m <= c` |
12919|`==` or `!=`| `\\|` |`x \\| 1 == 0`|`false` |`c \\| m != c` |
12920|`<` or `>=`| `\\|` |`x \\| 1 < 1` |`false` |`m >= c` |
12921|`<=` or `>` | `\\|` |`x \\| 1 > 0` |`true` |`m > c` |"##,
12922 default_severity: Severity::Allow,
12923 warn_since: None,
12924 deny_since: None,
12925 },
12926 Lint {
12927 label: "clippy::big_endian_bytes",
12928 description: r##"Checks for the usage of the `to_be_bytes` method and/or the function `from_be_bytes`."##,
12929 default_severity: Severity::Allow,
12930 warn_since: None,
12931 deny_since: None,
12932 },
12933 Lint {
12934 label: "clippy::bind_instead_of_map",
12935 description: r##"Checks for usage of `_.and_then(|x| Some(y))`, `_.and_then(|x| Ok(y))`
12936or `_.or_else(|x| Err(y))`."##,
12937 default_severity: Severity::Allow,
12938 warn_since: None,
12939 deny_since: None,
12940 },
12941 Lint {
12942 label: "clippy::blanket_clippy_restriction_lints",
12943 description: r##"Checks for `warn`/`deny`/`forbid` attributes targeting the whole clippy::restriction category."##,
12944 default_severity: Severity::Allow,
12945 warn_since: None,
12946 deny_since: None,
12947 },
12948 Lint {
12949 label: "clippy::blocks_in_conditions",
12950 description: r##"Checks for `if` and `match` conditions that use blocks containing an
12951expression, statements or conditions that use closures with blocks."##,
12952 default_severity: Severity::Allow,
12953 warn_since: None,
12954 deny_since: None,
12955 },
12956 Lint {
12957 label: "clippy::bool_assert_comparison",
12958 description: r##"This lint warns about boolean comparisons in assert-like macros."##,
12959 default_severity: Severity::Allow,
12960 warn_since: None,
12961 deny_since: None,
12962 },
12963 Lint {
12964 label: "clippy::bool_comparison",
12965 description: r##"Checks for expressions of the form `x == true`,
12966`x != true` and order comparisons such as `x < true` (or vice versa) and
12967suggest using the variable directly."##,
12968 default_severity: Severity::Allow,
12969 warn_since: None,
12970 deny_since: None,
12971 },
12972 Lint {
12973 label: "clippy::bool_to_int_with_if",
12974 description: r##"Instead of using an if statement to convert a bool to an int,
12975this lint suggests using a `from()` function or an `as` coercion."##,
12976 default_severity: Severity::Allow,
12977 warn_since: None,
12978 deny_since: None,
12979 },
12980 Lint {
12981 label: "clippy::borrow_as_ptr",
12982 description: r##"Checks for the usage of `&expr as *const T` or
12983`&mut expr as *mut T`, and suggest using `ptr::addr_of` or
12984`ptr::addr_of_mut` instead."##,
12985 default_severity: Severity::Allow,
12986 warn_since: None,
12987 deny_since: None,
12988 },
12989 Lint {
12990 label: "clippy::borrow_deref_ref",
12991 description: r##"Checks for `&*(&T)`."##,
12992 default_severity: Severity::Allow,
12993 warn_since: None,
12994 deny_since: None,
12995 },
12996 Lint {
12997 label: "clippy::borrow_interior_mutable_const",
12998 description: r##"Checks if `const` items which is interior mutable (e.g.,
12999contains a `Cell`, `Mutex`, `AtomicXxxx`, etc.) has been borrowed directly."##,
13000 default_severity: Severity::Allow,
13001 warn_since: None,
13002 deny_since: None,
13003 },
13004 Lint {
13005 label: "clippy::borrowed_box",
13006 description: r##"Checks for usage of `&Box<T>` anywhere in the code.
13007Check the [Box documentation](https://doc.rust-lang.org/std/boxed/index.html) for more information."##,
13008 default_severity: Severity::Allow,
13009 warn_since: None,
13010 deny_since: None,
13011 },
13012 Lint {
13013 label: "clippy::box_collection",
13014 description: r##"Checks for usage of `Box<T>` where T is a collection such as Vec anywhere in the code.
13015Check the [Box documentation](https://doc.rust-lang.org/std/boxed/index.html) for more information."##,
13016 default_severity: Severity::Allow,
13017 warn_since: None,
13018 deny_since: None,
13019 },
13020 Lint {
13021 label: "clippy::box_default",
13022 description: r##"checks for `Box::new(Default::default())`, which can be written as
13023`Box::default()`."##,
13024 default_severity: Severity::Allow,
13025 warn_since: None,
13026 deny_since: None,
13027 },
13028 Lint {
13029 label: "clippy::boxed_local",
13030 description: r##"Checks for usage of `Box<T>` where an unboxed `T` would
13031work fine."##,
13032 default_severity: Severity::Allow,
13033 warn_since: None,
13034 deny_since: None,
13035 },
13036 Lint {
13037 label: "clippy::branches_sharing_code",
13038 description: r##"Checks if the `if` and `else` block contain shared code that can be
13039moved out of the blocks."##,
13040 default_severity: Severity::Allow,
13041 warn_since: None,
13042 deny_since: None,
13043 },
13044 Lint {
13045 label: "clippy::builtin_type_shadow",
13046 description: r##"Warns if a generic shadows a built-in type."##,
13047 default_severity: Severity::Allow,
13048 warn_since: None,
13049 deny_since: None,
13050 },
13051 Lint {
13052 label: "clippy::byte_char_slices",
13053 description: r##"Checks for hard to read slices of byte characters, that could be more easily expressed as a
13054byte string."##,
13055 default_severity: Severity::Allow,
13056 warn_since: None,
13057 deny_since: None,
13058 },
13059 Lint {
13060 label: "clippy::bytes_count_to_len",
13061 description: r##"It checks for `str::bytes().count()` and suggests replacing it with
13062`str::len()`."##,
13063 default_severity: Severity::Allow,
13064 warn_since: None,
13065 deny_since: None,
13066 },
13067 Lint {
13068 label: "clippy::bytes_nth",
13069 description: r##"Checks for the use of `.bytes().nth()`."##,
13070 default_severity: Severity::Allow,
13071 warn_since: None,
13072 deny_since: None,
13073 },
13074 Lint {
13075 label: "clippy::cargo_common_metadata",
13076 description: r##"Checks to see if all common metadata is defined in
13077`Cargo.toml`. See: https://rust-lang-nursery.github.io/api-guidelines/documentation.html#cargotoml-includes-all-common-metadata-c-metadata"##,
13078 default_severity: Severity::Allow,
13079 warn_since: None,
13080 deny_since: None,
13081 },
13082 Lint {
13083 label: "clippy::case_sensitive_file_extension_comparisons",
13084 description: r##"Checks for calls to `ends_with` with possible file extensions
13085and suggests to use a case-insensitive approach instead."##,
13086 default_severity: Severity::Allow,
13087 warn_since: None,
13088 deny_since: None,
13089 },
13090 Lint {
13091 label: "clippy::cast_abs_to_unsigned",
13092 description: r##"Checks for usage of the `abs()` method that cast the result to unsigned."##,
13093 default_severity: Severity::Allow,
13094 warn_since: None,
13095 deny_since: None,
13096 },
13097 Lint {
13098 label: "clippy::cast_enum_constructor",
13099 description: r##"Checks for casts from an enum tuple constructor to an integer."##,
13100 default_severity: Severity::Allow,
13101 warn_since: None,
13102 deny_since: None,
13103 },
13104 Lint {
13105 label: "clippy::cast_enum_truncation",
13106 description: r##"Checks for casts from an enum type to an integral type that will definitely truncate the
13107value."##,
13108 default_severity: Severity::Allow,
13109 warn_since: None,
13110 deny_since: None,
13111 },
13112 Lint {
13113 label: "clippy::cast_lossless",
13114 description: r##"Checks for casts between numeric types that can be replaced by safe
13115conversion functions."##,
13116 default_severity: Severity::Allow,
13117 warn_since: None,
13118 deny_since: None,
13119 },
13120 Lint {
13121 label: "clippy::cast_nan_to_int",
13122 description: r##"Checks for a known NaN float being cast to an integer"##,
13123 default_severity: Severity::Allow,
13124 warn_since: None,
13125 deny_since: None,
13126 },
13127 Lint {
13128 label: "clippy::cast_possible_truncation",
13129 description: r##"Checks for casts between numeric types that may
13130truncate large values. This is expected behavior, so the cast is `Allow` by
13131default. It suggests user either explicitly ignore the lint,
13132or use `try_from()` and handle the truncation, default, or panic explicitly."##,
13133 default_severity: Severity::Allow,
13134 warn_since: None,
13135 deny_since: None,
13136 },
13137 Lint {
13138 label: "clippy::cast_possible_wrap",
13139 description: r##"Checks for casts from an unsigned type to a signed type of
13140the same size, or possibly smaller due to target-dependent integers.
13141Performing such a cast is a no-op for the compiler (that is, nothing is
13142changed at the bit level), and the binary representation of the value is
13143reinterpreted. This can cause wrapping if the value is too big
13144for the target signed type. However, the cast works as defined, so this lint
13145is `Allow` by default."##,
13146 default_severity: Severity::Allow,
13147 warn_since: None,
13148 deny_since: None,
13149 },
13150 Lint {
13151 label: "clippy::cast_precision_loss",
13152 description: r##"Checks for casts from any numeric type to a float type where
13153the receiving type cannot store all values from the original type without
13154rounding errors. This possible rounding is to be expected, so this lint is
13155`Allow` by default.
13156
13157Basically, this warns on casting any integer with 32 or more bits to `f32`
13158or any 64-bit integer to `f64`."##,
13159 default_severity: Severity::Allow,
13160 warn_since: None,
13161 deny_since: None,
13162 },
13163 Lint {
13164 label: "clippy::cast_ptr_alignment",
13165 description: r##"Checks for casts, using `as` or `pointer::cast`, from a
13166less strictly aligned pointer to a more strictly aligned pointer."##,
13167 default_severity: Severity::Allow,
13168 warn_since: None,
13169 deny_since: None,
13170 },
13171 Lint {
13172 label: "clippy::cast_sign_loss",
13173 description: r##"Checks for casts from a signed to an unsigned numeric
13174type. In this case, negative values wrap around to large positive values,
13175which can be quite surprising in practice. However, since the cast works as
13176defined, this lint is `Allow` by default."##,
13177 default_severity: Severity::Allow,
13178 warn_since: None,
13179 deny_since: None,
13180 },
13181 Lint {
13182 label: "clippy::cast_slice_different_sizes",
13183 description: r##"Checks for `as` casts between raw pointers to slices with differently sized elements."##,
13184 default_severity: Severity::Allow,
13185 warn_since: None,
13186 deny_since: None,
13187 },
13188 Lint {
13189 label: "clippy::cast_slice_from_raw_parts",
13190 description: r##"Checks for a raw slice being cast to a slice pointer"##,
13191 default_severity: Severity::Allow,
13192 warn_since: None,
13193 deny_since: None,
13194 },
13195 Lint {
13196 label: "clippy::cfg_not_test",
13197 description: r##"Checks for usage of `cfg` that excludes code from `test` builds. (i.e., `#[cfg(not(test))]`)"##,
13198 default_severity: Severity::Allow,
13199 warn_since: None,
13200 deny_since: None,
13201 },
13202 Lint {
13203 label: "clippy::char_lit_as_u8",
13204 description: r##"Checks for expressions where a character literal is cast
13205to `u8` and suggests using a byte literal instead."##,
13206 default_severity: Severity::Allow,
13207 warn_since: None,
13208 deny_since: None,
13209 },
13210 Lint {
13211 label: "clippy::chars_last_cmp",
13212 description: r##"Checks for usage of `_.chars().last()` or
13213`_.chars().next_back()` on a `str` to check if it ends with a given char."##,
13214 default_severity: Severity::Allow,
13215 warn_since: None,
13216 deny_since: None,
13217 },
13218 Lint {
13219 label: "clippy::chars_next_cmp",
13220 description: r##"Checks for usage of `.chars().next()` on a `str` to check
13221if it starts with a given char."##,
13222 default_severity: Severity::Allow,
13223 warn_since: None,
13224 deny_since: None,
13225 },
13226 Lint {
13227 label: "clippy::checked_conversions",
13228 description: r##"Checks for explicit bounds checking when casting."##,
13229 default_severity: Severity::Allow,
13230 warn_since: None,
13231 deny_since: None,
13232 },
13233 Lint {
13234 label: "clippy::clear_with_drain",
13235 description: r##"Checks for usage of `.drain(..)` for the sole purpose of clearing a container."##,
13236 default_severity: Severity::Allow,
13237 warn_since: None,
13238 deny_since: None,
13239 },
13240 Lint {
13241 label: "clippy::clone_on_copy",
13242 description: r##"Checks for usage of `.clone()` on a `Copy` type."##,
13243 default_severity: Severity::Allow,
13244 warn_since: None,
13245 deny_since: None,
13246 },
13247 Lint {
13248 label: "clippy::clone_on_ref_ptr",
13249 description: r##"Checks for usage of `.clone()` on a ref-counted pointer,
13250(`Rc`, `Arc`, `rc::Weak`, or `sync::Weak`), and suggests calling Clone via unified
13251function syntax instead (e.g., `Rc::clone(foo)`)."##,
13252 default_severity: Severity::Allow,
13253 warn_since: None,
13254 deny_since: None,
13255 },
13256 Lint {
13257 label: "clippy::cloned_instead_of_copied",
13258 description: r##"Checks for usage of `cloned()` on an `Iterator` or `Option` where
13259`copied()` could be used instead."##,
13260 default_severity: Severity::Allow,
13261 warn_since: None,
13262 deny_since: None,
13263 },
13264 Lint {
13265 label: "clippy::cmp_null",
13266 description: r##"This lint checks for equality comparisons with `ptr::null`"##,
13267 default_severity: Severity::Allow,
13268 warn_since: None,
13269 deny_since: None,
13270 },
13271 Lint {
13272 label: "clippy::cmp_owned",
13273 description: r##"Checks for conversions to owned values just for the sake
13274of a comparison."##,
13275 default_severity: Severity::Allow,
13276 warn_since: None,
13277 deny_since: None,
13278 },
13279 Lint {
13280 label: "clippy::cognitive_complexity",
13281 description: r##"Checks for methods with high cognitive complexity."##,
13282 default_severity: Severity::Allow,
13283 warn_since: None,
13284 deny_since: None,
13285 },
13286 Lint {
13287 label: "clippy::collapsible_else_if",
13288 description: r##"Checks for collapsible `else { if ... }` expressions
13289that can be collapsed to `else if ...`."##,
13290 default_severity: Severity::Allow,
13291 warn_since: None,
13292 deny_since: None,
13293 },
13294 Lint {
13295 label: "clippy::collapsible_if",
13296 description: r##"Checks for nested `if` statements which can be collapsed
13297by `&&`-combining their conditions."##,
13298 default_severity: Severity::Allow,
13299 warn_since: None,
13300 deny_since: None,
13301 },
13302 Lint {
13303 label: "clippy::collapsible_match",
13304 description: r##"Finds nested `match` or `if let` expressions where the patterns may be collapsed together
13305without adding any branches.
13306
13307Note that this lint is not intended to find _all_ cases where nested match patterns can be merged, but only
13308cases where merging would most likely make the code more readable."##,
13309 default_severity: Severity::Allow,
13310 warn_since: None,
13311 deny_since: None,
13312 },
13313 Lint {
13314 label: "clippy::collapsible_str_replace",
13315 description: r##"Checks for consecutive calls to `str::replace` (2 or more)
13316that can be collapsed into a single call."##,
13317 default_severity: Severity::Allow,
13318 warn_since: None,
13319 deny_since: None,
13320 },
13321 Lint {
13322 label: "clippy::collection_is_never_read",
13323 description: r##"Checks for collections that are never queried."##,
13324 default_severity: Severity::Allow,
13325 warn_since: None,
13326 deny_since: None,
13327 },
13328 Lint {
13329 label: "clippy::comparison_chain",
13330 description: r##"Checks comparison chains written with `if` that can be
13331rewritten with `match` and `cmp`."##,
13332 default_severity: Severity::Allow,
13333 warn_since: None,
13334 deny_since: None,
13335 },
13336 Lint {
13337 label: "clippy::comparison_to_empty",
13338 description: r##"Checks for comparing to an empty slice such as `` or `[]`,
13339and suggests using `.is_empty()` where applicable."##,
13340 default_severity: Severity::Allow,
13341 warn_since: None,
13342 deny_since: None,
13343 },
13344 Lint {
13345 label: "clippy::const_is_empty",
13346 description: r##"It identifies calls to `.is_empty()` on constant values."##,
13347 default_severity: Severity::Allow,
13348 warn_since: None,
13349 deny_since: None,
13350 },
13351 Lint {
13352 label: "clippy::copy_iterator",
13353 description: r##"Checks for types that implement `Copy` as well as
13354`Iterator`."##,
13355 default_severity: Severity::Allow,
13356 warn_since: None,
13357 deny_since: None,
13358 },
13359 Lint {
13360 label: "clippy::crate_in_macro_def",
13361 description: r##"Checks for usage of `crate` as opposed to `$crate` in a macro definition."##,
13362 default_severity: Severity::Allow,
13363 warn_since: None,
13364 deny_since: None,
13365 },
13366 Lint {
13367 label: "clippy::create_dir",
13368 description: r##"Checks usage of `std::fs::create_dir` and suggest using `std::fs::create_dir_all` instead."##,
13369 default_severity: Severity::Allow,
13370 warn_since: None,
13371 deny_since: None,
13372 },
13373 Lint {
13374 label: "clippy::crosspointer_transmute",
13375 description: r##"Checks for transmutes between a type `T` and `*T`."##,
13376 default_severity: Severity::Allow,
13377 warn_since: None,
13378 deny_since: None,
13379 },
13380 Lint {
13381 label: "clippy::dbg_macro",
13382 description: r##"Checks for usage of the [`dbg!`](https://doc.rust-lang.org/std/macro.dbg.html) macro."##,
13383 default_severity: Severity::Allow,
13384 warn_since: None,
13385 deny_since: None,
13386 },
13387 Lint {
13388 label: "clippy::debug_assert_with_mut_call",
13389 description: r##"Checks for function/method calls with a mutable
13390parameter in `debug_assert!`, `debug_assert_eq!` and `debug_assert_ne!` macros."##,
13391 default_severity: Severity::Allow,
13392 warn_since: None,
13393 deny_since: None,
13394 },
13395 Lint {
13396 label: "clippy::decimal_literal_representation",
13397 description: r##"Warns if there is a better representation for a numeric literal."##,
13398 default_severity: Severity::Allow,
13399 warn_since: None,
13400 deny_since: None,
13401 },
13402 Lint {
13403 label: "clippy::declare_interior_mutable_const",
13404 description: r##"Checks for declaration of `const` items which is interior
13405mutable (e.g., contains a `Cell`, `Mutex`, `AtomicXxxx`, etc.)."##,
13406 default_severity: Severity::Allow,
13407 warn_since: None,
13408 deny_since: None,
13409 },
13410 Lint {
13411 label: "clippy::default_constructed_unit_structs",
13412 description: r##"Checks for construction on unit struct using `default`."##,
13413 default_severity: Severity::Allow,
13414 warn_since: None,
13415 deny_since: None,
13416 },
13417 Lint {
13418 label: "clippy::default_instead_of_iter_empty",
13419 description: r##"It checks for `std::iter::Empty::default()` and suggests replacing it with
13420`std::iter::empty()`."##,
13421 default_severity: Severity::Allow,
13422 warn_since: None,
13423 deny_since: None,
13424 },
13425 Lint {
13426 label: "clippy::default_numeric_fallback",
13427 description: r##"Checks for usage of unconstrained numeric literals which may cause default numeric fallback in type
13428inference.
13429
13430Default numeric fallback means that if numeric types have not yet been bound to concrete
13431types at the end of type inference, then integer type is bound to `i32`, and similarly
13432floating type is bound to `f64`.
13433
13434See [RFC0212](https://github.com/rust-lang/rfcs/blob/master/text/0212-restore-int-fallback.md) for more information about the fallback."##,
13435 default_severity: Severity::Allow,
13436 warn_since: None,
13437 deny_since: None,
13438 },
13439 Lint {
13440 label: "clippy::default_trait_access",
13441 description: r##"Checks for literal calls to `Default::default()`."##,
13442 default_severity: Severity::Allow,
13443 warn_since: None,
13444 deny_since: None,
13445 },
13446 Lint {
13447 label: "clippy::default_union_representation",
13448 description: r##"Displays a warning when a union is declared with the default representation (without a `#[repr(C)]` attribute)."##,
13449 default_severity: Severity::Allow,
13450 warn_since: None,
13451 deny_since: None,
13452 },
13453 Lint {
13454 label: "clippy::deprecated_cfg_attr",
13455 description: r##"Checks for `#[cfg_attr(rustfmt, rustfmt_skip)]` and suggests to replace it
13456with `#[rustfmt::skip]`."##,
13457 default_severity: Severity::Allow,
13458 warn_since: None,
13459 deny_since: None,
13460 },
13461 Lint {
13462 label: "clippy::deprecated_clippy_cfg_attr",
13463 description: r##"Checks for `#[cfg_attr(feature = cargo-clippy, ...)]` and for
13464`#[cfg(feature = cargo-clippy)]` and suggests to replace it with
13465`#[cfg_attr(clippy, ...)]` or `#[cfg(clippy)]`."##,
13466 default_severity: Severity::Allow,
13467 warn_since: None,
13468 deny_since: None,
13469 },
13470 Lint {
13471 label: "clippy::deprecated_semver",
13472 description: r##"Checks for `#[deprecated]` annotations with a `since`
13473field that is not a valid semantic version. Also allows TBD to signal
13474future deprecation."##,
13475 default_severity: Severity::Allow,
13476 warn_since: None,
13477 deny_since: None,
13478 },
13479 Lint {
13480 label: "clippy::deref_addrof",
13481 description: r##"Checks for usage of `*&` and `*&mut` in expressions."##,
13482 default_severity: Severity::Allow,
13483 warn_since: None,
13484 deny_since: None,
13485 },
13486 Lint {
13487 label: "clippy::deref_by_slicing",
13488 description: r##"Checks for slicing expressions which are equivalent to dereferencing the
13489value."##,
13490 default_severity: Severity::Allow,
13491 warn_since: None,
13492 deny_since: None,
13493 },
13494 Lint {
13495 label: "clippy::derivable_impls",
13496 description: r##"Detects manual `std::default::Default` implementations that are identical to a derived implementation."##,
13497 default_severity: Severity::Allow,
13498 warn_since: None,
13499 deny_since: None,
13500 },
13501 Lint {
13502 label: "clippy::derive_ord_xor_partial_ord",
13503 description: r##"Lints against manual `PartialOrd` and `Ord` implementations for types with a derived `Ord`
13504or `PartialOrd` implementation."##,
13505 default_severity: Severity::Allow,
13506 warn_since: None,
13507 deny_since: None,
13508 },
13509 Lint {
13510 label: "clippy::derive_partial_eq_without_eq",
13511 description: r##"Checks for types that derive `PartialEq` and could implement `Eq`."##,
13512 default_severity: Severity::Allow,
13513 warn_since: None,
13514 deny_since: None,
13515 },
13516 Lint {
13517 label: "clippy::derived_hash_with_manual_eq",
13518 description: r##"Lints against manual `PartialEq` implementations for types with a derived `Hash`
13519implementation."##,
13520 default_severity: Severity::Allow,
13521 warn_since: None,
13522 deny_since: None,
13523 },
13524 Lint {
13525 label: "clippy::disallowed_macros",
13526 description: r##"Denies the configured macros in clippy.toml
13527
13528Note: Even though this lint is warn-by-default, it will only trigger if
13529macros are defined in the clippy.toml file."##,
13530 default_severity: Severity::Allow,
13531 warn_since: None,
13532 deny_since: None,
13533 },
13534 Lint {
13535 label: "clippy::disallowed_methods",
13536 description: r##"Denies the configured methods and functions in clippy.toml
13537
13538Note: Even though this lint is warn-by-default, it will only trigger if
13539methods are defined in the clippy.toml file."##,
13540 default_severity: Severity::Allow,
13541 warn_since: None,
13542 deny_since: None,
13543 },
13544 Lint {
13545 label: "clippy::disallowed_names",
13546 description: r##"Checks for usage of disallowed names for variables, such
13547as `foo`."##,
13548 default_severity: Severity::Allow,
13549 warn_since: None,
13550 deny_since: None,
13551 },
13552 Lint {
13553 label: "clippy::disallowed_script_idents",
13554 description: r##"Checks for usage of unicode scripts other than those explicitly allowed
13555by the lint config.
13556
13557This lint doesn't take into account non-text scripts such as `Unknown` and `Linear_A`.
13558It also ignores the `Common` script type.
13559While configuring, be sure to use official script name [aliases] from
13560[the list of supported scripts][supported_scripts].
13561
13562See also: [`non_ascii_idents`].
13563
13564[aliases]: http://www.unicode.org/reports/tr24/tr24-31.html#Script_Value_Aliases
13565[supported_scripts]: https://www.unicode.org/iso15924/iso15924-codes.html"##,
13566 default_severity: Severity::Allow,
13567 warn_since: None,
13568 deny_since: None,
13569 },
13570 Lint {
13571 label: "clippy::disallowed_types",
13572 description: r##"Denies the configured types in clippy.toml.
13573
13574Note: Even though this lint is warn-by-default, it will only trigger if
13575types are defined in the clippy.toml file."##,
13576 default_severity: Severity::Allow,
13577 warn_since: None,
13578 deny_since: None,
13579 },
13580 Lint {
13581 label: "clippy::diverging_sub_expression",
13582 description: r##"Checks for diverging calls that are not match arms or
13583statements."##,
13584 default_severity: Severity::Allow,
13585 warn_since: None,
13586 deny_since: None,
13587 },
13588 Lint {
13589 label: "clippy::doc_lazy_continuation",
13590 description: r##"In CommonMark Markdown, the language used to write doc comments, a
13591paragraph nested within a list or block quote does not need any line
13592after the first one to be indented or marked. The specification calls
13593this a lazy paragraph continuation."##,
13594 default_severity: Severity::Allow,
13595 warn_since: None,
13596 deny_since: None,
13597 },
13598 Lint {
13599 label: "clippy::doc_link_with_quotes",
13600 description: r##"Detects the syntax `['foo']` in documentation comments (notice quotes instead of backticks)
13601outside of code blocks"##,
13602 default_severity: Severity::Allow,
13603 warn_since: None,
13604 deny_since: None,
13605 },
13606 Lint {
13607 label: "clippy::doc_markdown",
13608 description: r##"Checks for the presence of `_`, `::` or camel-case words
13609outside ticks in documentation."##,
13610 default_severity: Severity::Allow,
13611 warn_since: None,
13612 deny_since: None,
13613 },
13614 Lint {
13615 label: "clippy::double_comparisons",
13616 description: r##"Checks for double comparisons that could be simplified to a single expression."##,
13617 default_severity: Severity::Allow,
13618 warn_since: None,
13619 deny_since: None,
13620 },
13621 Lint {
13622 label: "clippy::double_must_use",
13623 description: r##"Checks for a `#[must_use]` attribute without
13624further information on functions and methods that return a type already
13625marked as `#[must_use]`."##,
13626 default_severity: Severity::Allow,
13627 warn_since: None,
13628 deny_since: None,
13629 },
13630 Lint {
13631 label: "clippy::double_neg",
13632 description: r##"Detects expressions of the form `--x`."##,
13633 default_severity: Severity::Allow,
13634 warn_since: None,
13635 deny_since: None,
13636 },
13637 Lint {
13638 label: "clippy::double_parens",
13639 description: r##"Checks for unnecessary double parentheses."##,
13640 default_severity: Severity::Allow,
13641 warn_since: None,
13642 deny_since: None,
13643 },
13644 Lint {
13645 label: "clippy::drain_collect",
13646 description: r##"Checks for calls to `.drain()` that clear the collection, immediately followed by a call to `.collect()`.
13647
13648> Collection in this context refers to any type with a `drain` method:
13649> `Vec`, `VecDeque`, `BinaryHeap`, `HashSet`,`HashMap`, `String`"##,
13650 default_severity: Severity::Allow,
13651 warn_since: None,
13652 deny_since: None,
13653 },
13654 Lint {
13655 label: "clippy::drop_non_drop",
13656 description: r##"Checks for calls to `std::mem::drop` with a value that does not implement `Drop`."##,
13657 default_severity: Severity::Allow,
13658 warn_since: None,
13659 deny_since: None,
13660 },
13661 Lint {
13662 label: "clippy::duplicate_mod",
13663 description: r##"Checks for files that are included as modules multiple times."##,
13664 default_severity: Severity::Allow,
13665 warn_since: None,
13666 deny_since: None,
13667 },
13668 Lint {
13669 label: "clippy::duplicate_underscore_argument",
13670 description: r##"Checks for function arguments having the similar names
13671differing by an underscore."##,
13672 default_severity: Severity::Allow,
13673 warn_since: None,
13674 deny_since: None,
13675 },
13676 Lint {
13677 label: "clippy::duplicated_attributes",
13678 description: r##"Checks for attributes that appear two or more times."##,
13679 default_severity: Severity::Allow,
13680 warn_since: None,
13681 deny_since: None,
13682 },
13683 Lint {
13684 label: "clippy::duration_subsec",
13685 description: r##"Checks for calculation of subsecond microseconds or milliseconds
13686from other `Duration` methods."##,
13687 default_severity: Severity::Allow,
13688 warn_since: None,
13689 deny_since: None,
13690 },
13691 Lint {
13692 label: "clippy::eager_transmute",
13693 description: r##"Checks for integer validity checks, followed by a transmute that is (incorrectly) evaluated
13694eagerly (e.g. using `bool::then_some`)."##,
13695 default_severity: Severity::Allow,
13696 warn_since: None,
13697 deny_since: None,
13698 },
13699 Lint {
13700 label: "clippy::else_if_without_else",
13701 description: r##"Checks for usage of if expressions with an `else if` branch,
13702but without a final `else` branch."##,
13703 default_severity: Severity::Allow,
13704 warn_since: None,
13705 deny_since: None,
13706 },
13707 Lint {
13708 label: "clippy::empty_docs",
13709 description: r##"Detects documentation that is empty."##,
13710 default_severity: Severity::Allow,
13711 warn_since: None,
13712 deny_since: None,
13713 },
13714 Lint {
13715 label: "clippy::empty_drop",
13716 description: r##"Checks for empty `Drop` implementations."##,
13717 default_severity: Severity::Allow,
13718 warn_since: None,
13719 deny_since: None,
13720 },
13721 Lint {
13722 label: "clippy::empty_enum",
13723 description: r##"Checks for `enum`s with no variants, which therefore are uninhabited types
13724(cannot be instantiated).
13725
13726As of this writing, the `never_type` is still a nightly-only experimental API.
13727Therefore, this lint is only triggered if `#![feature(never_type)]` is enabled."##,
13728 default_severity: Severity::Allow,
13729 warn_since: None,
13730 deny_since: None,
13731 },
13732 Lint {
13733 label: "clippy::empty_enum_variants_with_brackets",
13734 description: r##"Finds enum variants without fields that are declared with empty brackets."##,
13735 default_severity: Severity::Allow,
13736 warn_since: None,
13737 deny_since: None,
13738 },
13739 Lint {
13740 label: "clippy::empty_line_after_doc_comments",
13741 description: r##"Checks for empty lines after doc comments."##,
13742 default_severity: Severity::Allow,
13743 warn_since: None,
13744 deny_since: None,
13745 },
13746 Lint {
13747 label: "clippy::empty_line_after_outer_attr",
13748 description: r##"Checks for empty lines after outer attributes"##,
13749 default_severity: Severity::Allow,
13750 warn_since: None,
13751 deny_since: None,
13752 },
13753 Lint {
13754 label: "clippy::empty_loop",
13755 description: r##"Checks for empty `loop` expressions."##,
13756 default_severity: Severity::Allow,
13757 warn_since: None,
13758 deny_since: None,
13759 },
13760 Lint {
13761 label: "clippy::empty_structs_with_brackets",
13762 description: r##"Finds structs without fields (a so-called empty struct) that are declared with brackets."##,
13763 default_severity: Severity::Allow,
13764 warn_since: None,
13765 deny_since: None,
13766 },
13767 Lint {
13768 label: "clippy::enum_clike_unportable_variant",
13769 description: r##"Checks for C-like enumerations that are
13770`repr(isize/usize)` and have values that don't fit into an `i32`."##,
13771 default_severity: Severity::Allow,
13772 warn_since: None,
13773 deny_since: None,
13774 },
13775 Lint {
13776 label: "clippy::enum_glob_use",
13777 description: r##"Checks for `use Enum::*`."##,
13778 default_severity: Severity::Allow,
13779 warn_since: None,
13780 deny_since: None,
13781 },
13782 Lint {
13783 label: "clippy::enum_variant_names",
13784 description: r##"Detects enumeration variants that are prefixed or suffixed
13785by the same characters."##,
13786 default_severity: Severity::Allow,
13787 warn_since: None,
13788 deny_since: None,
13789 },
13790 Lint {
13791 label: "clippy::eq_op",
13792 description: r##"Checks for equal operands to comparison, logical and
13793bitwise, difference and division binary operators (`==`, `>`, etc., `&&`,
13794`||`, `&`, `|`, `^`, `-` and `/`)."##,
13795 default_severity: Severity::Allow,
13796 warn_since: None,
13797 deny_since: None,
13798 },
13799 Lint {
13800 label: "clippy::equatable_if_let",
13801 description: r##"Checks for pattern matchings that can be expressed using equality."##,
13802 default_severity: Severity::Allow,
13803 warn_since: None,
13804 deny_since: None,
13805 },
13806 Lint {
13807 label: "clippy::erasing_op",
13808 description: r##"Checks for erasing operations, e.g., `x * 0`."##,
13809 default_severity: Severity::Allow,
13810 warn_since: None,
13811 deny_since: None,
13812 },
13813 Lint {
13814 label: "clippy::err_expect",
13815 description: r##"Checks for `.err().expect()` calls on the `Result` type."##,
13816 default_severity: Severity::Allow,
13817 warn_since: None,
13818 deny_since: None,
13819 },
13820 Lint {
13821 label: "clippy::error_impl_error",
13822 description: r##"Checks for types named `Error` that implement `Error`."##,
13823 default_severity: Severity::Allow,
13824 warn_since: None,
13825 deny_since: None,
13826 },
13827 Lint {
13828 label: "clippy::excessive_nesting",
13829 description: r##"Checks for blocks which are nested beyond a certain threshold.
13830
13831Note: Even though this lint is warn-by-default, it will only trigger if a maximum nesting level is defined in the clippy.toml file."##,
13832 default_severity: Severity::Allow,
13833 warn_since: None,
13834 deny_since: None,
13835 },
13836 Lint {
13837 label: "clippy::excessive_precision",
13838 description: r##"Checks for float literals with a precision greater
13839than that supported by the underlying type."##,
13840 default_severity: Severity::Allow,
13841 warn_since: None,
13842 deny_since: None,
13843 },
13844 Lint {
13845 label: "clippy::exhaustive_enums",
13846 description: r##"Warns on any exported `enum`s that are not tagged `#[non_exhaustive]`"##,
13847 default_severity: Severity::Allow,
13848 warn_since: None,
13849 deny_since: None,
13850 },
13851 Lint {
13852 label: "clippy::exhaustive_structs",
13853 description: r##"Warns on any exported `struct`s that are not tagged `#[non_exhaustive]`"##,
13854 default_severity: Severity::Allow,
13855 warn_since: None,
13856 deny_since: None,
13857 },
13858 Lint {
13859 label: "clippy::exit",
13860 description: r##"Detects calls to the `exit()` function which terminates the program."##,
13861 default_severity: Severity::Allow,
13862 warn_since: None,
13863 deny_since: None,
13864 },
13865 Lint {
13866 label: "clippy::expect_fun_call",
13867 description: r##"Checks for calls to `.expect(&format!(...))`, `.expect(foo(..))`,
13868etc., and suggests to use `unwrap_or_else` instead"##,
13869 default_severity: Severity::Allow,
13870 warn_since: None,
13871 deny_since: None,
13872 },
13873 Lint {
13874 label: "clippy::expect_used",
13875 description: r##"Checks for `.expect()` or `.expect_err()` calls on `Result`s and `.expect()` call on `Option`s."##,
13876 default_severity: Severity::Allow,
13877 warn_since: None,
13878 deny_since: None,
13879 },
13880 Lint {
13881 label: "clippy::expl_impl_clone_on_copy",
13882 description: r##"Checks for explicit `Clone` implementations for `Copy`
13883types."##,
13884 default_severity: Severity::Allow,
13885 warn_since: None,
13886 deny_since: None,
13887 },
13888 Lint {
13889 label: "clippy::explicit_auto_deref",
13890 description: r##"Checks for dereferencing expressions which would be covered by auto-deref."##,
13891 default_severity: Severity::Allow,
13892 warn_since: None,
13893 deny_since: None,
13894 },
13895 Lint {
13896 label: "clippy::explicit_counter_loop",
13897 description: r##"Checks `for` loops over slices with an explicit counter
13898and suggests the use of `.enumerate()`."##,
13899 default_severity: Severity::Allow,
13900 warn_since: None,
13901 deny_since: None,
13902 },
13903 Lint {
13904 label: "clippy::explicit_deref_methods",
13905 description: r##"Checks for explicit `deref()` or `deref_mut()` method calls."##,
13906 default_severity: Severity::Allow,
13907 warn_since: None,
13908 deny_since: None,
13909 },
13910 Lint {
13911 label: "clippy::explicit_into_iter_loop",
13912 description: r##"Checks for loops on `y.into_iter()` where `y` will do, and
13913suggests the latter."##,
13914 default_severity: Severity::Allow,
13915 warn_since: None,
13916 deny_since: None,
13917 },
13918 Lint {
13919 label: "clippy::explicit_iter_loop",
13920 description: r##"Checks for loops on `x.iter()` where `&x` will do, and
13921suggests the latter."##,
13922 default_severity: Severity::Allow,
13923 warn_since: None,
13924 deny_since: None,
13925 },
13926 Lint {
13927 label: "clippy::explicit_write",
13928 description: r##"Checks for usage of `write!()` / `writeln()!` which can be
13929replaced with `(e)print!()` / `(e)println!()`"##,
13930 default_severity: Severity::Allow,
13931 warn_since: None,
13932 deny_since: None,
13933 },
13934 Lint {
13935 label: "clippy::extend_from_slice",
13936 description: r##"Nothing. This lint has been deprecated"##,
13937 default_severity: Severity::Allow,
13938 warn_since: None,
13939 deny_since: None,
13940 },
13941 Lint {
13942 label: "clippy::extend_with_drain",
13943 description: r##"Checks for occurrences where one vector gets extended instead of append"##,
13944 default_severity: Severity::Allow,
13945 warn_since: None,
13946 deny_since: None,
13947 },
13948 Lint {
13949 label: "clippy::extra_unused_lifetimes",
13950 description: r##"Checks for lifetimes in generics that are never used
13951anywhere else."##,
13952 default_severity: Severity::Allow,
13953 warn_since: None,
13954 deny_since: None,
13955 },
13956 Lint {
13957 label: "clippy::extra_unused_type_parameters",
13958 description: r##"Checks for type parameters in generics that are never used anywhere else."##,
13959 default_severity: Severity::Allow,
13960 warn_since: None,
13961 deny_since: None,
13962 },
13963 Lint {
13964 label: "clippy::fallible_impl_from",
13965 description: r##"Checks for impls of `From<..>` that contain `panic!()` or `unwrap()`"##,
13966 default_severity: Severity::Allow,
13967 warn_since: None,
13968 deny_since: None,
13969 },
13970 Lint {
13971 label: "clippy::field_reassign_with_default",
13972 description: r##"Checks for immediate reassignment of fields initialized
13973with Default::default()."##,
13974 default_severity: Severity::Allow,
13975 warn_since: None,
13976 deny_since: None,
13977 },
13978 Lint {
13979 label: "clippy::field_scoped_visibility_modifiers",
13980 description: r##"Checks for usage of scoped visibility modifiers, like `pub(crate)`, on fields. These
13981make a field visible within a scope between public and private."##,
13982 default_severity: Severity::Allow,
13983 warn_since: None,
13984 deny_since: None,
13985 },
13986 Lint {
13987 label: "clippy::filetype_is_file",
13988 description: r##"Checks for `FileType::is_file()`."##,
13989 default_severity: Severity::Allow,
13990 warn_since: None,
13991 deny_since: None,
13992 },
13993 Lint {
13994 label: "clippy::filter_map_bool_then",
13995 description: r##"Checks for usage of `bool::then` in `Iterator::filter_map`."##,
13996 default_severity: Severity::Allow,
13997 warn_since: None,
13998 deny_since: None,
13999 },
14000 Lint {
14001 label: "clippy::filter_map_identity",
14002 description: r##"Checks for usage of `filter_map(|x| x)`."##,
14003 default_severity: Severity::Allow,
14004 warn_since: None,
14005 deny_since: None,
14006 },
14007 Lint {
14008 label: "clippy::filter_map_next",
14009 description: r##"Checks for usage of `_.filter_map(_).next()`."##,
14010 default_severity: Severity::Allow,
14011 warn_since: None,
14012 deny_since: None,
14013 },
14014 Lint {
14015 label: "clippy::filter_next",
14016 description: r##"Checks for usage of `_.filter(_).next()`."##,
14017 default_severity: Severity::Allow,
14018 warn_since: None,
14019 deny_since: None,
14020 },
14021 Lint {
14022 label: "clippy::flat_map_identity",
14023 description: r##"Checks for usage of `flat_map(|x| x)`."##,
14024 default_severity: Severity::Allow,
14025 warn_since: None,
14026 deny_since: None,
14027 },
14028 Lint {
14029 label: "clippy::flat_map_option",
14030 description: r##"Checks for usage of `Iterator::flat_map()` where `filter_map()` could be
14031used instead."##,
14032 default_severity: Severity::Allow,
14033 warn_since: None,
14034 deny_since: None,
14035 },
14036 Lint {
14037 label: "clippy::float_arithmetic",
14038 description: r##"Checks for float arithmetic."##,
14039 default_severity: Severity::Allow,
14040 warn_since: None,
14041 deny_since: None,
14042 },
14043 Lint {
14044 label: "clippy::float_cmp",
14045 description: r##"Checks for (in-)equality comparisons on floating-point
14046values (apart from zero), except in functions called `*eq*` (which probably
14047implement equality for a type involving floats)."##,
14048 default_severity: Severity::Allow,
14049 warn_since: None,
14050 deny_since: None,
14051 },
14052 Lint {
14053 label: "clippy::float_cmp_const",
14054 description: r##"Checks for (in-)equality comparisons on constant floating-point
14055values (apart from zero), except in functions called `*eq*` (which probably
14056implement equality for a type involving floats)."##,
14057 default_severity: Severity::Allow,
14058 warn_since: None,
14059 deny_since: None,
14060 },
14061 Lint {
14062 label: "clippy::float_equality_without_abs",
14063 description: r##"Checks for statements of the form `(a - b) < f32::EPSILON` or
14064`(a - b) < f64::EPSILON`. Notes the missing `.abs()`."##,
14065 default_severity: Severity::Allow,
14066 warn_since: None,
14067 deny_since: None,
14068 },
14069 Lint {
14070 label: "clippy::fn_address_comparisons",
14071 description: r##"Checks for comparisons with an address of a function item."##,
14072 default_severity: Severity::Allow,
14073 warn_since: None,
14074 deny_since: None,
14075 },
14076 Lint {
14077 label: "clippy::fn_params_excessive_bools",
14078 description: r##"Checks for excessive use of
14079bools in function definitions."##,
14080 default_severity: Severity::Allow,
14081 warn_since: None,
14082 deny_since: None,
14083 },
14084 Lint {
14085 label: "clippy::fn_to_numeric_cast",
14086 description: r##"Checks for casts of function pointers to something other than `usize`."##,
14087 default_severity: Severity::Allow,
14088 warn_since: None,
14089 deny_since: None,
14090 },
14091 Lint {
14092 label: "clippy::fn_to_numeric_cast_any",
14093 description: r##"Checks for casts of a function pointer to any integer type."##,
14094 default_severity: Severity::Allow,
14095 warn_since: None,
14096 deny_since: None,
14097 },
14098 Lint {
14099 label: "clippy::fn_to_numeric_cast_with_truncation",
14100 description: r##"Checks for casts of a function pointer to a numeric type not wide enough to
14101store an address."##,
14102 default_severity: Severity::Allow,
14103 warn_since: None,
14104 deny_since: None,
14105 },
14106 Lint {
14107 label: "clippy::for_kv_map",
14108 description: r##"Checks for iterating a map (`HashMap` or `BTreeMap`) and
14109ignoring either the keys or values."##,
14110 default_severity: Severity::Allow,
14111 warn_since: None,
14112 deny_since: None,
14113 },
14114 Lint {
14115 label: "clippy::forget_non_drop",
14116 description: r##"Checks for calls to `std::mem::forget` with a value that does not implement `Drop`."##,
14117 default_severity: Severity::Allow,
14118 warn_since: None,
14119 deny_since: None,
14120 },
14121 Lint {
14122 label: "clippy::format_collect",
14123 description: r##"Checks for usage of `.map(|_| format!(..)).collect::<String>()`."##,
14124 default_severity: Severity::Allow,
14125 warn_since: None,
14126 deny_since: None,
14127 },
14128 Lint {
14129 label: "clippy::format_in_format_args",
14130 description: r##"Detects `format!` within the arguments of another macro that does
14131formatting such as `format!` itself, `write!` or `println!`. Suggests
14132inlining the `format!` call."##,
14133 default_severity: Severity::Allow,
14134 warn_since: None,
14135 deny_since: None,
14136 },
14137 Lint {
14138 label: "clippy::format_push_string",
14139 description: r##"Detects cases where the result of a `format!` call is
14140appended to an existing `String`."##,
14141 default_severity: Severity::Allow,
14142 warn_since: None,
14143 deny_since: None,
14144 },
14145 Lint {
14146 label: "clippy::four_forward_slashes",
14147 description: r##"Checks for outer doc comments written with 4 forward slashes (`////`)."##,
14148 default_severity: Severity::Allow,
14149 warn_since: None,
14150 deny_since: None,
14151 },
14152 Lint {
14153 label: "clippy::from_iter_instead_of_collect",
14154 description: r##"Checks for `from_iter()` function calls on types that implement the `FromIterator`
14155trait."##,
14156 default_severity: Severity::Allow,
14157 warn_since: None,
14158 deny_since: None,
14159 },
14160 Lint {
14161 label: "clippy::from_over_into",
14162 description: r##"Searches for implementations of the `Into<..>` trait and suggests to implement `From<..>` instead."##,
14163 default_severity: Severity::Allow,
14164 warn_since: None,
14165 deny_since: None,
14166 },
14167 Lint {
14168 label: "clippy::from_raw_with_void_ptr",
14169 description: r##"Checks if we're passing a `c_void` raw pointer to `{Box,Rc,Arc,Weak}::from_raw(_)`"##,
14170 default_severity: Severity::Allow,
14171 warn_since: None,
14172 deny_since: None,
14173 },
14174 Lint {
14175 label: "clippy::from_str_radix_10",
14176 description: r##"Checks for function invocations of the form `primitive::from_str_radix(s, 10)`"##,
14177 default_severity: Severity::Allow,
14178 warn_since: None,
14179 deny_since: None,
14180 },
14181 Lint {
14182 label: "clippy::future_not_send",
14183 description: r##"This lint requires Future implementations returned from
14184functions and methods to implement the `Send` marker trait. It is mostly
14185used by library authors (public and internal) that target an audience where
14186multithreaded executors are likely to be used for running these Futures."##,
14187 default_severity: Severity::Allow,
14188 warn_since: None,
14189 deny_since: None,
14190 },
14191 Lint {
14192 label: "clippy::get_first",
14193 description: r##"Checks for usage of `x.get(0)` instead of
14194`x.first()` or `x.front()`."##,
14195 default_severity: Severity::Allow,
14196 warn_since: None,
14197 deny_since: None,
14198 },
14199 Lint {
14200 label: "clippy::get_last_with_len",
14201 description: r##"Checks for usage of `x.get(x.len() - 1)` instead of
14202`x.last()`."##,
14203 default_severity: Severity::Allow,
14204 warn_since: None,
14205 deny_since: None,
14206 },
14207 Lint {
14208 label: "clippy::get_unwrap",
14209 description: r##"Checks for usage of `.get().unwrap()` (or
14210`.get_mut().unwrap`) on a standard library type which implements `Index`"##,
14211 default_severity: Severity::Allow,
14212 warn_since: None,
14213 deny_since: None,
14214 },
14215 Lint {
14216 label: "clippy::host_endian_bytes",
14217 description: r##"Checks for the usage of the `to_ne_bytes` method and/or the function `from_ne_bytes`."##,
14218 default_severity: Severity::Allow,
14219 warn_since: None,
14220 deny_since: None,
14221 },
14222 Lint {
14223 label: "clippy::identity_op",
14224 description: r##"Checks for identity operations, e.g., `x + 0`."##,
14225 default_severity: Severity::Allow,
14226 warn_since: None,
14227 deny_since: None,
14228 },
14229 Lint {
14230 label: "clippy::if_let_mutex",
14231 description: r##"Checks for `Mutex::lock` calls in `if let` expression
14232with lock calls in any of the else blocks."##,
14233 default_severity: Severity::Allow,
14234 warn_since: None,
14235 deny_since: None,
14236 },
14237 Lint {
14238 label: "clippy::if_not_else",
14239 description: r##"Checks for usage of `!` or `!=` in an if condition with an
14240else branch."##,
14241 default_severity: Severity::Allow,
14242 warn_since: None,
14243 deny_since: None,
14244 },
14245 Lint {
14246 label: "clippy::if_same_then_else",
14247 description: r##"Checks for `if/else` with the same body as the *then* part
14248and the *else* part."##,
14249 default_severity: Severity::Allow,
14250 warn_since: None,
14251 deny_since: None,
14252 },
14253 Lint {
14254 label: "clippy::if_then_some_else_none",
14255 description: r##"Checks for if-else that could be written using either `bool::then` or `bool::then_some`."##,
14256 default_severity: Severity::Allow,
14257 warn_since: None,
14258 deny_since: None,
14259 },
14260 Lint {
14261 label: "clippy::ifs_same_cond",
14262 description: r##"Checks for consecutive `if`s with the same condition."##,
14263 default_severity: Severity::Allow,
14264 warn_since: None,
14265 deny_since: None,
14266 },
14267 Lint {
14268 label: "clippy::ignored_unit_patterns",
14269 description: r##"Checks for usage of `_` in patterns of type `()`."##,
14270 default_severity: Severity::Allow,
14271 warn_since: None,
14272 deny_since: None,
14273 },
14274 Lint {
14275 label: "clippy::impl_hash_borrow_with_str_and_bytes",
14276 description: r##"This lint is concerned with the semantics of `Borrow` and `Hash` for a
14277type that implements all three of `Hash`, `Borrow<str>` and `Borrow<[u8]>`
14278as it is impossible to satisfy the semantics of Borrow and `Hash` for
14279both `Borrow<str>` and `Borrow<[u8]>`."##,
14280 default_severity: Severity::Allow,
14281 warn_since: None,
14282 deny_since: None,
14283 },
14284 Lint {
14285 label: "clippy::impl_trait_in_params",
14286 description: r##"Lints when `impl Trait` is being used in a function's parameters."##,
14287 default_severity: Severity::Allow,
14288 warn_since: None,
14289 deny_since: None,
14290 },
14291 Lint {
14292 label: "clippy::implicit_clone",
14293 description: r##"Checks for the usage of `_.to_owned()`, `vec.to_vec()`, or similar when calling `_.clone()` would be clearer."##,
14294 default_severity: Severity::Allow,
14295 warn_since: None,
14296 deny_since: None,
14297 },
14298 Lint {
14299 label: "clippy::implicit_hasher",
14300 description: r##"Checks for public `impl` or `fn` missing generalization
14301over different hashers and implicitly defaulting to the default hashing
14302algorithm (`SipHash`)."##,
14303 default_severity: Severity::Allow,
14304 warn_since: None,
14305 deny_since: None,
14306 },
14307 Lint {
14308 label: "clippy::implicit_return",
14309 description: r##"Checks for missing return statements at the end of a block."##,
14310 default_severity: Severity::Allow,
14311 warn_since: None,
14312 deny_since: None,
14313 },
14314 Lint {
14315 label: "clippy::implicit_saturating_add",
14316 description: r##"Checks for implicit saturating addition."##,
14317 default_severity: Severity::Allow,
14318 warn_since: None,
14319 deny_since: None,
14320 },
14321 Lint {
14322 label: "clippy::implicit_saturating_sub",
14323 description: r##"Checks for implicit saturating subtraction."##,
14324 default_severity: Severity::Allow,
14325 warn_since: None,
14326 deny_since: None,
14327 },
14328 Lint {
14329 label: "clippy::implied_bounds_in_impls",
14330 description: r##"Looks for bounds in `impl Trait` in return position that are implied by other bounds.
14331This can happen when a trait is specified that another trait already has as a supertrait
14332(e.g. `fn() -> impl Deref + DerefMut<Target = i32>` has an unnecessary `Deref` bound,
14333because `Deref` is a supertrait of `DerefMut`)"##,
14334 default_severity: Severity::Allow,
14335 warn_since: None,
14336 deny_since: None,
14337 },
14338 Lint {
14339 label: "clippy::impossible_comparisons",
14340 description: r##"Checks for double comparisons that can never succeed"##,
14341 default_severity: Severity::Allow,
14342 warn_since: None,
14343 deny_since: None,
14344 },
14345 Lint {
14346 label: "clippy::imprecise_flops",
14347 description: r##"Looks for floating-point expressions that
14348can be expressed using built-in methods to improve accuracy
14349at the cost of performance."##,
14350 default_severity: Severity::Allow,
14351 warn_since: None,
14352 deny_since: None,
14353 },
14354 Lint {
14355 label: "clippy::incompatible_msrv",
14356 description: r##"This lint checks that no function newer than the defined MSRV (minimum
14357supported rust version) is used in the crate."##,
14358 default_severity: Severity::Allow,
14359 warn_since: None,
14360 deny_since: None,
14361 },
14362 Lint {
14363 label: "clippy::inconsistent_digit_grouping",
14364 description: r##"Warns if an integral or floating-point constant is
14365grouped inconsistently with underscores."##,
14366 default_severity: Severity::Allow,
14367 warn_since: None,
14368 deny_since: None,
14369 },
14370 Lint {
14371 label: "clippy::inconsistent_struct_constructor",
14372 description: r##"Checks for struct constructors where all fields are shorthand and
14373the order of the field init shorthand in the constructor is inconsistent
14374with the order in the struct definition."##,
14375 default_severity: Severity::Allow,
14376 warn_since: None,
14377 deny_since: None,
14378 },
14379 Lint {
14380 label: "clippy::index_refutable_slice",
14381 description: r##"The lint checks for slice bindings in patterns that are only used to
14382access individual slice values."##,
14383 default_severity: Severity::Allow,
14384 warn_since: None,
14385 deny_since: None,
14386 },
14387 Lint {
14388 label: "clippy::indexing_slicing",
14389 description: r##"Checks for usage of indexing or slicing. Arrays are special cases, this lint
14390does report on arrays if we can tell that slicing operations are in bounds and does not
14391lint on constant `usize` indexing on arrays because that is handled by rustc's `const_err` lint."##,
14392 default_severity: Severity::Allow,
14393 warn_since: None,
14394 deny_since: None,
14395 },
14396 Lint {
14397 label: "clippy::ineffective_bit_mask",
14398 description: r##"Checks for bit masks in comparisons which can be removed
14399without changing the outcome. The basic structure can be seen in the
14400following table:
14401
14402|Comparison| Bit Op |Example |equals |
14403|----------|----------|------------|-------|
14404|`>` / `<=`|`\\|` / `^`|`x \\| 2 > 3`|`x > 3`|
14405|`<` / `>=`|`\\|` / `^`|`x ^ 1 < 4` |`x < 4`|"##,
14406 default_severity: Severity::Allow,
14407 warn_since: None,
14408 deny_since: None,
14409 },
14410 Lint {
14411 label: "clippy::ineffective_open_options",
14412 description: r##"Checks if both `.write(true)` and `.append(true)` methods are called
14413on a same `OpenOptions`."##,
14414 default_severity: Severity::Allow,
14415 warn_since: None,
14416 deny_since: None,
14417 },
14418 Lint {
14419 label: "clippy::inefficient_to_string",
14420 description: r##"Checks for usage of `.to_string()` on an `&&T` where
14421`T` implements `ToString` directly (like `&&str` or `&&String`)."##,
14422 default_severity: Severity::Allow,
14423 warn_since: None,
14424 deny_since: None,
14425 },
14426 Lint {
14427 label: "clippy::infallible_destructuring_match",
14428 description: r##"Checks for matches being used to destructure a single-variant enum
14429or tuple struct where a `let` will suffice."##,
14430 default_severity: Severity::Allow,
14431 warn_since: None,
14432 deny_since: None,
14433 },
14434 Lint {
14435 label: "clippy::infinite_iter",
14436 description: r##"Checks for iteration that is guaranteed to be infinite."##,
14437 default_severity: Severity::Allow,
14438 warn_since: None,
14439 deny_since: None,
14440 },
14441 Lint {
14442 label: "clippy::infinite_loop",
14443 description: r##"Checks for infinite loops in a function where the return type is not `!`
14444and lint accordingly."##,
14445 default_severity: Severity::Allow,
14446 warn_since: None,
14447 deny_since: None,
14448 },
14449 Lint {
14450 label: "clippy::inherent_to_string",
14451 description: r##"Checks for the definition of inherent methods with a signature of `to_string(&self) -> String`."##,
14452 default_severity: Severity::Allow,
14453 warn_since: None,
14454 deny_since: None,
14455 },
14456 Lint {
14457 label: "clippy::inherent_to_string_shadow_display",
14458 description: r##"Checks for the definition of inherent methods with a signature of `to_string(&self) -> String` and if the type implementing this method also implements the `Display` trait."##,
14459 default_severity: Severity::Allow,
14460 warn_since: None,
14461 deny_since: None,
14462 },
14463 Lint {
14464 label: "clippy::init_numbered_fields",
14465 description: r##"Checks for tuple structs initialized with field syntax.
14466It will however not lint if a base initializer is present.
14467The lint will also ignore code in macros."##,
14468 default_severity: Severity::Allow,
14469 warn_since: None,
14470 deny_since: None,
14471 },
14472 Lint {
14473 label: "clippy::inline_always",
14474 description: r##"Checks for items annotated with `#[inline(always)]`,
14475unless the annotated function is empty or simply panics."##,
14476 default_severity: Severity::Allow,
14477 warn_since: None,
14478 deny_since: None,
14479 },
14480 Lint {
14481 label: "clippy::inline_asm_x86_att_syntax",
14482 description: r##"Checks for usage of AT&T x86 assembly syntax."##,
14483 default_severity: Severity::Allow,
14484 warn_since: None,
14485 deny_since: None,
14486 },
14487 Lint {
14488 label: "clippy::inline_asm_x86_intel_syntax",
14489 description: r##"Checks for usage of Intel x86 assembly syntax."##,
14490 default_severity: Severity::Allow,
14491 warn_since: None,
14492 deny_since: None,
14493 },
14494 Lint {
14495 label: "clippy::inline_fn_without_body",
14496 description: r##"Checks for `#[inline]` on trait methods without bodies"##,
14497 default_severity: Severity::Allow,
14498 warn_since: None,
14499 deny_since: None,
14500 },
14501 Lint {
14502 label: "clippy::inspect_for_each",
14503 description: r##"Checks for usage of `inspect().for_each()`."##,
14504 default_severity: Severity::Allow,
14505 warn_since: None,
14506 deny_since: None,
14507 },
14508 Lint {
14509 label: "clippy::int_plus_one",
14510 description: r##"Checks for usage of `x >= y + 1` or `x - 1 >= y` (and `<=`) in a block"##,
14511 default_severity: Severity::Allow,
14512 warn_since: None,
14513 deny_since: None,
14514 },
14515 Lint {
14516 label: "clippy::integer_division",
14517 description: r##"Checks for division of integers"##,
14518 default_severity: Severity::Allow,
14519 warn_since: None,
14520 deny_since: None,
14521 },
14522 Lint {
14523 label: "clippy::integer_division_remainder_used",
14524 description: r##"Checks for the usage of division (`/`) and remainder (`%`) operations
14525when performed on any integer types using the default `Div` and `Rem` trait implementations."##,
14526 default_severity: Severity::Allow,
14527 warn_since: None,
14528 deny_since: None,
14529 },
14530 Lint {
14531 label: "clippy::into_iter_on_ref",
14532 description: r##"Checks for `into_iter` calls on references which should be replaced by `iter`
14533or `iter_mut`."##,
14534 default_severity: Severity::Allow,
14535 warn_since: None,
14536 deny_since: None,
14537 },
14538 Lint {
14539 label: "clippy::into_iter_without_iter",
14540 description: r##"This is the opposite of the `iter_without_into_iter` lint.
14541It looks for `IntoIterator for (&|&mut) Type` implementations without an inherent `iter` or `iter_mut` method
14542on the type or on any of the types in its `Deref` chain."##,
14543 default_severity: Severity::Allow,
14544 warn_since: None,
14545 deny_since: None,
14546 },
14547 Lint {
14548 label: "clippy::invalid_null_ptr_usage",
14549 description: r##"This lint checks for invalid usages of `ptr::null`."##,
14550 default_severity: Severity::Allow,
14551 warn_since: None,
14552 deny_since: None,
14553 },
14554 Lint {
14555 label: "clippy::invalid_regex",
14556 description: r##"Checks [regex](https://crates.io/crates/regex) creation
14557(with `Regex::new`, `RegexBuilder::new`, or `RegexSet::new`) for correct
14558regex syntax."##,
14559 default_severity: Severity::Allow,
14560 warn_since: None,
14561 deny_since: None,
14562 },
14563 Lint {
14564 label: "clippy::invalid_upcast_comparisons",
14565 description: r##"Checks for comparisons where the relation is always either
14566true or false, but where one side has been upcast so that the comparison is
14567necessary. Only integer types are checked."##,
14568 default_severity: Severity::Allow,
14569 warn_since: None,
14570 deny_since: None,
14571 },
14572 Lint {
14573 label: "clippy::inverted_saturating_sub",
14574 description: r##"Checks for comparisons between integers, followed by subtracting the greater value from the
14575lower one."##,
14576 default_severity: Severity::Allow,
14577 warn_since: None,
14578 deny_since: None,
14579 },
14580 Lint {
14581 label: "clippy::invisible_characters",
14582 description: r##"Checks for invisible Unicode characters in the code."##,
14583 default_severity: Severity::Allow,
14584 warn_since: None,
14585 deny_since: None,
14586 },
14587 Lint {
14588 label: "clippy::is_digit_ascii_radix",
14589 description: r##"Finds usages of [`char::is_digit`](https://doc.rust-lang.org/stable/std/primitive.char.html#method.is_digit) that
14590can be replaced with [`is_ascii_digit`](https://doc.rust-lang.org/stable/std/primitive.char.html#method.is_ascii_digit) or
14591[`is_ascii_hexdigit`](https://doc.rust-lang.org/stable/std/primitive.char.html#method.is_ascii_hexdigit)."##,
14592 default_severity: Severity::Allow,
14593 warn_since: None,
14594 deny_since: None,
14595 },
14596 Lint {
14597 label: "clippy::items_after_statements",
14598 description: r##"Checks for items declared after some statement in a block."##,
14599 default_severity: Severity::Allow,
14600 warn_since: None,
14601 deny_since: None,
14602 },
14603 Lint {
14604 label: "clippy::items_after_test_module",
14605 description: r##"Triggers if an item is declared after the testing module marked with `#[cfg(test)]`."##,
14606 default_severity: Severity::Allow,
14607 warn_since: None,
14608 deny_since: None,
14609 },
14610 Lint {
14611 label: "clippy::iter_cloned_collect",
14612 description: r##"Checks for the use of `.cloned().collect()` on slice to
14613create a `Vec`."##,
14614 default_severity: Severity::Allow,
14615 warn_since: None,
14616 deny_since: None,
14617 },
14618 Lint {
14619 label: "clippy::iter_count",
14620 description: r##"Checks for the use of `.iter().count()`."##,
14621 default_severity: Severity::Allow,
14622 warn_since: None,
14623 deny_since: None,
14624 },
14625 Lint {
14626 label: "clippy::iter_filter_is_ok",
14627 description: r##"Checks for usage of `.filter(Result::is_ok)` that may be replaced with a `.flatten()` call.
14628This lint will require additional changes to the follow-up calls as it affects the type."##,
14629 default_severity: Severity::Allow,
14630 warn_since: None,
14631 deny_since: None,
14632 },
14633 Lint {
14634 label: "clippy::iter_filter_is_some",
14635 description: r##"Checks for usage of `.filter(Option::is_some)` that may be replaced with a `.flatten()` call.
14636This lint will require additional changes to the follow-up calls as it affects the type."##,
14637 default_severity: Severity::Allow,
14638 warn_since: None,
14639 deny_since: None,
14640 },
14641 Lint {
14642 label: "clippy::iter_kv_map",
14643 description: r##"Checks for iterating a map (`HashMap` or `BTreeMap`) and
14644ignoring either the keys or values."##,
14645 default_severity: Severity::Allow,
14646 warn_since: None,
14647 deny_since: None,
14648 },
14649 Lint {
14650 label: "clippy::iter_next_loop",
14651 description: r##"Checks for loops on `x.next()`."##,
14652 default_severity: Severity::Allow,
14653 warn_since: None,
14654 deny_since: None,
14655 },
14656 Lint {
14657 label: "clippy::iter_next_slice",
14658 description: r##"Checks for usage of `iter().next()` on a Slice or an Array"##,
14659 default_severity: Severity::Allow,
14660 warn_since: None,
14661 deny_since: None,
14662 },
14663 Lint {
14664 label: "clippy::iter_not_returning_iterator",
14665 description: r##"Detects methods named `iter` or `iter_mut` that do not have a return type that implements `Iterator`."##,
14666 default_severity: Severity::Allow,
14667 warn_since: None,
14668 deny_since: None,
14669 },
14670 Lint {
14671 label: "clippy::iter_nth",
14672 description: r##"Checks for usage of `.iter().nth()`/`.iter_mut().nth()` on standard library types that have
14673equivalent `.get()`/`.get_mut()` methods."##,
14674 default_severity: Severity::Allow,
14675 warn_since: None,
14676 deny_since: None,
14677 },
14678 Lint {
14679 label: "clippy::iter_nth_zero",
14680 description: r##"Checks for the use of `iter.nth(0)`."##,
14681 default_severity: Severity::Allow,
14682 warn_since: None,
14683 deny_since: None,
14684 },
14685 Lint {
14686 label: "clippy::iter_on_empty_collections",
14687 description: r##"Checks for calls to `iter`, `iter_mut` or `into_iter` on empty collections"##,
14688 default_severity: Severity::Allow,
14689 warn_since: None,
14690 deny_since: None,
14691 },
14692 Lint {
14693 label: "clippy::iter_on_single_items",
14694 description: r##"Checks for calls to `iter`, `iter_mut` or `into_iter` on collections containing a single item"##,
14695 default_severity: Severity::Allow,
14696 warn_since: None,
14697 deny_since: None,
14698 },
14699 Lint {
14700 label: "clippy::iter_out_of_bounds",
14701 description: r##"Looks for iterator combinator calls such as `.take(x)` or `.skip(x)`
14702where `x` is greater than the amount of items that an iterator will produce."##,
14703 default_severity: Severity::Allow,
14704 warn_since: None,
14705 deny_since: None,
14706 },
14707 Lint {
14708 label: "clippy::iter_over_hash_type",
14709 description: r##"This is a restriction lint which prevents the use of hash types (i.e., `HashSet` and `HashMap`) in for loops."##,
14710 default_severity: Severity::Allow,
14711 warn_since: None,
14712 deny_since: None,
14713 },
14714 Lint {
14715 label: "clippy::iter_overeager_cloned",
14716 description: r##"Checks for usage of `_.cloned().<func>()` where call to `.cloned()` can be postponed."##,
14717 default_severity: Severity::Allow,
14718 warn_since: None,
14719 deny_since: None,
14720 },
14721 Lint {
14722 label: "clippy::iter_skip_next",
14723 description: r##"Checks for usage of `.skip(x).next()` on iterators."##,
14724 default_severity: Severity::Allow,
14725 warn_since: None,
14726 deny_since: None,
14727 },
14728 Lint {
14729 label: "clippy::iter_skip_zero",
14730 description: r##"Checks for usage of `.skip(0)` on iterators."##,
14731 default_severity: Severity::Allow,
14732 warn_since: None,
14733 deny_since: None,
14734 },
14735 Lint {
14736 label: "clippy::iter_with_drain",
14737 description: r##"Checks for usage of `.drain(..)` on `Vec` and `VecDeque` for iteration."##,
14738 default_severity: Severity::Allow,
14739 warn_since: None,
14740 deny_since: None,
14741 },
14742 Lint {
14743 label: "clippy::iter_without_into_iter",
14744 description: r##"Looks for `iter` and `iter_mut` methods without an associated `IntoIterator for (&|&mut) Type` implementation."##,
14745 default_severity: Severity::Allow,
14746 warn_since: None,
14747 deny_since: None,
14748 },
14749 Lint {
14750 label: "clippy::iterator_step_by_zero",
14751 description: r##"Checks for calling `.step_by(0)` on iterators which panics."##,
14752 default_severity: Severity::Allow,
14753 warn_since: None,
14754 deny_since: None,
14755 },
14756 Lint {
14757 label: "clippy::join_absolute_paths",
14758 description: r##"Checks for calls to `Path::join` that start with a path separator (`\\\\` or `/`)."##,
14759 default_severity: Severity::Allow,
14760 warn_since: None,
14761 deny_since: None,
14762 },
14763 Lint {
14764 label: "clippy::just_underscores_and_digits",
14765 description: r##"Checks if you have variables whose name consists of just
14766underscores and digits."##,
14767 default_severity: Severity::Allow,
14768 warn_since: None,
14769 deny_since: None,
14770 },
14771 Lint {
14772 label: "clippy::large_const_arrays",
14773 description: r##"Checks for large `const` arrays that should
14774be defined as `static` instead."##,
14775 default_severity: Severity::Allow,
14776 warn_since: None,
14777 deny_since: None,
14778 },
14779 Lint {
14780 label: "clippy::large_digit_groups",
14781 description: r##"Warns if the digits of an integral or floating-point
14782constant are grouped into groups that
14783are too large."##,
14784 default_severity: Severity::Allow,
14785 warn_since: None,
14786 deny_since: None,
14787 },
14788 Lint {
14789 label: "clippy::large_enum_variant",
14790 description: r##"Checks for large size differences between variants on
14791`enum`s."##,
14792 default_severity: Severity::Allow,
14793 warn_since: None,
14794 deny_since: None,
14795 },
14796 Lint {
14797 label: "clippy::large_futures",
14798 description: r##"It checks for the size of a `Future` created by `async fn` or `async {}`."##,
14799 default_severity: Severity::Allow,
14800 warn_since: None,
14801 deny_since: None,
14802 },
14803 Lint {
14804 label: "clippy::large_include_file",
14805 description: r##"Checks for the inclusion of large files via `include_bytes!()`
14806or `include_str!()`."##,
14807 default_severity: Severity::Allow,
14808 warn_since: None,
14809 deny_since: None,
14810 },
14811 Lint {
14812 label: "clippy::large_stack_arrays",
14813 description: r##"Checks for local arrays that may be too large."##,
14814 default_severity: Severity::Allow,
14815 warn_since: None,
14816 deny_since: None,
14817 },
14818 Lint {
14819 label: "clippy::large_stack_frames",
14820 description: r##"Checks for functions that use a lot of stack space.
14821
14822This often happens when constructing a large type, such as an array with a lot of elements,
14823or constructing *many* smaller-but-still-large structs, or copying around a lot of large types.
14824
14825This lint is a more general version of [`large_stack_arrays`](https://rust-lang.github.io/rust-clippy/master/#large_stack_arrays)
14826that is intended to look at functions as a whole instead of only individual array expressions inside of a function."##,
14827 default_severity: Severity::Allow,
14828 warn_since: None,
14829 deny_since: None,
14830 },
14831 Lint {
14832 label: "clippy::large_types_passed_by_value",
14833 description: r##"Checks for functions taking arguments by value, where
14834the argument type is `Copy` and large enough to be worth considering
14835passing by reference. Does not trigger if the function is being exported,
14836because that might induce API breakage, if the parameter is declared as mutable,
14837or if the argument is a `self`."##,
14838 default_severity: Severity::Allow,
14839 warn_since: None,
14840 deny_since: None,
14841 },
14842 Lint {
14843 label: "clippy::legacy_numeric_constants",
14844 description: r##"Checks for usage of `<integer>::max_value()`, `std::<integer>::MAX`,
14845`std::<float>::EPSILON`, etc."##,
14846 default_severity: Severity::Allow,
14847 warn_since: None,
14848 deny_since: None,
14849 },
14850 Lint {
14851 label: "clippy::len_without_is_empty",
14852 description: r##"Checks for items that implement `.len()` but not
14853`.is_empty()`."##,
14854 default_severity: Severity::Allow,
14855 warn_since: None,
14856 deny_since: None,
14857 },
14858 Lint {
14859 label: "clippy::len_zero",
14860 description: r##"Checks for getting the length of something via `.len()`
14861just to compare to zero, and suggests using `.is_empty()` where applicable."##,
14862 default_severity: Severity::Allow,
14863 warn_since: None,
14864 deny_since: None,
14865 },
14866 Lint {
14867 label: "clippy::let_and_return",
14868 description: r##"Checks for `let`-bindings, which are subsequently
14869returned."##,
14870 default_severity: Severity::Allow,
14871 warn_since: None,
14872 deny_since: None,
14873 },
14874 Lint {
14875 label: "clippy::let_underscore_future",
14876 description: r##"Checks for `let _ = <expr>` where the resulting type of expr implements `Future`"##,
14877 default_severity: Severity::Allow,
14878 warn_since: None,
14879 deny_since: None,
14880 },
14881 Lint {
14882 label: "clippy::let_underscore_lock",
14883 description: r##"Checks for `let _ = sync_lock`. This supports `mutex` and `rwlock` in
14884`parking_lot`. For `std` locks see the `rustc` lint
14885[`let_underscore_lock`](https://doc.rust-lang.org/nightly/rustc/lints/listing/deny-by-default.html#let-underscore-lock)"##,
14886 default_severity: Severity::Allow,
14887 warn_since: None,
14888 deny_since: None,
14889 },
14890 Lint {
14891 label: "clippy::let_underscore_must_use",
14892 description: r##"Checks for `let _ = <expr>` where expr is `#[must_use]`"##,
14893 default_severity: Severity::Allow,
14894 warn_since: None,
14895 deny_since: None,
14896 },
14897 Lint {
14898 label: "clippy::let_underscore_untyped",
14899 description: r##"Checks for `let _ = <expr>` without a type annotation, and suggests to either provide one,
14900or remove the `let` keyword altogether."##,
14901 default_severity: Severity::Allow,
14902 warn_since: None,
14903 deny_since: None,
14904 },
14905 Lint {
14906 label: "clippy::let_unit_value",
14907 description: r##"Checks for binding a unit value."##,
14908 default_severity: Severity::Allow,
14909 warn_since: None,
14910 deny_since: None,
14911 },
14912 Lint {
14913 label: "clippy::let_with_type_underscore",
14914 description: r##"Detects when a variable is declared with an explicit type of `_`."##,
14915 default_severity: Severity::Allow,
14916 warn_since: None,
14917 deny_since: None,
14918 },
14919 Lint {
14920 label: "clippy::lines_filter_map_ok",
14921 description: r##"Checks for usage of `lines.filter_map(Result::ok)` or `lines.flat_map(Result::ok)`
14922when `lines` has type `std::io::Lines`."##,
14923 default_severity: Severity::Allow,
14924 warn_since: None,
14925 deny_since: None,
14926 },
14927 Lint {
14928 label: "clippy::linkedlist",
14929 description: r##"Checks for usage of any `LinkedList`, suggesting to use a
14930`Vec` or a `VecDeque` (formerly called `RingBuf`)."##,
14931 default_severity: Severity::Allow,
14932 warn_since: None,
14933 deny_since: None,
14934 },
14935 Lint {
14936 label: "clippy::lint_groups_priority",
14937 description: r##"Checks for lint groups with the same priority as lints in the `Cargo.toml`
14938[`[lints]` table](https://doc.rust-lang.org/cargo/reference/manifest.html#the-lints-section).
14939
14940This lint will be removed once [cargo#12918](https://github.com/rust-lang/cargo/issues/12918)
14941is resolved."##,
14942 default_severity: Severity::Allow,
14943 warn_since: None,
14944 deny_since: None,
14945 },
14946 Lint {
14947 label: "clippy::little_endian_bytes",
14948 description: r##"Checks for the usage of the `to_le_bytes` method and/or the function `from_le_bytes`."##,
14949 default_severity: Severity::Allow,
14950 warn_since: None,
14951 deny_since: None,
14952 },
14953 Lint {
14954 label: "clippy::lossy_float_literal",
14955 description: r##"Checks for whole number float literals that
14956cannot be represented as the underlying type without loss."##,
14957 default_severity: Severity::Allow,
14958 warn_since: None,
14959 deny_since: None,
14960 },
14961 Lint {
14962 label: "clippy::macro_metavars_in_unsafe",
14963 description: r##"Looks for macros that expand metavariables in an unsafe block."##,
14964 default_severity: Severity::Allow,
14965 warn_since: None,
14966 deny_since: None,
14967 },
14968 Lint {
14969 label: "clippy::macro_use_imports",
14970 description: r##"Checks for `#[macro_use] use...`."##,
14971 default_severity: Severity::Allow,
14972 warn_since: None,
14973 deny_since: None,
14974 },
14975 Lint {
14976 label: "clippy::main_recursion",
14977 description: r##"Checks for recursion using the entrypoint."##,
14978 default_severity: Severity::Allow,
14979 warn_since: None,
14980 deny_since: None,
14981 },
14982 Lint {
14983 label: "clippy::manual_assert",
14984 description: r##"Detects `if`-then-`panic!` that can be replaced with `assert!`."##,
14985 default_severity: Severity::Allow,
14986 warn_since: None,
14987 deny_since: None,
14988 },
14989 Lint {
14990 label: "clippy::manual_async_fn",
14991 description: r##"It checks for manual implementations of `async` functions."##,
14992 default_severity: Severity::Allow,
14993 warn_since: None,
14994 deny_since: None,
14995 },
14996 Lint {
14997 label: "clippy::manual_bits",
14998 description: r##"Checks for usage of `size_of::<T>() * 8` when
14999`T::BITS` is available."##,
15000 default_severity: Severity::Allow,
15001 warn_since: None,
15002 deny_since: None,
15003 },
15004 Lint {
15005 label: "clippy::manual_c_str_literals",
15006 description: r##"Checks for the manual creation of C strings (a string with a `NUL` byte at the end), either
15007through one of the `CStr` constructor functions, or more plainly by calling `.as_ptr()`
15008on a (byte) string literal with a hardcoded `\\0` byte at the end."##,
15009 default_severity: Severity::Allow,
15010 warn_since: None,
15011 deny_since: None,
15012 },
15013 Lint {
15014 label: "clippy::manual_clamp",
15015 description: r##"Identifies good opportunities for a clamp function from std or core, and suggests using it."##,
15016 default_severity: Severity::Allow,
15017 warn_since: None,
15018 deny_since: None,
15019 },
15020 Lint {
15021 label: "clippy::manual_div_ceil",
15022 description: r##"Checks for an expression like `(x + (y - 1)) / y` which is a common manual reimplementation
15023of `x.div_ceil(y)`."##,
15024 default_severity: Severity::Allow,
15025 warn_since: None,
15026 deny_since: None,
15027 },
15028 Lint {
15029 label: "clippy::manual_filter",
15030 description: r##"Checks for usage of `match` which could be implemented using `filter`"##,
15031 default_severity: Severity::Allow,
15032 warn_since: None,
15033 deny_since: None,
15034 },
15035 Lint {
15036 label: "clippy::manual_filter_map",
15037 description: r##"Checks for usage of `_.filter(_).map(_)` that can be written more simply
15038as `filter_map(_)`."##,
15039 default_severity: Severity::Allow,
15040 warn_since: None,
15041 deny_since: None,
15042 },
15043 Lint {
15044 label: "clippy::manual_find",
15045 description: r##"Checks for manual implementations of Iterator::find"##,
15046 default_severity: Severity::Allow,
15047 warn_since: None,
15048 deny_since: None,
15049 },
15050 Lint {
15051 label: "clippy::manual_find_map",
15052 description: r##"Checks for usage of `_.find(_).map(_)` that can be written more simply
15053as `find_map(_)`."##,
15054 default_severity: Severity::Allow,
15055 warn_since: None,
15056 deny_since: None,
15057 },
15058 Lint {
15059 label: "clippy::manual_flatten",
15060 description: r##"Checks for unnecessary `if let` usage in a for loop
15061where only the `Some` or `Ok` variant of the iterator element is used."##,
15062 default_severity: Severity::Allow,
15063 warn_since: None,
15064 deny_since: None,
15065 },
15066 Lint {
15067 label: "clippy::manual_hash_one",
15068 description: r##"Checks for cases where [`BuildHasher::hash_one`] can be used.
15069
15070[`BuildHasher::hash_one`]: https://doc.rust-lang.org/std/hash/trait.BuildHasher.html#method.hash_one"##,
15071 default_severity: Severity::Allow,
15072 warn_since: None,
15073 deny_since: None,
15074 },
15075 Lint {
15076 label: "clippy::manual_inspect",
15077 description: r##"Checks for uses of `map` which return the original item."##,
15078 default_severity: Severity::Allow,
15079 warn_since: None,
15080 deny_since: None,
15081 },
15082 Lint {
15083 label: "clippy::manual_instant_elapsed",
15084 description: r##"Lints subtraction between `Instant::now()` and another `Instant`."##,
15085 default_severity: Severity::Allow,
15086 warn_since: None,
15087 deny_since: None,
15088 },
15089 Lint {
15090 label: "clippy::manual_is_ascii_check",
15091 description: r##"Suggests to use dedicated built-in methods,
15092`is_ascii_(lowercase|uppercase|digit|hexdigit)` for checking on corresponding
15093ascii range"##,
15094 default_severity: Severity::Allow,
15095 warn_since: None,
15096 deny_since: None,
15097 },
15098 Lint {
15099 label: "clippy::manual_is_finite",
15100 description: r##"Checks for manual `is_finite` reimplementations
15101(i.e., `x != <float>::INFINITY && x != <float>::NEG_INFINITY`)."##,
15102 default_severity: Severity::Allow,
15103 warn_since: None,
15104 deny_since: None,
15105 },
15106 Lint {
15107 label: "clippy::manual_is_infinite",
15108 description: r##"Checks for manual `is_infinite` reimplementations
15109(i.e., `x == <float>::INFINITY || x == <float>::NEG_INFINITY`)."##,
15110 default_severity: Severity::Allow,
15111 warn_since: None,
15112 deny_since: None,
15113 },
15114 Lint {
15115 label: "clippy::manual_is_power_of_two",
15116 description: r##"Checks for expressions like `x.count_ones() == 1` or `x & (x - 1) == 0`, with x and unsigned integer, which are manual
15117reimplementations of `x.is_power_of_two()`."##,
15118 default_severity: Severity::Allow,
15119 warn_since: None,
15120 deny_since: None,
15121 },
15122 Lint {
15123 label: "clippy::manual_is_variant_and",
15124 description: r##"Checks for usage of `option.map(f).unwrap_or_default()` and `result.map(f).unwrap_or_default()` where f is a function or closure that returns the `bool` type."##,
15125 default_severity: Severity::Allow,
15126 warn_since: None,
15127 deny_since: None,
15128 },
15129 Lint {
15130 label: "clippy::manual_let_else",
15131 description: r##"Warn of cases where `let...else` could be used"##,
15132 default_severity: Severity::Allow,
15133 warn_since: None,
15134 deny_since: None,
15135 },
15136 Lint {
15137 label: "clippy::manual_main_separator_str",
15138 description: r##"Checks for references on `std::path::MAIN_SEPARATOR.to_string()` used
15139to build a `&str`."##,
15140 default_severity: Severity::Allow,
15141 warn_since: None,
15142 deny_since: None,
15143 },
15144 Lint {
15145 label: "clippy::manual_map",
15146 description: r##"Checks for usage of `match` which could be implemented using `map`"##,
15147 default_severity: Severity::Allow,
15148 warn_since: None,
15149 deny_since: None,
15150 },
15151 Lint {
15152 label: "clippy::manual_memcpy",
15153 description: r##"Checks for for-loops that manually copy items between
15154slices that could be optimized by having a memcpy."##,
15155 default_severity: Severity::Allow,
15156 warn_since: None,
15157 deny_since: None,
15158 },
15159 Lint {
15160 label: "clippy::manual_next_back",
15161 description: r##"Checks for `.rev().next()` on a `DoubleEndedIterator`"##,
15162 default_severity: Severity::Allow,
15163 warn_since: None,
15164 deny_since: None,
15165 },
15166 Lint {
15167 label: "clippy::manual_non_exhaustive",
15168 description: r##"Checks for manual implementations of the non-exhaustive pattern."##,
15169 default_severity: Severity::Allow,
15170 warn_since: None,
15171 deny_since: None,
15172 },
15173 Lint {
15174 label: "clippy::manual_ok_or",
15175 description: r##"Finds patterns that reimplement `Option::ok_or`."##,
15176 default_severity: Severity::Allow,
15177 warn_since: None,
15178 deny_since: None,
15179 },
15180 Lint {
15181 label: "clippy::manual_pattern_char_comparison",
15182 description: r##"Checks for manual `char` comparison in string patterns"##,
15183 default_severity: Severity::Allow,
15184 warn_since: None,
15185 deny_since: None,
15186 },
15187 Lint {
15188 label: "clippy::manual_range_contains",
15189 description: r##"Checks for expressions like `x >= 3 && x < 8` that could
15190be more readably expressed as `(3..8).contains(x)`."##,
15191 default_severity: Severity::Allow,
15192 warn_since: None,
15193 deny_since: None,
15194 },
15195 Lint {
15196 label: "clippy::manual_range_patterns",
15197 description: r##"Looks for combined OR patterns that are all contained in a specific range,
15198e.g. `6 | 4 | 5 | 9 | 7 | 8` can be rewritten as `4..=9`."##,
15199 default_severity: Severity::Allow,
15200 warn_since: None,
15201 deny_since: None,
15202 },
15203 Lint {
15204 label: "clippy::manual_rem_euclid",
15205 description: r##"Checks for an expression like `((x % 4) + 4) % 4` which is a common manual reimplementation
15206of `x.rem_euclid(4)`."##,
15207 default_severity: Severity::Allow,
15208 warn_since: None,
15209 deny_since: None,
15210 },
15211 Lint {
15212 label: "clippy::manual_retain",
15213 description: r##"Checks for code to be replaced by `.retain()`."##,
15214 default_severity: Severity::Allow,
15215 warn_since: None,
15216 deny_since: None,
15217 },
15218 Lint {
15219 label: "clippy::manual_rotate",
15220 description: r##"It detects manual bit rotations that could be rewritten using standard
15221functions `rotate_left` or `rotate_right`."##,
15222 default_severity: Severity::Allow,
15223 warn_since: None,
15224 deny_since: None,
15225 },
15226 Lint {
15227 label: "clippy::manual_saturating_arithmetic",
15228 description: r##"Checks for `.checked_add/sub(x).unwrap_or(MAX/MIN)`."##,
15229 default_severity: Severity::Allow,
15230 warn_since: None,
15231 deny_since: None,
15232 },
15233 Lint {
15234 label: "clippy::manual_slice_size_calculation",
15235 description: r##"When `a` is `&[T]`, detect `a.len() * size_of::<T>()` and suggest `size_of_val(a)`
15236instead."##,
15237 default_severity: Severity::Allow,
15238 warn_since: None,
15239 deny_since: None,
15240 },
15241 Lint {
15242 label: "clippy::manual_split_once",
15243 description: r##"Checks for usage of `str::splitn(2, _)`"##,
15244 default_severity: Severity::Allow,
15245 warn_since: None,
15246 deny_since: None,
15247 },
15248 Lint {
15249 label: "clippy::manual_str_repeat",
15250 description: r##"Checks for manual implementations of `str::repeat`"##,
15251 default_severity: Severity::Allow,
15252 warn_since: None,
15253 deny_since: None,
15254 },
15255 Lint {
15256 label: "clippy::manual_string_new",
15257 description: r##"Checks for usage of `` to create a `String`, such as `.to_string()`, `.to_owned()`,
15258`String::from()` and others."##,
15259 default_severity: Severity::Allow,
15260 warn_since: None,
15261 deny_since: None,
15262 },
15263 Lint {
15264 label: "clippy::manual_strip",
15265 description: r##"Suggests using `strip_{prefix,suffix}` over `str::{starts,ends}_with` and slicing using
15266the pattern's length."##,
15267 default_severity: Severity::Allow,
15268 warn_since: None,
15269 deny_since: None,
15270 },
15271 Lint {
15272 label: "clippy::manual_swap",
15273 description: r##"Checks for manual swapping.
15274
15275Note that the lint will not be emitted in const blocks, as the suggestion would not be applicable."##,
15276 default_severity: Severity::Allow,
15277 warn_since: None,
15278 deny_since: None,
15279 },
15280 Lint {
15281 label: "clippy::manual_try_fold",
15282 description: r##"Checks for usage of `Iterator::fold` with a type that implements `Try`."##,
15283 default_severity: Severity::Allow,
15284 warn_since: None,
15285 deny_since: None,
15286 },
15287 Lint {
15288 label: "clippy::manual_unwrap_or",
15289 description: r##"Finds patterns that reimplement `Option::unwrap_or` or `Result::unwrap_or`."##,
15290 default_severity: Severity::Allow,
15291 warn_since: None,
15292 deny_since: None,
15293 },
15294 Lint {
15295 label: "clippy::manual_unwrap_or_default",
15296 description: r##"Checks if a `match` or `if let` expression can be simplified using
15297`.unwrap_or_default()`."##,
15298 default_severity: Severity::Allow,
15299 warn_since: None,
15300 deny_since: None,
15301 },
15302 Lint {
15303 label: "clippy::manual_while_let_some",
15304 description: r##"Looks for loops that check for emptiness of a `Vec` in the condition and pop an element
15305in the body as a separate operation."##,
15306 default_severity: Severity::Allow,
15307 warn_since: None,
15308 deny_since: None,
15309 },
15310 Lint {
15311 label: "clippy::many_single_char_names",
15312 description: r##"Checks for too many variables whose name consists of a
15313single character."##,
15314 default_severity: Severity::Allow,
15315 warn_since: None,
15316 deny_since: None,
15317 },
15318 Lint {
15319 label: "clippy::map_clone",
15320 description: r##"Checks for usage of `map(|x| x.clone())` or
15321dereferencing closures for `Copy` types, on `Iterator` or `Option`,
15322and suggests `cloned()` or `copied()` instead"##,
15323 default_severity: Severity::Allow,
15324 warn_since: None,
15325 deny_since: None,
15326 },
15327 Lint {
15328 label: "clippy::map_collect_result_unit",
15329 description: r##"Checks for usage of `_.map(_).collect::<Result<(), _>()`."##,
15330 default_severity: Severity::Allow,
15331 warn_since: None,
15332 deny_since: None,
15333 },
15334 Lint {
15335 label: "clippy::map_entry",
15336 description: r##"Checks for usage of `contains_key` + `insert` on `HashMap`
15337or `BTreeMap`."##,
15338 default_severity: Severity::Allow,
15339 warn_since: None,
15340 deny_since: None,
15341 },
15342 Lint {
15343 label: "clippy::map_err_ignore",
15344 description: r##"Checks for instances of `map_err(|_| Some::Enum)`"##,
15345 default_severity: Severity::Allow,
15346 warn_since: None,
15347 deny_since: None,
15348 },
15349 Lint {
15350 label: "clippy::map_flatten",
15351 description: r##"Checks for usage of `_.map(_).flatten(_)` on `Iterator` and `Option`"##,
15352 default_severity: Severity::Allow,
15353 warn_since: None,
15354 deny_since: None,
15355 },
15356 Lint {
15357 label: "clippy::map_identity",
15358 description: r##"Checks for instances of `map(f)` where `f` is the identity function."##,
15359 default_severity: Severity::Allow,
15360 warn_since: None,
15361 deny_since: None,
15362 },
15363 Lint {
15364 label: "clippy::map_unwrap_or",
15365 description: r##"Checks for usage of `option.map(_).unwrap_or(_)` or `option.map(_).unwrap_or_else(_)` or
15366`result.map(_).unwrap_or_else(_)`."##,
15367 default_severity: Severity::Allow,
15368 warn_since: None,
15369 deny_since: None,
15370 },
15371 Lint {
15372 label: "clippy::match_as_ref",
15373 description: r##"Checks for match which is used to add a reference to an
15374`Option` value."##,
15375 default_severity: Severity::Allow,
15376 warn_since: None,
15377 deny_since: None,
15378 },
15379 Lint {
15380 label: "clippy::match_bool",
15381 description: r##"Checks for matches where match expression is a `bool`. It
15382suggests to replace the expression with an `if...else` block."##,
15383 default_severity: Severity::Allow,
15384 warn_since: None,
15385 deny_since: None,
15386 },
15387 Lint {
15388 label: "clippy::match_like_matches_macro",
15389 description: r##"Checks for `match` or `if let` expressions producing a
15390`bool` that could be written using `matches!`"##,
15391 default_severity: Severity::Allow,
15392 warn_since: None,
15393 deny_since: None,
15394 },
15395 Lint {
15396 label: "clippy::match_on_vec_items",
15397 description: r##"Checks for `match vec[idx]` or `match vec[n..m]`."##,
15398 default_severity: Severity::Allow,
15399 warn_since: None,
15400 deny_since: None,
15401 },
15402 Lint {
15403 label: "clippy::match_overlapping_arm",
15404 description: r##"Checks for overlapping match arms."##,
15405 default_severity: Severity::Allow,
15406 warn_since: None,
15407 deny_since: None,
15408 },
15409 Lint {
15410 label: "clippy::match_ref_pats",
15411 description: r##"Checks for matches where all arms match a reference,
15412suggesting to remove the reference and deref the matched expression
15413instead. It also checks for `if let &foo = bar` blocks."##,
15414 default_severity: Severity::Allow,
15415 warn_since: None,
15416 deny_since: None,
15417 },
15418 Lint {
15419 label: "clippy::match_result_ok",
15420 description: r##"Checks for unnecessary `ok()` in `while let`."##,
15421 default_severity: Severity::Allow,
15422 warn_since: None,
15423 deny_since: None,
15424 },
15425 Lint {
15426 label: "clippy::match_same_arms",
15427 description: r##"Checks for `match` with identical arm bodies.
15428
15429Note: Does not lint on wildcards if the `non_exhaustive_omitted_patterns_lint` feature is
15430enabled and disallowed."##,
15431 default_severity: Severity::Allow,
15432 warn_since: None,
15433 deny_since: None,
15434 },
15435 Lint {
15436 label: "clippy::match_single_binding",
15437 description: r##"Checks for useless match that binds to only one value."##,
15438 default_severity: Severity::Allow,
15439 warn_since: None,
15440 deny_since: None,
15441 },
15442 Lint {
15443 label: "clippy::match_str_case_mismatch",
15444 description: r##"Checks for `match` expressions modifying the case of a string with non-compliant arms"##,
15445 default_severity: Severity::Allow,
15446 warn_since: None,
15447 deny_since: None,
15448 },
15449 Lint {
15450 label: "clippy::match_wild_err_arm",
15451 description: r##"Checks for arm which matches all errors with `Err(_)`
15452and take drastic actions like `panic!`."##,
15453 default_severity: Severity::Allow,
15454 warn_since: None,
15455 deny_since: None,
15456 },
15457 Lint {
15458 label: "clippy::match_wildcard_for_single_variants",
15459 description: r##"Checks for wildcard enum matches for a single variant."##,
15460 default_severity: Severity::Allow,
15461 warn_since: None,
15462 deny_since: None,
15463 },
15464 Lint {
15465 label: "clippy::maybe_infinite_iter",
15466 description: r##"Checks for iteration that may be infinite."##,
15467 default_severity: Severity::Allow,
15468 warn_since: None,
15469 deny_since: None,
15470 },
15471 Lint {
15472 label: "clippy::mem_forget",
15473 description: r##"Checks for usage of `std::mem::forget(t)` where `t` is
15474`Drop` or has a field that implements `Drop`."##,
15475 default_severity: Severity::Allow,
15476 warn_since: None,
15477 deny_since: None,
15478 },
15479 Lint {
15480 label: "clippy::mem_replace_option_with_none",
15481 description: r##"Checks for `mem::replace()` on an `Option` with
15482`None`."##,
15483 default_severity: Severity::Allow,
15484 warn_since: None,
15485 deny_since: None,
15486 },
15487 Lint {
15488 label: "clippy::mem_replace_with_default",
15489 description: r##"Checks for `std::mem::replace` on a value of type
15490`T` with `T::default()`."##,
15491 default_severity: Severity::Allow,
15492 warn_since: None,
15493 deny_since: None,
15494 },
15495 Lint {
15496 label: "clippy::mem_replace_with_uninit",
15497 description: r##"Checks for `mem::replace(&mut _, mem::uninitialized())`
15498and `mem::replace(&mut _, mem::zeroed())`."##,
15499 default_severity: Severity::Allow,
15500 warn_since: None,
15501 deny_since: None,
15502 },
15503 Lint {
15504 label: "clippy::min_ident_chars",
15505 description: r##"Checks for identifiers which consist of a single character (or fewer than the configured threshold).
15506
15507Note: This lint can be very noisy when enabled; it may be desirable to only enable it
15508temporarily."##,
15509 default_severity: Severity::Allow,
15510 warn_since: None,
15511 deny_since: None,
15512 },
15513 Lint {
15514 label: "clippy::min_max",
15515 description: r##"Checks for expressions where `std::cmp::min` and `max` are
15516used to clamp values, but switched so that the result is constant."##,
15517 default_severity: Severity::Allow,
15518 warn_since: None,
15519 deny_since: None,
15520 },
15521 Lint {
15522 label: "clippy::misaligned_transmute",
15523 description: r##"Nothing. This lint has been deprecated"##,
15524 default_severity: Severity::Allow,
15525 warn_since: None,
15526 deny_since: None,
15527 },
15528 Lint {
15529 label: "clippy::mismatching_type_param_order",
15530 description: r##"Checks for type parameters which are positioned inconsistently between
15531a type definition and impl block. Specifically, a parameter in an impl
15532block which has the same name as a parameter in the type def, but is in
15533a different place."##,
15534 default_severity: Severity::Allow,
15535 warn_since: None,
15536 deny_since: None,
15537 },
15538 Lint {
15539 label: "clippy::misnamed_getters",
15540 description: r##"Checks for getter methods that return a field that doesn't correspond
15541to the name of the method, when there is a field's whose name matches that of the method."##,
15542 default_severity: Severity::Allow,
15543 warn_since: None,
15544 deny_since: None,
15545 },
15546 Lint {
15547 label: "clippy::misrefactored_assign_op",
15548 description: r##"Checks for `a op= a op b` or `a op= b op a` patterns."##,
15549 default_severity: Severity::Allow,
15550 warn_since: None,
15551 deny_since: None,
15552 },
15553 Lint {
15554 label: "clippy::missing_assert_message",
15555 description: r##"Checks assertions without a custom panic message."##,
15556 default_severity: Severity::Allow,
15557 warn_since: None,
15558 deny_since: None,
15559 },
15560 Lint {
15561 label: "clippy::missing_asserts_for_indexing",
15562 description: r##"Checks for repeated slice indexing without asserting beforehand that the length
15563is greater than the largest index used to index into the slice."##,
15564 default_severity: Severity::Allow,
15565 warn_since: None,
15566 deny_since: None,
15567 },
15568 Lint {
15569 label: "clippy::missing_const_for_fn",
15570 description: r##"Suggests the use of `const` in functions and methods where possible."##,
15571 default_severity: Severity::Allow,
15572 warn_since: None,
15573 deny_since: None,
15574 },
15575 Lint {
15576 label: "clippy::missing_const_for_thread_local",
15577 description: r##"Suggests to use `const` in `thread_local!` macro if possible."##,
15578 default_severity: Severity::Allow,
15579 warn_since: None,
15580 deny_since: None,
15581 },
15582 Lint {
15583 label: "clippy::missing_docs_in_private_items",
15584 description: r##"Warns if there is missing documentation for any private documentable item."##,
15585 default_severity: Severity::Allow,
15586 warn_since: None,
15587 deny_since: None,
15588 },
15589 Lint {
15590 label: "clippy::missing_enforced_import_renames",
15591 description: r##"Checks for imports that do not rename the item as specified
15592in the `enforced-import-renames` config option.
15593
15594Note: Even though this lint is warn-by-default, it will only trigger if
15595import renames are defined in the `clippy.toml` file."##,
15596 default_severity: Severity::Allow,
15597 warn_since: None,
15598 deny_since: None,
15599 },
15600 Lint {
15601 label: "clippy::missing_errors_doc",
15602 description: r##"Checks the doc comments of publicly visible functions that
15603return a `Result` type and warns if there is no `# Errors` section."##,
15604 default_severity: Severity::Allow,
15605 warn_since: None,
15606 deny_since: None,
15607 },
15608 Lint {
15609 label: "clippy::missing_fields_in_debug",
15610 description: r##"Checks for manual [`core::fmt::Debug`](https://doc.rust-lang.org/core/fmt/trait.Debug.html) implementations that do not use all fields."##,
15611 default_severity: Severity::Allow,
15612 warn_since: None,
15613 deny_since: None,
15614 },
15615 Lint {
15616 label: "clippy::missing_inline_in_public_items",
15617 description: r##"It lints if an exported function, method, trait method with default impl,
15618or trait method impl is not `#[inline]`."##,
15619 default_severity: Severity::Allow,
15620 warn_since: None,
15621 deny_since: None,
15622 },
15623 Lint {
15624 label: "clippy::missing_panics_doc",
15625 description: r##"Checks the doc comments of publicly visible functions that
15626may panic and warns if there is no `# Panics` section."##,
15627 default_severity: Severity::Allow,
15628 warn_since: None,
15629 deny_since: None,
15630 },
15631 Lint {
15632 label: "clippy::missing_safety_doc",
15633 description: r##"Checks for the doc comments of publicly visible
15634unsafe functions and warns if there is no `# Safety` section."##,
15635 default_severity: Severity::Allow,
15636 warn_since: None,
15637 deny_since: None,
15638 },
15639 Lint {
15640 label: "clippy::missing_spin_loop",
15641 description: r##"Checks for empty spin loops"##,
15642 default_severity: Severity::Allow,
15643 warn_since: None,
15644 deny_since: None,
15645 },
15646 Lint {
15647 label: "clippy::missing_trait_methods",
15648 description: r##"Checks if a provided method is used implicitly by a trait
15649implementation."##,
15650 default_severity: Severity::Allow,
15651 warn_since: None,
15652 deny_since: None,
15653 },
15654 Lint {
15655 label: "clippy::missing_transmute_annotations",
15656 description: r##"Checks if transmute calls have all generics specified."##,
15657 default_severity: Severity::Allow,
15658 warn_since: None,
15659 deny_since: None,
15660 },
15661 Lint {
15662 label: "clippy::mistyped_literal_suffixes",
15663 description: r##"Warns for mistyped suffix in literals"##,
15664 default_severity: Severity::Allow,
15665 warn_since: None,
15666 deny_since: None,
15667 },
15668 Lint {
15669 label: "clippy::mixed_attributes_style",
15670 description: r##"Checks for items that have the same kind of attributes with mixed styles (inner/outer)."##,
15671 default_severity: Severity::Allow,
15672 warn_since: None,
15673 deny_since: None,
15674 },
15675 Lint {
15676 label: "clippy::mixed_case_hex_literals",
15677 description: r##"Warns on hexadecimal literals with mixed-case letter
15678digits."##,
15679 default_severity: Severity::Allow,
15680 warn_since: None,
15681 deny_since: None,
15682 },
15683 Lint {
15684 label: "clippy::mixed_read_write_in_expression",
15685 description: r##"Checks for a read and a write to the same variable where
15686whether the read occurs before or after the write depends on the evaluation
15687order of sub-expressions."##,
15688 default_severity: Severity::Allow,
15689 warn_since: None,
15690 deny_since: None,
15691 },
15692 Lint {
15693 label: "clippy::mod_module_files",
15694 description: r##"Checks that module layout uses only self named module files; bans `mod.rs` files."##,
15695 default_severity: Severity::Allow,
15696 warn_since: None,
15697 deny_since: None,
15698 },
15699 Lint {
15700 label: "clippy::module_inception",
15701 description: r##"Checks for modules that have the same name as their
15702parent module"##,
15703 default_severity: Severity::Allow,
15704 warn_since: None,
15705 deny_since: None,
15706 },
15707 Lint {
15708 label: "clippy::module_name_repetitions",
15709 description: r##"Detects type names that are prefixed or suffixed by the
15710containing module's name."##,
15711 default_severity: Severity::Allow,
15712 warn_since: None,
15713 deny_since: None,
15714 },
15715 Lint {
15716 label: "clippy::modulo_arithmetic",
15717 description: r##"Checks for modulo arithmetic."##,
15718 default_severity: Severity::Allow,
15719 warn_since: None,
15720 deny_since: None,
15721 },
15722 Lint {
15723 label: "clippy::modulo_one",
15724 description: r##"Checks for getting the remainder of integer division by one or minus
15725one."##,
15726 default_severity: Severity::Allow,
15727 warn_since: None,
15728 deny_since: None,
15729 },
15730 Lint {
15731 label: "clippy::multi_assignments",
15732 description: r##"Checks for nested assignments."##,
15733 default_severity: Severity::Allow,
15734 warn_since: None,
15735 deny_since: None,
15736 },
15737 Lint {
15738 label: "clippy::multiple_bound_locations",
15739 description: r##"Check if a generic is defined both in the bound predicate and in the `where` clause."##,
15740 default_severity: Severity::Allow,
15741 warn_since: None,
15742 deny_since: None,
15743 },
15744 Lint {
15745 label: "clippy::multiple_crate_versions",
15746 description: r##"Checks to see if multiple versions of a crate are being
15747used."##,
15748 default_severity: Severity::Allow,
15749 warn_since: None,
15750 deny_since: None,
15751 },
15752 Lint {
15753 label: "clippy::multiple_inherent_impl",
15754 description: r##"Checks for multiple inherent implementations of a struct"##,
15755 default_severity: Severity::Allow,
15756 warn_since: None,
15757 deny_since: None,
15758 },
15759 Lint {
15760 label: "clippy::multiple_unsafe_ops_per_block",
15761 description: r##"Checks for `unsafe` blocks that contain more than one unsafe operation."##,
15762 default_severity: Severity::Allow,
15763 warn_since: None,
15764 deny_since: None,
15765 },
15766 Lint {
15767 label: "clippy::must_use_candidate",
15768 description: r##"Checks for public functions that have no
15769`#[must_use]` attribute, but return something not already marked
15770must-use, have no mutable arg and mutate no statics."##,
15771 default_severity: Severity::Allow,
15772 warn_since: None,
15773 deny_since: None,
15774 },
15775 Lint {
15776 label: "clippy::must_use_unit",
15777 description: r##"Checks for a `#[must_use]` attribute on
15778unit-returning functions and methods."##,
15779 default_severity: Severity::Allow,
15780 warn_since: None,
15781 deny_since: None,
15782 },
15783 Lint {
15784 label: "clippy::mut_from_ref",
15785 description: r##"This lint checks for functions that take immutable references and return
15786mutable ones. This will not trigger if no unsafe code exists as there
15787are multiple safe functions which will do this transformation
15788
15789To be on the conservative side, if there's at least one mutable
15790reference with the output lifetime, this lint will not trigger."##,
15791 default_severity: Severity::Allow,
15792 warn_since: None,
15793 deny_since: None,
15794 },
15795 Lint {
15796 label: "clippy::mut_mut",
15797 description: r##"Checks for instances of `mut mut` references."##,
15798 default_severity: Severity::Allow,
15799 warn_since: None,
15800 deny_since: None,
15801 },
15802 Lint {
15803 label: "clippy::mut_mutex_lock",
15804 description: r##"Checks for `&mut Mutex::lock` calls"##,
15805 default_severity: Severity::Allow,
15806 warn_since: None,
15807 deny_since: None,
15808 },
15809 Lint {
15810 label: "clippy::mut_range_bound",
15811 description: r##"Checks for loops with a range bound that is a mutable variable."##,
15812 default_severity: Severity::Allow,
15813 warn_since: None,
15814 deny_since: None,
15815 },
15816 Lint {
15817 label: "clippy::mutable_key_type",
15818 description: r##"Checks for sets/maps with mutable key types."##,
15819 default_severity: Severity::Allow,
15820 warn_since: None,
15821 deny_since: None,
15822 },
15823 Lint {
15824 label: "clippy::mutex_atomic",
15825 description: r##"Checks for usage of `Mutex<X>` where an atomic will do."##,
15826 default_severity: Severity::Allow,
15827 warn_since: None,
15828 deny_since: None,
15829 },
15830 Lint {
15831 label: "clippy::mutex_integer",
15832 description: r##"Checks for usage of `Mutex<X>` where `X` is an integral
15833type."##,
15834 default_severity: Severity::Allow,
15835 warn_since: None,
15836 deny_since: None,
15837 },
15838 Lint {
15839 label: "clippy::naive_bytecount",
15840 description: r##"Checks for naive byte counts"##,
15841 default_severity: Severity::Allow,
15842 warn_since: None,
15843 deny_since: None,
15844 },
15845 Lint {
15846 label: "clippy::needless_arbitrary_self_type",
15847 description: r##"The lint checks for `self` in fn parameters that
15848specify the `Self`-type explicitly"##,
15849 default_severity: Severity::Allow,
15850 warn_since: None,
15851 deny_since: None,
15852 },
15853 Lint {
15854 label: "clippy::needless_bitwise_bool",
15855 description: r##"Checks for usage of bitwise and/or operators between booleans, where performance may be improved by using
15856a lazy and."##,
15857 default_severity: Severity::Allow,
15858 warn_since: None,
15859 deny_since: None,
15860 },
15861 Lint {
15862 label: "clippy::needless_bool",
15863 description: r##"Checks for expressions of the form `if c { true } else {
15864false }` (or vice versa) and suggests using the condition directly."##,
15865 default_severity: Severity::Allow,
15866 warn_since: None,
15867 deny_since: None,
15868 },
15869 Lint {
15870 label: "clippy::needless_bool_assign",
15871 description: r##"Checks for expressions of the form `if c { x = true } else { x = false }`
15872(or vice versa) and suggest assigning the variable directly from the
15873condition."##,
15874 default_severity: Severity::Allow,
15875 warn_since: None,
15876 deny_since: None,
15877 },
15878 Lint {
15879 label: "clippy::needless_borrow",
15880 description: r##"Checks for address of operations (`&`) that are going to
15881be dereferenced immediately by the compiler."##,
15882 default_severity: Severity::Allow,
15883 warn_since: None,
15884 deny_since: None,
15885 },
15886 Lint {
15887 label: "clippy::needless_borrowed_reference",
15888 description: r##"Checks for bindings that needlessly destructure a reference and borrow the inner
15889value with `&ref`."##,
15890 default_severity: Severity::Allow,
15891 warn_since: None,
15892 deny_since: None,
15893 },
15894 Lint {
15895 label: "clippy::needless_borrows_for_generic_args",
15896 description: r##"Checks for borrow operations (`&`) that are used as a generic argument to a
15897function when the borrowed value could be used."##,
15898 default_severity: Severity::Allow,
15899 warn_since: None,
15900 deny_since: None,
15901 },
15902 Lint {
15903 label: "clippy::needless_character_iteration",
15904 description: r##"Checks if an iterator is used to check if a string is ascii."##,
15905 default_severity: Severity::Allow,
15906 warn_since: None,
15907 deny_since: None,
15908 },
15909 Lint {
15910 label: "clippy::needless_collect",
15911 description: r##"Checks for functions collecting an iterator when collect
15912is not needed."##,
15913 default_severity: Severity::Allow,
15914 warn_since: None,
15915 deny_since: None,
15916 },
15917 Lint {
15918 label: "clippy::needless_continue",
15919 description: r##"The lint checks for `if`-statements appearing in loops
15920that contain a `continue` statement in either their main blocks or their
15921`else`-blocks, when omitting the `else`-block possibly with some
15922rearrangement of code can make the code easier to understand."##,
15923 default_severity: Severity::Allow,
15924 warn_since: None,
15925 deny_since: None,
15926 },
15927 Lint {
15928 label: "clippy::needless_doctest_main",
15929 description: r##"Checks for `fn main() { .. }` in doctests"##,
15930 default_severity: Severity::Allow,
15931 warn_since: None,
15932 deny_since: None,
15933 },
15934 Lint {
15935 label: "clippy::needless_else",
15936 description: r##"Checks for empty `else` branches."##,
15937 default_severity: Severity::Allow,
15938 warn_since: None,
15939 deny_since: None,
15940 },
15941 Lint {
15942 label: "clippy::needless_for_each",
15943 description: r##"Checks for usage of `for_each` that would be more simply written as a
15944`for` loop."##,
15945 default_severity: Severity::Allow,
15946 warn_since: None,
15947 deny_since: None,
15948 },
15949 Lint {
15950 label: "clippy::needless_if",
15951 description: r##"Checks for empty `if` branches with no else branch."##,
15952 default_severity: Severity::Allow,
15953 warn_since: None,
15954 deny_since: None,
15955 },
15956 Lint {
15957 label: "clippy::needless_late_init",
15958 description: r##"Checks for late initializations that can be replaced by a `let` statement
15959with an initializer."##,
15960 default_severity: Severity::Allow,
15961 warn_since: None,
15962 deny_since: None,
15963 },
15964 Lint {
15965 label: "clippy::needless_lifetimes",
15966 description: r##"Checks for lifetime annotations which can be removed by
15967relying on lifetime elision."##,
15968 default_severity: Severity::Allow,
15969 warn_since: None,
15970 deny_since: None,
15971 },
15972 Lint {
15973 label: "clippy::needless_match",
15974 description: r##"Checks for unnecessary `match` or match-like `if let` returns for `Option` and `Result`
15975when function signatures are the same."##,
15976 default_severity: Severity::Allow,
15977 warn_since: None,
15978 deny_since: None,
15979 },
15980 Lint {
15981 label: "clippy::needless_maybe_sized",
15982 description: r##"Lints `?Sized` bounds applied to type parameters that cannot be unsized"##,
15983 default_severity: Severity::Allow,
15984 warn_since: None,
15985 deny_since: None,
15986 },
15987 Lint {
15988 label: "clippy::needless_option_as_deref",
15989 description: r##"Checks for no-op uses of `Option::{as_deref, as_deref_mut}`,
15990for example, `Option<&T>::as_deref()` returns the same type."##,
15991 default_severity: Severity::Allow,
15992 warn_since: None,
15993 deny_since: None,
15994 },
15995 Lint {
15996 label: "clippy::needless_option_take",
15997 description: r##"Checks for calling `take` function after `as_ref`."##,
15998 default_severity: Severity::Allow,
15999 warn_since: None,
16000 deny_since: None,
16001 },
16002 Lint {
16003 label: "clippy::needless_parens_on_range_literals",
16004 description: r##"The lint checks for parenthesis on literals in range statements that are
16005superfluous."##,
16006 default_severity: Severity::Allow,
16007 warn_since: None,
16008 deny_since: None,
16009 },
16010 Lint {
16011 label: "clippy::needless_pass_by_ref_mut",
16012 description: r##"Check if a `&mut` function argument is actually used mutably.
16013
16014Be careful if the function is publicly reexported as it would break compatibility with
16015users of this function, when the users pass this function as an argument."##,
16016 default_severity: Severity::Allow,
16017 warn_since: None,
16018 deny_since: None,
16019 },
16020 Lint {
16021 label: "clippy::needless_pass_by_value",
16022 description: r##"Checks for functions taking arguments by value, but not
16023consuming them in its
16024body."##,
16025 default_severity: Severity::Allow,
16026 warn_since: None,
16027 deny_since: None,
16028 },
16029 Lint {
16030 label: "clippy::needless_pub_self",
16031 description: r##"Checks for usage of `pub(self)` and `pub(in self)`."##,
16032 default_severity: Severity::Allow,
16033 warn_since: None,
16034 deny_since: None,
16035 },
16036 Lint {
16037 label: "clippy::needless_question_mark",
16038 description: r##"Suggests alternatives for useless applications of `?` in terminating expressions"##,
16039 default_severity: Severity::Allow,
16040 warn_since: None,
16041 deny_since: None,
16042 },
16043 Lint {
16044 label: "clippy::needless_range_loop",
16045 description: r##"Checks for looping over the range of `0..len` of some
16046collection just to get the values by index."##,
16047 default_severity: Severity::Allow,
16048 warn_since: None,
16049 deny_since: None,
16050 },
16051 Lint {
16052 label: "clippy::needless_raw_string_hashes",
16053 description: r##"Checks for raw string literals with an unnecessary amount of hashes around them."##,
16054 default_severity: Severity::Allow,
16055 warn_since: None,
16056 deny_since: None,
16057 },
16058 Lint {
16059 label: "clippy::needless_raw_strings",
16060 description: r##"Checks for raw string literals where a string literal can be used instead."##,
16061 default_severity: Severity::Allow,
16062 warn_since: None,
16063 deny_since: None,
16064 },
16065 Lint {
16066 label: "clippy::needless_return",
16067 description: r##"Checks for return statements at the end of a block."##,
16068 default_severity: Severity::Allow,
16069 warn_since: None,
16070 deny_since: None,
16071 },
16072 Lint {
16073 label: "clippy::needless_return_with_question_mark",
16074 description: r##"Checks for return statements on `Err` paired with the `?` operator."##,
16075 default_severity: Severity::Allow,
16076 warn_since: None,
16077 deny_since: None,
16078 },
16079 Lint {
16080 label: "clippy::needless_splitn",
16081 description: r##"Checks for usage of `str::splitn` (or `str::rsplitn`) where using `str::split` would be the same."##,
16082 default_severity: Severity::Allow,
16083 warn_since: None,
16084 deny_since: None,
16085 },
16086 Lint {
16087 label: "clippy::needless_update",
16088 description: r##"Checks for needlessly including a base struct on update
16089when all fields are changed anyway.
16090
16091This lint is not applied to structs marked with
16092[non_exhaustive](https://doc.rust-lang.org/reference/attributes/type_system.html)."##,
16093 default_severity: Severity::Allow,
16094 warn_since: None,
16095 deny_since: None,
16096 },
16097 Lint {
16098 label: "clippy::neg_cmp_op_on_partial_ord",
16099 description: r##"Checks for the usage of negated comparison operators on types which only implement
16100`PartialOrd` (e.g., `f64`)."##,
16101 default_severity: Severity::Allow,
16102 warn_since: None,
16103 deny_since: None,
16104 },
16105 Lint {
16106 label: "clippy::neg_multiply",
16107 description: r##"Checks for multiplication by -1 as a form of negation."##,
16108 default_severity: Severity::Allow,
16109 warn_since: None,
16110 deny_since: None,
16111 },
16112 Lint {
16113 label: "clippy::negative_feature_names",
16114 description: r##"Checks for negative feature names with prefix `no-` or `not-`"##,
16115 default_severity: Severity::Allow,
16116 warn_since: None,
16117 deny_since: None,
16118 },
16119 Lint {
16120 label: "clippy::never_loop",
16121 description: r##"Checks for loops that will always `break`, `return` or
16122`continue` an outer loop."##,
16123 default_severity: Severity::Allow,
16124 warn_since: None,
16125 deny_since: None,
16126 },
16127 Lint {
16128 label: "clippy::new_ret_no_self",
16129 description: r##"Checks for `new` not returning a type that contains `Self`."##,
16130 default_severity: Severity::Allow,
16131 warn_since: None,
16132 deny_since: None,
16133 },
16134 Lint {
16135 label: "clippy::new_without_default",
16136 description: r##"Checks for public types with a `pub fn new() -> Self` method and no
16137implementation of
16138[`Default`](https://doc.rust-lang.org/std/default/trait.Default.html)."##,
16139 default_severity: Severity::Allow,
16140 warn_since: None,
16141 deny_since: None,
16142 },
16143 Lint {
16144 label: "clippy::no_effect",
16145 description: r##"Checks for statements which have no effect."##,
16146 default_severity: Severity::Allow,
16147 warn_since: None,
16148 deny_since: None,
16149 },
16150 Lint {
16151 label: "clippy::no_effect_replace",
16152 description: r##"Checks for `replace` statements which have no effect."##,
16153 default_severity: Severity::Allow,
16154 warn_since: None,
16155 deny_since: None,
16156 },
16157 Lint {
16158 label: "clippy::no_effect_underscore_binding",
16159 description: r##"Checks for binding to underscore prefixed variable without side-effects."##,
16160 default_severity: Severity::Allow,
16161 warn_since: None,
16162 deny_since: None,
16163 },
16164 Lint {
16165 label: "clippy::no_mangle_with_rust_abi",
16166 description: r##"Checks for Rust ABI functions with the `#[no_mangle]` attribute."##,
16167 default_severity: Severity::Allow,
16168 warn_since: None,
16169 deny_since: None,
16170 },
16171 Lint {
16172 label: "clippy::non_ascii_literal",
16173 description: r##"Checks for non-ASCII characters in string and char literals."##,
16174 default_severity: Severity::Allow,
16175 warn_since: None,
16176 deny_since: None,
16177 },
16178 Lint {
16179 label: "clippy::non_canonical_clone_impl",
16180 description: r##"Checks for non-canonical implementations of `Clone` when `Copy` is already implemented."##,
16181 default_severity: Severity::Allow,
16182 warn_since: None,
16183 deny_since: None,
16184 },
16185 Lint {
16186 label: "clippy::non_canonical_partial_ord_impl",
16187 description: r##"Checks for non-canonical implementations of `PartialOrd` when `Ord` is already implemented."##,
16188 default_severity: Severity::Allow,
16189 warn_since: None,
16190 deny_since: None,
16191 },
16192 Lint {
16193 label: "clippy::non_minimal_cfg",
16194 description: r##"Checks for `any` and `all` combinators in `cfg` with only one condition."##,
16195 default_severity: Severity::Allow,
16196 warn_since: None,
16197 deny_since: None,
16198 },
16199 Lint {
16200 label: "clippy::non_octal_unix_permissions",
16201 description: r##"Checks for non-octal values used to set Unix file permissions."##,
16202 default_severity: Severity::Allow,
16203 warn_since: None,
16204 deny_since: None,
16205 },
16206 Lint {
16207 label: "clippy::non_send_fields_in_send_ty",
16208 description: r##"This lint warns about a `Send` implementation for a type that
16209contains fields that are not safe to be sent across threads.
16210It tries to detect fields that can cause a soundness issue
16211when sent to another thread (e.g., `Rc`) while allowing `!Send` fields
16212that are expected to exist in a `Send` type, such as raw pointers."##,
16213 default_severity: Severity::Allow,
16214 warn_since: None,
16215 deny_since: None,
16216 },
16217 Lint {
16218 label: "clippy::non_zero_suggestions",
16219 description: r##"Checks for conversions from `NonZero` types to regular integer types,
16220and suggests using `NonZero` types for the target as well."##,
16221 default_severity: Severity::Allow,
16222 warn_since: None,
16223 deny_since: None,
16224 },
16225 Lint {
16226 label: "clippy::nonminimal_bool",
16227 description: r##"Checks for boolean expressions that can be written more
16228concisely."##,
16229 default_severity: Severity::Allow,
16230 warn_since: None,
16231 deny_since: None,
16232 },
16233 Lint {
16234 label: "clippy::nonsensical_open_options",
16235 description: r##"Checks for duplicate open options as well as combinations
16236that make no sense."##,
16237 default_severity: Severity::Allow,
16238 warn_since: None,
16239 deny_since: None,
16240 },
16241 Lint {
16242 label: "clippy::nonstandard_macro_braces",
16243 description: r##"Checks that common macros are used with consistent bracing."##,
16244 default_severity: Severity::Allow,
16245 warn_since: None,
16246 deny_since: None,
16247 },
16248 Lint {
16249 label: "clippy::not_unsafe_ptr_arg_deref",
16250 description: r##"Checks for public functions that dereference raw pointer
16251arguments but are not marked `unsafe`."##,
16252 default_severity: Severity::Allow,
16253 warn_since: None,
16254 deny_since: None,
16255 },
16256 Lint {
16257 label: "clippy::obfuscated_if_else",
16258 description: r##"Checks for usage of `.then_some(..).unwrap_or(..)`"##,
16259 default_severity: Severity::Allow,
16260 warn_since: None,
16261 deny_since: None,
16262 },
16263 Lint {
16264 label: "clippy::octal_escapes",
16265 description: r##"Checks for `\\0` escapes in string and byte literals that look like octal
16266character escapes in C."##,
16267 default_severity: Severity::Allow,
16268 warn_since: None,
16269 deny_since: None,
16270 },
16271 Lint {
16272 label: "clippy::ok_expect",
16273 description: r##"Checks for usage of `ok().expect(..)`."##,
16274 default_severity: Severity::Allow,
16275 warn_since: None,
16276 deny_since: None,
16277 },
16278 Lint {
16279 label: "clippy::only_used_in_recursion",
16280 description: r##"Checks for arguments that are only used in recursion with no side-effects."##,
16281 default_severity: Severity::Allow,
16282 warn_since: None,
16283 deny_since: None,
16284 },
16285 Lint {
16286 label: "clippy::op_ref",
16287 description: r##"Checks for arguments to `==` which have their address
16288taken to satisfy a bound
16289and suggests to dereference the other argument instead"##,
16290 default_severity: Severity::Allow,
16291 warn_since: None,
16292 deny_since: None,
16293 },
16294 Lint {
16295 label: "clippy::option_as_ref_cloned",
16296 description: r##"Checks for usage of `.as_ref().cloned()` and `.as_mut().cloned()` on `Option`s"##,
16297 default_severity: Severity::Allow,
16298 warn_since: None,
16299 deny_since: None,
16300 },
16301 Lint {
16302 label: "clippy::option_as_ref_deref",
16303 description: r##"Checks for usage of `_.as_ref().map(Deref::deref)` or its aliases (such as String::as_str)."##,
16304 default_severity: Severity::Allow,
16305 warn_since: None,
16306 deny_since: None,
16307 },
16308 Lint {
16309 label: "clippy::option_env_unwrap",
16310 description: r##"Checks for usage of `option_env!(...).unwrap()` and
16311suggests usage of the `env!` macro."##,
16312 default_severity: Severity::Allow,
16313 warn_since: None,
16314 deny_since: None,
16315 },
16316 Lint {
16317 label: "clippy::option_filter_map",
16318 description: r##"Checks for iterators of `Option`s using `.filter(Option::is_some).map(Option::unwrap)` that may
16319be replaced with a `.flatten()` call."##,
16320 default_severity: Severity::Allow,
16321 warn_since: None,
16322 deny_since: None,
16323 },
16324 Lint {
16325 label: "clippy::option_if_let_else",
16326 description: r##"Lints usage of `if let Some(v) = ... { y } else { x }` and
16327`match .. { Some(v) => y, None/_ => x }` which are more
16328idiomatically done with `Option::map_or` (if the else bit is a pure
16329expression) or `Option::map_or_else` (if the else bit is an impure
16330expression)."##,
16331 default_severity: Severity::Allow,
16332 warn_since: None,
16333 deny_since: None,
16334 },
16335 Lint {
16336 label: "clippy::option_map_or_err_ok",
16337 description: r##"Checks for usage of `_.map_or(Err(_), Ok)`."##,
16338 default_severity: Severity::Allow,
16339 warn_since: None,
16340 deny_since: None,
16341 },
16342 Lint {
16343 label: "clippy::option_map_or_none",
16344 description: r##"Checks for usage of `_.map_or(None, _)`."##,
16345 default_severity: Severity::Allow,
16346 warn_since: None,
16347 deny_since: None,
16348 },
16349 Lint {
16350 label: "clippy::option_map_unit_fn",
16351 description: r##"Checks for usage of `option.map(f)` where f is a function
16352or closure that returns the unit type `()`."##,
16353 default_severity: Severity::Allow,
16354 warn_since: None,
16355 deny_since: None,
16356 },
16357 Lint {
16358 label: "clippy::option_option",
16359 description: r##"Checks for usage of `Option<Option<_>>` in function signatures and type
16360definitions"##,
16361 default_severity: Severity::Allow,
16362 warn_since: None,
16363 deny_since: None,
16364 },
16365 Lint {
16366 label: "clippy::or_fun_call",
16367 description: r##"Checks for calls to `.or(foo(..))`, `.unwrap_or(foo(..))`,
16368`.or_insert(foo(..))` etc., and suggests to use `.or_else(|| foo(..))`,
16369`.unwrap_or_else(|| foo(..))`, `.unwrap_or_default()` or `.or_default()`
16370etc. instead."##,
16371 default_severity: Severity::Allow,
16372 warn_since: None,
16373 deny_since: None,
16374 },
16375 Lint {
16376 label: "clippy::or_then_unwrap",
16377 description: r##"Checks for `.or(…).unwrap()` calls to Options and Results."##,
16378 default_severity: Severity::Allow,
16379 warn_since: None,
16380 deny_since: None,
16381 },
16382 Lint {
16383 label: "clippy::out_of_bounds_indexing",
16384 description: r##"Checks for out of bounds array indexing with a constant
16385index."##,
16386 default_severity: Severity::Allow,
16387 warn_since: None,
16388 deny_since: None,
16389 },
16390 Lint {
16391 label: "clippy::overly_complex_bool_expr",
16392 description: r##"Checks for boolean expressions that contain terminals that
16393can be eliminated."##,
16394 default_severity: Severity::Allow,
16395 warn_since: None,
16396 deny_since: None,
16397 },
16398 Lint {
16399 label: "clippy::panic",
16400 description: r##"Checks for usage of `panic!`."##,
16401 default_severity: Severity::Allow,
16402 warn_since: None,
16403 deny_since: None,
16404 },
16405 Lint {
16406 label: "clippy::panic_in_result_fn",
16407 description: r##"Checks for usage of `panic!` or assertions in a function whose return type is `Result`."##,
16408 default_severity: Severity::Allow,
16409 warn_since: None,
16410 deny_since: None,
16411 },
16412 Lint {
16413 label: "clippy::panicking_overflow_checks",
16414 description: r##"Detects C-style underflow/overflow checks."##,
16415 default_severity: Severity::Allow,
16416 warn_since: None,
16417 deny_since: None,
16418 },
16419 Lint {
16420 label: "clippy::panicking_unwrap",
16421 description: r##"Checks for calls of `unwrap[_err]()` that will always fail."##,
16422 default_severity: Severity::Allow,
16423 warn_since: None,
16424 deny_since: None,
16425 },
16426 Lint {
16427 label: "clippy::partial_pub_fields",
16428 description: r##"Checks whether some but not all fields of a `struct` are public.
16429
16430Either make all fields of a type public, or make none of them public"##,
16431 default_severity: Severity::Allow,
16432 warn_since: None,
16433 deny_since: None,
16434 },
16435 Lint {
16436 label: "clippy::partialeq_ne_impl",
16437 description: r##"Checks for manual re-implementations of `PartialEq::ne`."##,
16438 default_severity: Severity::Allow,
16439 warn_since: None,
16440 deny_since: None,
16441 },
16442 Lint {
16443 label: "clippy::partialeq_to_none",
16444 description: r##"Checks for binary comparisons to a literal `Option::None`."##,
16445 default_severity: Severity::Allow,
16446 warn_since: None,
16447 deny_since: None,
16448 },
16449 Lint {
16450 label: "clippy::path_buf_push_overwrite",
16451 description: r##"* Checks for [push](https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.push)
16452calls on `PathBuf` that can cause overwrites."##,
16453 default_severity: Severity::Allow,
16454 warn_since: None,
16455 deny_since: None,
16456 },
16457 Lint {
16458 label: "clippy::path_ends_with_ext",
16459 description: r##"Looks for calls to `Path::ends_with` calls where the argument looks like a file extension.
16460
16461By default, Clippy has a short list of known filenames that start with a dot
16462but aren't necessarily file extensions (e.g. the `.git` folder), which are allowed by default.
16463The `allowed-dotfiles` configuration can be used to allow additional
16464file extensions that Clippy should not lint."##,
16465 default_severity: Severity::Allow,
16466 warn_since: None,
16467 deny_since: None,
16468 },
16469 Lint {
16470 label: "clippy::pathbuf_init_then_push",
16471 description: r##"Checks for calls to `push` immediately after creating a new `PathBuf`."##,
16472 default_severity: Severity::Allow,
16473 warn_since: None,
16474 deny_since: None,
16475 },
16476 Lint {
16477 label: "clippy::pattern_type_mismatch",
16478 description: r##"Checks for patterns that aren't exact representations of the types
16479they are applied to.
16480
16481To satisfy this lint, you will have to adjust either the expression that is matched
16482against or the pattern itself, as well as the bindings that are introduced by the
16483adjusted patterns. For matching you will have to either dereference the expression
16484with the `*` operator, or amend the patterns to explicitly match against `&<pattern>`
16485or `&mut <pattern>` depending on the reference mutability. For the bindings you need
16486to use the inverse. You can leave them as plain bindings if you wish for the value
16487to be copied, but you must use `ref mut <variable>` or `ref <variable>` to construct
16488a reference into the matched structure.
16489
16490If you are looking for a way to learn about ownership semantics in more detail, it
16491is recommended to look at IDE options available to you to highlight types, lifetimes
16492and reference semantics in your code. The available tooling would expose these things
16493in a general way even outside of the various pattern matching mechanics. Of course
16494this lint can still be used to highlight areas of interest and ensure a good understanding
16495of ownership semantics."##,
16496 default_severity: Severity::Allow,
16497 warn_since: None,
16498 deny_since: None,
16499 },
16500 Lint {
16501 label: "clippy::permissions_set_readonly_false",
16502 description: r##"Checks for calls to `std::fs::Permissions.set_readonly` with argument `false`."##,
16503 default_severity: Severity::Allow,
16504 warn_since: None,
16505 deny_since: None,
16506 },
16507 Lint {
16508 label: "clippy::pointers_in_nomem_asm_block",
16509 description: r##"Checks if any pointer is being passed to an asm! block with `nomem` option."##,
16510 default_severity: Severity::Allow,
16511 warn_since: None,
16512 deny_since: None,
16513 },
16514 Lint {
16515 label: "clippy::possible_missing_comma",
16516 description: r##"Checks for possible missing comma in an array. It lints if
16517an array element is a binary operator expression and it lies on two lines."##,
16518 default_severity: Severity::Allow,
16519 warn_since: None,
16520 deny_since: None,
16521 },
16522 Lint {
16523 label: "clippy::precedence",
16524 description: r##"Checks for operations where precedence may be unclear
16525and suggests to add parentheses. Currently it catches the following:
16526* mixed usage of arithmetic and bit shifting/combining operators without
16527parentheses"##,
16528 default_severity: Severity::Allow,
16529 warn_since: None,
16530 deny_since: None,
16531 },
16532 Lint {
16533 label: "clippy::print_in_format_impl",
16534 description: r##"Checks for usage of `println`, `print`, `eprintln` or `eprint` in an
16535implementation of a formatting trait."##,
16536 default_severity: Severity::Allow,
16537 warn_since: None,
16538 deny_since: None,
16539 },
16540 Lint {
16541 label: "clippy::print_literal",
16542 description: r##"This lint warns about the use of literals as `print!`/`println!` args."##,
16543 default_severity: Severity::Allow,
16544 warn_since: None,
16545 deny_since: None,
16546 },
16547 Lint {
16548 label: "clippy::print_stderr",
16549 description: r##"Checks for printing on *stderr*. The purpose of this lint
16550is to catch debugging remnants."##,
16551 default_severity: Severity::Allow,
16552 warn_since: None,
16553 deny_since: None,
16554 },
16555 Lint {
16556 label: "clippy::print_stdout",
16557 description: r##"Checks for printing on *stdout*. The purpose of this lint
16558is to catch debugging remnants."##,
16559 default_severity: Severity::Allow,
16560 warn_since: None,
16561 deny_since: None,
16562 },
16563 Lint {
16564 label: "clippy::print_with_newline",
16565 description: r##"This lint warns when you use `print!()` with a format
16566string that ends in a newline."##,
16567 default_severity: Severity::Allow,
16568 warn_since: None,
16569 deny_since: None,
16570 },
16571 Lint {
16572 label: "clippy::println_empty_string",
16573 description: r##"This lint warns when you use `println!()` to
16574print a newline."##,
16575 default_severity: Severity::Allow,
16576 warn_since: None,
16577 deny_since: None,
16578 },
16579 Lint {
16580 label: "clippy::ptr_arg",
16581 description: r##"This lint checks for function arguments of type `&String`, `&Vec`,
16582`&PathBuf`, and `Cow<_>`. It will also suggest you replace `.clone()` calls
16583with the appropriate `.to_owned()`/`to_string()` calls."##,
16584 default_severity: Severity::Allow,
16585 warn_since: None,
16586 deny_since: None,
16587 },
16588 Lint {
16589 label: "clippy::ptr_as_ptr",
16590 description: r##"Checks for `as` casts between raw pointers that don't change their
16591constness, namely `*const T` to `*const U` and `*mut T` to `*mut U`."##,
16592 default_severity: Severity::Allow,
16593 warn_since: None,
16594 deny_since: None,
16595 },
16596 Lint {
16597 label: "clippy::ptr_cast_constness",
16598 description: r##"Checks for `as` casts between raw pointers that change their constness, namely `*const T` to
16599`*mut T` and `*mut T` to `*const T`."##,
16600 default_severity: Severity::Allow,
16601 warn_since: None,
16602 deny_since: None,
16603 },
16604 Lint {
16605 label: "clippy::ptr_eq",
16606 description: r##"Use `std::ptr::eq` when applicable"##,
16607 default_severity: Severity::Allow,
16608 warn_since: None,
16609 deny_since: None,
16610 },
16611 Lint {
16612 label: "clippy::ptr_offset_with_cast",
16613 description: r##"Checks for usage of the `offset` pointer method with a `usize` casted to an
16614`isize`."##,
16615 default_severity: Severity::Allow,
16616 warn_since: None,
16617 deny_since: None,
16618 },
16619 Lint {
16620 label: "clippy::pub_enum_variant_names",
16621 description: r##"Nothing. This lint has been deprecated"##,
16622 default_severity: Severity::Allow,
16623 warn_since: None,
16624 deny_since: None,
16625 },
16626 Lint {
16627 label: "clippy::pub_underscore_fields",
16628 description: r##"Checks whether any field of the struct is prefixed with an `_` (underscore) and also marked
16629`pub` (public)"##,
16630 default_severity: Severity::Allow,
16631 warn_since: None,
16632 deny_since: None,
16633 },
16634 Lint {
16635 label: "clippy::pub_use",
16636 description: r##"Restricts the usage of `pub use ...`"##,
16637 default_severity: Severity::Allow,
16638 warn_since: None,
16639 deny_since: None,
16640 },
16641 Lint {
16642 label: "clippy::pub_with_shorthand",
16643 description: r##"Checks for usage of `pub(<loc>)` with `in`."##,
16644 default_severity: Severity::Allow,
16645 warn_since: None,
16646 deny_since: None,
16647 },
16648 Lint {
16649 label: "clippy::pub_without_shorthand",
16650 description: r##"Checks for usage of `pub(<loc>)` without `in`.
16651
16652Note: As you cannot write a module's path in `pub(<loc>)`, this will only trigger on
16653`pub(super)` and the like."##,
16654 default_severity: Severity::Allow,
16655 warn_since: None,
16656 deny_since: None,
16657 },
16658 Lint {
16659 label: "clippy::question_mark",
16660 description: r##"Checks for expressions that could be replaced by the question mark operator."##,
16661 default_severity: Severity::Allow,
16662 warn_since: None,
16663 deny_since: None,
16664 },
16665 Lint {
16666 label: "clippy::question_mark_used",
16667 description: r##"Checks for expressions that use the question mark operator and rejects them."##,
16668 default_severity: Severity::Allow,
16669 warn_since: None,
16670 deny_since: None,
16671 },
16672 Lint {
16673 label: "clippy::range_minus_one",
16674 description: r##"Checks for inclusive ranges where 1 is subtracted from
16675the upper bound, e.g., `x..=(y-1)`."##,
16676 default_severity: Severity::Allow,
16677 warn_since: None,
16678 deny_since: None,
16679 },
16680 Lint {
16681 label: "clippy::range_plus_one",
16682 description: r##"Checks for exclusive ranges where 1 is added to the
16683upper bound, e.g., `x..(y+1)`."##,
16684 default_severity: Severity::Allow,
16685 warn_since: None,
16686 deny_since: None,
16687 },
16688 Lint {
16689 label: "clippy::range_step_by_zero",
16690 description: r##"Nothing. This lint has been deprecated"##,
16691 default_severity: Severity::Allow,
16692 warn_since: None,
16693 deny_since: None,
16694 },
16695 Lint {
16696 label: "clippy::range_zip_with_len",
16697 description: r##"Checks for zipping a collection with the range of
16698`0.._.len()`."##,
16699 default_severity: Severity::Allow,
16700 warn_since: None,
16701 deny_since: None,
16702 },
16703 Lint {
16704 label: "clippy::rc_buffer",
16705 description: r##"Checks for `Rc<T>` and `Arc<T>` when `T` is a mutable buffer type such as `String` or `Vec`."##,
16706 default_severity: Severity::Allow,
16707 warn_since: None,
16708 deny_since: None,
16709 },
16710 Lint {
16711 label: "clippy::rc_clone_in_vec_init",
16712 description: r##"Checks for reference-counted pointers (`Arc`, `Rc`, `rc::Weak`, and `sync::Weak`)
16713in `vec![elem; len]`"##,
16714 default_severity: Severity::Allow,
16715 warn_since: None,
16716 deny_since: None,
16717 },
16718 Lint {
16719 label: "clippy::rc_mutex",
16720 description: r##"Checks for `Rc<Mutex<T>>`."##,
16721 default_severity: Severity::Allow,
16722 warn_since: None,
16723 deny_since: None,
16724 },
16725 Lint {
16726 label: "clippy::read_line_without_trim",
16727 description: r##"Looks for calls to [`Stdin::read_line`] to read a line from the standard input
16728into a string, then later attempting to use that string for an operation that will never
16729work for strings with a trailing newline character in it (e.g. parsing into a `i32`)."##,
16730 default_severity: Severity::Allow,
16731 warn_since: None,
16732 deny_since: None,
16733 },
16734 Lint {
16735 label: "clippy::read_zero_byte_vec",
16736 description: r##"This lint catches reads into a zero-length `Vec`.
16737Especially in the case of a call to `with_capacity`, this lint warns that read
16738gets the number of bytes from the `Vec`'s length, not its capacity."##,
16739 default_severity: Severity::Allow,
16740 warn_since: None,
16741 deny_since: None,
16742 },
16743 Lint {
16744 label: "clippy::readonly_write_lock",
16745 description: r##"Looks for calls to `RwLock::write` where the lock is only used for reading."##,
16746 default_severity: Severity::Allow,
16747 warn_since: None,
16748 deny_since: None,
16749 },
16750 Lint {
16751 label: "clippy::recursive_format_impl",
16752 description: r##"Checks for format trait implementations (e.g. `Display`) with a recursive call to itself
16753which uses `self` as a parameter.
16754This is typically done indirectly with the `write!` macro or with `to_string()`."##,
16755 default_severity: Severity::Allow,
16756 warn_since: None,
16757 deny_since: None,
16758 },
16759 Lint {
16760 label: "clippy::redundant_allocation",
16761 description: r##"Checks for usage of redundant allocations anywhere in the code."##,
16762 default_severity: Severity::Allow,
16763 warn_since: None,
16764 deny_since: None,
16765 },
16766 Lint {
16767 label: "clippy::redundant_as_str",
16768 description: r##"Checks for usage of `as_str()` on a `String` chained with a method available on the `String` itself."##,
16769 default_severity: Severity::Allow,
16770 warn_since: None,
16771 deny_since: None,
16772 },
16773 Lint {
16774 label: "clippy::redundant_async_block",
16775 description: r##"Checks for `async` block that only returns `await` on a future."##,
16776 default_severity: Severity::Allow,
16777 warn_since: None,
16778 deny_since: None,
16779 },
16780 Lint {
16781 label: "clippy::redundant_at_rest_pattern",
16782 description: r##"Checks for `[all @ ..]` patterns."##,
16783 default_severity: Severity::Allow,
16784 warn_since: None,
16785 deny_since: None,
16786 },
16787 Lint {
16788 label: "clippy::redundant_clone",
16789 description: r##"Checks for a redundant `clone()` (and its relatives) which clones an owned
16790value that is going to be dropped without further use."##,
16791 default_severity: Severity::Allow,
16792 warn_since: None,
16793 deny_since: None,
16794 },
16795 Lint {
16796 label: "clippy::redundant_closure",
16797 description: r##"Checks for closures which just call another function where
16798the function can be called directly. `unsafe` functions, calls where types
16799get adjusted or where the callee is marked `#[track_caller]` are ignored."##,
16800 default_severity: Severity::Allow,
16801 warn_since: None,
16802 deny_since: None,
16803 },
16804 Lint {
16805 label: "clippy::redundant_closure_call",
16806 description: r##"Detects closures called in the same expression where they
16807are defined."##,
16808 default_severity: Severity::Allow,
16809 warn_since: None,
16810 deny_since: None,
16811 },
16812 Lint {
16813 label: "clippy::redundant_closure_for_method_calls",
16814 description: r##"Checks for closures which only invoke a method on the closure
16815argument and can be replaced by referencing the method directly."##,
16816 default_severity: Severity::Allow,
16817 warn_since: None,
16818 deny_since: None,
16819 },
16820 Lint {
16821 label: "clippy::redundant_comparisons",
16822 description: r##"Checks for ineffective double comparisons against constants."##,
16823 default_severity: Severity::Allow,
16824 warn_since: None,
16825 deny_since: None,
16826 },
16827 Lint {
16828 label: "clippy::redundant_else",
16829 description: r##"Checks for `else` blocks that can be removed without changing semantics."##,
16830 default_severity: Severity::Allow,
16831 warn_since: None,
16832 deny_since: None,
16833 },
16834 Lint {
16835 label: "clippy::redundant_feature_names",
16836 description: r##"Checks for feature names with prefix `use-`, `with-` or suffix `-support`"##,
16837 default_severity: Severity::Allow,
16838 warn_since: None,
16839 deny_since: None,
16840 },
16841 Lint {
16842 label: "clippy::redundant_field_names",
16843 description: r##"Checks for fields in struct literals where shorthands
16844could be used."##,
16845 default_severity: Severity::Allow,
16846 warn_since: None,
16847 deny_since: None,
16848 },
16849 Lint {
16850 label: "clippy::redundant_guards",
16851 description: r##"Checks for unnecessary guards in match expressions."##,
16852 default_severity: Severity::Allow,
16853 warn_since: None,
16854 deny_since: None,
16855 },
16856 Lint {
16857 label: "clippy::redundant_locals",
16858 description: r##"Checks for redundant redefinitions of local bindings."##,
16859 default_severity: Severity::Allow,
16860 warn_since: None,
16861 deny_since: None,
16862 },
16863 Lint {
16864 label: "clippy::redundant_pattern",
16865 description: r##"Checks for patterns in the form `name @ _`."##,
16866 default_severity: Severity::Allow,
16867 warn_since: None,
16868 deny_since: None,
16869 },
16870 Lint {
16871 label: "clippy::redundant_pattern_matching",
16872 description: r##"Lint for redundant pattern matching over `Result`, `Option`,
16873`std::task::Poll`, `std::net::IpAddr` or `bool`s"##,
16874 default_severity: Severity::Allow,
16875 warn_since: None,
16876 deny_since: None,
16877 },
16878 Lint {
16879 label: "clippy::redundant_pub_crate",
16880 description: r##"Checks for items declared `pub(crate)` that are not crate visible because they
16881are inside a private module."##,
16882 default_severity: Severity::Allow,
16883 warn_since: None,
16884 deny_since: None,
16885 },
16886 Lint {
16887 label: "clippy::redundant_slicing",
16888 description: r##"Checks for redundant slicing expressions which use the full range, and
16889do not change the type."##,
16890 default_severity: Severity::Allow,
16891 warn_since: None,
16892 deny_since: None,
16893 },
16894 Lint {
16895 label: "clippy::redundant_static_lifetimes",
16896 description: r##"Checks for constants and statics with an explicit `'static` lifetime."##,
16897 default_severity: Severity::Allow,
16898 warn_since: None,
16899 deny_since: None,
16900 },
16901 Lint {
16902 label: "clippy::redundant_type_annotations",
16903 description: r##"Warns about needless / redundant type annotations."##,
16904 default_severity: Severity::Allow,
16905 warn_since: None,
16906 deny_since: None,
16907 },
16908 Lint {
16909 label: "clippy::ref_as_ptr",
16910 description: r##"Checks for casts of references to pointer using `as`
16911and suggests `std::ptr::from_ref` and `std::ptr::from_mut` instead."##,
16912 default_severity: Severity::Allow,
16913 warn_since: None,
16914 deny_since: None,
16915 },
16916 Lint {
16917 label: "clippy::ref_binding_to_reference",
16918 description: r##"Checks for `ref` bindings which create a reference to a reference."##,
16919 default_severity: Severity::Allow,
16920 warn_since: None,
16921 deny_since: None,
16922 },
16923 Lint {
16924 label: "clippy::ref_option",
16925 description: r##"Warns when a function signature uses `&Option<T>` instead of `Option<&T>`."##,
16926 default_severity: Severity::Allow,
16927 warn_since: None,
16928 deny_since: None,
16929 },
16930 Lint {
16931 label: "clippy::ref_option_ref",
16932 description: r##"Checks for usage of `&Option<&T>`."##,
16933 default_severity: Severity::Allow,
16934 warn_since: None,
16935 deny_since: None,
16936 },
16937 Lint {
16938 label: "clippy::ref_patterns",
16939 description: r##"Checks for usages of the `ref` keyword."##,
16940 default_severity: Severity::Allow,
16941 warn_since: None,
16942 deny_since: None,
16943 },
16944 Lint {
16945 label: "clippy::regex_macro",
16946 description: r##"Nothing. This lint has been deprecated"##,
16947 default_severity: Severity::Allow,
16948 warn_since: None,
16949 deny_since: None,
16950 },
16951 Lint {
16952 label: "clippy::renamed_function_params",
16953 description: r##"Lints when the name of function parameters from trait impl is
16954different than its default implementation."##,
16955 default_severity: Severity::Allow,
16956 warn_since: None,
16957 deny_since: None,
16958 },
16959 Lint {
16960 label: "clippy::repeat_once",
16961 description: r##"Checks for usage of `.repeat(1)` and suggest the following method for each types.
16962- `.to_string()` for `str`
16963- `.clone()` for `String`
16964- `.to_vec()` for `slice`
16965
16966The lint will evaluate constant expressions and values as arguments of `.repeat(..)` and emit a message if
16967they are equivalent to `1`. (Related discussion in [rust-clippy#7306](https://github.com/rust-lang/rust-clippy/issues/7306))"##,
16968 default_severity: Severity::Allow,
16969 warn_since: None,
16970 deny_since: None,
16971 },
16972 Lint {
16973 label: "clippy::repeat_vec_with_capacity",
16974 description: r##"Looks for patterns such as `vec![Vec::with_capacity(x); n]` or `iter::repeat(Vec::with_capacity(x))`."##,
16975 default_severity: Severity::Allow,
16976 warn_since: None,
16977 deny_since: None,
16978 },
16979 Lint {
16980 label: "clippy::replace_consts",
16981 description: r##"Nothing. This lint has been deprecated"##,
16982 default_severity: Severity::Allow,
16983 warn_since: None,
16984 deny_since: None,
16985 },
16986 Lint {
16987 label: "clippy::reserve_after_initialization",
16988 description: r##"Informs the user about a more concise way to create a vector with a known capacity."##,
16989 default_severity: Severity::Allow,
16990 warn_since: None,
16991 deny_since: None,
16992 },
16993 Lint {
16994 label: "clippy::rest_pat_in_fully_bound_structs",
16995 description: r##"Checks for unnecessary '..' pattern binding on struct when all fields are explicitly matched."##,
16996 default_severity: Severity::Allow,
16997 warn_since: None,
16998 deny_since: None,
16999 },
17000 Lint {
17001 label: "clippy::result_filter_map",
17002 description: r##"Checks for iterators of `Result`s using `.filter(Result::is_ok).map(Result::unwrap)` that may
17003be replaced with a `.flatten()` call."##,
17004 default_severity: Severity::Allow,
17005 warn_since: None,
17006 deny_since: None,
17007 },
17008 Lint {
17009 label: "clippy::result_large_err",
17010 description: r##"Checks for functions that return `Result` with an unusually large
17011`Err`-variant."##,
17012 default_severity: Severity::Allow,
17013 warn_since: None,
17014 deny_since: None,
17015 },
17016 Lint {
17017 label: "clippy::result_map_or_into_option",
17018 description: r##"Checks for usage of `_.map_or(None, Some)`."##,
17019 default_severity: Severity::Allow,
17020 warn_since: None,
17021 deny_since: None,
17022 },
17023 Lint {
17024 label: "clippy::result_map_unit_fn",
17025 description: r##"Checks for usage of `result.map(f)` where f is a function
17026or closure that returns the unit type `()`."##,
17027 default_severity: Severity::Allow,
17028 warn_since: None,
17029 deny_since: None,
17030 },
17031 Lint {
17032 label: "clippy::result_unit_err",
17033 description: r##"Checks for public functions that return a `Result`
17034with an `Err` type of `()`. It suggests using a custom type that
17035implements `std::error::Error`."##,
17036 default_severity: Severity::Allow,
17037 warn_since: None,
17038 deny_since: None,
17039 },
17040 Lint {
17041 label: "clippy::return_self_not_must_use",
17042 description: r##"This lint warns when a method returning `Self` doesn't have the `#[must_use]` attribute."##,
17043 default_severity: Severity::Allow,
17044 warn_since: None,
17045 deny_since: None,
17046 },
17047 Lint {
17048 label: "clippy::reversed_empty_ranges",
17049 description: r##"Checks for range expressions `x..y` where both `x` and `y`
17050are constant and `x` is greater to `y`. Also triggers if `x` is equal to `y` when they are conditions to a `for` loop."##,
17051 default_severity: Severity::Allow,
17052 warn_since: None,
17053 deny_since: None,
17054 },
17055 Lint {
17056 label: "clippy::same_functions_in_if_condition",
17057 description: r##"Checks for consecutive `if`s with the same function call."##,
17058 default_severity: Severity::Allow,
17059 warn_since: None,
17060 deny_since: None,
17061 },
17062 Lint {
17063 label: "clippy::same_item_push",
17064 description: r##"Checks whether a for loop is being used to push a constant
17065value into a Vec."##,
17066 default_severity: Severity::Allow,
17067 warn_since: None,
17068 deny_since: None,
17069 },
17070 Lint {
17071 label: "clippy::same_name_method",
17072 description: r##"It lints if a struct has two methods with the same name:
17073one from a trait, another not from a trait."##,
17074 default_severity: Severity::Allow,
17075 warn_since: None,
17076 deny_since: None,
17077 },
17078 Lint {
17079 label: "clippy::search_is_some",
17080 description: r##"Checks for an iterator or string search (such as `find()`,
17081`position()`, or `rposition()`) followed by a call to `is_some()` or `is_none()`."##,
17082 default_severity: Severity::Allow,
17083 warn_since: None,
17084 deny_since: None,
17085 },
17086 Lint {
17087 label: "clippy::seek_from_current",
17088 description: r##"Checks if the `seek` method of the `Seek` trait is called with `SeekFrom::Current(0)`,
17089and if it is, suggests using `stream_position` instead."##,
17090 default_severity: Severity::Allow,
17091 warn_since: None,
17092 deny_since: None,
17093 },
17094 Lint {
17095 label: "clippy::seek_to_start_instead_of_rewind",
17096 description: r##"Checks for jumps to the start of a stream that implements `Seek`
17097and uses the `seek` method providing `Start` as parameter."##,
17098 default_severity: Severity::Allow,
17099 warn_since: None,
17100 deny_since: None,
17101 },
17102 Lint {
17103 label: "clippy::self_assignment",
17104 description: r##"Checks for explicit self-assignments."##,
17105 default_severity: Severity::Allow,
17106 warn_since: None,
17107 deny_since: None,
17108 },
17109 Lint {
17110 label: "clippy::self_named_constructors",
17111 description: r##"Warns when constructors have the same name as their types."##,
17112 default_severity: Severity::Allow,
17113 warn_since: None,
17114 deny_since: None,
17115 },
17116 Lint {
17117 label: "clippy::self_named_module_files",
17118 description: r##"Checks that module layout uses only `mod.rs` files."##,
17119 default_severity: Severity::Allow,
17120 warn_since: None,
17121 deny_since: None,
17122 },
17123 Lint {
17124 label: "clippy::semicolon_if_nothing_returned",
17125 description: r##"Looks for blocks of expressions and fires if the last expression returns
17126`()` but is not followed by a semicolon."##,
17127 default_severity: Severity::Allow,
17128 warn_since: None,
17129 deny_since: None,
17130 },
17131 Lint {
17132 label: "clippy::semicolon_inside_block",
17133 description: r##"Suggests moving the semicolon after a block to the inside of the block, after its last
17134expression."##,
17135 default_severity: Severity::Allow,
17136 warn_since: None,
17137 deny_since: None,
17138 },
17139 Lint {
17140 label: "clippy::semicolon_outside_block",
17141 description: r##"Suggests moving the semicolon from a block's final expression outside of the block."##,
17142 default_severity: Severity::Allow,
17143 warn_since: None,
17144 deny_since: None,
17145 },
17146 Lint {
17147 label: "clippy::separated_literal_suffix",
17148 description: r##"Warns if literal suffixes are separated by an underscore.
17149To enforce separated literal suffix style,
17150see the `unseparated_literal_suffix` lint."##,
17151 default_severity: Severity::Allow,
17152 warn_since: None,
17153 deny_since: None,
17154 },
17155 Lint {
17156 label: "clippy::serde_api_misuse",
17157 description: r##"Checks for misuses of the serde API."##,
17158 default_severity: Severity::Allow,
17159 warn_since: None,
17160 deny_since: None,
17161 },
17162 Lint {
17163 label: "clippy::set_contains_or_insert",
17164 description: r##"Checks for usage of `contains` to see if a value is not present
17165in a set like `HashSet` or `BTreeSet`, followed by an `insert`."##,
17166 default_severity: Severity::Allow,
17167 warn_since: None,
17168 deny_since: None,
17169 },
17170 Lint {
17171 label: "clippy::shadow_reuse",
17172 description: r##"Checks for bindings that shadow other bindings already in
17173scope, while reusing the original value."##,
17174 default_severity: Severity::Allow,
17175 warn_since: None,
17176 deny_since: None,
17177 },
17178 Lint {
17179 label: "clippy::shadow_same",
17180 description: r##"Checks for bindings that shadow other bindings already in
17181scope, while just changing reference level or mutability."##,
17182 default_severity: Severity::Allow,
17183 warn_since: None,
17184 deny_since: None,
17185 },
17186 Lint {
17187 label: "clippy::shadow_unrelated",
17188 description: r##"Checks for bindings that shadow other bindings already in
17189scope, either without an initialization or with one that does not even use
17190the original value."##,
17191 default_severity: Severity::Allow,
17192 warn_since: None,
17193 deny_since: None,
17194 },
17195 Lint {
17196 label: "clippy::short_circuit_statement",
17197 description: r##"Checks for the use of short circuit boolean conditions as
17198a
17199statement."##,
17200 default_severity: Severity::Allow,
17201 warn_since: None,
17202 deny_since: None,
17203 },
17204 Lint {
17205 label: "clippy::should_assert_eq",
17206 description: r##"Nothing. This lint has been deprecated"##,
17207 default_severity: Severity::Allow,
17208 warn_since: None,
17209 deny_since: None,
17210 },
17211 Lint {
17212 label: "clippy::should_implement_trait",
17213 description: r##"Checks for methods that should live in a trait
17214implementation of a `std` trait (see [llogiq's blog
17215post](http://llogiq.github.io/2015/07/30/traits.html) for further
17216information) instead of an inherent implementation."##,
17217 default_severity: Severity::Allow,
17218 warn_since: None,
17219 deny_since: None,
17220 },
17221 Lint {
17222 label: "clippy::should_panic_without_expect",
17223 description: r##"Checks for `#[should_panic]` attributes without specifying the expected panic message."##,
17224 default_severity: Severity::Allow,
17225 warn_since: None,
17226 deny_since: None,
17227 },
17228 Lint {
17229 label: "clippy::significant_drop_in_scrutinee",
17230 description: r##"Checks for temporaries returned from function calls in a match scrutinee that have the
17231`clippy::has_significant_drop` attribute."##,
17232 default_severity: Severity::Allow,
17233 warn_since: None,
17234 deny_since: None,
17235 },
17236 Lint {
17237 label: "clippy::significant_drop_tightening",
17238 description: r##"Searches for elements marked with `#[clippy::has_significant_drop]` that could be early
17239dropped but are in fact dropped at the end of their scopes. In other words, enforces the
17240tightening of their possible lifetimes."##,
17241 default_severity: Severity::Allow,
17242 warn_since: None,
17243 deny_since: None,
17244 },
17245 Lint {
17246 label: "clippy::similar_names",
17247 description: r##"Checks for names that are very similar and thus confusing.
17248
17249Note: this lint looks for similar names throughout each
17250scope. To allow it, you need to allow it on the scope
17251level, not on the name that is reported."##,
17252 default_severity: Severity::Allow,
17253 warn_since: None,
17254 deny_since: None,
17255 },
17256 Lint {
17257 label: "clippy::single_call_fn",
17258 description: r##"Checks for functions that are only used once. Does not lint tests."##,
17259 default_severity: Severity::Allow,
17260 warn_since: None,
17261 deny_since: None,
17262 },
17263 Lint {
17264 label: "clippy::single_char_add_str",
17265 description: r##"Warns when using `push_str`/`insert_str` with a single-character string literal
17266where `push`/`insert` with a `char` would work fine."##,
17267 default_severity: Severity::Allow,
17268 warn_since: None,
17269 deny_since: None,
17270 },
17271 Lint {
17272 label: "clippy::single_char_lifetime_names",
17273 description: r##"Checks for lifetimes with names which are one character
17274long."##,
17275 default_severity: Severity::Allow,
17276 warn_since: None,
17277 deny_since: None,
17278 },
17279 Lint {
17280 label: "clippy::single_char_pattern",
17281 description: r##"Checks for string methods that receive a single-character
17282`str` as an argument, e.g., `_.split(x)`."##,
17283 default_severity: Severity::Allow,
17284 warn_since: None,
17285 deny_since: None,
17286 },
17287 Lint {
17288 label: "clippy::single_component_path_imports",
17289 description: r##"Checking for imports with single component use path."##,
17290 default_severity: Severity::Allow,
17291 warn_since: None,
17292 deny_since: None,
17293 },
17294 Lint {
17295 label: "clippy::single_element_loop",
17296 description: r##"Checks whether a for loop has a single element."##,
17297 default_severity: Severity::Allow,
17298 warn_since: None,
17299 deny_since: None,
17300 },
17301 Lint {
17302 label: "clippy::single_match",
17303 description: r##"Checks for matches with a single arm where an `if let`
17304will usually suffice.
17305
17306This intentionally does not lint if there are comments
17307inside of the other arm, so as to allow the user to document
17308why having another explicit pattern with an empty body is necessary,
17309or because the comments need to be preserved for other reasons."##,
17310 default_severity: Severity::Allow,
17311 warn_since: None,
17312 deny_since: None,
17313 },
17314 Lint {
17315 label: "clippy::single_match_else",
17316 description: r##"Checks for matches with two arms where an `if let else` will
17317usually suffice."##,
17318 default_severity: Severity::Allow,
17319 warn_since: None,
17320 deny_since: None,
17321 },
17322 Lint {
17323 label: "clippy::single_range_in_vec_init",
17324 description: r##"Checks for `Vec` or array initializations that contain only one range."##,
17325 default_severity: Severity::Allow,
17326 warn_since: None,
17327 deny_since: None,
17328 },
17329 Lint {
17330 label: "clippy::size_of_in_element_count",
17331 description: r##"Detects expressions where
17332`size_of::<T>` or `size_of_val::<T>` is used as a
17333count of elements of type `T`"##,
17334 default_severity: Severity::Allow,
17335 warn_since: None,
17336 deny_since: None,
17337 },
17338 Lint {
17339 label: "clippy::size_of_ref",
17340 description: r##"Checks for calls to `size_of_val()` where the argument is
17341a reference to a reference."##,
17342 default_severity: Severity::Allow,
17343 warn_since: None,
17344 deny_since: None,
17345 },
17346 Lint {
17347 label: "clippy::skip_while_next",
17348 description: r##"Checks for usage of `_.skip_while(condition).next()`."##,
17349 default_severity: Severity::Allow,
17350 warn_since: None,
17351 deny_since: None,
17352 },
17353 Lint {
17354 label: "clippy::slow_vector_initialization",
17355 description: r##"Checks slow zero-filled vector initialization"##,
17356 default_severity: Severity::Allow,
17357 warn_since: None,
17358 deny_since: None,
17359 },
17360 Lint {
17361 label: "clippy::stable_sort_primitive",
17362 description: r##"When sorting primitive values (integers, bools, chars, as well
17363as arrays, slices, and tuples of such items), it is typically better to
17364use an unstable sort than a stable sort."##,
17365 default_severity: Severity::Allow,
17366 warn_since: None,
17367 deny_since: None,
17368 },
17369 Lint {
17370 label: "clippy::std_instead_of_alloc",
17371 description: r##"Finds items imported through `std` when available through `alloc`."##,
17372 default_severity: Severity::Allow,
17373 warn_since: None,
17374 deny_since: None,
17375 },
17376 Lint {
17377 label: "clippy::std_instead_of_core",
17378 description: r##"Finds items imported through `std` when available through `core`."##,
17379 default_severity: Severity::Allow,
17380 warn_since: None,
17381 deny_since: None,
17382 },
17383 Lint {
17384 label: "clippy::str_split_at_newline",
17385 description: r##"Checks for usages of `str.trim().split(\
17386)` and `str.trim().split(\\
17387)`."##,
17388 default_severity: Severity::Allow,
17389 warn_since: None,
17390 deny_since: None,
17391 },
17392 Lint {
17393 label: "clippy::str_to_string",
17394 description: r##"This lint checks for `.to_string()` method calls on values of type `&str`."##,
17395 default_severity: Severity::Allow,
17396 warn_since: None,
17397 deny_since: None,
17398 },
17399 Lint {
17400 label: "clippy::string_add",
17401 description: r##"Checks for all instances of `x + _` where `x` is of type
17402`String`, but only if [`string_add_assign`](#string_add_assign) does *not*
17403match."##,
17404 default_severity: Severity::Allow,
17405 warn_since: None,
17406 deny_since: None,
17407 },
17408 Lint {
17409 label: "clippy::string_add_assign",
17410 description: r##"Checks for string appends of the form `x = x + y` (without
17411`let`!)."##,
17412 default_severity: Severity::Allow,
17413 warn_since: None,
17414 deny_since: None,
17415 },
17416 Lint {
17417 label: "clippy::string_extend_chars",
17418 description: r##"Checks for the use of `.extend(s.chars())` where s is a
17419`&str` or `String`."##,
17420 default_severity: Severity::Allow,
17421 warn_since: None,
17422 deny_since: None,
17423 },
17424 Lint {
17425 label: "clippy::string_from_utf8_as_bytes",
17426 description: r##"Check if the string is transformed to byte array and casted back to string."##,
17427 default_severity: Severity::Allow,
17428 warn_since: None,
17429 deny_since: None,
17430 },
17431 Lint {
17432 label: "clippy::string_lit_as_bytes",
17433 description: r##"Checks for the `as_bytes` method called on string literals
17434that contain only ASCII characters."##,
17435 default_severity: Severity::Allow,
17436 warn_since: None,
17437 deny_since: None,
17438 },
17439 Lint {
17440 label: "clippy::string_lit_chars_any",
17441 description: r##"Checks for `<string_lit>.chars().any(|i| i == c)`."##,
17442 default_severity: Severity::Allow,
17443 warn_since: None,
17444 deny_since: None,
17445 },
17446 Lint {
17447 label: "clippy::string_slice",
17448 description: r##"Checks for slice operations on strings"##,
17449 default_severity: Severity::Allow,
17450 warn_since: None,
17451 deny_since: None,
17452 },
17453 Lint {
17454 label: "clippy::string_to_string",
17455 description: r##"This lint checks for `.to_string()` method calls on values of type `String`."##,
17456 default_severity: Severity::Allow,
17457 warn_since: None,
17458 deny_since: None,
17459 },
17460 Lint {
17461 label: "clippy::strlen_on_c_strings",
17462 description: r##"Checks for usage of `libc::strlen` on a `CString` or `CStr` value,
17463and suggest calling `as_bytes().len()` or `to_bytes().len()` respectively instead."##,
17464 default_severity: Severity::Allow,
17465 warn_since: None,
17466 deny_since: None,
17467 },
17468 Lint {
17469 label: "clippy::struct_excessive_bools",
17470 description: r##"Checks for excessive
17471use of bools in structs."##,
17472 default_severity: Severity::Allow,
17473 warn_since: None,
17474 deny_since: None,
17475 },
17476 Lint {
17477 label: "clippy::struct_field_names",
17478 description: r##"Detects struct fields that are prefixed or suffixed
17479by the same characters or the name of the struct itself."##,
17480 default_severity: Severity::Allow,
17481 warn_since: None,
17482 deny_since: None,
17483 },
17484 Lint {
17485 label: "clippy::suboptimal_flops",
17486 description: r##"Looks for floating-point expressions that
17487can be expressed using built-in methods to improve both
17488accuracy and performance."##,
17489 default_severity: Severity::Allow,
17490 warn_since: None,
17491 deny_since: None,
17492 },
17493 Lint {
17494 label: "clippy::suspicious_arithmetic_impl",
17495 description: r##"Lints for suspicious operations in impls of arithmetic operators, e.g.
17496subtracting elements in an Add impl."##,
17497 default_severity: Severity::Allow,
17498 warn_since: None,
17499 deny_since: None,
17500 },
17501 Lint {
17502 label: "clippy::suspicious_assignment_formatting",
17503 description: r##"Checks for usage of the non-existent `=*`, `=!` and `=-`
17504operators."##,
17505 default_severity: Severity::Allow,
17506 warn_since: None,
17507 deny_since: None,
17508 },
17509 Lint {
17510 label: "clippy::suspicious_command_arg_space",
17511 description: r##"Checks for `Command::arg()` invocations that look like they
17512should be multiple arguments instead, such as `arg(-t ext2)`."##,
17513 default_severity: Severity::Allow,
17514 warn_since: None,
17515 deny_since: None,
17516 },
17517 Lint {
17518 label: "clippy::suspicious_doc_comments",
17519 description: r##"Detects the use of outer doc comments (`///`, `/**`) followed by a bang (`!`): `///!`"##,
17520 default_severity: Severity::Allow,
17521 warn_since: None,
17522 deny_since: None,
17523 },
17524 Lint {
17525 label: "clippy::suspicious_else_formatting",
17526 description: r##"Checks for formatting of `else`. It lints if the `else`
17527is followed immediately by a newline or the `else` seems to be missing."##,
17528 default_severity: Severity::Allow,
17529 warn_since: None,
17530 deny_since: None,
17531 },
17532 Lint {
17533 label: "clippy::suspicious_map",
17534 description: r##"Checks for calls to `map` followed by a `count`."##,
17535 default_severity: Severity::Allow,
17536 warn_since: None,
17537 deny_since: None,
17538 },
17539 Lint {
17540 label: "clippy::suspicious_op_assign_impl",
17541 description: r##"Lints for suspicious operations in impls of OpAssign, e.g.
17542subtracting elements in an AddAssign impl."##,
17543 default_severity: Severity::Allow,
17544 warn_since: None,
17545 deny_since: None,
17546 },
17547 Lint {
17548 label: "clippy::suspicious_open_options",
17549 description: r##"Checks for the suspicious use of `OpenOptions::create()`
17550without an explicit `OpenOptions::truncate()`."##,
17551 default_severity: Severity::Allow,
17552 warn_since: None,
17553 deny_since: None,
17554 },
17555 Lint {
17556 label: "clippy::suspicious_operation_groupings",
17557 description: r##"Checks for unlikely usages of binary operators that are almost
17558certainly typos and/or copy/paste errors, given the other usages
17559of binary operators nearby."##,
17560 default_severity: Severity::Allow,
17561 warn_since: None,
17562 deny_since: None,
17563 },
17564 Lint {
17565 label: "clippy::suspicious_splitn",
17566 description: r##"Checks for calls to [`splitn`]
17567(https://doc.rust-lang.org/std/primitive.str.html#method.splitn) and
17568related functions with either zero or one splits."##,
17569 default_severity: Severity::Allow,
17570 warn_since: None,
17571 deny_since: None,
17572 },
17573 Lint {
17574 label: "clippy::suspicious_to_owned",
17575 description: r##"Checks for the usage of `_.to_owned()`, on a `Cow<'_, _>`."##,
17576 default_severity: Severity::Allow,
17577 warn_since: None,
17578 deny_since: None,
17579 },
17580 Lint {
17581 label: "clippy::suspicious_unary_op_formatting",
17582 description: r##"Checks the formatting of a unary operator on the right hand side
17583of a binary operator. It lints if there is no space between the binary and unary operators,
17584but there is a space between the unary and its operand."##,
17585 default_severity: Severity::Allow,
17586 warn_since: None,
17587 deny_since: None,
17588 },
17589 Lint {
17590 label: "clippy::suspicious_xor_used_as_pow",
17591 description: r##"Warns for a Bitwise XOR (`^`) operator being probably confused as a powering. It will not trigger if any of the numbers are not in decimal."##,
17592 default_severity: Severity::Allow,
17593 warn_since: None,
17594 deny_since: None,
17595 },
17596 Lint {
17597 label: "clippy::swap_ptr_to_ref",
17598 description: r##"Checks for calls to `core::mem::swap` where either parameter is derived from a pointer"##,
17599 default_severity: Severity::Allow,
17600 warn_since: None,
17601 deny_since: None,
17602 },
17603 Lint {
17604 label: "clippy::tabs_in_doc_comments",
17605 description: r##"Checks doc comments for usage of tab characters."##,
17606 default_severity: Severity::Allow,
17607 warn_since: None,
17608 deny_since: None,
17609 },
17610 Lint {
17611 label: "clippy::temporary_assignment",
17612 description: r##"Checks for construction of a structure or tuple just to
17613assign a value in it."##,
17614 default_severity: Severity::Allow,
17615 warn_since: None,
17616 deny_since: None,
17617 },
17618 Lint {
17619 label: "clippy::test_attr_in_doctest",
17620 description: r##"Checks for `#[test]` in doctests unless they are marked with
17621either `ignore`, `no_run` or `compile_fail`."##,
17622 default_severity: Severity::Allow,
17623 warn_since: None,
17624 deny_since: None,
17625 },
17626 Lint {
17627 label: "clippy::tests_outside_test_module",
17628 description: r##"Triggers when a testing function (marked with the `#[test]` attribute) isn't inside a testing module
17629(marked with `#[cfg(test)]`)."##,
17630 default_severity: Severity::Allow,
17631 warn_since: None,
17632 deny_since: None,
17633 },
17634 Lint {
17635 label: "clippy::to_digit_is_some",
17636 description: r##"Checks for `.to_digit(..).is_some()` on `char`s."##,
17637 default_severity: Severity::Allow,
17638 warn_since: None,
17639 deny_since: None,
17640 },
17641 Lint {
17642 label: "clippy::to_string_in_format_args",
17643 description: r##"Checks for [`ToString::to_string`](https://doc.rust-lang.org/std/string/trait.ToString.html#tymethod.to_string)
17644applied to a type that implements [`Display`](https://doc.rust-lang.org/std/fmt/trait.Display.html)
17645in a macro that does formatting."##,
17646 default_severity: Severity::Allow,
17647 warn_since: None,
17648 deny_since: None,
17649 },
17650 Lint {
17651 label: "clippy::to_string_trait_impl",
17652 description: r##"Checks for direct implementations of `ToString`."##,
17653 default_severity: Severity::Allow,
17654 warn_since: None,
17655 deny_since: None,
17656 },
17657 Lint {
17658 label: "clippy::todo",
17659 description: r##"Checks for usage of `todo!`."##,
17660 default_severity: Severity::Allow,
17661 warn_since: None,
17662 deny_since: None,
17663 },
17664 Lint {
17665 label: "clippy::too_long_first_doc_paragraph",
17666 description: r##"Checks if the first line in the documentation of items listed in module page is too long."##,
17667 default_severity: Severity::Allow,
17668 warn_since: None,
17669 deny_since: None,
17670 },
17671 Lint {
17672 label: "clippy::too_many_arguments",
17673 description: r##"Checks for functions with too many parameters."##,
17674 default_severity: Severity::Allow,
17675 warn_since: None,
17676 deny_since: None,
17677 },
17678 Lint {
17679 label: "clippy::too_many_lines",
17680 description: r##"Checks for functions with a large amount of lines."##,
17681 default_severity: Severity::Allow,
17682 warn_since: None,
17683 deny_since: None,
17684 },
17685 Lint {
17686 label: "clippy::toplevel_ref_arg",
17687 description: r##"Checks for function arguments and let bindings denoted as
17688`ref`."##,
17689 default_severity: Severity::Allow,
17690 warn_since: None,
17691 deny_since: None,
17692 },
17693 Lint {
17694 label: "clippy::trailing_empty_array",
17695 description: r##"Displays a warning when a struct with a trailing zero-sized array is declared without a `repr` attribute."##,
17696 default_severity: Severity::Allow,
17697 warn_since: None,
17698 deny_since: None,
17699 },
17700 Lint {
17701 label: "clippy::trait_duplication_in_bounds",
17702 description: r##"Checks for cases where generics or trait objects are being used and multiple
17703syntax specifications for trait bounds are used simultaneously."##,
17704 default_severity: Severity::Allow,
17705 warn_since: None,
17706 deny_since: None,
17707 },
17708 Lint {
17709 label: "clippy::transmute_bytes_to_str",
17710 description: r##"Checks for transmutes from a `&[u8]` to a `&str`."##,
17711 default_severity: Severity::Allow,
17712 warn_since: None,
17713 deny_since: None,
17714 },
17715 Lint {
17716 label: "clippy::transmute_float_to_int",
17717 description: r##"Checks for transmutes from a float to an integer."##,
17718 default_severity: Severity::Allow,
17719 warn_since: None,
17720 deny_since: None,
17721 },
17722 Lint {
17723 label: "clippy::transmute_int_to_bool",
17724 description: r##"Checks for transmutes from an integer to a `bool`."##,
17725 default_severity: Severity::Allow,
17726 warn_since: None,
17727 deny_since: None,
17728 },
17729 Lint {
17730 label: "clippy::transmute_int_to_char",
17731 description: r##"Checks for transmutes from an integer to a `char`."##,
17732 default_severity: Severity::Allow,
17733 warn_since: None,
17734 deny_since: None,
17735 },
17736 Lint {
17737 label: "clippy::transmute_int_to_float",
17738 description: r##"Checks for transmutes from an integer to a float."##,
17739 default_severity: Severity::Allow,
17740 warn_since: None,
17741 deny_since: None,
17742 },
17743 Lint {
17744 label: "clippy::transmute_int_to_non_zero",
17745 description: r##"Checks for transmutes from `T` to `NonZero<T>`, and suggests the `new_unchecked`
17746method instead."##,
17747 default_severity: Severity::Allow,
17748 warn_since: None,
17749 deny_since: None,
17750 },
17751 Lint {
17752 label: "clippy::transmute_null_to_fn",
17753 description: r##"Checks for null function pointer creation through transmute."##,
17754 default_severity: Severity::Allow,
17755 warn_since: None,
17756 deny_since: None,
17757 },
17758 Lint {
17759 label: "clippy::transmute_num_to_bytes",
17760 description: r##"Checks for transmutes from a number to an array of `u8`"##,
17761 default_severity: Severity::Allow,
17762 warn_since: None,
17763 deny_since: None,
17764 },
17765 Lint {
17766 label: "clippy::transmute_ptr_to_ptr",
17767 description: r##"Checks for transmutes from a pointer to a pointer, or
17768from a reference to a reference."##,
17769 default_severity: Severity::Allow,
17770 warn_since: None,
17771 deny_since: None,
17772 },
17773 Lint {
17774 label: "clippy::transmute_ptr_to_ref",
17775 description: r##"Checks for transmutes from a pointer to a reference."##,
17776 default_severity: Severity::Allow,
17777 warn_since: None,
17778 deny_since: None,
17779 },
17780 Lint {
17781 label: "clippy::transmute_undefined_repr",
17782 description: r##"Checks for transmutes between types which do not have a representation defined relative to
17783each other."##,
17784 default_severity: Severity::Allow,
17785 warn_since: None,
17786 deny_since: None,
17787 },
17788 Lint {
17789 label: "clippy::transmutes_expressible_as_ptr_casts",
17790 description: r##"Checks for transmutes that could be a pointer cast."##,
17791 default_severity: Severity::Allow,
17792 warn_since: None,
17793 deny_since: None,
17794 },
17795 Lint {
17796 label: "clippy::transmuting_null",
17797 description: r##"Checks for transmute calls which would receive a null pointer."##,
17798 default_severity: Severity::Allow,
17799 warn_since: None,
17800 deny_since: None,
17801 },
17802 Lint {
17803 label: "clippy::trim_split_whitespace",
17804 description: r##"Warns about calling `str::trim` (or variants) before `str::split_whitespace`."##,
17805 default_severity: Severity::Allow,
17806 warn_since: None,
17807 deny_since: None,
17808 },
17809 Lint {
17810 label: "clippy::trivial_regex",
17811 description: r##"Checks for trivial [regex](https://crates.io/crates/regex)
17812creation (with `Regex::new`, `RegexBuilder::new`, or `RegexSet::new`)."##,
17813 default_severity: Severity::Allow,
17814 warn_since: None,
17815 deny_since: None,
17816 },
17817 Lint {
17818 label: "clippy::trivially_copy_pass_by_ref",
17819 description: r##"Checks for functions taking arguments by reference, where
17820the argument type is `Copy` and small enough to be more efficient to always
17821pass by value."##,
17822 default_severity: Severity::Allow,
17823 warn_since: None,
17824 deny_since: None,
17825 },
17826 Lint {
17827 label: "clippy::try_err",
17828 description: r##"Checks for usage of `Err(x)?`."##,
17829 default_severity: Severity::Allow,
17830 warn_since: None,
17831 deny_since: None,
17832 },
17833 Lint {
17834 label: "clippy::tuple_array_conversions",
17835 description: r##"Checks for tuple<=>array conversions that are not done with `.into()`."##,
17836 default_severity: Severity::Allow,
17837 warn_since: None,
17838 deny_since: None,
17839 },
17840 Lint {
17841 label: "clippy::type_complexity",
17842 description: r##"Checks for types used in structs, parameters and `let`
17843declarations above a certain complexity threshold."##,
17844 default_severity: Severity::Allow,
17845 warn_since: None,
17846 deny_since: None,
17847 },
17848 Lint {
17849 label: "clippy::type_id_on_box",
17850 description: r##"Looks for calls to `.type_id()` on a `Box<dyn _>`."##,
17851 default_severity: Severity::Allow,
17852 warn_since: None,
17853 deny_since: None,
17854 },
17855 Lint {
17856 label: "clippy::type_repetition_in_bounds",
17857 description: r##"This lint warns about unnecessary type repetitions in trait bounds"##,
17858 default_severity: Severity::Allow,
17859 warn_since: None,
17860 deny_since: None,
17861 },
17862 Lint {
17863 label: "clippy::unchecked_duration_subtraction",
17864 description: r##"Lints subtraction between an `Instant` and a `Duration`."##,
17865 default_severity: Severity::Allow,
17866 warn_since: None,
17867 deny_since: None,
17868 },
17869 Lint {
17870 label: "clippy::unconditional_recursion",
17871 description: r##"Checks that there isn't an infinite recursion in trait
17872implementations."##,
17873 default_severity: Severity::Allow,
17874 warn_since: None,
17875 deny_since: None,
17876 },
17877 Lint {
17878 label: "clippy::undocumented_unsafe_blocks",
17879 description: r##"Checks for `unsafe` blocks and impls without a `// SAFETY: ` comment
17880explaining why the unsafe operations performed inside
17881the block are safe.
17882
17883Note the comment must appear on the line(s) preceding the unsafe block
17884with nothing appearing in between. The following is ok:
17885```rust
17886foo(
17887 // SAFETY:
17888 // This is a valid safety comment
17889 unsafe { *x }
17890)
17891```
17892But neither of these are:
17893```rust
17894// SAFETY:
17895// This is not a valid safety comment
17896foo(
17897 /* SAFETY: Neither is this */ unsafe { *x },
17898);
17899```"##,
17900 default_severity: Severity::Allow,
17901 warn_since: None,
17902 deny_since: None,
17903 },
17904 Lint {
17905 label: "clippy::unicode_not_nfc",
17906 description: r##"Checks for string literals that contain Unicode in a form
17907that is not equal to its
17908[NFC-recomposition](http://www.unicode.org/reports/tr15/#Norm_Forms)."##,
17909 default_severity: Severity::Allow,
17910 warn_since: None,
17911 deny_since: None,
17912 },
17913 Lint {
17914 label: "clippy::unimplemented",
17915 description: r##"Checks for usage of `unimplemented!`."##,
17916 default_severity: Severity::Allow,
17917 warn_since: None,
17918 deny_since: None,
17919 },
17920 Lint {
17921 label: "clippy::uninhabited_references",
17922 description: r##"It detects references to uninhabited types, such as `!` and
17923warns when those are either dereferenced or returned from a function."##,
17924 default_severity: Severity::Allow,
17925 warn_since: None,
17926 deny_since: None,
17927 },
17928 Lint {
17929 label: "clippy::uninit_assumed_init",
17930 description: r##"Checks for `MaybeUninit::uninit().assume_init()`."##,
17931 default_severity: Severity::Allow,
17932 warn_since: None,
17933 deny_since: None,
17934 },
17935 Lint {
17936 label: "clippy::uninit_vec",
17937 description: r##"Checks for `set_len()` call that creates `Vec` with uninitialized elements.
17938This is commonly caused by calling `set_len()` right after allocating or
17939reserving a buffer with `new()`, `default()`, `with_capacity()`, or `reserve()`."##,
17940 default_severity: Severity::Allow,
17941 warn_since: None,
17942 deny_since: None,
17943 },
17944 Lint {
17945 label: "clippy::uninlined_format_args",
17946 description: r##"Detect when a variable is not inlined in a format string,
17947and suggests to inline it."##,
17948 default_severity: Severity::Allow,
17949 warn_since: None,
17950 deny_since: None,
17951 },
17952 Lint {
17953 label: "clippy::unit_arg",
17954 description: r##"Checks for passing a unit value as an argument to a function without using a
17955unit literal (`()`)."##,
17956 default_severity: Severity::Allow,
17957 warn_since: None,
17958 deny_since: None,
17959 },
17960 Lint {
17961 label: "clippy::unit_cmp",
17962 description: r##"Checks for comparisons to unit. This includes all binary
17963comparisons (like `==` and `<`) and asserts."##,
17964 default_severity: Severity::Allow,
17965 warn_since: None,
17966 deny_since: None,
17967 },
17968 Lint {
17969 label: "clippy::unit_hash",
17970 description: r##"Detects `().hash(_)`."##,
17971 default_severity: Severity::Allow,
17972 warn_since: None,
17973 deny_since: None,
17974 },
17975 Lint {
17976 label: "clippy::unit_return_expecting_ord",
17977 description: r##"Checks for functions that expect closures of type
17978Fn(...) -> Ord where the implemented closure returns the unit type.
17979The lint also suggests to remove the semi-colon at the end of the statement if present."##,
17980 default_severity: Severity::Allow,
17981 warn_since: None,
17982 deny_since: None,
17983 },
17984 Lint {
17985 label: "clippy::unnecessary_box_returns",
17986 description: r##"Checks for a return type containing a `Box<T>` where `T` implements `Sized`
17987
17988The lint ignores `Box<T>` where `T` is larger than `unnecessary_box_size`,
17989as returning a large `T` directly may be detrimental to performance."##,
17990 default_severity: Severity::Allow,
17991 warn_since: None,
17992 deny_since: None,
17993 },
17994 Lint {
17995 label: "clippy::unnecessary_cast",
17996 description: r##"Checks for casts to the same type, casts of int literals to integer
17997types, casts of float literals to float types, and casts between raw
17998pointers that don't change type or constness."##,
17999 default_severity: Severity::Allow,
18000 warn_since: None,
18001 deny_since: None,
18002 },
18003 Lint {
18004 label: "clippy::unnecessary_clippy_cfg",
18005 description: r##"Checks for `#[cfg_attr(clippy, allow(clippy::lint))]`
18006and suggests to replace it with `#[allow(clippy::lint)]`."##,
18007 default_severity: Severity::Allow,
18008 warn_since: None,
18009 deny_since: None,
18010 },
18011 Lint {
18012 label: "clippy::unnecessary_fallible_conversions",
18013 description: r##"Checks for calls to `TryInto::try_into` and `TryFrom::try_from` when their infallible counterparts
18014could be used."##,
18015 default_severity: Severity::Allow,
18016 warn_since: None,
18017 deny_since: None,
18018 },
18019 Lint {
18020 label: "clippy::unnecessary_filter_map",
18021 description: r##"Checks for `filter_map` calls that could be replaced by `filter` or `map`.
18022More specifically it checks if the closure provided is only performing one of the
18023filter or map operations and suggests the appropriate option."##,
18024 default_severity: Severity::Allow,
18025 warn_since: None,
18026 deny_since: None,
18027 },
18028 Lint {
18029 label: "clippy::unnecessary_find_map",
18030 description: r##"Checks for `find_map` calls that could be replaced by `find` or `map`. More
18031specifically it checks if the closure provided is only performing one of the
18032find or map operations and suggests the appropriate option."##,
18033 default_severity: Severity::Allow,
18034 warn_since: None,
18035 deny_since: None,
18036 },
18037 Lint {
18038 label: "clippy::unnecessary_first_then_check",
18039 description: r##"Checks the usage of `.first().is_some()` or `.first().is_none()` to check if a slice is
18040empty."##,
18041 default_severity: Severity::Allow,
18042 warn_since: None,
18043 deny_since: None,
18044 },
18045 Lint {
18046 label: "clippy::unnecessary_fold",
18047 description: r##"Checks for usage of `fold` when a more succinct alternative exists.
18048Specifically, this checks for `fold`s which could be replaced by `any`, `all`,
18049`sum` or `product`."##,
18050 default_severity: Severity::Allow,
18051 warn_since: None,
18052 deny_since: None,
18053 },
18054 Lint {
18055 label: "clippy::unnecessary_get_then_check",
18056 description: r##"Checks the usage of `.get().is_some()` or `.get().is_none()` on std map types."##,
18057 default_severity: Severity::Allow,
18058 warn_since: None,
18059 deny_since: None,
18060 },
18061 Lint {
18062 label: "clippy::unnecessary_join",
18063 description: r##"Checks for usage of `.collect::<Vec<String>>().join()` on iterators."##,
18064 default_severity: Severity::Allow,
18065 warn_since: None,
18066 deny_since: None,
18067 },
18068 Lint {
18069 label: "clippy::unnecessary_lazy_evaluations",
18070 description: r##"As the counterpart to `or_fun_call`, this lint looks for unnecessary
18071lazily evaluated closures on `Option` and `Result`.
18072
18073This lint suggests changing the following functions, when eager evaluation results in
18074simpler code:
18075 - `unwrap_or_else` to `unwrap_or`
18076 - `and_then` to `and`
18077 - `or_else` to `or`
18078 - `get_or_insert_with` to `get_or_insert`
18079 - `ok_or_else` to `ok_or`
18080 - `then` to `then_some` (for msrv >= 1.62.0)"##,
18081 default_severity: Severity::Allow,
18082 warn_since: None,
18083 deny_since: None,
18084 },
18085 Lint {
18086 label: "clippy::unnecessary_literal_unwrap",
18087 description: r##"Checks for `.unwrap()` related calls on `Result`s and `Option`s that are constructed."##,
18088 default_severity: Severity::Allow,
18089 warn_since: None,
18090 deny_since: None,
18091 },
18092 Lint {
18093 label: "clippy::unnecessary_map_on_constructor",
18094 description: r##"Suggests removing the use of a `map()` (or `map_err()`) method when an `Option` or `Result`
18095is being constructed."##,
18096 default_severity: Severity::Allow,
18097 warn_since: None,
18098 deny_since: None,
18099 },
18100 Lint {
18101 label: "clippy::unnecessary_min_or_max",
18102 description: r##"Checks for unnecessary calls to `min()` or `max()` in the following cases
18103- Either both side is constant
18104- One side is clearly larger than the other, like i32::MIN and an i32 variable"##,
18105 default_severity: Severity::Allow,
18106 warn_since: None,
18107 deny_since: None,
18108 },
18109 Lint {
18110 label: "clippy::unnecessary_mut_passed",
18111 description: r##"Detects passing a mutable reference to a function that only
18112requires an immutable reference."##,
18113 default_severity: Severity::Allow,
18114 warn_since: None,
18115 deny_since: None,
18116 },
18117 Lint {
18118 label: "clippy::unnecessary_operation",
18119 description: r##"Checks for expression statements that can be reduced to a
18120sub-expression."##,
18121 default_severity: Severity::Allow,
18122 warn_since: None,
18123 deny_since: None,
18124 },
18125 Lint {
18126 label: "clippy::unnecessary_owned_empty_strings",
18127 description: r##"Detects cases of owned empty strings being passed as an argument to a function expecting `&str`"##,
18128 default_severity: Severity::Allow,
18129 warn_since: None,
18130 deny_since: None,
18131 },
18132 Lint {
18133 label: "clippy::unnecessary_result_map_or_else",
18134 description: r##"Checks for usage of `.map_or_else()` map closure for `Result` type."##,
18135 default_severity: Severity::Allow,
18136 warn_since: None,
18137 deny_since: None,
18138 },
18139 Lint {
18140 label: "clippy::unnecessary_safety_comment",
18141 description: r##"Checks for `// SAFETY: ` comments on safe code."##,
18142 default_severity: Severity::Allow,
18143 warn_since: None,
18144 deny_since: None,
18145 },
18146 Lint {
18147 label: "clippy::unnecessary_safety_doc",
18148 description: r##"Checks for the doc comments of publicly visible
18149safe functions and traits and warns if there is a `# Safety` section."##,
18150 default_severity: Severity::Allow,
18151 warn_since: None,
18152 deny_since: None,
18153 },
18154 Lint {
18155 label: "clippy::unnecessary_self_imports",
18156 description: r##"Checks for imports ending in `::{self}`."##,
18157 default_severity: Severity::Allow,
18158 warn_since: None,
18159 deny_since: None,
18160 },
18161 Lint {
18162 label: "clippy::unnecessary_sort_by",
18163 description: r##"Checks for usage of `Vec::sort_by` passing in a closure
18164which compares the two arguments, either directly or indirectly."##,
18165 default_severity: Severity::Allow,
18166 warn_since: None,
18167 deny_since: None,
18168 },
18169 Lint {
18170 label: "clippy::unnecessary_struct_initialization",
18171 description: r##"Checks for initialization of an identical `struct` from another instance
18172of the type, either by copying a base without setting any field or by
18173moving all fields individually."##,
18174 default_severity: Severity::Allow,
18175 warn_since: None,
18176 deny_since: None,
18177 },
18178 Lint {
18179 label: "clippy::unnecessary_to_owned",
18180 description: r##"Checks for unnecessary calls to [`ToOwned::to_owned`](https://doc.rust-lang.org/std/borrow/trait.ToOwned.html#tymethod.to_owned)
18181and other `to_owned`-like functions."##,
18182 default_severity: Severity::Allow,
18183 warn_since: None,
18184 deny_since: None,
18185 },
18186 Lint {
18187 label: "clippy::unnecessary_unwrap",
18188 description: r##"Checks for calls of `unwrap[_err]()` that cannot fail."##,
18189 default_severity: Severity::Allow,
18190 warn_since: None,
18191 deny_since: None,
18192 },
18193 Lint {
18194 label: "clippy::unnecessary_wraps",
18195 description: r##"Checks for private functions that only return `Ok` or `Some`."##,
18196 default_severity: Severity::Allow,
18197 warn_since: None,
18198 deny_since: None,
18199 },
18200 Lint {
18201 label: "clippy::unneeded_field_pattern",
18202 description: r##"Checks for structure field patterns bound to wildcards."##,
18203 default_severity: Severity::Allow,
18204 warn_since: None,
18205 deny_since: None,
18206 },
18207 Lint {
18208 label: "clippy::unneeded_wildcard_pattern",
18209 description: r##"Checks for tuple patterns with a wildcard
18210pattern (`_`) is next to a rest pattern (`..`).
18211
18212_NOTE_: While `_, ..` means there is at least one element left, `..`
18213means there are 0 or more elements left. This can make a difference
18214when refactoring, but shouldn't result in errors in the refactored code,
18215since the wildcard pattern isn't used anyway."##,
18216 default_severity: Severity::Allow,
18217 warn_since: None,
18218 deny_since: None,
18219 },
18220 Lint {
18221 label: "clippy::unnested_or_patterns",
18222 description: r##"Checks for unnested or-patterns, e.g., `Some(0) | Some(2)` and
18223suggests replacing the pattern with a nested one, `Some(0 | 2)`.
18224
18225Another way to think of this is that it rewrites patterns in
18226*disjunctive normal form (DNF)* into *conjunctive normal form (CNF)*."##,
18227 default_severity: Severity::Allow,
18228 warn_since: None,
18229 deny_since: None,
18230 },
18231 Lint {
18232 label: "clippy::unreachable",
18233 description: r##"Checks for usage of `unreachable!`."##,
18234 default_severity: Severity::Allow,
18235 warn_since: None,
18236 deny_since: None,
18237 },
18238 Lint {
18239 label: "clippy::unreadable_literal",
18240 description: r##"Warns if a long integral or floating-point constant does
18241not contain underscores."##,
18242 default_severity: Severity::Allow,
18243 warn_since: None,
18244 deny_since: None,
18245 },
18246 Lint {
18247 label: "clippy::unsafe_derive_deserialize",
18248 description: r##"Checks for deriving `serde::Deserialize` on a type that
18249has methods using `unsafe`."##,
18250 default_severity: Severity::Allow,
18251 warn_since: None,
18252 deny_since: None,
18253 },
18254 Lint {
18255 label: "clippy::unsafe_removed_from_name",
18256 description: r##"Checks for imports that remove unsafe from an item's
18257name."##,
18258 default_severity: Severity::Allow,
18259 warn_since: None,
18260 deny_since: None,
18261 },
18262 Lint {
18263 label: "clippy::unsafe_vector_initialization",
18264 description: r##"Nothing. This lint has been deprecated"##,
18265 default_severity: Severity::Allow,
18266 warn_since: None,
18267 deny_since: None,
18268 },
18269 Lint {
18270 label: "clippy::unseparated_literal_suffix",
18271 description: r##"Warns if literal suffixes are not separated by an
18272underscore.
18273To enforce unseparated literal suffix style,
18274see the `separated_literal_suffix` lint."##,
18275 default_severity: Severity::Allow,
18276 warn_since: None,
18277 deny_since: None,
18278 },
18279 Lint {
18280 label: "clippy::unsound_collection_transmute",
18281 description: r##"Checks for transmutes between collections whose
18282types have different ABI, size or alignment."##,
18283 default_severity: Severity::Allow,
18284 warn_since: None,
18285 deny_since: None,
18286 },
18287 Lint {
18288 label: "clippy::unstable_as_mut_slice",
18289 description: r##"Nothing. This lint has been deprecated"##,
18290 default_severity: Severity::Allow,
18291 warn_since: None,
18292 deny_since: None,
18293 },
18294 Lint {
18295 label: "clippy::unstable_as_slice",
18296 description: r##"Nothing. This lint has been deprecated"##,
18297 default_severity: Severity::Allow,
18298 warn_since: None,
18299 deny_since: None,
18300 },
18301 Lint {
18302 label: "clippy::unused_async",
18303 description: r##"Checks for functions that are declared `async` but have no `.await`s inside of them."##,
18304 default_severity: Severity::Allow,
18305 warn_since: None,
18306 deny_since: None,
18307 },
18308 Lint {
18309 label: "clippy::unused_collect",
18310 description: r##"Nothing. This lint has been deprecated"##,
18311 default_severity: Severity::Allow,
18312 warn_since: None,
18313 deny_since: None,
18314 },
18315 Lint {
18316 label: "clippy::unused_enumerate_index",
18317 description: r##"Checks for uses of the `enumerate` method where the index is unused (`_`)"##,
18318 default_severity: Severity::Allow,
18319 warn_since: None,
18320 deny_since: None,
18321 },
18322 Lint {
18323 label: "clippy::unused_format_specs",
18324 description: r##"Detects [formatting parameters] that have no effect on the output of
18325`format!()`, `println!()` or similar macros."##,
18326 default_severity: Severity::Allow,
18327 warn_since: None,
18328 deny_since: None,
18329 },
18330 Lint {
18331 label: "clippy::unused_io_amount",
18332 description: r##"Checks for unused written/read amount."##,
18333 default_severity: Severity::Allow,
18334 warn_since: None,
18335 deny_since: None,
18336 },
18337 Lint {
18338 label: "clippy::unused_peekable",
18339 description: r##"Checks for the creation of a `peekable` iterator that is never `.peek()`ed"##,
18340 default_severity: Severity::Allow,
18341 warn_since: None,
18342 deny_since: None,
18343 },
18344 Lint {
18345 label: "clippy::unused_result_ok",
18346 description: r##"Checks for calls to `Result::ok()` without using the returned `Option`."##,
18347 default_severity: Severity::Allow,
18348 warn_since: None,
18349 deny_since: None,
18350 },
18351 Lint {
18352 label: "clippy::unused_rounding",
18353 description: r##"Detects cases where a whole-number literal float is being rounded, using
18354the `floor`, `ceil`, or `round` methods."##,
18355 default_severity: Severity::Allow,
18356 warn_since: None,
18357 deny_since: None,
18358 },
18359 Lint {
18360 label: "clippy::unused_self",
18361 description: r##"Checks methods that contain a `self` argument but don't use it"##,
18362 default_severity: Severity::Allow,
18363 warn_since: None,
18364 deny_since: None,
18365 },
18366 Lint {
18367 label: "clippy::unused_trait_names",
18368 description: r##"Checks for `use Trait` where the Trait is only used for its methods and not referenced by a path directly."##,
18369 default_severity: Severity::Allow,
18370 warn_since: None,
18371 deny_since: None,
18372 },
18373 Lint {
18374 label: "clippy::unused_unit",
18375 description: r##"Checks for unit (`()`) expressions that can be removed."##,
18376 default_severity: Severity::Allow,
18377 warn_since: None,
18378 deny_since: None,
18379 },
18380 Lint {
18381 label: "clippy::unusual_byte_groupings",
18382 description: r##"Warns if hexadecimal or binary literals are not grouped
18383by nibble or byte."##,
18384 default_severity: Severity::Allow,
18385 warn_since: None,
18386 deny_since: None,
18387 },
18388 Lint {
18389 label: "clippy::unwrap_in_result",
18390 description: r##"Checks for functions of type `Result` that contain `expect()` or `unwrap()`"##,
18391 default_severity: Severity::Allow,
18392 warn_since: None,
18393 deny_since: None,
18394 },
18395 Lint {
18396 label: "clippy::unwrap_or_default",
18397 description: r##"Checks for usages of the following functions with an argument that constructs a default value
18398(e.g., `Default::default` or `String::new`):
18399- `unwrap_or`
18400- `unwrap_or_else`
18401- `or_insert`
18402- `or_insert_with`"##,
18403 default_severity: Severity::Allow,
18404 warn_since: None,
18405 deny_since: None,
18406 },
18407 Lint {
18408 label: "clippy::unwrap_used",
18409 description: r##"Checks for `.unwrap()` or `.unwrap_err()` calls on `Result`s and `.unwrap()` call on `Option`s."##,
18410 default_severity: Severity::Allow,
18411 warn_since: None,
18412 deny_since: None,
18413 },
18414 Lint {
18415 label: "clippy::upper_case_acronyms",
18416 description: r##"Checks for fully capitalized names and optionally names containing a capitalized acronym."##,
18417 default_severity: Severity::Allow,
18418 warn_since: None,
18419 deny_since: None,
18420 },
18421 Lint {
18422 label: "clippy::use_debug",
18423 description: r##"Checks for usage of `Debug` formatting. The purpose of this
18424lint is to catch debugging remnants."##,
18425 default_severity: Severity::Allow,
18426 warn_since: None,
18427 deny_since: None,
18428 },
18429 Lint {
18430 label: "clippy::use_self",
18431 description: r##"Checks for unnecessary repetition of structure name when a
18432replacement with `Self` is applicable."##,
18433 default_severity: Severity::Allow,
18434 warn_since: None,
18435 deny_since: None,
18436 },
18437 Lint {
18438 label: "clippy::used_underscore_binding",
18439 description: r##"Checks for the use of bindings with a single leading
18440underscore."##,
18441 default_severity: Severity::Allow,
18442 warn_since: None,
18443 deny_since: None,
18444 },
18445 Lint {
18446 label: "clippy::used_underscore_items",
18447 description: r##"Checks for the use of item with a single leading
18448underscore."##,
18449 default_severity: Severity::Allow,
18450 warn_since: None,
18451 deny_since: None,
18452 },
18453 Lint {
18454 label: "clippy::useless_asref",
18455 description: r##"Checks for usage of `.as_ref()` or `.as_mut()` where the
18456types before and after the call are the same."##,
18457 default_severity: Severity::Allow,
18458 warn_since: None,
18459 deny_since: None,
18460 },
18461 Lint {
18462 label: "clippy::useless_attribute",
18463 description: r##"Checks for `extern crate` and `use` items annotated with
18464lint attributes.
18465
18466This lint permits lint attributes for lints emitted on the items themself.
18467For `use` items these lints are:
18468* ambiguous_glob_reexports
18469* dead_code
18470* deprecated
18471* hidden_glob_reexports
18472* unreachable_pub
18473* unused
18474* unused_braces
18475* unused_import_braces
18476* clippy::disallowed_types
18477* clippy::enum_glob_use
18478* clippy::macro_use_imports
18479* clippy::module_name_repetitions
18480* clippy::redundant_pub_crate
18481* clippy::single_component_path_imports
18482* clippy::unsafe_removed_from_name
18483* clippy::wildcard_imports
18484
18485For `extern crate` items these lints are:
18486* `unused_imports` on items with `#[macro_use]`"##,
18487 default_severity: Severity::Allow,
18488 warn_since: None,
18489 deny_since: None,
18490 },
18491 Lint {
18492 label: "clippy::useless_conversion",
18493 description: r##"Checks for `Into`, `TryInto`, `From`, `TryFrom`, or `IntoIter` calls
18494which uselessly convert to the same type."##,
18495 default_severity: Severity::Allow,
18496 warn_since: None,
18497 deny_since: None,
18498 },
18499 Lint {
18500 label: "clippy::useless_format",
18501 description: r##"Checks for the use of `format!(string literal with no
18502argument)` and `format!({}, foo)` where `foo` is a string."##,
18503 default_severity: Severity::Allow,
18504 warn_since: None,
18505 deny_since: None,
18506 },
18507 Lint {
18508 label: "clippy::useless_let_if_seq",
18509 description: r##"Checks for variable declarations immediately followed by a
18510conditional affectation."##,
18511 default_severity: Severity::Allow,
18512 warn_since: None,
18513 deny_since: None,
18514 },
18515 Lint {
18516 label: "clippy::useless_transmute",
18517 description: r##"Checks for transmutes to the original type of the object
18518and transmutes that could be a cast."##,
18519 default_severity: Severity::Allow,
18520 warn_since: None,
18521 deny_since: None,
18522 },
18523 Lint {
18524 label: "clippy::useless_vec",
18525 description: r##"Checks for usage of `vec![..]` when using `[..]` would
18526be possible."##,
18527 default_severity: Severity::Allow,
18528 warn_since: None,
18529 deny_since: None,
18530 },
18531 Lint {
18532 label: "clippy::vec_box",
18533 description: r##"Checks for usage of `Vec<Box<T>>` where T: Sized anywhere in the code.
18534Check the [Box documentation](https://doc.rust-lang.org/std/boxed/index.html) for more information."##,
18535 default_severity: Severity::Allow,
18536 warn_since: None,
18537 deny_since: None,
18538 },
18539 Lint {
18540 label: "clippy::vec_init_then_push",
18541 description: r##"Checks for calls to `push` immediately after creating a new `Vec`.
18542
18543If the `Vec` is created using `with_capacity` this will only lint if the capacity is a
18544constant and the number of pushes is greater than or equal to the initial capacity.
18545
18546If the `Vec` is extended after the initial sequence of pushes and it was default initialized
18547then this will only lint after there were at least four pushes. This number may change in
18548the future."##,
18549 default_severity: Severity::Allow,
18550 warn_since: None,
18551 deny_since: None,
18552 },
18553 Lint {
18554 label: "clippy::vec_resize_to_zero",
18555 description: r##"Finds occurrences of `Vec::resize(0, an_int)`"##,
18556 default_severity: Severity::Allow,
18557 warn_since: None,
18558 deny_since: None,
18559 },
18560 Lint {
18561 label: "clippy::verbose_bit_mask",
18562 description: r##"Checks for bit masks that can be replaced by a call
18563to `trailing_zeros`"##,
18564 default_severity: Severity::Allow,
18565 warn_since: None,
18566 deny_since: None,
18567 },
18568 Lint {
18569 label: "clippy::verbose_file_reads",
18570 description: r##"Checks for usage of File::read_to_end and File::read_to_string."##,
18571 default_severity: Severity::Allow,
18572 warn_since: None,
18573 deny_since: None,
18574 },
18575 Lint {
18576 label: "clippy::waker_clone_wake",
18577 description: r##"Checks for usage of `waker.clone().wake()`"##,
18578 default_severity: Severity::Allow,
18579 warn_since: None,
18580 deny_since: None,
18581 },
18582 Lint {
18583 label: "clippy::while_float",
18584 description: r##"Checks for while loops comparing floating point values."##,
18585 default_severity: Severity::Allow,
18586 warn_since: None,
18587 deny_since: None,
18588 },
18589 Lint {
18590 label: "clippy::while_immutable_condition",
18591 description: r##"Checks whether variables used within while loop condition
18592can be (and are) mutated in the body."##,
18593 default_severity: Severity::Allow,
18594 warn_since: None,
18595 deny_since: None,
18596 },
18597 Lint {
18598 label: "clippy::while_let_loop",
18599 description: r##"Detects `loop + match` combinations that are easier
18600written as a `while let` loop."##,
18601 default_severity: Severity::Allow,
18602 warn_since: None,
18603 deny_since: None,
18604 },
18605 Lint {
18606 label: "clippy::while_let_on_iterator",
18607 description: r##"Checks for `while let` expressions on iterators."##,
18608 default_severity: Severity::Allow,
18609 warn_since: None,
18610 deny_since: None,
18611 },
18612 Lint {
18613 label: "clippy::wildcard_dependencies",
18614 description: r##"Checks for wildcard dependencies in the `Cargo.toml`."##,
18615 default_severity: Severity::Allow,
18616 warn_since: None,
18617 deny_since: None,
18618 },
18619 Lint {
18620 label: "clippy::wildcard_enum_match_arm",
18621 description: r##"Checks for wildcard enum matches using `_`."##,
18622 default_severity: Severity::Allow,
18623 warn_since: None,
18624 deny_since: None,
18625 },
18626 Lint {
18627 label: "clippy::wildcard_imports",
18628 description: r##"Checks for wildcard imports `use _::*`."##,
18629 default_severity: Severity::Allow,
18630 warn_since: None,
18631 deny_since: None,
18632 },
18633 Lint {
18634 label: "clippy::wildcard_in_or_patterns",
18635 description: r##"Checks for wildcard pattern used with others patterns in same match arm."##,
18636 default_severity: Severity::Allow,
18637 warn_since: None,
18638 deny_since: None,
18639 },
18640 Lint {
18641 label: "clippy::write_literal",
18642 description: r##"This lint warns about the use of literals as `write!`/`writeln!` args."##,
18643 default_severity: Severity::Allow,
18644 warn_since: None,
18645 deny_since: None,
18646 },
18647 Lint {
18648 label: "clippy::write_with_newline",
18649 description: r##"This lint warns when you use `write!()` with a format
18650string that
18651ends in a newline."##,
18652 default_severity: Severity::Allow,
18653 warn_since: None,
18654 deny_since: None,
18655 },
18656 Lint {
18657 label: "clippy::writeln_empty_string",
18658 description: r##"This lint warns when you use `writeln!(buf, )` to
18659print a newline."##,
18660 default_severity: Severity::Allow,
18661 warn_since: None,
18662 deny_since: None,
18663 },
18664 Lint {
18665 label: "clippy::wrong_pub_self_convention",
18666 description: r##"Nothing. This lint has been deprecated"##,
18667 default_severity: Severity::Allow,
18668 warn_since: None,
18669 deny_since: None,
18670 },
18671 Lint {
18672 label: "clippy::wrong_self_convention",
18673 description: r##"Checks for methods with certain name prefixes or suffixes, and which
18674do not adhere to standard conventions regarding how `self` is taken.
18675The actual rules are:
18676
18677|Prefix |Postfix |`self` taken | `self` type |
18678|-------|------------|-------------------------------|--------------|
18679|`as_` | none |`&self` or `&mut self` | any |
18680|`from_`| none | none | any |
18681|`into_`| none |`self` | any |
18682|`is_` | none |`&mut self` or `&self` or none | any |
18683|`to_` | `_mut` |`&mut self` | any |
18684|`to_` | not `_mut` |`self` | `Copy` |
18685|`to_` | not `_mut` |`&self` | not `Copy` |
18686
18687Note: Clippy doesn't trigger methods with `to_` prefix in:
18688- Traits definition.
18689Clippy can not tell if a type that implements a trait is `Copy` or not.
18690- Traits implementation, when `&self` is taken.
18691The method signature is controlled by the trait and often `&self` is required for all types that implement the trait
18692(see e.g. the `std::string::ToString` trait).
18693
18694Clippy allows `Pin<&Self>` and `Pin<&mut Self>` if `&self` and `&mut self` is required.
18695
18696Please find more info here:
18697https://rust-lang.github.io/api-guidelines/naming.html#ad-hoc-conversions-follow-as_-to_-into_-conventions-c-conv"##,
18698 default_severity: Severity::Allow,
18699 warn_since: None,
18700 deny_since: None,
18701 },
18702 Lint {
18703 label: "clippy::wrong_transmute",
18704 description: r##"Checks for transmutes that can't ever be correct on any
18705architecture."##,
18706 default_severity: Severity::Allow,
18707 warn_since: None,
18708 deny_since: None,
18709 },
18710 Lint {
18711 label: "clippy::zero_divided_by_zero",
18712 description: r##"Checks for `0.0 / 0.0`."##,
18713 default_severity: Severity::Allow,
18714 warn_since: None,
18715 deny_since: None,
18716 },
18717 Lint {
18718 label: "clippy::zero_prefixed_literal",
18719 description: r##"Warns if an integral constant literal starts with `0`."##,
18720 default_severity: Severity::Allow,
18721 warn_since: None,
18722 deny_since: None,
18723 },
18724 Lint {
18725 label: "clippy::zero_ptr",
18726 description: r##"Catch casts from `0` to some pointer type"##,
18727 default_severity: Severity::Allow,
18728 warn_since: None,
18729 deny_since: None,
18730 },
18731 Lint {
18732 label: "clippy::zero_repeat_side_effects",
18733 description: r##"Checks for array or vec initializations which call a function or method,
18734but which have a repeat count of zero."##,
18735 default_severity: Severity::Allow,
18736 warn_since: None,
18737 deny_since: None,
18738 },
18739 Lint {
18740 label: "clippy::zero_sized_map_values",
18741 description: r##"Checks for maps with zero-sized value types anywhere in the code."##,
18742 default_severity: Severity::Allow,
18743 warn_since: None,
18744 deny_since: None,
18745 },
18746 Lint {
18747 label: "clippy::zombie_processes",
18748 description: r##"Looks for code that spawns a process but never calls `wait()` on the child."##,
18749 default_severity: Severity::Allow,
18750 warn_since: None,
18751 deny_since: None,
18752 },
18753 Lint {
18754 label: "clippy::zst_offset",
18755 description: r##"Checks for `offset(_)`, `wrapping_`{`add`, `sub`}, etc. on raw pointers to
18756zero-sized types"##,
18757 default_severity: Severity::Allow,
18758 warn_since: None,
18759 deny_since: None,
18760 },
18761];
18762pub const CLIPPY_LINT_GROUPS: &[LintGroup] = &[
18763 LintGroup {
18764 lint: Lint {
18765 label: "clippy::cargo",
18766 description: r##"lint group for: clippy::cargo_common_metadata, clippy::multiple_crate_versions, clippy::negative_feature_names, clippy::redundant_feature_names, clippy::wildcard_dependencies"##,
18767 default_severity: Severity::Allow,
18768 warn_since: None,
18769 deny_since: None,
18770 },
18771 children: &[
18772 "clippy::cargo_common_metadata",
18773 "clippy::multiple_crate_versions",
18774 "clippy::negative_feature_names",
18775 "clippy::redundant_feature_names",
18776 "clippy::wildcard_dependencies",
18777 ],
18778 },
18779 LintGroup {
18780 lint: Lint {
18781 label: "clippy::complexity",
18782 description: r##"lint group for: clippy::bind_instead_of_map, clippy::bool_comparison, clippy::borrow_deref_ref, clippy::borrowed_box, clippy::bytes_count_to_len, clippy::char_lit_as_u8, clippy::clone_on_copy, clippy::crosspointer_transmute, clippy::default_constructed_unit_structs, clippy::deprecated_cfg_attr, clippy::deref_addrof, clippy::derivable_impls, clippy::diverging_sub_expression, clippy::double_comparisons, clippy::double_parens, clippy::duration_subsec, clippy::excessive_nesting, clippy::explicit_auto_deref, clippy::explicit_counter_loop, clippy::explicit_write, clippy::extra_unused_lifetimes, clippy::extra_unused_type_parameters, clippy::filter_map_identity, clippy::filter_next, clippy::flat_map_identity, clippy::get_last_with_len, clippy::identity_op, clippy::implied_bounds_in_impls, clippy::inspect_for_each, clippy::int_plus_one, clippy::iter_count, clippy::iter_kv_map, clippy::let_with_type_underscore, clippy::manual_c_str_literals, clippy::manual_clamp, clippy::manual_div_ceil, clippy::manual_filter, clippy::manual_filter_map, clippy::manual_find, clippy::manual_find_map, clippy::manual_flatten, clippy::manual_hash_one, clippy::manual_inspect, clippy::manual_is_power_of_two, clippy::manual_main_separator_str, clippy::manual_range_patterns, clippy::manual_rem_euclid, clippy::manual_slice_size_calculation, clippy::manual_split_once, clippy::manual_strip, clippy::manual_swap, clippy::manual_unwrap_or, clippy::map_flatten, clippy::map_identity, clippy::match_as_ref, clippy::match_single_binding, clippy::needless_arbitrary_self_type, clippy::needless_bool, clippy::needless_bool_assign, clippy::needless_borrowed_reference, clippy::needless_if, clippy::needless_lifetimes, clippy::needless_match, clippy::needless_option_as_deref, clippy::needless_option_take, clippy::needless_question_mark, clippy::needless_splitn, clippy::needless_update, clippy::neg_cmp_op_on_partial_ord, clippy::no_effect, clippy::nonminimal_bool, clippy::only_used_in_recursion, clippy::option_as_ref_deref, clippy::option_filter_map, clippy::option_map_unit_fn, clippy::or_then_unwrap, clippy::partialeq_ne_impl, clippy::precedence, clippy::ptr_offset_with_cast, clippy::range_zip_with_len, clippy::redundant_as_str, clippy::redundant_async_block, clippy::redundant_at_rest_pattern, clippy::redundant_closure_call, clippy::redundant_guards, clippy::redundant_slicing, clippy::repeat_once, clippy::reserve_after_initialization, clippy::result_filter_map, clippy::result_map_unit_fn, clippy::search_is_some, clippy::seek_from_current, clippy::seek_to_start_instead_of_rewind, clippy::short_circuit_statement, clippy::single_element_loop, clippy::skip_while_next, clippy::string_from_utf8_as_bytes, clippy::strlen_on_c_strings, clippy::temporary_assignment, clippy::too_many_arguments, clippy::transmute_bytes_to_str, clippy::transmute_float_to_int, clippy::transmute_int_to_bool, clippy::transmute_int_to_char, clippy::transmute_int_to_float, clippy::transmute_int_to_non_zero, clippy::transmute_num_to_bytes, clippy::transmute_ptr_to_ref, clippy::transmutes_expressible_as_ptr_casts, clippy::type_complexity, clippy::unit_arg, clippy::unnecessary_cast, clippy::unnecessary_filter_map, clippy::unnecessary_find_map, clippy::unnecessary_first_then_check, clippy::unnecessary_literal_unwrap, clippy::unnecessary_map_on_constructor, clippy::unnecessary_min_or_max, clippy::unnecessary_operation, clippy::unnecessary_sort_by, clippy::unnecessary_unwrap, clippy::unneeded_wildcard_pattern, clippy::unused_format_specs, clippy::useless_asref, clippy::useless_conversion, clippy::useless_format, clippy::useless_transmute, clippy::vec_box, clippy::while_let_loop, clippy::wildcard_in_or_patterns, clippy::zero_divided_by_zero, clippy::zero_prefixed_literal"##,
18783 default_severity: Severity::Allow,
18784 warn_since: None,
18785 deny_since: None,
18786 },
18787 children: &[
18788 "clippy::bind_instead_of_map",
18789 "clippy::bool_comparison",
18790 "clippy::borrow_deref_ref",
18791 "clippy::borrowed_box",
18792 "clippy::bytes_count_to_len",
18793 "clippy::char_lit_as_u8",
18794 "clippy::clone_on_copy",
18795 "clippy::crosspointer_transmute",
18796 "clippy::default_constructed_unit_structs",
18797 "clippy::deprecated_cfg_attr",
18798 "clippy::deref_addrof",
18799 "clippy::derivable_impls",
18800 "clippy::diverging_sub_expression",
18801 "clippy::double_comparisons",
18802 "clippy::double_parens",
18803 "clippy::duration_subsec",
18804 "clippy::excessive_nesting",
18805 "clippy::explicit_auto_deref",
18806 "clippy::explicit_counter_loop",
18807 "clippy::explicit_write",
18808 "clippy::extra_unused_lifetimes",
18809 "clippy::extra_unused_type_parameters",
18810 "clippy::filter_map_identity",
18811 "clippy::filter_next",
18812 "clippy::flat_map_identity",
18813 "clippy::get_last_with_len",
18814 "clippy::identity_op",
18815 "clippy::implied_bounds_in_impls",
18816 "clippy::inspect_for_each",
18817 "clippy::int_plus_one",
18818 "clippy::iter_count",
18819 "clippy::iter_kv_map",
18820 "clippy::let_with_type_underscore",
18821 "clippy::manual_c_str_literals",
18822 "clippy::manual_clamp",
18823 "clippy::manual_div_ceil",
18824 "clippy::manual_filter",
18825 "clippy::manual_filter_map",
18826 "clippy::manual_find",
18827 "clippy::manual_find_map",
18828 "clippy::manual_flatten",
18829 "clippy::manual_hash_one",
18830 "clippy::manual_inspect",
18831 "clippy::manual_is_power_of_two",
18832 "clippy::manual_main_separator_str",
18833 "clippy::manual_range_patterns",
18834 "clippy::manual_rem_euclid",
18835 "clippy::manual_slice_size_calculation",
18836 "clippy::manual_split_once",
18837 "clippy::manual_strip",
18838 "clippy::manual_swap",
18839 "clippy::manual_unwrap_or",
18840 "clippy::map_flatten",
18841 "clippy::map_identity",
18842 "clippy::match_as_ref",
18843 "clippy::match_single_binding",
18844 "clippy::needless_arbitrary_self_type",
18845 "clippy::needless_bool",
18846 "clippy::needless_bool_assign",
18847 "clippy::needless_borrowed_reference",
18848 "clippy::needless_if",
18849 "clippy::needless_lifetimes",
18850 "clippy::needless_match",
18851 "clippy::needless_option_as_deref",
18852 "clippy::needless_option_take",
18853 "clippy::needless_question_mark",
18854 "clippy::needless_splitn",
18855 "clippy::needless_update",
18856 "clippy::neg_cmp_op_on_partial_ord",
18857 "clippy::no_effect",
18858 "clippy::nonminimal_bool",
18859 "clippy::only_used_in_recursion",
18860 "clippy::option_as_ref_deref",
18861 "clippy::option_filter_map",
18862 "clippy::option_map_unit_fn",
18863 "clippy::or_then_unwrap",
18864 "clippy::partialeq_ne_impl",
18865 "clippy::precedence",
18866 "clippy::ptr_offset_with_cast",
18867 "clippy::range_zip_with_len",
18868 "clippy::redundant_as_str",
18869 "clippy::redundant_async_block",
18870 "clippy::redundant_at_rest_pattern",
18871 "clippy::redundant_closure_call",
18872 "clippy::redundant_guards",
18873 "clippy::redundant_slicing",
18874 "clippy::repeat_once",
18875 "clippy::reserve_after_initialization",
18876 "clippy::result_filter_map",
18877 "clippy::result_map_unit_fn",
18878 "clippy::search_is_some",
18879 "clippy::seek_from_current",
18880 "clippy::seek_to_start_instead_of_rewind",
18881 "clippy::short_circuit_statement",
18882 "clippy::single_element_loop",
18883 "clippy::skip_while_next",
18884 "clippy::string_from_utf8_as_bytes",
18885 "clippy::strlen_on_c_strings",
18886 "clippy::temporary_assignment",
18887 "clippy::too_many_arguments",
18888 "clippy::transmute_bytes_to_str",
18889 "clippy::transmute_float_to_int",
18890 "clippy::transmute_int_to_bool",
18891 "clippy::transmute_int_to_char",
18892 "clippy::transmute_int_to_float",
18893 "clippy::transmute_int_to_non_zero",
18894 "clippy::transmute_num_to_bytes",
18895 "clippy::transmute_ptr_to_ref",
18896 "clippy::transmutes_expressible_as_ptr_casts",
18897 "clippy::type_complexity",
18898 "clippy::unit_arg",
18899 "clippy::unnecessary_cast",
18900 "clippy::unnecessary_filter_map",
18901 "clippy::unnecessary_find_map",
18902 "clippy::unnecessary_first_then_check",
18903 "clippy::unnecessary_literal_unwrap",
18904 "clippy::unnecessary_map_on_constructor",
18905 "clippy::unnecessary_min_or_max",
18906 "clippy::unnecessary_operation",
18907 "clippy::unnecessary_sort_by",
18908 "clippy::unnecessary_unwrap",
18909 "clippy::unneeded_wildcard_pattern",
18910 "clippy::unused_format_specs",
18911 "clippy::useless_asref",
18912 "clippy::useless_conversion",
18913 "clippy::useless_format",
18914 "clippy::useless_transmute",
18915 "clippy::vec_box",
18916 "clippy::while_let_loop",
18917 "clippy::wildcard_in_or_patterns",
18918 "clippy::zero_divided_by_zero",
18919 "clippy::zero_prefixed_literal",
18920 ],
18921 },
18922 LintGroup {
18923 lint: Lint {
18924 label: "clippy::correctness",
18925 description: r##"lint group for: clippy::absurd_extreme_comparisons, clippy::almost_swapped, clippy::approx_constant, clippy::async_yields_async, clippy::bad_bit_mask, clippy::cast_slice_different_sizes, clippy::deprecated_semver, clippy::derive_ord_xor_partial_ord, clippy::derived_hash_with_manual_eq, clippy::eager_transmute, clippy::enum_clike_unportable_variant, clippy::eq_op, clippy::erasing_op, clippy::fn_address_comparisons, clippy::if_let_mutex, clippy::ifs_same_cond, clippy::impl_hash_borrow_with_str_and_bytes, clippy::impossible_comparisons, clippy::ineffective_bit_mask, clippy::infinite_iter, clippy::inherent_to_string_shadow_display, clippy::inline_fn_without_body, clippy::invalid_null_ptr_usage, clippy::invalid_regex, clippy::inverted_saturating_sub, clippy::invisible_characters, clippy::iter_next_loop, clippy::iter_skip_zero, clippy::iterator_step_by_zero, clippy::let_underscore_lock, clippy::lint_groups_priority, clippy::match_str_case_mismatch, clippy::mem_replace_with_uninit, clippy::min_max, clippy::mistyped_literal_suffixes, clippy::modulo_one, clippy::mut_from_ref, clippy::never_loop, clippy::non_octal_unix_permissions, clippy::nonsensical_open_options, clippy::not_unsafe_ptr_arg_deref, clippy::option_env_unwrap, clippy::out_of_bounds_indexing, clippy::overly_complex_bool_expr, clippy::panicking_overflow_checks, clippy::panicking_unwrap, clippy::possible_missing_comma, clippy::read_line_without_trim, clippy::recursive_format_impl, clippy::redundant_comparisons, clippy::redundant_locals, clippy::reversed_empty_ranges, clippy::self_assignment, clippy::serde_api_misuse, clippy::size_of_in_element_count, clippy::suspicious_splitn, clippy::transmute_null_to_fn, clippy::transmuting_null, clippy::uninit_assumed_init, clippy::uninit_vec, clippy::unit_cmp, clippy::unit_hash, clippy::unit_return_expecting_ord, clippy::unsound_collection_transmute, clippy::unused_io_amount, clippy::useless_attribute, clippy::vec_resize_to_zero, clippy::while_immutable_condition, clippy::wrong_transmute, clippy::zst_offset"##,
18926 default_severity: Severity::Allow,
18927 warn_since: None,
18928 deny_since: None,
18929 },
18930 children: &[
18931 "clippy::absurd_extreme_comparisons",
18932 "clippy::almost_swapped",
18933 "clippy::approx_constant",
18934 "clippy::async_yields_async",
18935 "clippy::bad_bit_mask",
18936 "clippy::cast_slice_different_sizes",
18937 "clippy::deprecated_semver",
18938 "clippy::derive_ord_xor_partial_ord",
18939 "clippy::derived_hash_with_manual_eq",
18940 "clippy::eager_transmute",
18941 "clippy::enum_clike_unportable_variant",
18942 "clippy::eq_op",
18943 "clippy::erasing_op",
18944 "clippy::fn_address_comparisons",
18945 "clippy::if_let_mutex",
18946 "clippy::ifs_same_cond",
18947 "clippy::impl_hash_borrow_with_str_and_bytes",
18948 "clippy::impossible_comparisons",
18949 "clippy::ineffective_bit_mask",
18950 "clippy::infinite_iter",
18951 "clippy::inherent_to_string_shadow_display",
18952 "clippy::inline_fn_without_body",
18953 "clippy::invalid_null_ptr_usage",
18954 "clippy::invalid_regex",
18955 "clippy::inverted_saturating_sub",
18956 "clippy::invisible_characters",
18957 "clippy::iter_next_loop",
18958 "clippy::iter_skip_zero",
18959 "clippy::iterator_step_by_zero",
18960 "clippy::let_underscore_lock",
18961 "clippy::lint_groups_priority",
18962 "clippy::match_str_case_mismatch",
18963 "clippy::mem_replace_with_uninit",
18964 "clippy::min_max",
18965 "clippy::mistyped_literal_suffixes",
18966 "clippy::modulo_one",
18967 "clippy::mut_from_ref",
18968 "clippy::never_loop",
18969 "clippy::non_octal_unix_permissions",
18970 "clippy::nonsensical_open_options",
18971 "clippy::not_unsafe_ptr_arg_deref",
18972 "clippy::option_env_unwrap",
18973 "clippy::out_of_bounds_indexing",
18974 "clippy::overly_complex_bool_expr",
18975 "clippy::panicking_overflow_checks",
18976 "clippy::panicking_unwrap",
18977 "clippy::possible_missing_comma",
18978 "clippy::read_line_without_trim",
18979 "clippy::recursive_format_impl",
18980 "clippy::redundant_comparisons",
18981 "clippy::redundant_locals",
18982 "clippy::reversed_empty_ranges",
18983 "clippy::self_assignment",
18984 "clippy::serde_api_misuse",
18985 "clippy::size_of_in_element_count",
18986 "clippy::suspicious_splitn",
18987 "clippy::transmute_null_to_fn",
18988 "clippy::transmuting_null",
18989 "clippy::uninit_assumed_init",
18990 "clippy::uninit_vec",
18991 "clippy::unit_cmp",
18992 "clippy::unit_hash",
18993 "clippy::unit_return_expecting_ord",
18994 "clippy::unsound_collection_transmute",
18995 "clippy::unused_io_amount",
18996 "clippy::useless_attribute",
18997 "clippy::vec_resize_to_zero",
18998 "clippy::while_immutable_condition",
18999 "clippy::wrong_transmute",
19000 "clippy::zst_offset",
19001 ],
19002 },
19003 LintGroup {
19004 lint: Lint {
19005 label: "clippy::deprecated",
19006 description: r##"lint group for: clippy::assign_ops, clippy::extend_from_slice, clippy::misaligned_transmute, clippy::pub_enum_variant_names, clippy::range_step_by_zero, clippy::regex_macro, clippy::replace_consts, clippy::should_assert_eq, clippy::unsafe_vector_initialization, clippy::unstable_as_mut_slice, clippy::unstable_as_slice, clippy::unused_collect, clippy::wrong_pub_self_convention"##,
19007 default_severity: Severity::Allow,
19008 warn_since: None,
19009 deny_since: None,
19010 },
19011 children: &[
19012 "clippy::assign_ops",
19013 "clippy::extend_from_slice",
19014 "clippy::misaligned_transmute",
19015 "clippy::pub_enum_variant_names",
19016 "clippy::range_step_by_zero",
19017 "clippy::regex_macro",
19018 "clippy::replace_consts",
19019 "clippy::should_assert_eq",
19020 "clippy::unsafe_vector_initialization",
19021 "clippy::unstable_as_mut_slice",
19022 "clippy::unstable_as_slice",
19023 "clippy::unused_collect",
19024 "clippy::wrong_pub_self_convention",
19025 ],
19026 },
19027 LintGroup {
19028 lint: Lint {
19029 label: "clippy::nursery",
19030 description: r##"lint group for: clippy::as_ptr_cast_mut, clippy::branches_sharing_code, clippy::clear_with_drain, clippy::cognitive_complexity, clippy::collection_is_never_read, clippy::debug_assert_with_mut_call, clippy::derive_partial_eq_without_eq, clippy::equatable_if_let, clippy::fallible_impl_from, clippy::future_not_send, clippy::imprecise_flops, clippy::iter_on_empty_collections, clippy::iter_on_single_items, clippy::iter_with_drain, clippy::large_stack_frames, clippy::missing_const_for_fn, clippy::mutex_integer, clippy::needless_collect, clippy::needless_pass_by_ref_mut, clippy::non_send_fields_in_send_ty, clippy::nonstandard_macro_braces, clippy::option_if_let_else, clippy::or_fun_call, clippy::path_buf_push_overwrite, clippy::read_zero_byte_vec, clippy::redundant_clone, clippy::redundant_pub_crate, clippy::set_contains_or_insert, clippy::significant_drop_in_scrutinee, clippy::significant_drop_tightening, clippy::string_lit_as_bytes, clippy::suboptimal_flops, clippy::suspicious_operation_groupings, clippy::trailing_empty_array, clippy::trait_duplication_in_bounds, clippy::transmute_undefined_repr, clippy::trivial_regex, clippy::tuple_array_conversions, clippy::type_repetition_in_bounds, clippy::uninhabited_references, clippy::unnecessary_struct_initialization, clippy::unused_peekable, clippy::unused_rounding, clippy::use_self, clippy::useless_let_if_seq, clippy::while_float"##,
19031 default_severity: Severity::Allow,
19032 warn_since: None,
19033 deny_since: None,
19034 },
19035 children: &[
19036 "clippy::as_ptr_cast_mut",
19037 "clippy::branches_sharing_code",
19038 "clippy::clear_with_drain",
19039 "clippy::cognitive_complexity",
19040 "clippy::collection_is_never_read",
19041 "clippy::debug_assert_with_mut_call",
19042 "clippy::derive_partial_eq_without_eq",
19043 "clippy::equatable_if_let",
19044 "clippy::fallible_impl_from",
19045 "clippy::future_not_send",
19046 "clippy::imprecise_flops",
19047 "clippy::iter_on_empty_collections",
19048 "clippy::iter_on_single_items",
19049 "clippy::iter_with_drain",
19050 "clippy::large_stack_frames",
19051 "clippy::missing_const_for_fn",
19052 "clippy::mutex_integer",
19053 "clippy::needless_collect",
19054 "clippy::needless_pass_by_ref_mut",
19055 "clippy::non_send_fields_in_send_ty",
19056 "clippy::nonstandard_macro_braces",
19057 "clippy::option_if_let_else",
19058 "clippy::or_fun_call",
19059 "clippy::path_buf_push_overwrite",
19060 "clippy::read_zero_byte_vec",
19061 "clippy::redundant_clone",
19062 "clippy::redundant_pub_crate",
19063 "clippy::set_contains_or_insert",
19064 "clippy::significant_drop_in_scrutinee",
19065 "clippy::significant_drop_tightening",
19066 "clippy::string_lit_as_bytes",
19067 "clippy::suboptimal_flops",
19068 "clippy::suspicious_operation_groupings",
19069 "clippy::trailing_empty_array",
19070 "clippy::trait_duplication_in_bounds",
19071 "clippy::transmute_undefined_repr",
19072 "clippy::trivial_regex",
19073 "clippy::tuple_array_conversions",
19074 "clippy::type_repetition_in_bounds",
19075 "clippy::uninhabited_references",
19076 "clippy::unnecessary_struct_initialization",
19077 "clippy::unused_peekable",
19078 "clippy::unused_rounding",
19079 "clippy::use_self",
19080 "clippy::useless_let_if_seq",
19081 "clippy::while_float",
19082 ],
19083 },
19084 LintGroup {
19085 lint: Lint {
19086 label: "clippy::pedantic",
19087 description: r##"lint group for: clippy::assigning_clones, clippy::bool_to_int_with_if, clippy::borrow_as_ptr, clippy::case_sensitive_file_extension_comparisons, clippy::cast_lossless, clippy::cast_possible_truncation, clippy::cast_possible_wrap, clippy::cast_precision_loss, clippy::cast_ptr_alignment, clippy::cast_sign_loss, clippy::checked_conversions, clippy::cloned_instead_of_copied, clippy::copy_iterator, clippy::default_trait_access, clippy::doc_link_with_quotes, clippy::doc_markdown, clippy::empty_enum, clippy::enum_glob_use, clippy::expl_impl_clone_on_copy, clippy::explicit_deref_methods, clippy::explicit_into_iter_loop, clippy::explicit_iter_loop, clippy::filter_map_next, clippy::flat_map_option, clippy::float_cmp, clippy::fn_params_excessive_bools, clippy::from_iter_instead_of_collect, clippy::if_not_else, clippy::ignored_unit_patterns, clippy::implicit_clone, clippy::implicit_hasher, clippy::inconsistent_struct_constructor, clippy::index_refutable_slice, clippy::inefficient_to_string, clippy::inline_always, clippy::into_iter_without_iter, clippy::invalid_upcast_comparisons, clippy::items_after_statements, clippy::iter_filter_is_ok, clippy::iter_filter_is_some, clippy::iter_not_returning_iterator, clippy::iter_without_into_iter, clippy::large_digit_groups, clippy::large_futures, clippy::large_stack_arrays, clippy::large_types_passed_by_value, clippy::linkedlist, clippy::macro_use_imports, clippy::manual_assert, clippy::manual_instant_elapsed, clippy::manual_is_variant_and, clippy::manual_let_else, clippy::manual_ok_or, clippy::manual_string_new, clippy::many_single_char_names, clippy::map_unwrap_or, clippy::match_bool, clippy::match_on_vec_items, clippy::match_same_arms, clippy::match_wild_err_arm, clippy::match_wildcard_for_single_variants, clippy::maybe_infinite_iter, clippy::mismatching_type_param_order, clippy::missing_errors_doc, clippy::missing_fields_in_debug, clippy::missing_panics_doc, clippy::module_name_repetitions, clippy::must_use_candidate, clippy::mut_mut, clippy::naive_bytecount, clippy::needless_bitwise_bool, clippy::needless_continue, clippy::needless_for_each, clippy::needless_pass_by_value, clippy::needless_raw_string_hashes, clippy::no_effect_underscore_binding, clippy::no_mangle_with_rust_abi, clippy::option_as_ref_cloned, clippy::option_option, clippy::ptr_as_ptr, clippy::ptr_cast_constness, clippy::pub_underscore_fields, clippy::range_minus_one, clippy::range_plus_one, clippy::redundant_closure_for_method_calls, clippy::redundant_else, clippy::ref_as_ptr, clippy::ref_binding_to_reference, clippy::ref_option, clippy::ref_option_ref, clippy::return_self_not_must_use, clippy::same_functions_in_if_condition, clippy::semicolon_if_nothing_returned, clippy::should_panic_without_expect, clippy::similar_names, clippy::single_char_pattern, clippy::single_match_else, clippy::stable_sort_primitive, clippy::str_split_at_newline, clippy::string_add_assign, clippy::struct_excessive_bools, clippy::struct_field_names, clippy::too_many_lines, clippy::transmute_ptr_to_ptr, clippy::trivially_copy_pass_by_ref, clippy::unchecked_duration_subtraction, clippy::unicode_not_nfc, clippy::uninlined_format_args, clippy::unnecessary_box_returns, clippy::unnecessary_join, clippy::unnecessary_wraps, clippy::unnested_or_patterns, clippy::unreadable_literal, clippy::unsafe_derive_deserialize, clippy::unused_async, clippy::unused_self, clippy::used_underscore_binding, clippy::used_underscore_items, clippy::verbose_bit_mask, clippy::wildcard_imports, clippy::zero_sized_map_values"##,
19088 default_severity: Severity::Allow,
19089 warn_since: None,
19090 deny_since: None,
19091 },
19092 children: &[
19093 "clippy::assigning_clones",
19094 "clippy::bool_to_int_with_if",
19095 "clippy::borrow_as_ptr",
19096 "clippy::case_sensitive_file_extension_comparisons",
19097 "clippy::cast_lossless",
19098 "clippy::cast_possible_truncation",
19099 "clippy::cast_possible_wrap",
19100 "clippy::cast_precision_loss",
19101 "clippy::cast_ptr_alignment",
19102 "clippy::cast_sign_loss",
19103 "clippy::checked_conversions",
19104 "clippy::cloned_instead_of_copied",
19105 "clippy::copy_iterator",
19106 "clippy::default_trait_access",
19107 "clippy::doc_link_with_quotes",
19108 "clippy::doc_markdown",
19109 "clippy::empty_enum",
19110 "clippy::enum_glob_use",
19111 "clippy::expl_impl_clone_on_copy",
19112 "clippy::explicit_deref_methods",
19113 "clippy::explicit_into_iter_loop",
19114 "clippy::explicit_iter_loop",
19115 "clippy::filter_map_next",
19116 "clippy::flat_map_option",
19117 "clippy::float_cmp",
19118 "clippy::fn_params_excessive_bools",
19119 "clippy::from_iter_instead_of_collect",
19120 "clippy::if_not_else",
19121 "clippy::ignored_unit_patterns",
19122 "clippy::implicit_clone",
19123 "clippy::implicit_hasher",
19124 "clippy::inconsistent_struct_constructor",
19125 "clippy::index_refutable_slice",
19126 "clippy::inefficient_to_string",
19127 "clippy::inline_always",
19128 "clippy::into_iter_without_iter",
19129 "clippy::invalid_upcast_comparisons",
19130 "clippy::items_after_statements",
19131 "clippy::iter_filter_is_ok",
19132 "clippy::iter_filter_is_some",
19133 "clippy::iter_not_returning_iterator",
19134 "clippy::iter_without_into_iter",
19135 "clippy::large_digit_groups",
19136 "clippy::large_futures",
19137 "clippy::large_stack_arrays",
19138 "clippy::large_types_passed_by_value",
19139 "clippy::linkedlist",
19140 "clippy::macro_use_imports",
19141 "clippy::manual_assert",
19142 "clippy::manual_instant_elapsed",
19143 "clippy::manual_is_variant_and",
19144 "clippy::manual_let_else",
19145 "clippy::manual_ok_or",
19146 "clippy::manual_string_new",
19147 "clippy::many_single_char_names",
19148 "clippy::map_unwrap_or",
19149 "clippy::match_bool",
19150 "clippy::match_on_vec_items",
19151 "clippy::match_same_arms",
19152 "clippy::match_wild_err_arm",
19153 "clippy::match_wildcard_for_single_variants",
19154 "clippy::maybe_infinite_iter",
19155 "clippy::mismatching_type_param_order",
19156 "clippy::missing_errors_doc",
19157 "clippy::missing_fields_in_debug",
19158 "clippy::missing_panics_doc",
19159 "clippy::module_name_repetitions",
19160 "clippy::must_use_candidate",
19161 "clippy::mut_mut",
19162 "clippy::naive_bytecount",
19163 "clippy::needless_bitwise_bool",
19164 "clippy::needless_continue",
19165 "clippy::needless_for_each",
19166 "clippy::needless_pass_by_value",
19167 "clippy::needless_raw_string_hashes",
19168 "clippy::no_effect_underscore_binding",
19169 "clippy::no_mangle_with_rust_abi",
19170 "clippy::option_as_ref_cloned",
19171 "clippy::option_option",
19172 "clippy::ptr_as_ptr",
19173 "clippy::ptr_cast_constness",
19174 "clippy::pub_underscore_fields",
19175 "clippy::range_minus_one",
19176 "clippy::range_plus_one",
19177 "clippy::redundant_closure_for_method_calls",
19178 "clippy::redundant_else",
19179 "clippy::ref_as_ptr",
19180 "clippy::ref_binding_to_reference",
19181 "clippy::ref_option",
19182 "clippy::ref_option_ref",
19183 "clippy::return_self_not_must_use",
19184 "clippy::same_functions_in_if_condition",
19185 "clippy::semicolon_if_nothing_returned",
19186 "clippy::should_panic_without_expect",
19187 "clippy::similar_names",
19188 "clippy::single_char_pattern",
19189 "clippy::single_match_else",
19190 "clippy::stable_sort_primitive",
19191 "clippy::str_split_at_newline",
19192 "clippy::string_add_assign",
19193 "clippy::struct_excessive_bools",
19194 "clippy::struct_field_names",
19195 "clippy::too_many_lines",
19196 "clippy::transmute_ptr_to_ptr",
19197 "clippy::trivially_copy_pass_by_ref",
19198 "clippy::unchecked_duration_subtraction",
19199 "clippy::unicode_not_nfc",
19200 "clippy::uninlined_format_args",
19201 "clippy::unnecessary_box_returns",
19202 "clippy::unnecessary_join",
19203 "clippy::unnecessary_wraps",
19204 "clippy::unnested_or_patterns",
19205 "clippy::unreadable_literal",
19206 "clippy::unsafe_derive_deserialize",
19207 "clippy::unused_async",
19208 "clippy::unused_self",
19209 "clippy::used_underscore_binding",
19210 "clippy::used_underscore_items",
19211 "clippy::verbose_bit_mask",
19212 "clippy::wildcard_imports",
19213 "clippy::zero_sized_map_values",
19214 ],
19215 },
19216 LintGroup {
19217 lint: Lint {
19218 label: "clippy::perf",
19219 description: r##"lint group for: clippy::box_collection, clippy::boxed_local, clippy::cmp_owned, clippy::collapsible_str_replace, clippy::drain_collect, clippy::expect_fun_call, clippy::extend_with_drain, clippy::format_collect, clippy::format_in_format_args, clippy::iter_overeager_cloned, clippy::large_const_arrays, clippy::large_enum_variant, clippy::manual_memcpy, clippy::manual_retain, clippy::manual_str_repeat, clippy::manual_try_fold, clippy::map_entry, clippy::missing_const_for_thread_local, clippy::missing_spin_loop, clippy::readonly_write_lock, clippy::redundant_allocation, clippy::result_large_err, clippy::slow_vector_initialization, clippy::to_string_in_format_args, clippy::unnecessary_to_owned, clippy::useless_vec, clippy::vec_init_then_push, clippy::waker_clone_wake"##,
19220 default_severity: Severity::Allow,
19221 warn_since: None,
19222 deny_since: None,
19223 },
19224 children: &[
19225 "clippy::box_collection",
19226 "clippy::boxed_local",
19227 "clippy::cmp_owned",
19228 "clippy::collapsible_str_replace",
19229 "clippy::drain_collect",
19230 "clippy::expect_fun_call",
19231 "clippy::extend_with_drain",
19232 "clippy::format_collect",
19233 "clippy::format_in_format_args",
19234 "clippy::iter_overeager_cloned",
19235 "clippy::large_const_arrays",
19236 "clippy::large_enum_variant",
19237 "clippy::manual_memcpy",
19238 "clippy::manual_retain",
19239 "clippy::manual_str_repeat",
19240 "clippy::manual_try_fold",
19241 "clippy::map_entry",
19242 "clippy::missing_const_for_thread_local",
19243 "clippy::missing_spin_loop",
19244 "clippy::readonly_write_lock",
19245 "clippy::redundant_allocation",
19246 "clippy::result_large_err",
19247 "clippy::slow_vector_initialization",
19248 "clippy::to_string_in_format_args",
19249 "clippy::unnecessary_to_owned",
19250 "clippy::useless_vec",
19251 "clippy::vec_init_then_push",
19252 "clippy::waker_clone_wake",
19253 ],
19254 },
19255 LintGroup {
19256 lint: Lint {
19257 label: "clippy::restriction",
19258 description: r##"lint group for: clippy::absolute_paths, clippy::alloc_instead_of_core, clippy::allow_attributes, clippy::allow_attributes_without_reason, clippy::arithmetic_side_effects, clippy::as_conversions, clippy::as_underscore, clippy::assertions_on_result_states, clippy::big_endian_bytes, clippy::cfg_not_test, clippy::clone_on_ref_ptr, clippy::create_dir, clippy::dbg_macro, clippy::decimal_literal_representation, clippy::default_numeric_fallback, clippy::default_union_representation, clippy::deref_by_slicing, clippy::disallowed_script_idents, clippy::else_if_without_else, clippy::empty_drop, clippy::empty_enum_variants_with_brackets, clippy::empty_structs_with_brackets, clippy::error_impl_error, clippy::exhaustive_enums, clippy::exhaustive_structs, clippy::exit, clippy::expect_used, clippy::field_scoped_visibility_modifiers, clippy::filetype_is_file, clippy::float_arithmetic, clippy::float_cmp_const, clippy::fn_to_numeric_cast_any, clippy::format_push_string, clippy::get_unwrap, clippy::host_endian_bytes, clippy::if_then_some_else_none, clippy::impl_trait_in_params, clippy::implicit_return, clippy::indexing_slicing, clippy::infinite_loop, clippy::inline_asm_x86_att_syntax, clippy::inline_asm_x86_intel_syntax, clippy::integer_division, clippy::integer_division_remainder_used, clippy::iter_over_hash_type, clippy::large_include_file, clippy::let_underscore_must_use, clippy::let_underscore_untyped, clippy::little_endian_bytes, clippy::lossy_float_literal, clippy::map_err_ignore, clippy::mem_forget, clippy::min_ident_chars, clippy::missing_assert_message, clippy::missing_asserts_for_indexing, clippy::missing_docs_in_private_items, clippy::missing_inline_in_public_items, clippy::missing_trait_methods, clippy::mixed_read_write_in_expression, clippy::mod_module_files, clippy::modulo_arithmetic, clippy::multiple_inherent_impl, clippy::multiple_unsafe_ops_per_block, clippy::mutex_atomic, clippy::needless_raw_strings, clippy::non_ascii_literal, clippy::non_zero_suggestions, clippy::panic, clippy::panic_in_result_fn, clippy::partial_pub_fields, clippy::pathbuf_init_then_push, clippy::pattern_type_mismatch, clippy::print_stderr, clippy::print_stdout, clippy::pub_use, clippy::pub_with_shorthand, clippy::pub_without_shorthand, clippy::question_mark_used, clippy::rc_buffer, clippy::rc_mutex, clippy::redundant_type_annotations, clippy::ref_patterns, clippy::renamed_function_params, clippy::rest_pat_in_fully_bound_structs, clippy::same_name_method, clippy::self_named_module_files, clippy::semicolon_inside_block, clippy::semicolon_outside_block, clippy::separated_literal_suffix, clippy::shadow_reuse, clippy::shadow_same, clippy::shadow_unrelated, clippy::single_call_fn, clippy::single_char_lifetime_names, clippy::std_instead_of_alloc, clippy::std_instead_of_core, clippy::str_to_string, clippy::string_add, clippy::string_lit_chars_any, clippy::string_slice, clippy::string_to_string, clippy::suspicious_xor_used_as_pow, clippy::tests_outside_test_module, clippy::todo, clippy::try_err, clippy::undocumented_unsafe_blocks, clippy::unimplemented, clippy::unnecessary_safety_comment, clippy::unnecessary_safety_doc, clippy::unnecessary_self_imports, clippy::unneeded_field_pattern, clippy::unreachable, clippy::unseparated_literal_suffix, clippy::unused_result_ok, clippy::unused_trait_names, clippy::unwrap_in_result, clippy::unwrap_used, clippy::use_debug, clippy::verbose_file_reads, clippy::wildcard_enum_match_arm"##,
19259 default_severity: Severity::Allow,
19260 warn_since: None,
19261 deny_since: None,
19262 },
19263 children: &[
19264 "clippy::absolute_paths",
19265 "clippy::alloc_instead_of_core",
19266 "clippy::allow_attributes",
19267 "clippy::allow_attributes_without_reason",
19268 "clippy::arithmetic_side_effects",
19269 "clippy::as_conversions",
19270 "clippy::as_underscore",
19271 "clippy::assertions_on_result_states",
19272 "clippy::big_endian_bytes",
19273 "clippy::cfg_not_test",
19274 "clippy::clone_on_ref_ptr",
19275 "clippy::create_dir",
19276 "clippy::dbg_macro",
19277 "clippy::decimal_literal_representation",
19278 "clippy::default_numeric_fallback",
19279 "clippy::default_union_representation",
19280 "clippy::deref_by_slicing",
19281 "clippy::disallowed_script_idents",
19282 "clippy::else_if_without_else",
19283 "clippy::empty_drop",
19284 "clippy::empty_enum_variants_with_brackets",
19285 "clippy::empty_structs_with_brackets",
19286 "clippy::error_impl_error",
19287 "clippy::exhaustive_enums",
19288 "clippy::exhaustive_structs",
19289 "clippy::exit",
19290 "clippy::expect_used",
19291 "clippy::field_scoped_visibility_modifiers",
19292 "clippy::filetype_is_file",
19293 "clippy::float_arithmetic",
19294 "clippy::float_cmp_const",
19295 "clippy::fn_to_numeric_cast_any",
19296 "clippy::format_push_string",
19297 "clippy::get_unwrap",
19298 "clippy::host_endian_bytes",
19299 "clippy::if_then_some_else_none",
19300 "clippy::impl_trait_in_params",
19301 "clippy::implicit_return",
19302 "clippy::indexing_slicing",
19303 "clippy::infinite_loop",
19304 "clippy::inline_asm_x86_att_syntax",
19305 "clippy::inline_asm_x86_intel_syntax",
19306 "clippy::integer_division",
19307 "clippy::integer_division_remainder_used",
19308 "clippy::iter_over_hash_type",
19309 "clippy::large_include_file",
19310 "clippy::let_underscore_must_use",
19311 "clippy::let_underscore_untyped",
19312 "clippy::little_endian_bytes",
19313 "clippy::lossy_float_literal",
19314 "clippy::map_err_ignore",
19315 "clippy::mem_forget",
19316 "clippy::min_ident_chars",
19317 "clippy::missing_assert_message",
19318 "clippy::missing_asserts_for_indexing",
19319 "clippy::missing_docs_in_private_items",
19320 "clippy::missing_inline_in_public_items",
19321 "clippy::missing_trait_methods",
19322 "clippy::mixed_read_write_in_expression",
19323 "clippy::mod_module_files",
19324 "clippy::modulo_arithmetic",
19325 "clippy::multiple_inherent_impl",
19326 "clippy::multiple_unsafe_ops_per_block",
19327 "clippy::mutex_atomic",
19328 "clippy::needless_raw_strings",
19329 "clippy::non_ascii_literal",
19330 "clippy::non_zero_suggestions",
19331 "clippy::panic",
19332 "clippy::panic_in_result_fn",
19333 "clippy::partial_pub_fields",
19334 "clippy::pathbuf_init_then_push",
19335 "clippy::pattern_type_mismatch",
19336 "clippy::print_stderr",
19337 "clippy::print_stdout",
19338 "clippy::pub_use",
19339 "clippy::pub_with_shorthand",
19340 "clippy::pub_without_shorthand",
19341 "clippy::question_mark_used",
19342 "clippy::rc_buffer",
19343 "clippy::rc_mutex",
19344 "clippy::redundant_type_annotations",
19345 "clippy::ref_patterns",
19346 "clippy::renamed_function_params",
19347 "clippy::rest_pat_in_fully_bound_structs",
19348 "clippy::same_name_method",
19349 "clippy::self_named_module_files",
19350 "clippy::semicolon_inside_block",
19351 "clippy::semicolon_outside_block",
19352 "clippy::separated_literal_suffix",
19353 "clippy::shadow_reuse",
19354 "clippy::shadow_same",
19355 "clippy::shadow_unrelated",
19356 "clippy::single_call_fn",
19357 "clippy::single_char_lifetime_names",
19358 "clippy::std_instead_of_alloc",
19359 "clippy::std_instead_of_core",
19360 "clippy::str_to_string",
19361 "clippy::string_add",
19362 "clippy::string_lit_chars_any",
19363 "clippy::string_slice",
19364 "clippy::string_to_string",
19365 "clippy::suspicious_xor_used_as_pow",
19366 "clippy::tests_outside_test_module",
19367 "clippy::todo",
19368 "clippy::try_err",
19369 "clippy::undocumented_unsafe_blocks",
19370 "clippy::unimplemented",
19371 "clippy::unnecessary_safety_comment",
19372 "clippy::unnecessary_safety_doc",
19373 "clippy::unnecessary_self_imports",
19374 "clippy::unneeded_field_pattern",
19375 "clippy::unreachable",
19376 "clippy::unseparated_literal_suffix",
19377 "clippy::unused_result_ok",
19378 "clippy::unused_trait_names",
19379 "clippy::unwrap_in_result",
19380 "clippy::unwrap_used",
19381 "clippy::use_debug",
19382 "clippy::verbose_file_reads",
19383 "clippy::wildcard_enum_match_arm",
19384 ],
19385 },
19386 LintGroup {
19387 lint: Lint {
19388 label: "clippy::style",
19389 description: r##"lint group for: clippy::assertions_on_constants, clippy::assign_op_pattern, clippy::blocks_in_conditions, clippy::bool_assert_comparison, clippy::borrow_interior_mutable_const, clippy::box_default, clippy::builtin_type_shadow, clippy::byte_char_slices, clippy::bytes_nth, clippy::chars_last_cmp, clippy::chars_next_cmp, clippy::cmp_null, clippy::collapsible_else_if, clippy::collapsible_if, clippy::collapsible_match, clippy::comparison_chain, clippy::comparison_to_empty, clippy::declare_interior_mutable_const, clippy::default_instead_of_iter_empty, clippy::disallowed_macros, clippy::disallowed_methods, clippy::disallowed_names, clippy::disallowed_types, clippy::doc_lazy_continuation, clippy::double_must_use, clippy::double_neg, clippy::duplicate_underscore_argument, clippy::enum_variant_names, clippy::err_expect, clippy::excessive_precision, clippy::field_reassign_with_default, clippy::filter_map_bool_then, clippy::fn_to_numeric_cast, clippy::fn_to_numeric_cast_with_truncation, clippy::for_kv_map, clippy::from_over_into, clippy::from_str_radix_10, clippy::get_first, clippy::if_same_then_else, clippy::implicit_saturating_add, clippy::implicit_saturating_sub, clippy::inconsistent_digit_grouping, clippy::infallible_destructuring_match, clippy::inherent_to_string, clippy::init_numbered_fields, clippy::into_iter_on_ref, clippy::is_digit_ascii_radix, clippy::items_after_test_module, clippy::iter_cloned_collect, clippy::iter_next_slice, clippy::iter_nth, clippy::iter_nth_zero, clippy::iter_skip_next, clippy::just_underscores_and_digits, clippy::legacy_numeric_constants, clippy::len_without_is_empty, clippy::len_zero, clippy::let_and_return, clippy::let_unit_value, clippy::main_recursion, clippy::manual_async_fn, clippy::manual_bits, clippy::manual_is_ascii_check, clippy::manual_is_finite, clippy::manual_is_infinite, clippy::manual_map, clippy::manual_next_back, clippy::manual_non_exhaustive, clippy::manual_pattern_char_comparison, clippy::manual_range_contains, clippy::manual_rotate, clippy::manual_saturating_arithmetic, clippy::manual_while_let_some, clippy::map_clone, clippy::map_collect_result_unit, clippy::match_like_matches_macro, clippy::match_overlapping_arm, clippy::match_ref_pats, clippy::match_result_ok, clippy::mem_replace_option_with_none, clippy::mem_replace_with_default, clippy::missing_enforced_import_renames, clippy::missing_safety_doc, clippy::mixed_attributes_style, clippy::mixed_case_hex_literals, clippy::module_inception, clippy::must_use_unit, clippy::mut_mutex_lock, clippy::needless_borrow, clippy::needless_borrows_for_generic_args, clippy::needless_doctest_main, clippy::needless_else, clippy::needless_late_init, clippy::needless_parens_on_range_literals, clippy::needless_pub_self, clippy::needless_range_loop, clippy::needless_return, clippy::needless_return_with_question_mark, clippy::neg_multiply, clippy::new_ret_no_self, clippy::new_without_default, clippy::non_minimal_cfg, clippy::obfuscated_if_else, clippy::ok_expect, clippy::op_ref, clippy::option_map_or_err_ok, clippy::option_map_or_none, clippy::partialeq_to_none, clippy::print_literal, clippy::print_with_newline, clippy::println_empty_string, clippy::ptr_arg, clippy::ptr_eq, clippy::question_mark, clippy::redundant_closure, clippy::redundant_field_names, clippy::redundant_pattern, clippy::redundant_pattern_matching, clippy::redundant_static_lifetimes, clippy::result_map_or_into_option, clippy::result_unit_err, clippy::same_item_push, clippy::self_named_constructors, clippy::should_implement_trait, clippy::single_char_add_str, clippy::single_component_path_imports, clippy::single_match, clippy::string_extend_chars, clippy::tabs_in_doc_comments, clippy::to_digit_is_some, clippy::to_string_trait_impl, clippy::too_long_first_doc_paragraph, clippy::toplevel_ref_arg, clippy::trim_split_whitespace, clippy::unnecessary_fallible_conversions, clippy::unnecessary_fold, clippy::unnecessary_lazy_evaluations, clippy::unnecessary_mut_passed, clippy::unnecessary_owned_empty_strings, clippy::unsafe_removed_from_name, clippy::unused_enumerate_index, clippy::unused_unit, clippy::unusual_byte_groupings, clippy::unwrap_or_default, clippy::upper_case_acronyms, clippy::while_let_on_iterator, clippy::write_literal, clippy::write_with_newline, clippy::writeln_empty_string, clippy::wrong_self_convention, clippy::zero_ptr"##,
19390 default_severity: Severity::Allow,
19391 warn_since: None,
19392 deny_since: None,
19393 },
19394 children: &[
19395 "clippy::assertions_on_constants",
19396 "clippy::assign_op_pattern",
19397 "clippy::blocks_in_conditions",
19398 "clippy::bool_assert_comparison",
19399 "clippy::borrow_interior_mutable_const",
19400 "clippy::box_default",
19401 "clippy::builtin_type_shadow",
19402 "clippy::byte_char_slices",
19403 "clippy::bytes_nth",
19404 "clippy::chars_last_cmp",
19405 "clippy::chars_next_cmp",
19406 "clippy::cmp_null",
19407 "clippy::collapsible_else_if",
19408 "clippy::collapsible_if",
19409 "clippy::collapsible_match",
19410 "clippy::comparison_chain",
19411 "clippy::comparison_to_empty",
19412 "clippy::declare_interior_mutable_const",
19413 "clippy::default_instead_of_iter_empty",
19414 "clippy::disallowed_macros",
19415 "clippy::disallowed_methods",
19416 "clippy::disallowed_names",
19417 "clippy::disallowed_types",
19418 "clippy::doc_lazy_continuation",
19419 "clippy::double_must_use",
19420 "clippy::double_neg",
19421 "clippy::duplicate_underscore_argument",
19422 "clippy::enum_variant_names",
19423 "clippy::err_expect",
19424 "clippy::excessive_precision",
19425 "clippy::field_reassign_with_default",
19426 "clippy::filter_map_bool_then",
19427 "clippy::fn_to_numeric_cast",
19428 "clippy::fn_to_numeric_cast_with_truncation",
19429 "clippy::for_kv_map",
19430 "clippy::from_over_into",
19431 "clippy::from_str_radix_10",
19432 "clippy::get_first",
19433 "clippy::if_same_then_else",
19434 "clippy::implicit_saturating_add",
19435 "clippy::implicit_saturating_sub",
19436 "clippy::inconsistent_digit_grouping",
19437 "clippy::infallible_destructuring_match",
19438 "clippy::inherent_to_string",
19439 "clippy::init_numbered_fields",
19440 "clippy::into_iter_on_ref",
19441 "clippy::is_digit_ascii_radix",
19442 "clippy::items_after_test_module",
19443 "clippy::iter_cloned_collect",
19444 "clippy::iter_next_slice",
19445 "clippy::iter_nth",
19446 "clippy::iter_nth_zero",
19447 "clippy::iter_skip_next",
19448 "clippy::just_underscores_and_digits",
19449 "clippy::legacy_numeric_constants",
19450 "clippy::len_without_is_empty",
19451 "clippy::len_zero",
19452 "clippy::let_and_return",
19453 "clippy::let_unit_value",
19454 "clippy::main_recursion",
19455 "clippy::manual_async_fn",
19456 "clippy::manual_bits",
19457 "clippy::manual_is_ascii_check",
19458 "clippy::manual_is_finite",
19459 "clippy::manual_is_infinite",
19460 "clippy::manual_map",
19461 "clippy::manual_next_back",
19462 "clippy::manual_non_exhaustive",
19463 "clippy::manual_pattern_char_comparison",
19464 "clippy::manual_range_contains",
19465 "clippy::manual_rotate",
19466 "clippy::manual_saturating_arithmetic",
19467 "clippy::manual_while_let_some",
19468 "clippy::map_clone",
19469 "clippy::map_collect_result_unit",
19470 "clippy::match_like_matches_macro",
19471 "clippy::match_overlapping_arm",
19472 "clippy::match_ref_pats",
19473 "clippy::match_result_ok",
19474 "clippy::mem_replace_option_with_none",
19475 "clippy::mem_replace_with_default",
19476 "clippy::missing_enforced_import_renames",
19477 "clippy::missing_safety_doc",
19478 "clippy::mixed_attributes_style",
19479 "clippy::mixed_case_hex_literals",
19480 "clippy::module_inception",
19481 "clippy::must_use_unit",
19482 "clippy::mut_mutex_lock",
19483 "clippy::needless_borrow",
19484 "clippy::needless_borrows_for_generic_args",
19485 "clippy::needless_doctest_main",
19486 "clippy::needless_else",
19487 "clippy::needless_late_init",
19488 "clippy::needless_parens_on_range_literals",
19489 "clippy::needless_pub_self",
19490 "clippy::needless_range_loop",
19491 "clippy::needless_return",
19492 "clippy::needless_return_with_question_mark",
19493 "clippy::neg_multiply",
19494 "clippy::new_ret_no_self",
19495 "clippy::new_without_default",
19496 "clippy::non_minimal_cfg",
19497 "clippy::obfuscated_if_else",
19498 "clippy::ok_expect",
19499 "clippy::op_ref",
19500 "clippy::option_map_or_err_ok",
19501 "clippy::option_map_or_none",
19502 "clippy::partialeq_to_none",
19503 "clippy::print_literal",
19504 "clippy::print_with_newline",
19505 "clippy::println_empty_string",
19506 "clippy::ptr_arg",
19507 "clippy::ptr_eq",
19508 "clippy::question_mark",
19509 "clippy::redundant_closure",
19510 "clippy::redundant_field_names",
19511 "clippy::redundant_pattern",
19512 "clippy::redundant_pattern_matching",
19513 "clippy::redundant_static_lifetimes",
19514 "clippy::result_map_or_into_option",
19515 "clippy::result_unit_err",
19516 "clippy::same_item_push",
19517 "clippy::self_named_constructors",
19518 "clippy::should_implement_trait",
19519 "clippy::single_char_add_str",
19520 "clippy::single_component_path_imports",
19521 "clippy::single_match",
19522 "clippy::string_extend_chars",
19523 "clippy::tabs_in_doc_comments",
19524 "clippy::to_digit_is_some",
19525 "clippy::to_string_trait_impl",
19526 "clippy::too_long_first_doc_paragraph",
19527 "clippy::toplevel_ref_arg",
19528 "clippy::trim_split_whitespace",
19529 "clippy::unnecessary_fallible_conversions",
19530 "clippy::unnecessary_fold",
19531 "clippy::unnecessary_lazy_evaluations",
19532 "clippy::unnecessary_mut_passed",
19533 "clippy::unnecessary_owned_empty_strings",
19534 "clippy::unsafe_removed_from_name",
19535 "clippy::unused_enumerate_index",
19536 "clippy::unused_unit",
19537 "clippy::unusual_byte_groupings",
19538 "clippy::unwrap_or_default",
19539 "clippy::upper_case_acronyms",
19540 "clippy::while_let_on_iterator",
19541 "clippy::write_literal",
19542 "clippy::write_with_newline",
19543 "clippy::writeln_empty_string",
19544 "clippy::wrong_self_convention",
19545 "clippy::zero_ptr",
19546 ],
19547 },
19548 LintGroup {
19549 lint: Lint {
19550 label: "clippy::suspicious",
19551 description: r##"lint group for: clippy::almost_complete_range, clippy::arc_with_non_send_sync, clippy::await_holding_invalid_type, clippy::await_holding_lock, clippy::await_holding_refcell_ref, clippy::blanket_clippy_restriction_lints, clippy::cast_abs_to_unsigned, clippy::cast_enum_constructor, clippy::cast_enum_truncation, clippy::cast_nan_to_int, clippy::cast_slice_from_raw_parts, clippy::const_is_empty, clippy::crate_in_macro_def, clippy::deprecated_clippy_cfg_attr, clippy::drop_non_drop, clippy::duplicate_mod, clippy::duplicated_attributes, clippy::empty_docs, clippy::empty_line_after_doc_comments, clippy::empty_line_after_outer_attr, clippy::empty_loop, clippy::float_equality_without_abs, clippy::forget_non_drop, clippy::four_forward_slashes, clippy::from_raw_with_void_ptr, clippy::incompatible_msrv, clippy::ineffective_open_options, clippy::iter_out_of_bounds, clippy::join_absolute_paths, clippy::let_underscore_future, clippy::lines_filter_map_ok, clippy::macro_metavars_in_unsafe, clippy::manual_unwrap_or_default, clippy::misnamed_getters, clippy::misrefactored_assign_op, clippy::missing_transmute_annotations, clippy::multi_assignments, clippy::multiple_bound_locations, clippy::mut_range_bound, clippy::mutable_key_type, clippy::needless_character_iteration, clippy::needless_maybe_sized, clippy::no_effect_replace, clippy::non_canonical_clone_impl, clippy::non_canonical_partial_ord_impl, clippy::octal_escapes, clippy::path_ends_with_ext, clippy::permissions_set_readonly_false, clippy::pointers_in_nomem_asm_block, clippy::print_in_format_impl, clippy::rc_clone_in_vec_init, clippy::repeat_vec_with_capacity, clippy::single_range_in_vec_init, clippy::size_of_ref, clippy::suspicious_arithmetic_impl, clippy::suspicious_assignment_formatting, clippy::suspicious_command_arg_space, clippy::suspicious_doc_comments, clippy::suspicious_else_formatting, clippy::suspicious_map, clippy::suspicious_op_assign_impl, clippy::suspicious_open_options, clippy::suspicious_to_owned, clippy::suspicious_unary_op_formatting, clippy::swap_ptr_to_ref, clippy::test_attr_in_doctest, clippy::type_id_on_box, clippy::unconditional_recursion, clippy::unnecessary_clippy_cfg, clippy::unnecessary_get_then_check, clippy::unnecessary_result_map_or_else, clippy::zero_repeat_side_effects, clippy::zombie_processes"##,
19552 default_severity: Severity::Allow,
19553 warn_since: None,
19554 deny_since: None,
19555 },
19556 children: &[
19557 "clippy::almost_complete_range",
19558 "clippy::arc_with_non_send_sync",
19559 "clippy::await_holding_invalid_type",
19560 "clippy::await_holding_lock",
19561 "clippy::await_holding_refcell_ref",
19562 "clippy::blanket_clippy_restriction_lints",
19563 "clippy::cast_abs_to_unsigned",
19564 "clippy::cast_enum_constructor",
19565 "clippy::cast_enum_truncation",
19566 "clippy::cast_nan_to_int",
19567 "clippy::cast_slice_from_raw_parts",
19568 "clippy::const_is_empty",
19569 "clippy::crate_in_macro_def",
19570 "clippy::deprecated_clippy_cfg_attr",
19571 "clippy::drop_non_drop",
19572 "clippy::duplicate_mod",
19573 "clippy::duplicated_attributes",
19574 "clippy::empty_docs",
19575 "clippy::empty_line_after_doc_comments",
19576 "clippy::empty_line_after_outer_attr",
19577 "clippy::empty_loop",
19578 "clippy::float_equality_without_abs",
19579 "clippy::forget_non_drop",
19580 "clippy::four_forward_slashes",
19581 "clippy::from_raw_with_void_ptr",
19582 "clippy::incompatible_msrv",
19583 "clippy::ineffective_open_options",
19584 "clippy::iter_out_of_bounds",
19585 "clippy::join_absolute_paths",
19586 "clippy::let_underscore_future",
19587 "clippy::lines_filter_map_ok",
19588 "clippy::macro_metavars_in_unsafe",
19589 "clippy::manual_unwrap_or_default",
19590 "clippy::misnamed_getters",
19591 "clippy::misrefactored_assign_op",
19592 "clippy::missing_transmute_annotations",
19593 "clippy::multi_assignments",
19594 "clippy::multiple_bound_locations",
19595 "clippy::mut_range_bound",
19596 "clippy::mutable_key_type",
19597 "clippy::needless_character_iteration",
19598 "clippy::needless_maybe_sized",
19599 "clippy::no_effect_replace",
19600 "clippy::non_canonical_clone_impl",
19601 "clippy::non_canonical_partial_ord_impl",
19602 "clippy::octal_escapes",
19603 "clippy::path_ends_with_ext",
19604 "clippy::permissions_set_readonly_false",
19605 "clippy::pointers_in_nomem_asm_block",
19606 "clippy::print_in_format_impl",
19607 "clippy::rc_clone_in_vec_init",
19608 "clippy::repeat_vec_with_capacity",
19609 "clippy::single_range_in_vec_init",
19610 "clippy::size_of_ref",
19611 "clippy::suspicious_arithmetic_impl",
19612 "clippy::suspicious_assignment_formatting",
19613 "clippy::suspicious_command_arg_space",
19614 "clippy::suspicious_doc_comments",
19615 "clippy::suspicious_else_formatting",
19616 "clippy::suspicious_map",
19617 "clippy::suspicious_op_assign_impl",
19618 "clippy::suspicious_open_options",
19619 "clippy::suspicious_to_owned",
19620 "clippy::suspicious_unary_op_formatting",
19621 "clippy::swap_ptr_to_ref",
19622 "clippy::test_attr_in_doctest",
19623 "clippy::type_id_on_box",
19624 "clippy::unconditional_recursion",
19625 "clippy::unnecessary_clippy_cfg",
19626 "clippy::unnecessary_get_then_check",
19627 "clippy::unnecessary_result_map_or_else",
19628 "clippy::zero_repeat_side_effects",
19629 "clippy::zombie_processes",
19630 ],
19631 },
19632];