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: "aarch64_softfloat_neon",
24 description: r##"detects code that could be affected by ABI issues on aarch64 softfloat targets"##,
25 default_severity: Severity::Error,
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: "aligned_fields_in_packed",
38 description: r##"`repr(C, align)` types nested inside `repr(C, packed)` types do not always have a C-compatible layout"##,
39 default_severity: Severity::Error,
40 warn_since: None,
41 deny_since: None,
42 },
43 Lint {
44 label: "ambiguous_associated_items",
45 description: r##"ambiguous associated items"##,
46 default_severity: Severity::Error,
47 warn_since: None,
48 deny_since: None,
49 },
50 Lint {
51 label: "ambiguous_derive_helpers",
52 description: r##"detects derive helper attributes that are ambiguous with built-in attributes"##,
53 default_severity: Severity::Warning,
54 warn_since: None,
55 deny_since: None,
56 },
57 Lint {
58 label: "ambiguous_glob_imported_traits",
59 description: r##"detects uses of ambiguously glob imported traits"##,
60 default_severity: Severity::Warning,
61 warn_since: None,
62 deny_since: None,
63 },
64 Lint {
65 label: "ambiguous_glob_imports",
66 description: r##"detects certain glob imports that require reporting an ambiguity error"##,
67 default_severity: Severity::Error,
68 warn_since: None,
69 deny_since: None,
70 },
71 Lint {
72 label: "ambiguous_glob_reexports",
73 description: r##"ambiguous glob re-exports"##,
74 default_severity: Severity::Warning,
75 warn_since: None,
76 deny_since: None,
77 },
78 Lint {
79 label: "ambiguous_import_visibilities",
80 description: r##"detects certain glob imports that require reporting an ambiguity error"##,
81 default_severity: Severity::Warning,
82 warn_since: None,
83 deny_since: None,
84 },
85 Lint {
86 label: "ambiguous_negative_literals",
87 description: r##"ambiguous negative literals operations"##,
88 default_severity: Severity::Allow,
89 warn_since: None,
90 deny_since: None,
91 },
92 Lint {
93 label: "ambiguous_panic_imports",
94 description: r##"detects ambiguous core and std panic imports"##,
95 default_severity: Severity::Warning,
96 warn_since: None,
97 deny_since: None,
98 },
99 Lint {
100 label: "ambiguous_wide_pointer_comparisons",
101 description: r##"detects ambiguous wide pointer comparisons"##,
102 default_severity: Severity::Warning,
103 warn_since: None,
104 deny_since: None,
105 },
106 Lint {
107 label: "anonymous_parameters",
108 description: r##"detects anonymous parameters"##,
109 default_severity: Severity::Warning,
110 warn_since: None,
111 deny_since: None,
112 },
113 Lint {
114 label: "arithmetic_overflow",
115 description: r##"arithmetic operation overflows"##,
116 default_severity: Severity::Error,
117 warn_since: None,
118 deny_since: None,
119 },
120 Lint {
121 label: "array_into_iter",
122 description: r##"detects calling `into_iter` on arrays in Rust 2015 and 2018"##,
123 default_severity: Severity::Warning,
124 warn_since: None,
125 deny_since: None,
126 },
127 Lint {
128 label: "asm_sub_register",
129 description: r##"using only a subset of a register for inline asm inputs"##,
130 default_severity: Severity::Warning,
131 warn_since: None,
132 deny_since: None,
133 },
134 Lint {
135 label: "async_fn_in_trait",
136 description: r##"use of `async fn` in definition of a publicly-reachable trait"##,
137 default_severity: Severity::Warning,
138 warn_since: None,
139 deny_since: None,
140 },
141 Lint {
142 label: "bad_asm_style",
143 description: r##"incorrect use of inline assembly"##,
144 default_severity: Severity::Warning,
145 warn_since: None,
146 deny_since: None,
147 },
148 Lint {
149 label: "bare_trait_objects",
150 description: r##"suggest using `dyn Trait` for trait objects"##,
151 default_severity: Severity::Warning,
152 warn_since: None,
153 deny_since: None,
154 },
155 Lint {
156 label: "binary_asm_labels",
157 description: r##"labels in inline assembly containing only 0 or 1 digits"##,
158 default_severity: Severity::Error,
159 warn_since: None,
160 deny_since: None,
161 },
162 Lint {
163 label: "bindings_with_variant_name",
164 description: r##"detects pattern bindings with the same name as one of the matched variants"##,
165 default_severity: Severity::Error,
166 warn_since: None,
167 deny_since: None,
168 },
169 Lint {
170 label: "boxed_slice_into_iter",
171 description: r##"detects calling `into_iter` on boxed slices in Rust 2015, 2018, and 2021"##,
172 default_severity: Severity::Warning,
173 warn_since: None,
174 deny_since: None,
175 },
176 Lint {
177 label: "break_with_label_and_loop",
178 description: r##"`break` expression with label and unlabeled loop as value expression"##,
179 default_severity: Severity::Warning,
180 warn_since: None,
181 deny_since: None,
182 },
183 Lint {
184 label: "c_void_returns",
185 description: r##"detects use of `c_void` as a return type"##,
186 default_severity: Severity::Warning,
187 warn_since: None,
188 deny_since: None,
189 },
190 Lint {
191 label: "clashing_extern_declarations",
192 description: r##"detects when an extern fn has been declared with the same name but different types"##,
193 default_severity: Severity::Warning,
194 warn_since: None,
195 deny_since: None,
196 },
197 Lint {
198 label: "closure_returning_async_block",
199 description: r##"closure that returns `async {}` could be rewritten as an async closure"##,
200 default_severity: Severity::Allow,
201 warn_since: None,
202 deny_since: None,
203 },
204 Lint {
205 label: "coherence_leak_check",
206 description: r##"distinct impls distinguished only by the leak-check code"##,
207 default_severity: Severity::Warning,
208 warn_since: None,
209 deny_since: None,
210 },
211 Lint {
212 label: "conflicting_repr_hints",
213 description: r##"conflicts between `#[repr(..)]` hints that were previously accepted and used in practice"##,
214 default_severity: Severity::Error,
215 warn_since: None,
216 deny_since: None,
217 },
218 Lint {
219 label: "confusable_idents",
220 description: r##"detects visually confusable pairs between identifiers"##,
221 default_severity: Severity::Warning,
222 warn_since: None,
223 deny_since: None,
224 },
225 Lint {
226 label: "const_evaluatable_unchecked",
227 description: r##"detects a generic constant is used in a type without a emitting a warning"##,
228 default_severity: Severity::Warning,
229 warn_since: None,
230 deny_since: None,
231 },
232 Lint {
233 label: "const_item_interior_mutations",
234 description: r##"checks for calls which mutates a interior mutable const-item"##,
235 default_severity: Severity::Warning,
236 warn_since: None,
237 deny_since: None,
238 },
239 Lint {
240 label: "const_item_mutation",
241 description: r##"detects attempts to mutate a `const` item"##,
242 default_severity: Severity::Warning,
243 warn_since: None,
244 deny_since: None,
245 },
246 Lint {
247 label: "dangerous_implicit_autorefs",
248 description: r##"implicit reference to a dereference of a raw pointer"##,
249 default_severity: Severity::Error,
250 warn_since: None,
251 deny_since: None,
252 },
253 Lint {
254 label: "dangling_pointers_from_locals",
255 description: r##"detects returning a pointer from a local variable"##,
256 default_severity: Severity::Warning,
257 warn_since: None,
258 deny_since: None,
259 },
260 Lint {
261 label: "dangling_pointers_from_temporaries",
262 description: r##"detects getting a pointer from a temporary"##,
263 default_severity: Severity::Warning,
264 warn_since: None,
265 deny_since: None,
266 },
267 Lint {
268 label: "dead_code",
269 description: r##"detect unused, unexported items"##,
270 default_severity: Severity::Warning,
271 warn_since: None,
272 deny_since: None,
273 },
274 Lint {
275 label: "dead_code_pub_in_binary",
276 description: r##"detect public items in executable crates that are never used"##,
277 default_severity: Severity::Allow,
278 warn_since: None,
279 deny_since: None,
280 },
281 Lint {
282 label: "default_overrides_default_fields",
283 description: r##"detect `Default` impl that should use the type's default field values"##,
284 default_severity: Severity::Error,
285 warn_since: None,
286 deny_since: None,
287 },
288 Lint {
289 label: "deprecated",
290 description: r##"detects use of deprecated items"##,
291 default_severity: Severity::Warning,
292 warn_since: None,
293 deny_since: None,
294 },
295 Lint {
296 label: "deprecated_in_future",
297 description: r##"detects use of items that will be deprecated in a future version"##,
298 default_severity: Severity::Allow,
299 warn_since: None,
300 deny_since: None,
301 },
302 Lint {
303 label: "deprecated_llvm_intrinsic",
304 description: r##"detects uses of deprecated LLVM intrinsics"##,
305 default_severity: Severity::Allow,
306 warn_since: None,
307 deny_since: None,
308 },
309 Lint {
310 label: "deprecated_safe_2024",
311 description: r##"detects unsafe functions being used as safe functions"##,
312 default_severity: Severity::Allow,
313 warn_since: None,
314 deny_since: None,
315 },
316 Lint {
317 label: "deprecated_where_clause_location",
318 description: r##"deprecated where clause location"##,
319 default_severity: Severity::Warning,
320 warn_since: None,
321 deny_since: None,
322 },
323 Lint {
324 label: "deref_into_dyn_supertrait",
325 description: r##"`Deref` implementation with a supertrait trait object for output is shadowed by trait upcasting"##,
326 default_severity: Severity::Allow,
327 warn_since: None,
328 deny_since: None,
329 },
330 Lint {
331 label: "deref_nullptr",
332 description: r##"detects when an null pointer is dereferenced"##,
333 default_severity: Severity::Error,
334 warn_since: None,
335 deny_since: None,
336 },
337 Lint {
338 label: "double_negations",
339 description: r##"detects expressions of the form `--x`"##,
340 default_severity: Severity::Warning,
341 warn_since: None,
342 deny_since: None,
343 },
344 Lint {
345 label: "drop_bounds",
346 description: r##"bounds of the form `T: Drop` are most likely incorrect"##,
347 default_severity: Severity::Warning,
348 warn_since: None,
349 deny_since: None,
350 },
351 Lint {
352 label: "dropping_copy_types",
353 description: r##"calls to `drop` and `drop_in_place` where the dropped value implements Copy"##,
354 default_severity: Severity::Warning,
355 warn_since: None,
356 deny_since: None,
357 },
358 Lint {
359 label: "dropping_references",
360 description: r##"calls to `drop` and `drop_in_place` where the dropped type is a reference instead of an owned value"##,
361 default_severity: Severity::Warning,
362 warn_since: None,
363 deny_since: None,
364 },
365 Lint {
366 label: "duplicate_features",
367 description: r##"duplicate features found in crate-level `#[feature]` directives"##,
368 default_severity: Severity::Error,
369 warn_since: None,
370 deny_since: None,
371 },
372 Lint {
373 label: "duplicate_macro_attributes",
374 description: r##"duplicated attribute"##,
375 default_severity: Severity::Warning,
376 warn_since: None,
377 deny_since: None,
378 },
379 Lint {
380 label: "duplicate_tools",
381 description: r##"duplicate tools found in crate-level `#[register_tools]` directives"##,
382 default_severity: Severity::Error,
383 warn_since: None,
384 deny_since: None,
385 },
386 Lint {
387 label: "dyn_drop",
388 description: r##"trait objects of the form `dyn Drop` are useless"##,
389 default_severity: Severity::Warning,
390 warn_since: None,
391 deny_since: None,
392 },
393 Lint {
394 label: "edition_2024_expr_fragment_specifier",
395 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."##,
396 default_severity: Severity::Allow,
397 warn_since: None,
398 deny_since: None,
399 },
400 Lint {
401 label: "elided_lifetimes_in_paths",
402 description: r##"hidden lifetime parameters in types are deprecated"##,
403 default_severity: Severity::Allow,
404 warn_since: None,
405 deny_since: None,
406 },
407 Lint {
408 label: "ellipsis_inclusive_range_patterns",
409 description: r##"`...` range patterns are deprecated"##,
410 default_severity: Severity::Warning,
411 warn_since: None,
412 deny_since: None,
413 },
414 Lint {
415 label: "enum_intrinsics_non_enums",
416 description: r##"detects calls to `core::mem::discriminant` and `core::mem::variant_count` with non-enum types"##,
417 default_severity: Severity::Error,
418 warn_since: None,
419 deny_since: None,
420 },
421 Lint {
422 label: "explicit_builtin_cfgs_in_flags",
423 description: r##"detects builtin cfgs set via the `--cfg`"##,
424 default_severity: Severity::Error,
425 warn_since: None,
426 deny_since: None,
427 },
428 Lint {
429 label: "explicit_outlives_requirements",
430 description: r##"outlives requirements can be inferred"##,
431 default_severity: Severity::Allow,
432 warn_since: None,
433 deny_since: None,
434 },
435 Lint {
436 label: "exported_private_dependencies",
437 description: r##"public interface leaks type from a private dependency"##,
438 default_severity: Severity::Warning,
439 warn_since: None,
440 deny_since: None,
441 },
442 Lint {
443 label: "ffi_unwind_calls",
444 description: r##"call to foreign functions or function pointers with FFI-unwind ABI"##,
445 default_severity: Severity::Allow,
446 warn_since: None,
447 deny_since: None,
448 },
449 Lint {
450 label: "float_literal_f32_fallback",
451 description: r##"detects unsuffixed floating point literals whose type fallback to `f32`"##,
452 default_severity: Severity::Warning,
453 warn_since: None,
454 deny_since: None,
455 },
456 Lint {
457 label: "for_loops_over_fallibles",
458 description: r##"for-looping over an `Option` or a `Result`, which is more clearly expressed as an `if let`"##,
459 default_severity: Severity::Warning,
460 warn_since: None,
461 deny_since: None,
462 },
463 Lint {
464 label: "forbidden_lint_groups",
465 description: r##"applying forbid to lint-groups"##,
466 default_severity: Severity::Warning,
467 warn_since: None,
468 deny_since: None,
469 },
470 Lint {
471 label: "forgetting_copy_types",
472 description: r##"calls to `std::mem::forget` with a value that implements Copy"##,
473 default_severity: Severity::Warning,
474 warn_since: None,
475 deny_since: None,
476 },
477 Lint {
478 label: "forgetting_references",
479 description: r##"calls to `std::mem::forget` with a reference instead of an owned value"##,
480 default_severity: Severity::Warning,
481 warn_since: None,
482 deny_since: None,
483 },
484 Lint {
485 label: "function_casts_as_integer",
486 description: r##"casting a function into an integer"##,
487 default_severity: Severity::Warning,
488 warn_since: None,
489 deny_since: None,
490 },
491 Lint {
492 label: "function_item_references",
493 description: r##"suggest casting to a function pointer when attempting to take references to function items"##,
494 default_severity: Severity::Warning,
495 warn_since: None,
496 deny_since: None,
497 },
498 Lint {
499 label: "hidden_glob_reexports",
500 description: r##"name introduced by a private item shadows a name introduced by a public glob re-export"##,
501 default_severity: Severity::Warning,
502 warn_since: None,
503 deny_since: None,
504 },
505 Lint {
506 label: "if_let_rescope",
507 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"##,
508 default_severity: Severity::Allow,
509 warn_since: None,
510 deny_since: None,
511 },
512 Lint {
513 label: "ill_formed_attribute_input",
514 description: r##"ill-formed attribute inputs that were previously accepted and used in practice"##,
515 default_severity: Severity::Error,
516 warn_since: None,
517 deny_since: None,
518 },
519 Lint {
520 label: "impl_trait_overcaptures",
521 description: r##"`impl Trait` will capture more lifetimes than possibly intended in edition 2024"##,
522 default_severity: Severity::Allow,
523 warn_since: None,
524 deny_since: None,
525 },
526 Lint {
527 label: "impl_trait_redundant_captures",
528 description: r##"redundant precise-capturing `use<...>` syntax on an `impl Trait`"##,
529 default_severity: Severity::Allow,
530 warn_since: None,
531 deny_since: None,
532 },
533 Lint {
534 label: "implicit_provenance_casts",
535 description: r##"an `as` cast relying on exposed provenance is used"##,
536 default_severity: Severity::Allow,
537 warn_since: None,
538 deny_since: None,
539 },
540 Lint {
541 label: "improper_ctypes",
542 description: r##"proper use of libc types in foreign modules"##,
543 default_severity: Severity::Warning,
544 warn_since: None,
545 deny_since: None,
546 },
547 Lint {
548 label: "improper_ctypes_definitions",
549 description: r##"proper use of libc types in foreign item definitions"##,
550 default_severity: Severity::Warning,
551 warn_since: None,
552 deny_since: None,
553 },
554 Lint {
555 label: "improper_gpu_kernel_arg",
556 description: r##"GPU kernel entry points have a limited ABI"##,
557 default_severity: Severity::Warning,
558 warn_since: None,
559 deny_since: None,
560 },
561 Lint {
562 label: "incomplete_features",
563 description: r##"incomplete features that may function improperly in some or all cases"##,
564 default_severity: Severity::Warning,
565 warn_since: None,
566 deny_since: None,
567 },
568 Lint {
569 label: "incomplete_include",
570 description: r##"trailing content in included file"##,
571 default_severity: Severity::Error,
572 warn_since: None,
573 deny_since: None,
574 },
575 Lint {
576 label: "ineffective_unstable_reexports",
577 description: r##"detects ineffective `#[unstable]` attributes on re-exports"##,
578 default_severity: Severity::Error,
579 warn_since: None,
580 deny_since: None,
581 },
582 Lint {
583 label: "ineffective_unstable_trait_impl",
584 description: r##"detects `#[unstable]` on stable trait implementations for stable types"##,
585 default_severity: Severity::Error,
586 warn_since: None,
587 deny_since: None,
588 },
589 Lint {
590 label: "inline_no_sanitize",
591 description: r##"detects incompatible use of `#[inline(always)]` and `#[sanitize(... = "off")]`"##,
592 default_severity: Severity::Warning,
593 warn_since: None,
594 deny_since: None,
595 },
596 Lint {
597 label: "integer_to_ptr_transmutes",
598 description: r##"detects integer to pointer transmutes"##,
599 default_severity: Severity::Warning,
600 warn_since: None,
601 deny_since: None,
602 },
603 Lint {
604 label: "internal_eq_trait_method_impls",
605 description: r##"manual implementation of the internal `Eq::assert_receiver_is_total_eq` method"##,
606 default_severity: Severity::Warning,
607 warn_since: None,
608 deny_since: None,
609 },
610 Lint {
611 label: "internal_features",
612 description: r##"internal features are not supposed to be used"##,
613 default_severity: Severity::Warning,
614 warn_since: None,
615 deny_since: None,
616 },
617 Lint {
618 label: "invalid_atomic_ordering",
619 description: r##"usage of invalid atomic ordering in atomic operations and memory fences"##,
620 default_severity: Severity::Error,
621 warn_since: None,
622 deny_since: None,
623 },
624 Lint {
625 label: "invalid_doc_attributes",
626 description: r##"detects invalid `#[doc(...)]` attributes"##,
627 default_severity: Severity::Warning,
628 warn_since: None,
629 deny_since: None,
630 },
631 Lint {
632 label: "invalid_from_utf8",
633 description: r##"using a non UTF-8 literal in `std::str::from_utf8`"##,
634 default_severity: Severity::Warning,
635 warn_since: None,
636 deny_since: None,
637 },
638 Lint {
639 label: "invalid_from_utf8_unchecked",
640 description: r##"using a non UTF-8 literal in `std::str::from_utf8_unchecked`"##,
641 default_severity: Severity::Error,
642 warn_since: None,
643 deny_since: None,
644 },
645 Lint {
646 label: "invalid_macro_export_arguments",
647 description: r##""invalid_parameter" isn't a valid argument for `#[macro_export]`"##,
648 default_severity: Severity::Error,
649 warn_since: None,
650 deny_since: None,
651 },
652 Lint {
653 label: "invalid_nan_comparisons",
654 description: r##"detects invalid floating point NaN comparisons"##,
655 default_severity: Severity::Warning,
656 warn_since: None,
657 deny_since: None,
658 },
659 Lint {
660 label: "invalid_null_arguments",
661 description: r##"invalid null pointer in arguments"##,
662 default_severity: Severity::Error,
663 warn_since: None,
664 deny_since: None,
665 },
666 Lint {
667 label: "invalid_reference_casting",
668 description: r##"casts of `&T` to `&mut T` without interior mutability"##,
669 default_severity: Severity::Error,
670 warn_since: None,
671 deny_since: None,
672 },
673 Lint {
674 label: "invalid_runtime_symbol_definitions",
675 description: r##"invalid definition of a symbol used by the standard library"##,
676 default_severity: Severity::Error,
677 warn_since: None,
678 deny_since: None,
679 },
680 Lint {
681 label: "invalid_type_param_default",
682 description: r##"type parameter default erroneously allowed in invalid location"##,
683 default_severity: Severity::Error,
684 warn_since: None,
685 deny_since: None,
686 },
687 Lint {
688 label: "invalid_value",
689 description: r##"an invalid value is being created (such as a null reference)"##,
690 default_severity: Severity::Warning,
691 warn_since: None,
692 deny_since: None,
693 },
694 Lint {
695 label: "irrefutable_let_patterns",
696 description: r##"detects irrefutable patterns in `if let` and `while let` statements"##,
697 default_severity: Severity::Warning,
698 warn_since: None,
699 deny_since: None,
700 },
701 Lint {
702 label: "keyword_idents_2018",
703 description: r##"detects edition keywords being used as an identifier"##,
704 default_severity: Severity::Allow,
705 warn_since: None,
706 deny_since: None,
707 },
708 Lint {
709 label: "keyword_idents_2024",
710 description: r##"detects edition keywords being used as an identifier"##,
711 default_severity: Severity::Allow,
712 warn_since: None,
713 deny_since: None,
714 },
715 Lint {
716 label: "large_assignments",
717 description: r##"detects large moves or copies"##,
718 default_severity: Severity::Warning,
719 warn_since: None,
720 deny_since: None,
721 },
722 Lint {
723 label: "late_bound_lifetime_arguments",
724 description: r##"detects generic lifetime arguments in path segments with late bound lifetime parameters"##,
725 default_severity: Severity::Warning,
726 warn_since: None,
727 deny_since: None,
728 },
729 Lint {
730 label: "legacy_derive_helpers",
731 description: r##"detects derive helper attributes that are used before they are introduced"##,
732 default_severity: Severity::Error,
733 warn_since: None,
734 deny_since: None,
735 },
736 Lint {
737 label: "let_underscore_drop",
738 description: r##"non-binding let on a type that has a destructor"##,
739 default_severity: Severity::Allow,
740 warn_since: None,
741 deny_since: None,
742 },
743 Lint {
744 label: "let_underscore_lock",
745 description: r##"non-binding let on a synchronization lock"##,
746 default_severity: Severity::Error,
747 warn_since: None,
748 deny_since: None,
749 },
750 Lint {
751 label: "linker_info",
752 description: r##"linker warnings known to be informational-only and not indicative of a problem"##,
753 default_severity: Severity::Allow,
754 warn_since: None,
755 deny_since: None,
756 },
757 Lint {
758 label: "linker_messages",
759 description: r##"warnings emitted at runtime by the target-specific linker program"##,
760 default_severity: Severity::Warning,
761 warn_since: None,
762 deny_since: None,
763 },
764 Lint {
765 label: "long_running_const_eval",
766 description: r##"detects long const eval operations"##,
767 default_severity: Severity::Error,
768 warn_since: None,
769 deny_since: None,
770 },
771 Lint {
772 label: "macro_expanded_macro_exports_accessed_by_absolute_paths",
773 description: r##"macro-expanded `macro_export` macros from the current crate cannot be referred to by absolute paths"##,
774 default_severity: Severity::Error,
775 warn_since: None,
776 deny_since: None,
777 },
778 Lint {
779 label: "macro_use_extern_crate",
780 description: r##"the `#[macro_use]` attribute is now deprecated in favor of using macros via the module system"##,
781 default_severity: Severity::Allow,
782 warn_since: None,
783 deny_since: None,
784 },
785 Lint {
786 label: "malformed_diagnostic_attributes",
787 description: r##"detects malformed diagnostic attributes"##,
788 default_severity: Severity::Warning,
789 warn_since: None,
790 deny_since: None,
791 },
792 Lint {
793 label: "malformed_diagnostic_filters",
794 description: r##"detects malformed filters in diagnostic attributes"##,
795 default_severity: Severity::Warning,
796 warn_since: None,
797 deny_since: None,
798 },
799 Lint {
800 label: "malformed_diagnostic_format_literals",
801 description: r##"detects diagnostic attribute with malformed diagnostic format literals"##,
802 default_severity: Severity::Warning,
803 warn_since: None,
804 deny_since: None,
805 },
806 Lint {
807 label: "map_unit_fn",
808 description: r##"`Iterator::map` call that discard the iterator's values"##,
809 default_severity: Severity::Warning,
810 warn_since: None,
811 deny_since: None,
812 },
813 Lint {
814 label: "meta_variable_misuse",
815 description: r##"possible meta-variable misuse at macro definition"##,
816 default_severity: Severity::Allow,
817 warn_since: None,
818 deny_since: None,
819 },
820 Lint {
821 label: "method_call_on_diverging_infer_var",
822 description: r##"detects method calls on a result of never-to-any coercion"##,
823 default_severity: Severity::Warning,
824 warn_since: None,
825 deny_since: None,
826 },
827 Lint {
828 label: "mismatched_lifetime_syntaxes",
829 description: r##"detects when a lifetime uses different syntax between arguments and return values"##,
830 default_severity: Severity::Warning,
831 warn_since: None,
832 deny_since: None,
833 },
834 Lint {
835 label: "misplaced_diagnostic_attributes",
836 description: r##"detects diagnostic attributes that are placed on the wrong item"##,
837 default_severity: Severity::Warning,
838 warn_since: None,
839 deny_since: None,
840 },
841 Lint {
842 label: "missing_abi",
843 description: r##"No declared ABI for extern declaration"##,
844 default_severity: Severity::Warning,
845 warn_since: None,
846 deny_since: None,
847 },
848 Lint {
849 label: "missing_copy_implementations",
850 description: r##"detects potentially-forgotten implementations of `Copy`"##,
851 default_severity: Severity::Allow,
852 warn_since: None,
853 deny_since: None,
854 },
855 Lint {
856 label: "missing_debug_implementations",
857 description: r##"detects missing implementations of Debug"##,
858 default_severity: Severity::Allow,
859 warn_since: None,
860 deny_since: None,
861 },
862 Lint {
863 label: "missing_docs",
864 description: r##"detects missing documentation for public members"##,
865 default_severity: Severity::Allow,
866 warn_since: None,
867 deny_since: None,
868 },
869 Lint {
870 label: "missing_gpu_kernel_export_name",
871 description: r##"mangled gpu-kernel function"##,
872 default_severity: Severity::Warning,
873 warn_since: None,
874 deny_since: None,
875 },
876 Lint {
877 label: "missing_unsafe_on_extern",
878 description: r##"detects missing unsafe keyword on extern declarations"##,
879 default_severity: Severity::Allow,
880 warn_since: None,
881 deny_since: None,
882 },
883 Lint {
884 label: "mixed_script_confusables",
885 description: r##"detects Unicode scripts whose mixed script confusables codepoints are solely used"##,
886 default_severity: Severity::Warning,
887 warn_since: None,
888 deny_since: None,
889 },
890 Lint {
891 label: "multiple_supertrait_upcastable",
892 description: r##"detect when a dyn-compatible trait has multiple supertraits"##,
893 default_severity: Severity::Allow,
894 warn_since: None,
895 deny_since: None,
896 },
897 Lint {
898 label: "must_not_suspend",
899 description: r##"use of a `#[must_not_suspend]` value across a yield point"##,
900 default_severity: Severity::Allow,
901 warn_since: None,
902 deny_since: None,
903 },
904 Lint {
905 label: "mutable_transmutes",
906 description: r##"transmuting &T to &mut T is undefined behavior, even if the reference is unused"##,
907 default_severity: Severity::Error,
908 warn_since: None,
909 deny_since: None,
910 },
911 Lint {
912 label: "named_arguments_used_positionally",
913 description: r##"named arguments in format used positionally"##,
914 default_severity: Severity::Warning,
915 warn_since: None,
916 deny_since: None,
917 },
918 Lint {
919 label: "named_asm_labels",
920 description: r##"named labels in inline assembly"##,
921 default_severity: Severity::Error,
922 warn_since: None,
923 deny_since: None,
924 },
925 Lint {
926 label: "never_type_fallback_flowing_into_unsafe",
927 description: r##"never type fallback affecting unsafe function calls"##,
928 default_severity: Severity::Error,
929 warn_since: None,
930 deny_since: None,
931 },
932 Lint {
933 label: "no_mangle_const_items",
934 description: r##"const items will not have their symbols exported"##,
935 default_severity: Severity::Error,
936 warn_since: None,
937 deny_since: None,
938 },
939 Lint {
940 label: "non_ascii_idents",
941 description: r##"detects non-ASCII identifiers"##,
942 default_severity: Severity::Allow,
943 warn_since: None,
944 deny_since: None,
945 },
946 Lint {
947 label: "non_camel_case_types",
948 description: r##"types, variants, traits and type parameters should have camel case names"##,
949 default_severity: Severity::Warning,
950 warn_since: None,
951 deny_since: None,
952 },
953 Lint {
954 label: "non_contiguous_range_endpoints",
955 description: r##"detects off-by-one errors with exclusive range patterns"##,
956 default_severity: Severity::Warning,
957 warn_since: None,
958 deny_since: None,
959 },
960 Lint {
961 label: "non_exhaustive_omitted_patterns",
962 description: r##"detect when patterns of types marked `non_exhaustive` are missed"##,
963 default_severity: Severity::Allow,
964 warn_since: None,
965 deny_since: None,
966 },
967 Lint {
968 label: "non_fmt_panics",
969 description: r##"detect single-argument panic!() invocations in which the argument is not a format string"##,
970 default_severity: Severity::Warning,
971 warn_since: None,
972 deny_since: None,
973 },
974 Lint {
975 label: "non_local_definitions",
976 description: r##"checks for non-local definitions"##,
977 default_severity: Severity::Warning,
978 warn_since: None,
979 deny_since: None,
980 },
981 Lint {
982 label: "non_shorthand_field_patterns",
983 description: r##"using `Struct { x: x }` instead of `Struct { x }` in a pattern"##,
984 default_severity: Severity::Warning,
985 warn_since: None,
986 deny_since: None,
987 },
988 Lint {
989 label: "non_snake_case",
990 description: r##"variables, methods, functions, lifetime parameters and modules should have snake case names"##,
991 default_severity: Severity::Warning,
992 warn_since: None,
993 deny_since: None,
994 },
995 Lint {
996 label: "non_upper_case_globals",
997 description: r##"static constants should have uppercase identifiers"##,
998 default_severity: Severity::Warning,
999 warn_since: None,
1000 deny_since: None,
1001 },
1002 Lint {
1003 label: "noop_method_call",
1004 description: r##"detects the use of well-known noop methods"##,
1005 default_severity: Severity::Warning,
1006 warn_since: None,
1007 deny_since: None,
1008 },
1009 Lint {
1010 label: "opaque_hidden_inferred_bound",
1011 description: r##"detects the use of nested `impl Trait` types in associated type bounds that are not general enough"##,
1012 default_severity: Severity::Warning,
1013 warn_since: None,
1014 deny_since: None,
1015 },
1016 Lint {
1017 label: "out_of_scope_macro_calls",
1018 description: r##"detects out of scope calls to `macro_rules` in key-value attributes"##,
1019 default_severity: Severity::Error,
1020 warn_since: None,
1021 deny_since: None,
1022 },
1023 Lint {
1024 label: "overflowing_literals",
1025 description: r##"literal out of range for its type"##,
1026 default_severity: Severity::Error,
1027 warn_since: None,
1028 deny_since: None,
1029 },
1030 Lint {
1031 label: "overlapping_range_endpoints",
1032 description: r##"detects range patterns with overlapping endpoints"##,
1033 default_severity: Severity::Warning,
1034 warn_since: None,
1035 deny_since: None,
1036 },
1037 Lint {
1038 label: "partial_stack_protector",
1039 description: r##"partial use of stack-protector that was previously accepted and used in practice"##,
1040 default_severity: Severity::Warning,
1041 warn_since: None,
1042 deny_since: None,
1043 },
1044 Lint {
1045 label: "path_statements",
1046 description: r##"path statements with no effect"##,
1047 default_severity: Severity::Warning,
1048 warn_since: None,
1049 deny_since: None,
1050 },
1051 Lint {
1052 label: "patterns_in_fns_without_body",
1053 description: r##"patterns in functions without body were erroneously allowed"##,
1054 default_severity: Severity::Error,
1055 warn_since: None,
1056 deny_since: None,
1057 },
1058 Lint {
1059 label: "private_bounds",
1060 description: r##"private type in secondary interface of an item"##,
1061 default_severity: Severity::Warning,
1062 warn_since: None,
1063 deny_since: None,
1064 },
1065 Lint {
1066 label: "private_interfaces",
1067 description: r##"private type in primary interface of an item"##,
1068 default_severity: Severity::Warning,
1069 warn_since: None,
1070 deny_since: None,
1071 },
1072 Lint {
1073 label: "proc_macro_derive_resolution_fallback",
1074 description: r##"detects proc macro derives using inaccessible names from parent modules"##,
1075 default_severity: Severity::Error,
1076 warn_since: None,
1077 deny_since: None,
1078 },
1079 Lint {
1080 label: "ptr_to_integer_transmute_in_consts",
1081 description: r##"detects pointer to integer transmutes in const functions and associated constants"##,
1082 default_severity: Severity::Warning,
1083 warn_since: None,
1084 deny_since: None,
1085 },
1086 Lint {
1087 label: "pub_use_of_private_extern_crate",
1088 description: r##"detect public re-exports of private extern crates"##,
1089 default_severity: Severity::Error,
1090 warn_since: None,
1091 deny_since: None,
1092 },
1093 Lint {
1094 label: "raw_borrows_via_references",
1095 description: r##"creating raw borrows via references is discouraged"##,
1096 default_severity: Severity::Allow,
1097 warn_since: None,
1098 deny_since: None,
1099 },
1100 Lint {
1101 label: "recursion_depth_exceeding_limit",
1102 description: r##"detects trait solving overflow that only happens with the next solver"##,
1103 default_severity: Severity::Warning,
1104 warn_since: None,
1105 deny_since: None,
1106 },
1107 Lint {
1108 label: "redundant_imports",
1109 description: r##"imports that are redundant due to being imported already"##,
1110 default_severity: Severity::Allow,
1111 warn_since: None,
1112 deny_since: None,
1113 },
1114 Lint {
1115 label: "redundant_lifetimes",
1116 description: r##"detects lifetime parameters that are redundant because they are equal to some other named lifetime"##,
1117 default_severity: Severity::Allow,
1118 warn_since: None,
1119 deny_since: None,
1120 },
1121 Lint {
1122 label: "redundant_semicolons",
1123 description: r##"detects unnecessary trailing semicolons"##,
1124 default_severity: Severity::Warning,
1125 warn_since: None,
1126 deny_since: None,
1127 },
1128 Lint {
1129 label: "refining_impl_trait_internal",
1130 description: r##"impl trait in impl method signature does not match trait method signature"##,
1131 default_severity: Severity::Warning,
1132 warn_since: None,
1133 deny_since: None,
1134 },
1135 Lint {
1136 label: "refining_impl_trait_reachable",
1137 description: r##"impl trait in impl method signature does not match trait method signature"##,
1138 default_severity: Severity::Warning,
1139 warn_since: None,
1140 deny_since: None,
1141 },
1142 Lint {
1143 label: "renamed_and_removed_lints",
1144 description: r##"lints that have been renamed or removed"##,
1145 default_severity: Severity::Warning,
1146 warn_since: None,
1147 deny_since: None,
1148 },
1149 Lint {
1150 label: "repeated_reprs",
1151 description: r##"detects repeated representations in `#[repr(..)]` attributes"##,
1152 default_severity: Severity::Warning,
1153 warn_since: None,
1154 deny_since: None,
1155 },
1156 Lint {
1157 label: "repr_c_enums_larger_than_int",
1158 description: r##"repr(C) enums with discriminant values that do not fit into a C int"##,
1159 default_severity: Severity::Warning,
1160 warn_since: None,
1161 deny_since: None,
1162 },
1163 Lint {
1164 label: "resolving_to_items_shadowing_supertrait_items",
1165 description: r##"detects when a supertrait item is shadowed by a subtrait item"##,
1166 default_severity: Severity::Allow,
1167 warn_since: None,
1168 deny_since: None,
1169 },
1170 Lint {
1171 label: "rtsan_nonblocking_async",
1172 description: r##"detects incompatible uses of `#[sanitize(realtime = "nonblocking")]` on async functions"##,
1173 default_severity: Severity::Warning,
1174 warn_since: None,
1175 deny_since: None,
1176 },
1177 Lint {
1178 label: "rust_2021_incompatible_closure_captures",
1179 description: r##"detects closures affected by Rust 2021 changes"##,
1180 default_severity: Severity::Allow,
1181 warn_since: None,
1182 deny_since: None,
1183 },
1184 Lint {
1185 label: "rust_2021_incompatible_or_patterns",
1186 description: r##"detects usage of old versions of or-patterns"##,
1187 default_severity: Severity::Allow,
1188 warn_since: None,
1189 deny_since: None,
1190 },
1191 Lint {
1192 label: "rust_2021_prefixes_incompatible_syntax",
1193 description: r##"identifiers that will be parsed as a prefix in Rust 2021"##,
1194 default_severity: Severity::Allow,
1195 warn_since: None,
1196 deny_since: None,
1197 },
1198 Lint {
1199 label: "rust_2021_prelude_collisions",
1200 description: r##"detects the usage of trait methods which are ambiguous with traits added to the prelude in future editions"##,
1201 default_severity: Severity::Allow,
1202 warn_since: None,
1203 deny_since: None,
1204 },
1205 Lint {
1206 label: "rust_2024_guarded_string_incompatible_syntax",
1207 description: r##"will be parsed as a guarded string in Rust 2024"##,
1208 default_severity: Severity::Allow,
1209 warn_since: None,
1210 deny_since: None,
1211 },
1212 Lint {
1213 label: "rust_2024_incompatible_pat",
1214 description: r##"detects patterns whose meaning will change in Rust 2024"##,
1215 default_severity: Severity::Allow,
1216 warn_since: None,
1217 deny_since: None,
1218 },
1219 Lint {
1220 label: "rust_2024_prelude_collisions",
1221 description: r##"detects the usage of trait methods which are ambiguous with traits added to the prelude in future editions"##,
1222 default_severity: Severity::Allow,
1223 warn_since: None,
1224 deny_since: None,
1225 },
1226 Lint {
1227 label: "self_constructor_from_outer_item",
1228 description: r##"detect unsupported use of `Self` from outer item"##,
1229 default_severity: Severity::Warning,
1230 warn_since: None,
1231 deny_since: None,
1232 },
1233 Lint {
1234 label: "semicolon_in_expressions_from_macros",
1235 description: r##"trailing semicolon in macro body used as expression"##,
1236 default_severity: Severity::Error,
1237 warn_since: None,
1238 deny_since: None,
1239 },
1240 Lint {
1241 label: "semicolon_in_expressions_from_non_local_macros",
1242 description: r##"trailing semicolon in macro body used as expression"##,
1243 default_severity: Severity::Warning,
1244 warn_since: None,
1245 deny_since: None,
1246 },
1247 Lint {
1248 label: "shadowing_supertrait_items",
1249 description: r##"detects when a supertrait item is shadowed by a subtrait item"##,
1250 default_severity: Severity::Allow,
1251 warn_since: None,
1252 deny_since: None,
1253 },
1254 Lint {
1255 label: "single_use_lifetimes",
1256 description: r##"detects lifetime parameters that are only used once"##,
1257 default_severity: Severity::Allow,
1258 warn_since: None,
1259 deny_since: None,
1260 },
1261 Lint {
1262 label: "special_module_name",
1263 description: r##"module declarations for files with a special meaning"##,
1264 default_severity: Severity::Warning,
1265 warn_since: None,
1266 deny_since: None,
1267 },
1268 Lint {
1269 label: "stable_features",
1270 description: r##"stable features found in `#[feature]` directive"##,
1271 default_severity: Severity::Warning,
1272 warn_since: None,
1273 deny_since: None,
1274 },
1275 Lint {
1276 label: "static_mut_refs",
1277 description: r##"creating a shared reference to mutable static"##,
1278 default_severity: Severity::Warning,
1279 warn_since: None,
1280 deny_since: Some(Edition::Edition2024),
1281 },
1282 Lint {
1283 label: "suspicious_double_ref_op",
1284 description: r##"suspicious call of trait method on `&&T`"##,
1285 default_severity: Severity::Warning,
1286 warn_since: None,
1287 deny_since: None,
1288 },
1289 Lint {
1290 label: "suspicious_runtime_symbol_definitions",
1291 description: r##"suspicious definition of a symbol used by the standard library"##,
1292 default_severity: Severity::Warning,
1293 warn_since: None,
1294 deny_since: None,
1295 },
1296 Lint {
1297 label: "tail_call_track_caller",
1298 description: r##"detects tail calls of functions marked with `#[track_caller]`"##,
1299 default_severity: Severity::Warning,
1300 warn_since: None,
1301 deny_since: None,
1302 },
1303 Lint {
1304 label: "tail_expr_drop_order",
1305 description: r##"Detect and warn on significant change in drop order in tail expression location"##,
1306 default_severity: Severity::Allow,
1307 warn_since: None,
1308 deny_since: None,
1309 },
1310 Lint {
1311 label: "test_unstable_lint",
1312 description: r##"this unstable lint is only for testing"##,
1313 default_severity: Severity::Error,
1314 warn_since: None,
1315 deny_since: None,
1316 },
1317 Lint {
1318 label: "text_direction_codepoint_in_comment",
1319 description: r##"invisible directionality-changing codepoints in comment"##,
1320 default_severity: Severity::Error,
1321 warn_since: None,
1322 deny_since: None,
1323 },
1324 Lint {
1325 label: "text_direction_codepoint_in_literal",
1326 description: r##"detect special Unicode codepoints that affect the visual representation of text on screen, changing the direction in which text flows"##,
1327 default_severity: Severity::Error,
1328 warn_since: None,
1329 deny_since: None,
1330 },
1331 Lint {
1332 label: "trivial_bounds",
1333 description: r##"these bounds don't depend on an type parameters"##,
1334 default_severity: Severity::Warning,
1335 warn_since: None,
1336 deny_since: None,
1337 },
1338 Lint {
1339 label: "trivial_casts",
1340 description: r##"detects trivial casts which could be removed"##,
1341 default_severity: Severity::Allow,
1342 warn_since: None,
1343 deny_since: None,
1344 },
1345 Lint {
1346 label: "trivial_numeric_casts",
1347 description: r##"detects trivial casts of numeric types which could be removed"##,
1348 default_severity: Severity::Allow,
1349 warn_since: None,
1350 deny_since: None,
1351 },
1352 Lint {
1353 label: "type_alias_bounds",
1354 description: r##"bounds in type aliases are not enforced"##,
1355 default_severity: Severity::Warning,
1356 warn_since: None,
1357 deny_since: None,
1358 },
1359 Lint {
1360 label: "tyvar_behind_raw_pointer",
1361 description: r##"raw pointer to an inference variable"##,
1362 default_severity: Severity::Warning,
1363 warn_since: None,
1364 deny_since: None,
1365 },
1366 Lint {
1367 label: "uncommon_codepoints",
1368 description: r##"detects uncommon Unicode codepoints in identifiers"##,
1369 default_severity: Severity::Warning,
1370 warn_since: None,
1371 deny_since: None,
1372 },
1373 Lint {
1374 label: "unconditional_panic",
1375 description: r##"operation will cause a panic at runtime"##,
1376 default_severity: Severity::Error,
1377 warn_since: None,
1378 deny_since: None,
1379 },
1380 Lint {
1381 label: "unconditional_recursion",
1382 description: r##"functions that cannot return without calling themselves"##,
1383 default_severity: Severity::Warning,
1384 warn_since: None,
1385 deny_since: None,
1386 },
1387 Lint {
1388 label: "uncovered_param_in_projection",
1389 description: r##"impl contains type parameters that are not covered"##,
1390 default_severity: Severity::Warning,
1391 warn_since: None,
1392 deny_since: None,
1393 },
1394 Lint {
1395 label: "undropped_manually_drops",
1396 description: r##"calls to `drop` and `drop_in_place` where the dropped value is `std::mem::ManuallyDrop`"##,
1397 default_severity: Severity::Error,
1398 warn_since: None,
1399 deny_since: None,
1400 },
1401 Lint {
1402 label: "unevaluated_default_field_value",
1403 description: r##"detects default field values on types that have const parameters"##,
1404 default_severity: Severity::Warning,
1405 warn_since: None,
1406 deny_since: None,
1407 },
1408 Lint {
1409 label: "unexpected_cfgs",
1410 description: r##"detects unexpected names and values in `#[cfg]` conditions"##,
1411 default_severity: Severity::Warning,
1412 warn_since: None,
1413 deny_since: None,
1414 },
1415 Lint {
1416 label: "unfulfilled_lint_expectations",
1417 description: r##"unfulfilled lint expectation"##,
1418 default_severity: Severity::Warning,
1419 warn_since: None,
1420 deny_since: None,
1421 },
1422 Lint {
1423 label: "ungated_async_fn_track_caller",
1424 description: r##"enabling track_caller on an async fn is a no-op unless the async_fn_track_caller feature is enabled"##,
1425 default_severity: Severity::Warning,
1426 warn_since: None,
1427 deny_since: None,
1428 },
1429 Lint {
1430 label: "uninhabited_static",
1431 description: r##"uninhabited static"##,
1432 default_severity: Severity::Error,
1433 warn_since: None,
1434 deny_since: None,
1435 },
1436 Lint {
1437 label: "unit_bindings",
1438 description: r##"binding is useless because it has the unit `()` type"##,
1439 default_severity: Severity::Allow,
1440 warn_since: None,
1441 deny_since: None,
1442 },
1443 Lint {
1444 label: "unknown_crate_types",
1445 description: r##"unknown crate type found in `#[crate_type]` directive"##,
1446 default_severity: Severity::Error,
1447 warn_since: None,
1448 deny_since: None,
1449 },
1450 Lint {
1451 label: "unknown_diagnostic_attributes",
1452 description: r##"detects unknown diagnostic attributes"##,
1453 default_severity: Severity::Warning,
1454 warn_since: None,
1455 deny_since: None,
1456 },
1457 Lint {
1458 label: "unknown_lints",
1459 description: r##"unrecognized lint attribute"##,
1460 default_severity: Severity::Warning,
1461 warn_since: None,
1462 deny_since: None,
1463 },
1464 Lint {
1465 label: "unnameable_test_items",
1466 description: r##"detects an item that cannot be named being marked as `#[test_case]`"##,
1467 default_severity: Severity::Warning,
1468 warn_since: None,
1469 deny_since: None,
1470 },
1471 Lint {
1472 label: "unnameable_types",
1473 description: r##"effective visibility of a type is larger than the area in which it can be named"##,
1474 default_severity: Severity::Allow,
1475 warn_since: None,
1476 deny_since: None,
1477 },
1478 Lint {
1479 label: "unnecessary_transmutes",
1480 description: r##"detects transmutes that can also be achieved by other operations"##,
1481 default_severity: Severity::Warning,
1482 warn_since: None,
1483 deny_since: None,
1484 },
1485 Lint {
1486 label: "unpredictable_function_pointer_comparisons",
1487 description: r##"detects unpredictable function pointer comparisons"##,
1488 default_severity: Severity::Warning,
1489 warn_since: None,
1490 deny_since: None,
1491 },
1492 Lint {
1493 label: "unqualified_local_imports",
1494 description: r##"`use` of a local item without leading `self::`, `super::`, or `crate::`"##,
1495 default_severity: Severity::Allow,
1496 warn_since: None,
1497 deny_since: None,
1498 },
1499 Lint {
1500 label: "unreachable_cfg_select_predicates",
1501 description: r##"detects unreachable configuration predicates in the cfg_select macro"##,
1502 default_severity: Severity::Warning,
1503 warn_since: None,
1504 deny_since: None,
1505 },
1506 Lint {
1507 label: "unreachable_code",
1508 description: r##"detects unreachable code paths"##,
1509 default_severity: Severity::Warning,
1510 warn_since: None,
1511 deny_since: None,
1512 },
1513 Lint {
1514 label: "unreachable_patterns",
1515 description: r##"detects unreachable patterns"##,
1516 default_severity: Severity::Warning,
1517 warn_since: None,
1518 deny_since: None,
1519 },
1520 Lint {
1521 label: "unreachable_pub",
1522 description: r##"`pub` items not reachable from crate root"##,
1523 default_severity: Severity::Allow,
1524 warn_since: None,
1525 deny_since: None,
1526 },
1527 Lint {
1528 label: "unsafe_attr_outside_unsafe",
1529 description: r##"detects unsafe attributes outside of unsafe"##,
1530 default_severity: Severity::Allow,
1531 warn_since: None,
1532 deny_since: None,
1533 },
1534 Lint {
1535 label: "unsafe_code",
1536 description: r##"usage of `unsafe` code and other potentially unsound constructs"##,
1537 default_severity: Severity::Allow,
1538 warn_since: None,
1539 deny_since: None,
1540 },
1541 Lint {
1542 label: "unsafe_op_in_unsafe_fn",
1543 description: r##"unsafe operations in unsafe functions without an explicit unsafe block are deprecated"##,
1544 default_severity: Severity::Allow,
1545 warn_since: Some(Edition::Edition2024),
1546 deny_since: None,
1547 },
1548 Lint {
1549 label: "unstable_features",
1550 description: r##"enabling unstable features"##,
1551 default_severity: Severity::Allow,
1552 warn_since: None,
1553 deny_since: None,
1554 },
1555 Lint {
1556 label: "unstable_imports",
1557 description: r##"lints on accidentally allowed unstable imports"##,
1558 default_severity: Severity::Error,
1559 warn_since: None,
1560 deny_since: None,
1561 },
1562 Lint {
1563 label: "unstable_name_collisions",
1564 description: r##"detects name collision with an existing but unstable method"##,
1565 default_severity: Severity::Warning,
1566 warn_since: None,
1567 deny_since: None,
1568 },
1569 Lint {
1570 label: "unstable_syntax_pre_expansion",
1571 description: r##"unstable syntax can change at any point in the future, causing a hard error!"##,
1572 default_severity: Severity::Warning,
1573 warn_since: None,
1574 deny_since: None,
1575 },
1576 Lint {
1577 label: "unsupported_calling_conventions",
1578 description: r##"use of unsupported calling convention"##,
1579 default_severity: Severity::Warning,
1580 warn_since: None,
1581 deny_since: None,
1582 },
1583 Lint {
1584 label: "unused_allocation",
1585 description: r##"detects unnecessary allocations that can be eliminated"##,
1586 default_severity: Severity::Warning,
1587 warn_since: None,
1588 deny_since: None,
1589 },
1590 Lint {
1591 label: "unused_assignments",
1592 description: r##"detect assignments that will never be read"##,
1593 default_severity: Severity::Warning,
1594 warn_since: None,
1595 deny_since: None,
1596 },
1597 Lint {
1598 label: "unused_associated_type_bounds",
1599 description: r##"detects unused `Foo = Bar` bounds in `dyn Trait<Foo = Bar>`"##,
1600 default_severity: Severity::Warning,
1601 warn_since: None,
1602 deny_since: None,
1603 },
1604 Lint {
1605 label: "unused_attributes",
1606 description: r##"detects attributes that were not used by the compiler"##,
1607 default_severity: Severity::Warning,
1608 warn_since: None,
1609 deny_since: None,
1610 },
1611 Lint {
1612 label: "unused_braces",
1613 description: r##"unnecessary braces around an expression"##,
1614 default_severity: Severity::Warning,
1615 warn_since: None,
1616 deny_since: None,
1617 },
1618 Lint {
1619 label: "unused_comparisons",
1620 description: r##"comparisons made useless by limits of the types involved"##,
1621 default_severity: Severity::Warning,
1622 warn_since: None,
1623 deny_since: None,
1624 },
1625 Lint {
1626 label: "unused_crate_dependencies",
1627 description: r##"crate dependencies that are never used"##,
1628 default_severity: Severity::Allow,
1629 warn_since: None,
1630 deny_since: None,
1631 },
1632 Lint {
1633 label: "unused_doc_comments",
1634 description: r##"detects doc comments that aren't used by rustdoc"##,
1635 default_severity: Severity::Warning,
1636 warn_since: None,
1637 deny_since: None,
1638 },
1639 Lint {
1640 label: "unused_extern_crates",
1641 description: r##"extern crates that are never used"##,
1642 default_severity: Severity::Allow,
1643 warn_since: None,
1644 deny_since: None,
1645 },
1646 Lint {
1647 label: "unused_features",
1648 description: r##"unused features found in crate-level `#[feature]` directives"##,
1649 default_severity: Severity::Warning,
1650 warn_since: None,
1651 deny_since: None,
1652 },
1653 Lint {
1654 label: "unused_import_braces",
1655 description: r##"unnecessary braces around an imported item"##,
1656 default_severity: Severity::Allow,
1657 warn_since: None,
1658 deny_since: None,
1659 },
1660 Lint {
1661 label: "unused_imports",
1662 description: r##"imports that are never used"##,
1663 default_severity: Severity::Warning,
1664 warn_since: None,
1665 deny_since: None,
1666 },
1667 Lint {
1668 label: "unused_labels",
1669 description: r##"detects labels that are never used"##,
1670 default_severity: Severity::Warning,
1671 warn_since: None,
1672 deny_since: None,
1673 },
1674 Lint {
1675 label: "unused_lifetimes",
1676 description: r##"detects lifetime parameters that are never used"##,
1677 default_severity: Severity::Allow,
1678 warn_since: None,
1679 deny_since: None,
1680 },
1681 Lint {
1682 label: "unused_macro_rules",
1683 description: r##"detects macro rules that were not used"##,
1684 default_severity: Severity::Allow,
1685 warn_since: None,
1686 deny_since: None,
1687 },
1688 Lint {
1689 label: "unused_macros",
1690 description: r##"detects macros that were not used"##,
1691 default_severity: Severity::Warning,
1692 warn_since: None,
1693 deny_since: None,
1694 },
1695 Lint {
1696 label: "unused_must_use",
1697 description: r##"unused result of a type flagged as `#[must_use]`"##,
1698 default_severity: Severity::Warning,
1699 warn_since: None,
1700 deny_since: None,
1701 },
1702 Lint {
1703 label: "unused_mut",
1704 description: r##"detect mut variables which don't need to be mutable"##,
1705 default_severity: Severity::Warning,
1706 warn_since: None,
1707 deny_since: None,
1708 },
1709 Lint {
1710 label: "unused_parens",
1711 description: r##"`if`, `match`, `while` and `return` do not need parentheses"##,
1712 default_severity: Severity::Warning,
1713 warn_since: None,
1714 deny_since: None,
1715 },
1716 Lint {
1717 label: "unused_qualifications",
1718 description: r##"detects unnecessarily qualified names"##,
1719 default_severity: Severity::Allow,
1720 warn_since: None,
1721 deny_since: None,
1722 },
1723 Lint {
1724 label: "unused_results",
1725 description: r##"unused result of an expression in a statement"##,
1726 default_severity: Severity::Allow,
1727 warn_since: None,
1728 deny_since: None,
1729 },
1730 Lint {
1731 label: "unused_unsafe",
1732 description: r##"unnecessary use of an `unsafe` block"##,
1733 default_severity: Severity::Warning,
1734 warn_since: None,
1735 deny_since: None,
1736 },
1737 Lint {
1738 label: "unused_variables",
1739 description: r##"detect variables which are not used in any way"##,
1740 default_severity: Severity::Warning,
1741 warn_since: None,
1742 deny_since: None,
1743 },
1744 Lint {
1745 label: "unused_visibilities",
1746 description: r##"detect visibility qualifiers on `const _` items"##,
1747 default_severity: Severity::Warning,
1748 warn_since: None,
1749 deny_since: None,
1750 },
1751 Lint {
1752 label: "useless_deprecated",
1753 description: r##"detects deprecation attributes with no effect"##,
1754 default_severity: Severity::Error,
1755 warn_since: None,
1756 deny_since: None,
1757 },
1758 Lint {
1759 label: "useless_ptr_null_checks",
1760 description: r##"useless checking of non-null-typed pointer"##,
1761 default_severity: Severity::Warning,
1762 warn_since: None,
1763 deny_since: None,
1764 },
1765 Lint {
1766 label: "uses_power_alignment",
1767 description: r##"Structs do not follow the power alignment rule under repr(C)"##,
1768 default_severity: Severity::Warning,
1769 warn_since: None,
1770 deny_since: None,
1771 },
1772 Lint {
1773 label: "varargs_without_pattern",
1774 description: r##"detects usage of `...` arguments without a pattern in non-foreign items"##,
1775 default_severity: Severity::Error,
1776 warn_since: None,
1777 deny_since: None,
1778 },
1779 Lint {
1780 label: "variant_size_differences",
1781 description: r##"detects enums with widely varying variant sizes"##,
1782 default_severity: Severity::Allow,
1783 warn_since: None,
1784 deny_since: None,
1785 },
1786 Lint {
1787 label: "warnings",
1788 description: r##"mass-change the level for lints which produce warnings"##,
1789 default_severity: Severity::Warning,
1790 warn_since: None,
1791 deny_since: None,
1792 },
1793 Lint {
1794 label: "while_true",
1795 description: r##"suggest using `loop { }` instead of `while true { }`"##,
1796 default_severity: Severity::Warning,
1797 warn_since: None,
1798 deny_since: None,
1799 },
1800 Lint {
1801 label: "x86_softfloat_sse",
1802 description: r##"detects code that could be affected by LLVM backend issues on x86 softfloat targets"##,
1803 default_severity: Severity::Error,
1804 warn_since: None,
1805 deny_since: None,
1806 },
1807 Lint {
1808 label: "deprecated_safe",
1809 description: r##"lint group for: deprecated-safe-2024"##,
1810 default_severity: Severity::Allow,
1811 warn_since: None,
1812 deny_since: None,
1813 },
1814 Lint {
1815 label: "future_incompatible",
1816 description: r##"lint group for: internal-eq-trait-method-impls, aarch64-softfloat-neon, ambiguous-associated-items, ambiguous-derive-helpers, ambiguous-glob-imported-traits, ambiguous-glob-imports, ambiguous-import-visibilities, ambiguous-panic-imports, coherence-leak-check, conflicting-repr-hints, const-evaluatable-unchecked, float-literal-f32-fallback, forbidden-lint-groups, ill-formed-attribute-input, invalid-macro-export-arguments, invalid-type-param-default, late-bound-lifetime-arguments, legacy-derive-helpers, macro-expanded-macro-exports-accessed-by-absolute-paths, method-call-on-diverging-infer-var, out-of-scope-macro-calls, partial-stack-protector, patterns-in-fns-without-body, proc-macro-derive-resolution-fallback, pub-use-of-private-extern-crate, recursion-depth-exceeding-limit, repr-c-enums-larger-than-int, self-constructor-from-outer-item, semicolon-in-expressions-from-macros, semicolon-in-expressions-from-non-local-macros, uncovered-param-in-projection, uninhabited-static, unstable-imports, unstable-name-collisions, unstable-syntax-pre-expansion, unsupported-calling-conventions, varargs-without-pattern, x86-softfloat-sse"##,
1817 default_severity: Severity::Allow,
1818 warn_since: None,
1819 deny_since: None,
1820 },
1821 Lint {
1822 label: "keyword_idents",
1823 description: r##"lint group for: keyword-idents-2018, keyword-idents-2024"##,
1824 default_severity: Severity::Allow,
1825 warn_since: None,
1826 deny_since: None,
1827 },
1828 Lint {
1829 label: "let_underscore",
1830 description: r##"lint group for: let-underscore-drop, let-underscore-lock"##,
1831 default_severity: Severity::Allow,
1832 warn_since: None,
1833 deny_since: None,
1834 },
1835 Lint {
1836 label: "nonstandard_style",
1837 description: r##"lint group for: non-camel-case-types, non-snake-case, non-upper-case-globals"##,
1838 default_severity: Severity::Allow,
1839 warn_since: None,
1840 deny_since: None,
1841 },
1842 Lint {
1843 label: "refining_impl_trait",
1844 description: r##"lint group for: refining-impl-trait-reachable, refining-impl-trait-internal"##,
1845 default_severity: Severity::Allow,
1846 warn_since: None,
1847 deny_since: None,
1848 },
1849 Lint {
1850 label: "rust_2018_compatibility",
1851 description: r##"lint group for: keyword-idents-2018, anonymous-parameters, absolute-paths-not-starting-with-crate, tyvar-behind-raw-pointer"##,
1852 default_severity: Severity::Allow,
1853 warn_since: None,
1854 deny_since: None,
1855 },
1856 Lint {
1857 label: "rust_2018_idioms",
1858 description: r##"lint group for: bare-trait-objects, unused-extern-crates, ellipsis-inclusive-range-patterns, elided-lifetimes-in-paths, explicit-outlives-requirements"##,
1859 default_severity: Severity::Allow,
1860 warn_since: None,
1861 deny_since: None,
1862 },
1863 Lint {
1864 label: "rust_2021_compatibility",
1865 description: r##"lint group for: ellipsis-inclusive-range-patterns, non-fmt-panics, array-into-iter, bare-trait-objects, rust-2021-incompatible-closure-captures, rust-2021-incompatible-or-patterns, rust-2021-prefixes-incompatible-syntax, rust-2021-prelude-collisions"##,
1866 default_severity: Severity::Allow,
1867 warn_since: None,
1868 deny_since: None,
1869 },
1870 Lint {
1871 label: "rust_2024_compatibility",
1872 description: r##"lint group for: keyword-idents-2024, edition-2024-expr-fragment-specifier, if-let-rescope, impl-trait-overcaptures, boxed-slice-into-iter, static-mut-refs, deprecated-safe-2024, missing-unsafe-on-extern, 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"##,
1873 default_severity: Severity::Allow,
1874 warn_since: None,
1875 deny_since: None,
1876 },
1877 Lint {
1878 label: "unknown_or_malformed_diagnostic_attributes",
1879 description: r##"lint group for: malformed-diagnostic-attributes, malformed-diagnostic-format-literals, misplaced-diagnostic-attributes, unknown-diagnostic-attributes"##,
1880 default_severity: Severity::Allow,
1881 warn_since: None,
1882 deny_since: None,
1883 },
1884 Lint {
1885 label: "unused",
1886 description: r##"lint group for: unused-imports, unused-variables, unused-visibilities, unused-assignments, dead-code, unused-mut, unreachable-cfg-select-predicates, 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, repeated-reprs"##,
1887 default_severity: Severity::Allow,
1888 warn_since: None,
1889 deny_since: None,
1890 },
1891];
1892
1893pub const DEFAULT_LINT_GROUPS: &[LintGroup] = &[
1894 LintGroup {
1895 lint: Lint {
1896 label: "deprecated_safe",
1897 description: r##"lint group for: deprecated-safe-2024"##,
1898 default_severity: Severity::Allow,
1899 warn_since: None,
1900 deny_since: None,
1901 },
1902 children: &["deprecated_safe_2024"],
1903 },
1904 LintGroup {
1905 lint: Lint {
1906 label: "future_incompatible",
1907 description: r##"lint group for: internal-eq-trait-method-impls, aarch64-softfloat-neon, ambiguous-associated-items, ambiguous-derive-helpers, ambiguous-glob-imported-traits, ambiguous-glob-imports, ambiguous-import-visibilities, ambiguous-panic-imports, coherence-leak-check, conflicting-repr-hints, const-evaluatable-unchecked, float-literal-f32-fallback, forbidden-lint-groups, ill-formed-attribute-input, invalid-macro-export-arguments, invalid-type-param-default, late-bound-lifetime-arguments, legacy-derive-helpers, macro-expanded-macro-exports-accessed-by-absolute-paths, method-call-on-diverging-infer-var, out-of-scope-macro-calls, partial-stack-protector, patterns-in-fns-without-body, proc-macro-derive-resolution-fallback, pub-use-of-private-extern-crate, recursion-depth-exceeding-limit, repr-c-enums-larger-than-int, self-constructor-from-outer-item, semicolon-in-expressions-from-macros, semicolon-in-expressions-from-non-local-macros, uncovered-param-in-projection, uninhabited-static, unstable-imports, unstable-name-collisions, unstable-syntax-pre-expansion, unsupported-calling-conventions, varargs-without-pattern, x86-softfloat-sse"##,
1908 default_severity: Severity::Allow,
1909 warn_since: None,
1910 deny_since: None,
1911 },
1912 children: &[
1913 "internal_eq_trait_method_impls",
1914 "aarch64_softfloat_neon",
1915 "ambiguous_associated_items",
1916 "ambiguous_derive_helpers",
1917 "ambiguous_glob_imported_traits",
1918 "ambiguous_glob_imports",
1919 "ambiguous_import_visibilities",
1920 "ambiguous_panic_imports",
1921 "coherence_leak_check",
1922 "conflicting_repr_hints",
1923 "const_evaluatable_unchecked",
1924 "float_literal_f32_fallback",
1925 "forbidden_lint_groups",
1926 "ill_formed_attribute_input",
1927 "invalid_macro_export_arguments",
1928 "invalid_type_param_default",
1929 "late_bound_lifetime_arguments",
1930 "legacy_derive_helpers",
1931 "macro_expanded_macro_exports_accessed_by_absolute_paths",
1932 "method_call_on_diverging_infer_var",
1933 "out_of_scope_macro_calls",
1934 "partial_stack_protector",
1935 "patterns_in_fns_without_body",
1936 "proc_macro_derive_resolution_fallback",
1937 "pub_use_of_private_extern_crate",
1938 "recursion_depth_exceeding_limit",
1939 "repr_c_enums_larger_than_int",
1940 "self_constructor_from_outer_item",
1941 "semicolon_in_expressions_from_macros",
1942 "semicolon_in_expressions_from_non_local_macros",
1943 "uncovered_param_in_projection",
1944 "uninhabited_static",
1945 "unstable_imports",
1946 "unstable_name_collisions",
1947 "unstable_syntax_pre_expansion",
1948 "unsupported_calling_conventions",
1949 "varargs_without_pattern",
1950 "x86_softfloat_sse",
1951 ],
1952 },
1953 LintGroup {
1954 lint: Lint {
1955 label: "keyword_idents",
1956 description: r##"lint group for: keyword-idents-2018, keyword-idents-2024"##,
1957 default_severity: Severity::Allow,
1958 warn_since: None,
1959 deny_since: None,
1960 },
1961 children: &["keyword_idents_2018", "keyword_idents_2024"],
1962 },
1963 LintGroup {
1964 lint: Lint {
1965 label: "let_underscore",
1966 description: r##"lint group for: let-underscore-drop, let-underscore-lock"##,
1967 default_severity: Severity::Allow,
1968 warn_since: None,
1969 deny_since: None,
1970 },
1971 children: &["let_underscore_drop", "let_underscore_lock"],
1972 },
1973 LintGroup {
1974 lint: Lint {
1975 label: "nonstandard_style",
1976 description: r##"lint group for: non-camel-case-types, non-snake-case, non-upper-case-globals"##,
1977 default_severity: Severity::Allow,
1978 warn_since: None,
1979 deny_since: None,
1980 },
1981 children: &["non_camel_case_types", "non_snake_case", "non_upper_case_globals"],
1982 },
1983 LintGroup {
1984 lint: Lint {
1985 label: "refining_impl_trait",
1986 description: r##"lint group for: refining-impl-trait-reachable, refining-impl-trait-internal"##,
1987 default_severity: Severity::Allow,
1988 warn_since: None,
1989 deny_since: None,
1990 },
1991 children: &["refining_impl_trait_reachable", "refining_impl_trait_internal"],
1992 },
1993 LintGroup {
1994 lint: Lint {
1995 label: "rust_2018_compatibility",
1996 description: r##"lint group for: keyword-idents-2018, anonymous-parameters, absolute-paths-not-starting-with-crate, tyvar-behind-raw-pointer"##,
1997 default_severity: Severity::Allow,
1998 warn_since: None,
1999 deny_since: None,
2000 },
2001 children: &[
2002 "keyword_idents_2018",
2003 "anonymous_parameters",
2004 "absolute_paths_not_starting_with_crate",
2005 "tyvar_behind_raw_pointer",
2006 ],
2007 },
2008 LintGroup {
2009 lint: Lint {
2010 label: "rust_2018_idioms",
2011 description: r##"lint group for: bare-trait-objects, unused-extern-crates, ellipsis-inclusive-range-patterns, elided-lifetimes-in-paths, explicit-outlives-requirements"##,
2012 default_severity: Severity::Allow,
2013 warn_since: None,
2014 deny_since: None,
2015 },
2016 children: &[
2017 "bare_trait_objects",
2018 "unused_extern_crates",
2019 "ellipsis_inclusive_range_patterns",
2020 "elided_lifetimes_in_paths",
2021 "explicit_outlives_requirements",
2022 ],
2023 },
2024 LintGroup {
2025 lint: Lint {
2026 label: "rust_2021_compatibility",
2027 description: r##"lint group for: ellipsis-inclusive-range-patterns, non-fmt-panics, array-into-iter, bare-trait-objects, rust-2021-incompatible-closure-captures, rust-2021-incompatible-or-patterns, rust-2021-prefixes-incompatible-syntax, rust-2021-prelude-collisions"##,
2028 default_severity: Severity::Allow,
2029 warn_since: None,
2030 deny_since: None,
2031 },
2032 children: &[
2033 "ellipsis_inclusive_range_patterns",
2034 "non_fmt_panics",
2035 "array_into_iter",
2036 "bare_trait_objects",
2037 "rust_2021_incompatible_closure_captures",
2038 "rust_2021_incompatible_or_patterns",
2039 "rust_2021_prefixes_incompatible_syntax",
2040 "rust_2021_prelude_collisions",
2041 ],
2042 },
2043 LintGroup {
2044 lint: Lint {
2045 label: "rust_2024_compatibility",
2046 description: r##"lint group for: keyword-idents-2024, edition-2024-expr-fragment-specifier, if-let-rescope, impl-trait-overcaptures, boxed-slice-into-iter, static-mut-refs, deprecated-safe-2024, missing-unsafe-on-extern, 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"##,
2047 default_severity: Severity::Allow,
2048 warn_since: None,
2049 deny_since: None,
2050 },
2051 children: &[
2052 "keyword_idents_2024",
2053 "edition_2024_expr_fragment_specifier",
2054 "if_let_rescope",
2055 "impl_trait_overcaptures",
2056 "boxed_slice_into_iter",
2057 "static_mut_refs",
2058 "deprecated_safe_2024",
2059 "missing_unsafe_on_extern",
2060 "rust_2024_guarded_string_incompatible_syntax",
2061 "rust_2024_incompatible_pat",
2062 "rust_2024_prelude_collisions",
2063 "tail_expr_drop_order",
2064 "unsafe_attr_outside_unsafe",
2065 "unsafe_op_in_unsafe_fn",
2066 ],
2067 },
2068 LintGroup {
2069 lint: Lint {
2070 label: "unknown_or_malformed_diagnostic_attributes",
2071 description: r##"lint group for: malformed-diagnostic-attributes, malformed-diagnostic-format-literals, misplaced-diagnostic-attributes, unknown-diagnostic-attributes"##,
2072 default_severity: Severity::Allow,
2073 warn_since: None,
2074 deny_since: None,
2075 },
2076 children: &[
2077 "malformed_diagnostic_attributes",
2078 "malformed_diagnostic_format_literals",
2079 "misplaced_diagnostic_attributes",
2080 "unknown_diagnostic_attributes",
2081 ],
2082 },
2083 LintGroup {
2084 lint: Lint {
2085 label: "unused",
2086 description: r##"lint group for: unused-imports, unused-variables, unused-visibilities, unused-assignments, dead-code, unused-mut, unreachable-cfg-select-predicates, 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, repeated-reprs"##,
2087 default_severity: Severity::Allow,
2088 warn_since: None,
2089 deny_since: None,
2090 },
2091 children: &[
2092 "unused_imports",
2093 "unused_variables",
2094 "unused_visibilities",
2095 "unused_assignments",
2096 "dead_code",
2097 "unused_mut",
2098 "unreachable_cfg_select_predicates",
2099 "unreachable_code",
2100 "unreachable_patterns",
2101 "unused_must_use",
2102 "unused_unsafe",
2103 "path_statements",
2104 "unused_attributes",
2105 "unused_macros",
2106 "unused_macro_rules",
2107 "unused_allocation",
2108 "unused_doc_comments",
2109 "unused_extern_crates",
2110 "unused_features",
2111 "unused_labels",
2112 "unused_parens",
2113 "unused_braces",
2114 "redundant_semicolons",
2115 "map_unit_fn",
2116 "repeated_reprs",
2117 ],
2118 },
2119];
2120
2121pub const RUSTDOC_LINTS: &[Lint] = &[
2122 Lint {
2123 label: "rustdoc::bare_urls",
2124 description: r##"detects URLs that are not hyperlinks"##,
2125 default_severity: Severity::Warning,
2126 warn_since: None,
2127 deny_since: None,
2128 },
2129 Lint {
2130 label: "rustdoc::broken_footnote",
2131 description: r##"detects footnote references with no associated definition"##,
2132 default_severity: Severity::Warning,
2133 warn_since: None,
2134 deny_since: None,
2135 },
2136 Lint {
2137 label: "rustdoc::broken_intra_doc_links",
2138 description: r##"failures in resolving intra-doc link targets"##,
2139 default_severity: Severity::Warning,
2140 warn_since: None,
2141 deny_since: None,
2142 },
2143 Lint {
2144 label: "rustdoc::invalid_codeblock_attributes",
2145 description: r##"codeblock attribute looks a lot like a known one"##,
2146 default_severity: Severity::Warning,
2147 warn_since: None,
2148 deny_since: None,
2149 },
2150 Lint {
2151 label: "rustdoc::invalid_html_tags",
2152 description: r##"detects invalid HTML tags in doc comments"##,
2153 default_severity: Severity::Warning,
2154 warn_since: None,
2155 deny_since: None,
2156 },
2157 Lint {
2158 label: "rustdoc::invalid_markdown_table",
2159 description: r##"detects unescaped pipe in table rows in doc comments"##,
2160 default_severity: Severity::Warning,
2161 warn_since: None,
2162 deny_since: None,
2163 },
2164 Lint {
2165 label: "rustdoc::invalid_rust_codeblocks",
2166 description: r##"codeblock could not be parsed as valid Rust or is empty"##,
2167 default_severity: Severity::Warning,
2168 warn_since: None,
2169 deny_since: None,
2170 },
2171 Lint {
2172 label: "rustdoc::missing_crate_level_docs",
2173 description: r##"detects crates with no crate-level documentation"##,
2174 default_severity: Severity::Allow,
2175 warn_since: None,
2176 deny_since: None,
2177 },
2178 Lint {
2179 label: "rustdoc::missing_doc_code_examples",
2180 description: r##"detects publicly-exported items without code samples in their documentation"##,
2181 default_severity: Severity::Allow,
2182 warn_since: None,
2183 deny_since: None,
2184 },
2185 Lint {
2186 label: "rustdoc::private_doc_tests",
2187 description: r##"detects code samples in docs of private items not documented by rustdoc"##,
2188 default_severity: Severity::Allow,
2189 warn_since: None,
2190 deny_since: None,
2191 },
2192 Lint {
2193 label: "rustdoc::private_intra_doc_links",
2194 description: r##"linking from a public item to a private one"##,
2195 default_severity: Severity::Warning,
2196 warn_since: None,
2197 deny_since: None,
2198 },
2199 Lint {
2200 label: "rustdoc::redundant_explicit_links",
2201 description: r##"detects redundant explicit links in doc comments"##,
2202 default_severity: Severity::Warning,
2203 warn_since: None,
2204 deny_since: None,
2205 },
2206 Lint {
2207 label: "rustdoc::unescaped_backticks",
2208 description: r##"detects unescaped backticks in doc comments"##,
2209 default_severity: Severity::Allow,
2210 warn_since: None,
2211 deny_since: None,
2212 },
2213 Lint {
2214 label: "rustdoc::unused_footnote_definition",
2215 description: r##"detects unused footnote definitions"##,
2216 default_severity: Severity::Warning,
2217 warn_since: None,
2218 deny_since: None,
2219 },
2220 Lint {
2221 label: "rustdoc::all",
2222 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::broken-footnote, rustdoc::unused-footnote-definition, rustdoc::invalid-markdown-table"##,
2223 default_severity: Severity::Allow,
2224 warn_since: None,
2225 deny_since: None,
2226 },
2227];
2228
2229pub const RUSTDOC_LINT_GROUPS: &[LintGroup] = &[LintGroup {
2230 lint: Lint {
2231 label: "rustdoc::all",
2232 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::broken-footnote, rustdoc::unused-footnote-definition, rustdoc::invalid-markdown-table"##,
2233 default_severity: Severity::Allow,
2234 warn_since: None,
2235 deny_since: None,
2236 },
2237 children: &[
2238 "rustdoc::broken_intra_doc_links",
2239 "rustdoc::private_intra_doc_links",
2240 "rustdoc::private_doc_tests",
2241 "rustdoc::invalid_codeblock_attributes",
2242 "rustdoc::invalid_rust_codeblocks",
2243 "rustdoc::invalid_html_tags",
2244 "rustdoc::bare_urls",
2245 "rustdoc::missing_crate_level_docs",
2246 "rustdoc::unescaped_backticks",
2247 "rustdoc::redundant_explicit_links",
2248 "rustdoc::broken_footnote",
2249 "rustdoc::unused_footnote_definition",
2250 "rustdoc::invalid_markdown_table",
2251 ],
2252}];
2253
2254pub const FEATURES: &[Lint] = &[
2255 Lint {
2256 label: "aarch64_unstable_target_feature",
2257 description: r##"# `aarch64_unstable_target_feature`
2258
2259The remaining unstable target features on aarch64.
2260
2261The tracking issue for this feature is: [#150244]
2262
2263[#150244]: https://github.com/rust-lang/rust/issues/150244
2264
2265------------------------
2266"##,
2267 default_severity: Severity::Allow,
2268 warn_since: None,
2269 deny_since: None,
2270 },
2271 Lint {
2272 label: "aarch64_ver_target_feature",
2273 description: r##"# `aarch64_ver_target_feature`
2274
2275Instruction set "version" target features on aarch64.
2276
2277The tracking issue for this feature is: [#150245]
2278
2279[#150245]: https://github.com/rust-lang/rust/issues/150245
2280
2281------------------------
2282"##,
2283 default_severity: Severity::Allow,
2284 warn_since: None,
2285 deny_since: None,
2286 },
2287 Lint {
2288 label: "abi_avr_interrupt",
2289 description: r##"# `abi_avr_interrupt`
2290
2291Allows `extern "avr-interrupt" fn()` and `extern "avr-non-blocking-interrupt" fn()`.
2292
2293The tracking issue for this feature is: [#69664]
2294
2295[#69664]: https://github.com/rust-lang/rust/issues/69664
2296
2297------------------------
2298"##,
2299 default_severity: Severity::Allow,
2300 warn_since: None,
2301 deny_since: None,
2302 },
2303 Lint {
2304 label: "abi_cmse_nonsecure_call",
2305 description: r##"# `abi_cmse_nonsecure_call`
2306
2307The tracking issue for this feature is: [#81391]
2308
2309[#81391]: https://github.com/rust-lang/rust/issues/81391
2310
2311------------------------
2312
2313The [TrustZone-M
2314feature](https://developer.arm.com/documentation/100690/latest/) is available
2315for targets with the Armv8-M architecture profile (`thumbv8m` in their target
2316name).
2317LLVM, the Rust compiler and the linker are providing
2318[support](https://developer.arm.com/documentation/ecm0359818/latest/) for the
2319TrustZone-M feature.
2320
2321One of the things provided with this unstable feature is the "cmse-nonsecure-call" function ABI.
2322This ABI is used on function pointers to non-secure code to mark a non-secure function call
2323(see [section 5.5](https://developer.arm.com/documentation/ecm0359818/latest/) for details).
2324
2325With this ABI, the compiler will do the following to perform the call:
2326* save registers needed after the call to Secure memory
2327* clear all registers that might contain confidential information
2328* clear the Least Significant Bit of the function address
2329* branches using the BLXNS instruction
2330
2331To avoid using the non-secure stack, the compiler will constrain the number and
2332type of parameters/return value.
2333
2334<!-- NOTE(ignore) this example is specific to thumbv8m targets -->
2335
2336``` rust,ignore
2337#![no_std]
2338#![feature(abi_cmse_nonsecure_call)]
2339
2340#[no_mangle]
2341pub fn call_nonsecure_function(addr: usize) -> u32 {
2342 let non_secure_function =
2343 unsafe { core::mem::transmute::<usize, extern "cmse-nonsecure-call" fn() -> u32>(addr) };
2344 non_secure_function()
2345}
2346```
2347
2348``` text
2349$ rustc --emit asm --crate-type lib --target thumbv8m.main-none-eabi function.rs
2350
2351call_nonsecure_function:
2352 .fnstart
2353 .save {r7, lr}
2354 push {r7, lr}
2355 .setfp r7, sp
2356 mov r7, sp
2357 .pad #16
2358 sub sp, #16
2359 str r0, [sp, #12]
2360 ldr r0, [sp, #12]
2361 str r0, [sp, #8]
2362 b .LBB0_1
2363.LBB0_1:
2364 ldr r0, [sp, #8]
2365 push.w {r4, r5, r6, r7, r8, r9, r10, r11}
2366 bic r0, r0, #1
2367 mov r1, r0
2368 mov r2, r0
2369 mov r3, r0
2370 mov r4, r0
2371 mov r5, r0
2372 mov r6, r0
2373 mov r7, r0
2374 mov r8, r0
2375 mov r9, r0
2376 mov r10, r0
2377 mov r11, r0
2378 mov r12, r0
2379 msr apsr_nzcvq, r0
2380 blxns r0
2381 pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
2382 str r0, [sp, #4]
2383 b .LBB0_2
2384.LBB0_2:
2385 ldr r0, [sp, #4]
2386 add sp, #16
2387 pop {r7, pc}
2388```
2389"##,
2390 default_severity: Severity::Allow,
2391 warn_since: None,
2392 deny_since: None,
2393 },
2394 Lint {
2395 label: "abi_gpu_kernel",
2396 description: r##"# `abi_gpu_kernel`
2397
2398Allows `extern "gpu-kernel" fn()`.
2399
2400The tracking issue for this feature is: [#135467]
2401
2402[#135467]: https://github.com/rust-lang/rust/issues/135467
2403
2404------------------------
2405"##,
2406 default_severity: Severity::Allow,
2407 warn_since: None,
2408 deny_since: None,
2409 },
2410 Lint {
2411 label: "abi_msp430_interrupt",
2412 description: r##"# `abi_msp430_interrupt`
2413
2414The tracking issue for this feature is: [#38487]
2415
2416[#38487]: https://github.com/rust-lang/rust/issues/38487
2417
2418------------------------
2419
2420In the MSP430 architecture, interrupt handlers have a special calling
2421convention. You can use the `"msp430-interrupt"` ABI to make the compiler apply
2422the right calling convention to the interrupt handlers you define.
2423
2424<!-- NOTE(ignore) this example is specific to the msp430 target -->
2425
2426``` rust,ignore
2427#![feature(abi_msp430_interrupt)]
2428#![no_std]
2429
2430// Place the interrupt handler at the appropriate memory address
2431// (Alternatively, you can use `#[used]` and remove `pub` and `#[no_mangle]`)
2432#[link_section = "__interrupt_vector_10"]
2433#[no_mangle]
2434pub static TIM0_VECTOR: extern "msp430-interrupt" fn() = tim0;
2435
2436// The interrupt handler
2437extern "msp430-interrupt" fn tim0() {
2438 // ..
2439}
2440```
2441
2442``` text
2443$ msp430-elf-objdump -CD ./target/msp430/release/app
2444Disassembly of section __interrupt_vector_10:
2445
24460000fff2 <TIM0_VECTOR>:
2447 fff2: 00 c0 interrupt service routine at 0xc000
2448
2449Disassembly of section .text:
2450
24510000c000 <int::tim0>:
2452 c000: 00 13 reti
2453```
2454"##,
2455 default_severity: Severity::Allow,
2456 warn_since: None,
2457 deny_since: None,
2458 },
2459 Lint {
2460 label: "abi_ptx",
2461 description: r##"# `abi_ptx`
2462
2463The tracking issue for this feature is: [#38788]
2464
2465[#38788]: https://github.com/rust-lang/rust/issues/38788
2466
2467------------------------
2468
2469When emitting PTX code, all vanilla Rust functions (`fn`) get translated to
2470"device" functions. These functions are *not* callable from the host via the
2471CUDA API so a crate with only device functions is not too useful!
2472
2473OTOH, "global" functions *can* be called by the host; you can think of them
2474as the real public API of your crate. To produce a global function use the
2475`"ptx-kernel"` ABI.
2476
2477<!-- NOTE(ignore) this example is specific to the nvptx targets -->
2478
2479``` rust,ignore
2480#![feature(abi_ptx)]
2481#![no_std]
2482
2483pub unsafe extern "ptx-kernel" fn global_function() {
2484 device_function();
2485}
2486
2487pub fn device_function() {
2488 // ..
2489}
2490```
2491
2492``` text
2493$ xargo rustc --target nvptx64-nvidia-cuda --release -- --emit=asm
2494
2495$ cat $(find -name '*.s')
2496//
2497// Generated by LLVM NVPTX Back-End
2498//
2499
2500.version 3.2
2501.target sm_20
2502.address_size 64
2503
2504 // .globl _ZN6kernel15global_function17h46111ebe6516b382E
2505
2506.visible .entry _ZN6kernel15global_function17h46111ebe6516b382E()
2507{
2508
2509
2510 ret;
2511}
2512
2513 // .globl _ZN6kernel15device_function17hd6a0e4993bbf3f78E
2514.visible .func _ZN6kernel15device_function17hd6a0e4993bbf3f78E()
2515{
2516
2517
2518 ret;
2519}
2520```
2521"##,
2522 default_severity: Severity::Allow,
2523 warn_since: None,
2524 deny_since: None,
2525 },
2526 Lint {
2527 label: "abi_riscv_interrupt",
2528 description: r##"# `abi_riscv_interrupt`
2529
2530Allows `extern "riscv-interrupt-m" fn()` and `extern "riscv-interrupt-s" fn()`.
2531
2532The tracking issue for this feature is: [#111889]
2533
2534[#111889]: https://github.com/rust-lang/rust/issues/111889
2535
2536------------------------
2537"##,
2538 default_severity: Severity::Allow,
2539 warn_since: None,
2540 deny_since: None,
2541 },
2542 Lint {
2543 label: "abi_swift",
2544 description: r##"# `abi_swift`
2545
2546Allows `extern "Swift" fn()`.
2547
2548The tracking issue for this feature is: [#156481]
2549
2550[#156481]: https://github.com/rust-lang/rust/issues/156481
2551
2552------------------------
2553"##,
2554 default_severity: Severity::Allow,
2555 warn_since: None,
2556 deny_since: None,
2557 },
2558 Lint {
2559 label: "abi_vectorcall",
2560 description: r##"# `abi_vectorcall`
2561
2562The tracking issue for this feature is: [#124485]
2563
2564[#124485]: https://github.com/rust-lang/rust/issues/124485
2565
2566------------------------
2567
2568Adds support for the Windows `"vectorcall"` ABI, the equivalent of `__vectorcall` in MSVC.
2569
2570```rust,ignore (only-windows-or-x86-or-x86-64)
2571extern "vectorcall" {
2572 fn add_f64s(x: f64, y: f64) -> f64;
2573}
2574
2575fn main() {
2576 println!("{}", add_f64s(2.0, 4.0));
2577}
2578```
2579"##,
2580 default_severity: Severity::Allow,
2581 warn_since: None,
2582 deny_since: None,
2583 },
2584 Lint {
2585 label: "abi_x86_interrupt",
2586 description: r##"# `abi_x86_interrupt`
2587
2588Allows `extern "x86-interrupt" fn()`.
2589
2590The tracking issue for this feature is: [#40180]
2591
2592[#40180]: https://github.com/rust-lang/rust/issues/40180
2593
2594------------------------
2595"##,
2596 default_severity: Severity::Allow,
2597 warn_since: None,
2598 deny_since: None,
2599 },
2600 Lint {
2601 label: "abort_immediate",
2602 description: r##"# `abort_immediate`
2603
2604
2605
2606The tracking issue for this feature is: [#154601]
2607
2608[#154601]: https://github.com/rust-lang/rust/issues/154601
2609
2610------------------------
2611"##,
2612 default_severity: Severity::Allow,
2613 warn_since: None,
2614 deny_since: None,
2615 },
2616 Lint {
2617 label: "abort_unwind",
2618 description: r##"# `abort_unwind`
2619
2620
2621
2622The tracking issue for this feature is: [#130338]
2623
2624[#130338]: https://github.com/rust-lang/rust/issues/130338
2625
2626------------------------
2627"##,
2628 default_severity: Severity::Allow,
2629 warn_since: None,
2630 deny_since: None,
2631 },
2632 Lint {
2633 label: "acceptfilter",
2634 description: r##"# `acceptfilter`
2635
2636
2637
2638The tracking issue for this feature is: [#121891]
2639
2640[#121891]: https://github.com/rust-lang/rust/issues/121891
2641
2642------------------------
2643"##,
2644 default_severity: Severity::Allow,
2645 warn_since: None,
2646 deny_since: None,
2647 },
2648 Lint {
2649 label: "addr_parse_ascii",
2650 description: r##"# `addr_parse_ascii`
2651
2652
2653
2654The tracking issue for this feature is: [#101035]
2655
2656[#101035]: https://github.com/rust-lang/rust/issues/101035
2657
2658------------------------
2659"##,
2660 default_severity: Severity::Allow,
2661 warn_since: None,
2662 deny_since: None,
2663 },
2664 Lint {
2665 label: "addr_unspecified_from",
2666 description: r##"# `addr_unspecified_from`
2667
2668
2669
2670The tracking issue for this feature is: [#158975]
2671
2672[#158975]: https://github.com/rust-lang/rust/issues/158975
2673
2674------------------------
2675"##,
2676 default_severity: Severity::Allow,
2677 warn_since: None,
2678 deny_since: None,
2679 },
2680 Lint {
2681 label: "adt_const_params",
2682 description: r##"# `adt_const_params`
2683
2684The tracking issue for this feature is: [#95174]
2685
2686[#95174]: https://github.com/rust-lang/rust/issues/95174
2687
2688------------------------
2689
2690Allows for using more complex types for const parameters, such as structs or enums.
2691
2692```rust
2693#![feature(adt_const_params)]
2694#![allow(incomplete_features)]
2695
2696use std::marker::ConstParamTy;
2697
2698#[derive(ConstParamTy, PartialEq, Eq)]
2699enum Foo {
2700 A,
2701 B,
2702 C,
2703}
2704
2705#[derive(ConstParamTy, PartialEq, Eq)]
2706struct Bar {
2707 flag: bool,
2708}
2709
2710fn is_foo_a_and_bar_true<const F: Foo, const B: Bar>() -> bool {
2711 match (F, B.flag) {
2712 (Foo::A, true) => true,
2713 _ => false,
2714 }
2715}
2716```
2717"##,
2718 default_severity: Severity::Allow,
2719 warn_since: None,
2720 deny_since: None,
2721 },
2722 Lint {
2723 label: "align_to_uninit_mut",
2724 description: r##"# `align_to_uninit_mut`
2725
2726
2727
2728The tracking issue for this feature is: [#139062]
2729
2730[#139062]: https://github.com/rust-lang/rust/issues/139062
2731
2732------------------------
2733"##,
2734 default_severity: Severity::Allow,
2735 warn_since: None,
2736 deny_since: None,
2737 },
2738 Lint {
2739 label: "alloc_error_handler",
2740 description: r##"# `alloc_error_handler`
2741
2742Allows defining an `#[alloc_error_handler]`.
2743
2744The tracking issue for this feature is: [#51540]
2745
2746[#51540]: https://github.com/rust-lang/rust/issues/51540
2747
2748------------------------
2749"##,
2750 default_severity: Severity::Allow,
2751 warn_since: None,
2752 deny_since: None,
2753 },
2754 Lint {
2755 label: "alloc_error_hook",
2756 description: r##"# `alloc_error_hook`
2757
2758
2759
2760The tracking issue for this feature is: [#51245]
2761
2762[#51245]: https://github.com/rust-lang/rust/issues/51245
2763
2764------------------------
2765"##,
2766 default_severity: Severity::Allow,
2767 warn_since: None,
2768 deny_since: None,
2769 },
2770 Lint {
2771 label: "alloc_internals",
2772 description: r##"# `alloc_internals`
2773
2774
2775
2776This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
2777
2778------------------------
2779"##,
2780 default_severity: Severity::Allow,
2781 warn_since: None,
2782 deny_since: None,
2783 },
2784 Lint {
2785 label: "alloc_io",
2786 description: r##"# `alloc_io`
2787
2788
2789
2790The tracking issue for this feature is: [#154046]
2791
2792[#154046]: https://github.com/rust-lang/rust/issues/154046
2793
2794------------------------
2795"##,
2796 default_severity: Severity::Allow,
2797 warn_since: None,
2798 deny_since: None,
2799 },
2800 Lint {
2801 label: "alloc_slice_into_array",
2802 description: r##"# `alloc_slice_into_array`
2803
2804
2805
2806The tracking issue for this feature is: [#148082]
2807
2808[#148082]: https://github.com/rust-lang/rust/issues/148082
2809
2810------------------------
2811"##,
2812 default_severity: Severity::Allow,
2813 warn_since: None,
2814 deny_since: None,
2815 },
2816 Lint {
2817 label: "allocator_ext",
2818 description: r##"# `allocator_ext`
2819
2820The tracking issue for this feature is: [#163177]
2821
2822[#163177]: https://github.com/rust-lang/rust/issues/163177
2823
2824------------------------
2825
2826Sometimes you want the memory for one collection to use a different
2827allocator than the memory for another collection. In this case,
2828replacing the global allocator is not a workable option. Instead,
2829you need to pass in an instance of an `AllocRef` to each collection
2830for which you want a custom allocator.
2831
2832TBD
2833"##,
2834 default_severity: Severity::Allow,
2835 warn_since: None,
2836 deny_since: None,
2837 },
2838 Lint {
2839 label: "allocator_internals",
2840 description: r##"# `allocator_internals`
2841
2842This feature does not have a tracking issue, it is an unstable implementation
2843detail of the `global_allocator` feature not intended for use outside the
2844compiler.
2845
2846------------------------
2847"##,
2848 default_severity: Severity::Allow,
2849 warn_since: None,
2850 deny_since: None,
2851 },
2852 Lint {
2853 label: "alloctests",
2854 description: r##"# `alloctests`
2855
2856
2857
2858This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
2859
2860------------------------
2861"##,
2862 default_severity: Severity::Allow,
2863 warn_since: None,
2864 deny_since: None,
2865 },
2866 Lint {
2867 label: "allow_internal_unsafe",
2868 description: r##"# `allow_internal_unsafe`
2869
2870Allows using `#[allow_internal_unsafe]`. This is an attribute on `macro_rules!` and can't use the attribute handling below (it has to be checked before expansion possibly makes macros disappear).
2871
2872This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
2873
2874------------------------
2875"##,
2876 default_severity: Severity::Allow,
2877 warn_since: None,
2878 deny_since: None,
2879 },
2880 Lint {
2881 label: "allow_internal_unstable",
2882 description: r##"# `allow_internal_unstable`
2883
2884Allows using `#[allow_internal_unstable]`. This is an attribute on `macro_rules!` and can't use the attribute handling below (it has to be checked before expansion possibly makes macros disappear).
2885
2886This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
2887
2888------------------------
2889"##,
2890 default_severity: Severity::Allow,
2891 warn_since: None,
2892 deny_since: None,
2893 },
2894 Lint {
2895 label: "anonymous_lifetime_in_impl_trait",
2896 description: r##"# `anonymous_lifetime_in_impl_trait`
2897
2898Allows using anonymous lifetimes in argument-position impl-trait.
2899
2900This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
2901
2902------------------------
2903"##,
2904 default_severity: Severity::Allow,
2905 warn_since: None,
2906 deny_since: None,
2907 },
2908 Lint {
2909 label: "apx_target_feature",
2910 description: r##"# `apx_target_feature`
2911
2912The `apxf` target feature on x86
2913
2914The tracking issue for this feature is: [#139284]
2915
2916[#139284]: https://github.com/rust-lang/rust/issues/139284
2917
2918------------------------
2919"##,
2920 default_severity: Severity::Allow,
2921 warn_since: None,
2922 deny_since: None,
2923 },
2924 Lint {
2925 label: "arbitrary_self_types",
2926 description: r##"# `arbitrary_self_types`
2927
2928The tracking issue for this feature is: [#44874]
2929
2930[#44874]: https://github.com/rust-lang/rust/issues/44874
2931
2932------------------------
2933
2934Allows any type implementing `core::ops::Receiver<Target=T>` to be used as the type
2935of `self` in a method belonging to `T`.
2936
2937For example,
2938
2939```rust
2940#![feature(arbitrary_self_types)]
2941
2942struct A;
2943
2944impl A {
2945 fn f(self: SmartPtr<Self>) -> i32 { 1 } // note self type
2946}
2947
2948struct SmartPtr<T>(T);
2949
2950impl<T> core::ops::Receiver for SmartPtr<T> {
2951 type Target = T;
2952}
2953
2954fn main() {
2955 let smart_ptr = SmartPtr(A);
2956 assert_eq!(smart_ptr.f(), 1);
2957}
2958```
2959
2960The `Receiver` trait has a blanket implementation for all `T: Deref`, so in fact
2961things like this work too:
2962
2963```rust
2964#![feature(arbitrary_self_types)]
2965
2966use std::rc::Rc;
2967
2968struct A;
2969
2970impl A {
2971 fn f(self: Rc<Self>) -> i32 { 1 } // Rc implements Deref
2972}
2973
2974fn main() {
2975 let smart_ptr = Rc::new(A);
2976 assert_eq!(smart_ptr.f(), 1);
2977}
2978```
2979
2980Interestingly, that works even without the `arbitrary_self_types` feature
2981- but that's because certain types are _effectively_ hard coded, including
2982`Rc`. ("Hard coding" isn't quite true; they use a lang-item called
2983`LegacyReceiver` to denote their special-ness in this way). With the
2984`arbitrary_self_types` feature, their special-ness goes away, and custom
2985smart pointers can achieve the same.
2986
2987## Changes to method lookup
2988
2989Method lookup previously used to work by stepping through the `Deref`
2990chain then using the resulting list of steps in two different ways:
2991
2992* To identify types that might contribute methods via their `impl`
2993 blocks (inherent methods) or via traits
2994* To identify the types that the method receiver (`a` in the above
2995 examples) can be converted to.
2996
2997With this feature, these lists are created by instead stepping through
2998the `Receiver` chain. However, a note is kept about whether the type
2999can be reached also via the `Deref` chain.
3000
3001The full chain (via `Receiver` hops) is used for the first purpose
3002(identifying relevant `impl` blocks and traits); whereas the shorter
3003list (reachable via `Deref`) is used for the second purpose. That's
3004because, to convert the method target (`a` in `a.b()`) to the self
3005type, Rust may need to be able to use `Deref::deref`. Type conversions,
3006then, can only proceed as far as the end of the `Deref` chain whereas
3007the longer `Receiver` chain can be used to explore more places where
3008useful methods might reside.
3009
3010## Types suitable for use as smart pointers
3011
3012This feature allows the creation of customised smart pointers - for example
3013your own equivalent to `Rc` or `Box` with whatever capabilities you like.
3014Those smart pointers can either implement `Deref` (if it's safe to
3015create a reference to the referent) or `Receiver` (if it isn't).
3016
3017Either way, smart pointer types should mostly _avoid having methods_.
3018Calling methods on a smart pointer leads to ambiguity about whether you're
3019aiming for a method on the pointer, or on the referent.
3020
3021Best practice is therefore to put smart pointer functionality into
3022associated functions instead - that's what's done in all the smart pointer
3023types within Rust's standard library which implement `Receiver`.
3024
3025If you choose to add any methods to your smart pointer type, your users
3026may run into errors from deshadowing, as described in the next section.
3027
3028## Avoiding shadowing
3029
3030With or without this feature, Rust emits an error if it finds two method
3031candidates, like this:
3032
3033```rust,compile_fail
3034use std::pin::Pin;
3035use std::pin::pin;
3036
3037struct A;
3038
3039impl A {
3040 fn get_ref(self: Pin<&A>) {}
3041}
3042
3043fn main() {
3044 let pinned_a: Pin<&A> = pin!(A).as_ref();
3045 let pinned_a: Pin<&A> = pinned_a.as_ref();
3046 pinned_a.get_ref(); // error[E0034]: multiple applicable items in scope
3047}
3048```
3049
3050(this is why Rust's smart pointers are mostly carefully designed to avoid
3051having methods at all, and shouldn't add new methods in future.)
3052
3053With `arbitrary_self_types`, we take care to spot some other kinds of
3054conflict:
3055
3056```rust,compile_fail
3057#![feature(arbitrary_self_types)]
3058
3059use std::pin::Pin;
3060use std::pin::pin;
3061
3062struct A;
3063
3064impl A {
3065 fn get_ref(self: &Pin<&A>) {} // note &Pin
3066}
3067
3068fn main() {
3069 let pinned_a: Pin<&mut A> = pin!(A);
3070 let pinned_a: Pin<&A> = pinned_a.as_ref();
3071 pinned_a.get_ref();
3072}
3073```
3074
3075This is to guard against the case where an inner (referent) type has a
3076method of a given name, taking the smart pointer by reference, and then
3077the smart pointer implementer adds a similar method taking self by value.
3078As noted in the previous section, the safe option is simply
3079not to add methods to smart pointers, and then these errors can't occur.
3080"##,
3081 default_severity: Severity::Allow,
3082 warn_since: None,
3083 deny_since: None,
3084 },
3085 Lint {
3086 label: "arbitrary_self_types_pointers",
3087 description: r##"# `arbitrary_self_types_pointers`
3088
3089The tracking issue for this feature is: [#44874]
3090
3091[#38788]: https://github.com/rust-lang/rust/issues/44874
3092
3093------------------------
3094
3095This extends the [arbitrary self types] feature to allow methods to
3096receive `self` by pointer. For example:
3097
3098```rust
3099#![feature(arbitrary_self_types_pointers)]
3100
3101struct A;
3102
3103impl A {
3104 fn m(self: *const Self) {}
3105}
3106
3107fn main() {
3108 let a = A;
3109 let a_ptr: *const A = &a as *const A;
3110 a_ptr.m();
3111}
3112```
3113
3114In general this is not advised: it's thought to be better practice to wrap
3115raw pointers in a newtype wrapper which implements the `core::ops::Receiver`
3116trait, then you need "only" the `arbitrary_self_types` feature. For example:
3117
3118```rust
3119#![feature(arbitrary_self_types)]
3120#![allow(dead_code)]
3121
3122struct A;
3123
3124impl A {
3125 fn m(self: Wrapper<Self>) {} // can extract the pointer and do
3126 // what it needs
3127}
3128
3129struct Wrapper<T>(*const T);
3130
3131impl<T> core::ops::Receiver for Wrapper<T> {
3132 type Target = T;
3133}
3134
3135fn main() {
3136 let a = A;
3137 let a_ptr: *const A = &a as *const A;
3138 let a_wrapper = Wrapper(a_ptr);
3139 a_wrapper.m();
3140}
3141```
3142
3143[arbitrary self types]: arbitrary-self-types.md
3144"##,
3145 default_severity: Severity::Allow,
3146 warn_since: None,
3147 deny_since: None,
3148 },
3149 Lint {
3150 label: "arc_is_unique",
3151 description: r##"# `arc_is_unique`
3152
3153
3154
3155The tracking issue for this feature is: [#138938]
3156
3157[#138938]: https://github.com/rust-lang/rust/issues/138938
3158
3159------------------------
3160"##,
3161 default_severity: Severity::Allow,
3162 warn_since: None,
3163 deny_since: None,
3164 },
3165 Lint {
3166 label: "arc_raw_get_strong",
3167 description: r##"# `arc_raw_get_strong`
3168
3169
3170
3171The tracking issue for this feature is: [#157021]
3172
3173[#157021]: https://github.com/rust-lang/rust/issues/157021
3174
3175------------------------
3176"##,
3177 default_severity: Severity::Allow,
3178 warn_since: None,
3179 deny_since: None,
3180 },
3181 Lint {
3182 label: "arm_target_feature",
3183 description: r##"# `arm_target_feature`
3184
3185Target features on arm.
3186
3187The tracking issue for this feature is: [#150246]
3188
3189[#150246]: https://github.com/rust-lang/rust/issues/150246
3190
3191------------------------
3192"##,
3193 default_severity: Severity::Allow,
3194 warn_since: None,
3195 deny_since: None,
3196 },
3197 Lint {
3198 label: "array_into_iter_constructors",
3199 description: r##"# `array_into_iter_constructors`
3200
3201
3202
3203The tracking issue for this feature is: [#91583]
3204
3205[#91583]: https://github.com/rust-lang/rust/issues/91583
3206
3207------------------------
3208"##,
3209 default_severity: Severity::Allow,
3210 warn_since: None,
3211 deny_since: None,
3212 },
3213 Lint {
3214 label: "array_ptr_get",
3215 description: r##"# `array_ptr_get`
3216
3217
3218
3219The tracking issue for this feature is: [#119834]
3220
3221[#119834]: https://github.com/rust-lang/rust/issues/119834
3222
3223------------------------
3224"##,
3225 default_severity: Severity::Allow,
3226 warn_since: None,
3227 deny_since: None,
3228 },
3229 Lint {
3230 label: "array_try_from_fn",
3231 description: r##"# `array_try_from_fn`
3232
3233
3234
3235The tracking issue for this feature is: [#89379]
3236
3237[#89379]: https://github.com/rust-lang/rust/issues/89379
3238
3239------------------------
3240"##,
3241 default_severity: Severity::Allow,
3242 warn_since: None,
3243 deny_since: None,
3244 },
3245 Lint {
3246 label: "array_try_map",
3247 description: r##"# `array_try_map`
3248
3249
3250
3251The tracking issue for this feature is: [#79711]
3252
3253[#79711]: https://github.com/rust-lang/rust/issues/79711
3254
3255------------------------
3256"##,
3257 default_severity: Severity::Allow,
3258 warn_since: None,
3259 deny_since: None,
3260 },
3261 Lint {
3262 label: "ascii_char",
3263 description: r##"# `ascii_char`
3264
3265
3266
3267The tracking issue for this feature is: [#110998]
3268
3269[#110998]: https://github.com/rust-lang/rust/issues/110998
3270
3271------------------------
3272"##,
3273 default_severity: Severity::Allow,
3274 warn_since: None,
3275 deny_since: None,
3276 },
3277 Lint {
3278 label: "ascii_char_variants",
3279 description: r##"# `ascii_char_variants`
3280
3281
3282
3283The tracking issue for this feature is: [#110998]
3284
3285[#110998]: https://github.com/rust-lang/rust/issues/110998
3286
3287------------------------
3288"##,
3289 default_severity: Severity::Allow,
3290 warn_since: None,
3291 deny_since: None,
3292 },
3293 Lint {
3294 label: "asm_const_ptr",
3295 description: r##"# `asm_const_ptr`
3296
3297Allows using `const` operands with pointer in inline assembly.
3298
3299The tracking issue for this feature is: [#128464]
3300
3301[#128464]: https://github.com/rust-lang/rust/issues/128464
3302
3303------------------------
3304"##,
3305 default_severity: Severity::Allow,
3306 warn_since: None,
3307 deny_since: None,
3308 },
3309 Lint {
3310 label: "asm_experimental_arch",
3311 description: r##"# `asm_experimental_arch`
3312
3313The tracking issue for this feature is: [#93335]
3314
3315[#93335]: https://github.com/rust-lang/rust/issues/93335
3316
3317------------------------
3318
3319This feature tracks `asm!` and `global_asm!` support for the following architectures:
3320- NVPTX
3321- Hexagon
3322- MIPS32r2 and MIPS64r2
3323- wasm32
3324- BPF
3325- SPIR-V
3326- AVR
3327- MSP430
3328- M68k
3329- CSKY
3330- SPARC
3331- Xtensa
3332
3333## Register classes
3334
3335| Architecture | Register class | Registers | LLVM constraint code |
3336| ------------ | -------------- | ---------------------------------- | -------------------- |
3337| MIPS | `reg` | `$[2-25]` | `r` |
3338| MIPS | `freg` | `$f[0-31]` | `f` |
3339| NVPTX | `reg16` | None\* | `h` |
3340| NVPTX | `reg32` | None\* | `r` |
3341| NVPTX | `reg64` | None\* | `l` |
3342| Hexagon | `reg` | `r[0-28]` | `r` |
3343| Hexagon | `preg` | `p[0-3]` | Only clobbers |
3344| wasm32 | `local` | None\* | `r` |
3345| BPF | `reg` | `r[0-10]` | `r` |
3346| BPF | `wreg` | `w[0-10]` | `w` |
3347| AVR | `reg` | `r[2-25]`, `XH`, `XL`, `ZH`, `ZL` | `r` |
3348| AVR | `reg_upper` | `r[16-25]`, `XH`, `XL`, `ZH`, `ZL` | `d` |
3349| AVR | `reg_pair` | `r3r2` .. `r25r24`, `X`, `Z` | `r` |
3350| AVR | `reg_iw` | `r25r24`, `X`, `Z` | `w` |
3351| AVR | `reg_ptr` | `X`, `Z` | `e` |
3352| MSP430 | `reg` | `r[0-15]` | `r` |
3353| M68k | `reg` | `d[0-7]`, `a[0-7]` | `r` |
3354| M68k | `reg_data` | `d[0-7]` | `d` |
3355| M68k | `reg_addr` | `a[0-3]` | `a` |
3356| CSKY | `reg` | `r[0-31]` | `r` |
3357| CSKY | `freg` | `f[0-31]` | `f` |
3358| SPARC | `reg` | `r[2-29]` | `r` |
3359| SPARC | `yreg` | `y` | Only clobbers |
3360| Xtensa | `reg` | `a[2-15]` | `r` |
3361| Xtensa | `freg` | `f[0-15]` | `f` |
3362| Xtensa | `sreg` | `sar`, `scompare1`, `lbeg`, `lend`, `lcount`, `acclo`, `acchi`, `m[0-3]` | Only clobbers |
3363| Xtensa | `breg` | `b[0-15]` | Only clobbers |
3364
3365> **Notes**:
3366> - NVPTX doesn't have a fixed register set, so named registers are not supported.
3367>
3368> - WebAssembly doesn't have registers, so named registers are not supported.
3369
3370# Register class supported types
3371
3372| Architecture | Register class | Target feature | Allowed types |
3373| ------------ | ------------------------------- | -------------- | --------------------------------------- |
3374| MIPS32 | `reg` | None | `i8`, `i16`, `i32`, `f32` |
3375| MIPS32 | `freg` | None | `f32`, `f64` |
3376| MIPS64 | `reg` | None | `i8`, `i16`, `i32`, `i64`, `f32`, `f64` |
3377| MIPS64 | `freg` | None | `f32`, `f64` |
3378| NVPTX | `reg16` | None | `i8`, `i16` |
3379| NVPTX | `reg32` | None | `i8`, `i16`, `i32`, `f32` |
3380| NVPTX | `reg64` | None | `i8`, `i16`, `i32`, `f32`, `i64`, `f64` |
3381| Hexagon | `reg` | None | `i8`, `i16`, `i32`, `f32` |
3382| Hexagon | `preg` | N/A | Only clobbers |
3383| wasm32 | `local` | None | `i8` `i16` `i32` `i64` `f32` `f64` |
3384| BPF | `reg` | None | `i8` `i16` `i32` `i64` |
3385| BPF | `wreg` | `alu32` | `i8` `i16` `i32` |
3386| AVR | `reg`, `reg_upper` | None | `i8` |
3387| AVR | `reg_pair`, `reg_iw`, `reg_ptr` | None | `i16` |
3388| MSP430 | `reg` | None | `i8`, `i16` |
3389| M68k | `reg`, `reg_addr` | None | `i16`, `i32` |
3390| M68k | `reg_data` | None | `i8`, `i16`, `i32` |
3391| CSKY | `reg` | None | `i8`, `i16`, `i32` |
3392| CSKY | `freg` | None | `f32`, |
3393| SPARC | `reg` | None | `i8`, `i16`, `i32`, `i64` (SPARC64 only) |
3394| SPARC | `yreg` | N/A | Only clobbers |
3395| Xtensa | `reg` | None | `i8`, `i16`, `i32` |
3396| Xtensa | `freg` | `fp` | `f32` |
3397| Xtensa | `sreg` | N/A | Only clobbers |
3398| Xtensa | `breg` | `bool` | Only clobbers |
3399
3400## Register aliases
3401
3402| Architecture | Base register | Aliases |
3403| ------------ | ------------- | --------- |
3404| Hexagon | `r29` | `sp` |
3405| Hexagon | `r30` | `fr` |
3406| Hexagon | `r31` | `lr` |
3407| BPF | `r[0-10]` | `w[0-10]` |
3408| AVR | `XH` | `r27` |
3409| AVR | `XL` | `r26` |
3410| AVR | `ZH` | `r31` |
3411| AVR | `ZL` | `r30` |
3412| MSP430 | `r0` | `pc` |
3413| MSP430 | `r1` | `sp` |
3414| MSP430 | `r2` | `sr` |
3415| MSP430 | `r3` | `cg` |
3416| MSP430 | `r4` | `fp` |
3417| M68k | `a5` | `bp` |
3418| M68k | `a6` | `fp` |
3419| M68k | `a7` | `sp`, `usp`, `ssp`, `isp` |
3420| CSKY | `r[0-3]` | `a[0-3]` |
3421| CSKY | `r[4-11]` | `l[0-7]` |
3422| CSKY | `r[12-13]` | `t[0-1]` |
3423| CSKY | `r14` | `sp` |
3424| CSKY | `r15` | `lr` |
3425| CSKY | `r[16-17]` | `l[8-9]` |
3426| CSKY | `r[18-25]` | `t[2-9]` |
3427| CSKY | `r28` | `rgb` |
3428| CSKY | `r29` | `rtb` |
3429| CSKY | `r30` | `svbr` |
3430| CSKY | `r31` | `tls` |
3431| SPARC | `r[0-7]` | `g[0-7]` |
3432| SPARC | `r[8-15]` | `o[0-7]` |
3433| SPARC | `r[16-23]` | `l[0-7]` |
3434| SPARC | `r[24-31]` | `i[0-7]` |
3435| Xtensa | `a1` | `sp` |
3436
3437> **Notes**:
3438> - TI does not mandate a frame pointer for MSP430, but toolchains are allowed
3439 to use one; LLVM uses `r4`.
3440
3441## Unsupported registers
3442
3443| Architecture | Unsupported register | Reason |
3444| ------------ | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
3445| All | `sp`, `r14`/`o6` (SPARC) | The stack pointer must be restored to its original value at the end of an asm code block. |
3446| All | `fr` (Hexagon) `$fp` (MIPS), `Y` (AVR), `r4` (MSP430), `a6` (M68k), `r30`/`i6` (SPARC) | The frame pointer cannot be used as an input or output. |
3447| All | `r19` (Hexagon) | These are used internally by LLVM as "base pointer" for functions with complex stack frames. |
3448| MIPS | `$0` or `$zero` | This is a constant zero register which can't be modified. |
3449| MIPS | `$1` or `$at` | Reserved for assembler. |
3450| MIPS | `$26`/`$k0`, `$27`/`$k1` | OS-reserved registers. |
3451| MIPS | `$28`/`$gp` | Global pointer cannot be used as inputs or outputs. |
3452| MIPS | `$ra` | Return address cannot be used as inputs or outputs. |
3453| Hexagon | `lr` | This is the link register which cannot be used as an input or output. |
3454| 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. |
3455|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. |
3456| M68k | `a4`, `a5` | Used internally by LLVM for the base pointer and global base pointer. |
3457| CSKY | `r7`, `r28` | Used internally by LLVM for the base pointer and global base pointer. |
3458| CSKY | `r8` | Used internally by LLVM for the frame pointer. |
3459| CSKY | `r14` | Used internally by LLVM for the stack pointer. |
3460| CSKY | `r15` | This is the link register. |
3461| CSKY | `r[26-30]` | Reserved by its ABI. |
3462| CSKY | `r31` | This is the TLS register. |
3463| SPARC | `r0`/`g0` | This is always zero and cannot be used as inputs or outputs. |
3464| SPARC | `r1`/`g1` | Used internally by LLVM. |
3465| SPARC | `r5`/`g5` | Reserved for system. (SPARC32 only) |
3466| SPARC | `r6`/`g6`, `r7`/`g7` | Reserved for system. |
3467| SPARC | `r31`/`i7` | Return address cannot be used as inputs or outputs. |
3468| Xtensa | `a0` | This is the return address register and is used internally by LLVM. |
3469| Xtensa | `a1`/`sp` | This is the stack pointer and is used internally by LLVM. |
3470| Xtensa | `a7` (windowed ABI) / `a15` (call0 ABI) | The frame pointer cannot be used as an input or output. |
3471
3472
3473## Template modifiers
3474
3475| Architecture | Register class | Modifier | Example output | LLVM modifier |
3476| ------------ | -------------- | -------- | -------------- | ------------- |
3477| MIPS | `reg` | None | `$2` | None |
3478| MIPS | `freg` | None | `$f0` | None |
3479| NVPTX | `reg16` | None | `rs0` | None |
3480| NVPTX | `reg32` | None | `r0` | None |
3481| NVPTX | `reg64` | None | `rd0` | None |
3482| Hexagon | `reg` | None | `r0` | None |
3483| SPARC | `reg` | None | `%o0` | None |
3484| CSKY | `reg` | None | `r0` | None |
3485| CSKY | `freg` | None | `f0` | None |
3486| Xtensa | `reg` | None | `a2` | None |
3487| Xtensa | `freg` | None | `f0` | None |
3488
3489# Flags covered by `preserves_flags`
3490
3491These flags registers must be restored upon exiting the asm block if the `preserves_flags` option is set:
3492- AVR
3493 - The status register `SREG`.
3494- MSP430
3495 - The status register `r2`.
3496- M68k
3497 - The condition code register `ccr`.
3498- SPARC
3499 - Integer condition codes (`icc` and `xcc`)
3500 - Floating-point condition codes (`fcc[0-3]`)
3501- CSKY
3502 - Condition/carry bit (C) in `PSR`.
3503"##,
3504 default_severity: Severity::Allow,
3505 warn_since: None,
3506 deny_since: None,
3507 },
3508 Lint {
3509 label: "asm_experimental_reg",
3510 description: r##"# `asm_experimental_reg`
3511
3512The tracking issue for this feature is: [#133416]
3513
3514[#133416]: https://github.com/rust-lang/rust/issues/133416
3515
3516------------------------
3517
3518This tracks support for additional registers in architectures where inline assembly is already stable.
3519
3520## Register classes
3521
3522| Architecture | Register class | Registers | LLVM constraint code |
3523| ------------ | -------------- | --------- | -------------------- |
3524| LoongArch | `vreg` | `$vr[0-31]` | `f` |
3525| LoongArch | `xreg` | `$xr[0-31]` | `f` |
3526| AArch64 | `preg` | `p[0-16]` | `Upa` |
3527
3528## Register class supported types
3529
3530| Architecture | Register class | Target feature | Allowed types |
3531| ------------ | -------------- | -------------- | ------------- |
3532| LoongArch | `vreg` | `lsx` | `i128`, `f32`, `f64`, <br> `i8x16`, `i16x8`, `i32x4`, `i64x2`, `f32x4`, `f64x2` |
3533| LoongArch | `xreg` | `lasx` | `i128`, `f32`, `f64`, <br> `i8x16`, `i16x8`, `i32x4`, `i64x2`, `f32x4`, `f64x2`, <br> `i8x32`, `i16x16`, `i32x8`, `i64x4`, `f32x8`, `f64x4` |
3534| AArch64 | `vreg` | `sve` | `i8xN`, `i16xB`, `i32xN`, `i64xN`, `f16xN`, `f32xN`, `f64xN` (scalable vector) |
3535| AArch64 | `preg` | `sve` | `i1xN` (scalable vector predicate) |
3536
3537## Register aliases
3538
3539| Architecture | Base register | Aliases |
3540| ------------ | ------------- | ------- |
3541| LoongArch | `$f[0-7]` | `$fa[0-7]`, `$vr[0-7]`, `$xr[0-7]` |
3542| LoongArch | `$f[8-23]` | `$ft[0-15]`, `$vr[8-23]`, `$xr[8-23]` |
3543| LoongArch | `$f[24-31]` | `$fs[0-7]`, `$vr[24-31]`, `$xr[24-31]` |
3544
3545## Unsupported registers
3546
3547| Architecture | Unsupported register | Reason |
3548| ------------ | -------------------- | ------ |
3549
3550## Template modifiers
3551
3552| Architecture | Register class | Modifier | Example output | LLVM modifier |
3553| ------------ | -------------- | -------- | -------------- | ------------- |
3554| LoongArch | `freg` | `w` | `$vr0` | `w` |
3555| LoongArch | `freg` | `u` | `$xr0` | `u` |
3556| LoongArch | `vreg` | None | `$vr0` | `w` |
3557| LoongArch | `vreg` | `u` | `$xr0` | `u` |
3558| LoongArch | `xreg` | None | `$xr0` | `u` |
3559| LoongArch | `xreg` | `w` | `$vr0` | `w` |
3560| AArch64 | `vreg` | `z` | `z0` | `z` |
3561"##,
3562 default_severity: Severity::Allow,
3563 warn_since: None,
3564 deny_since: None,
3565 },
3566 Lint {
3567 label: "asm_goto_with_outputs",
3568 description: r##"# `asm_goto_with_outputs`
3569
3570The tracking issue for this feature is: [#119364]
3571
3572[#119364]: https://github.com/rust-lang/rust/issues/119364
3573
3574------------------------
3575
3576This feature allows label operands to be used together with output operands.
3577
3578Example:
3579```rust,ignore (partial-example, x86-only)
3580
3581unsafe {
3582 let a: usize;
3583 asm!(
3584 "mov {}, 1"
3585 "jmp {}",
3586 out(reg) a,
3587 label {
3588 println!("Jumped from asm {}!", a);
3589 }
3590 );
3591}
3592```
3593
3594The output operands are assigned before the label blocks are executed.
3595"##,
3596 default_severity: Severity::Allow,
3597 warn_since: None,
3598 deny_since: None,
3599 },
3600 Lint {
3601 label: "asm_unwind",
3602 description: r##"# `asm_unwind`
3603
3604The tracking issue for this feature is: [#93334]
3605
3606[#93334]: https://github.com/rust-lang/rust/issues/93334
3607
3608------------------------
3609
3610This 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.
3611"##,
3612 default_severity: Severity::Allow,
3613 warn_since: None,
3614 deny_since: None,
3615 },
3616 Lint {
3617 label: "associated_type_defaults",
3618 description: r##"# `associated_type_defaults`
3619
3620Allows associated type defaults.
3621
3622The tracking issue for this feature is: [#29661]
3623
3624[#29661]: https://github.com/rust-lang/rust/issues/29661
3625
3626------------------------
3627"##,
3628 default_severity: Severity::Allow,
3629 warn_since: None,
3630 deny_since: None,
3631 },
3632 Lint {
3633 label: "async_drop",
3634 description: r##"# `async_drop`
3635
3636Allows implementing `AsyncDrop`.
3637
3638The tracking issue for this feature is: [#126482]
3639
3640[#126482]: https://github.com/rust-lang/rust/issues/126482
3641
3642------------------------
3643"##,
3644 default_severity: Severity::Allow,
3645 warn_since: None,
3646 deny_since: None,
3647 },
3648 Lint {
3649 label: "async_fn_in_dyn_trait",
3650 description: r##"# `async_fn_in_dyn_trait`
3651
3652Allows async functions to be called from `dyn Trait`.
3653
3654The tracking issue for this feature is: [#133119]
3655
3656[#133119]: https://github.com/rust-lang/rust/issues/133119
3657
3658------------------------
3659"##,
3660 default_severity: Severity::Allow,
3661 warn_since: None,
3662 deny_since: None,
3663 },
3664 Lint {
3665 label: "async_fn_track_caller",
3666 description: r##"# `async_fn_track_caller`
3667
3668Allows `#[track_caller]` on async functions.
3669
3670The tracking issue for this feature is: [#110011]
3671
3672[#110011]: https://github.com/rust-lang/rust/issues/110011
3673
3674------------------------
3675"##,
3676 default_severity: Severity::Allow,
3677 warn_since: None,
3678 deny_since: None,
3679 },
3680 Lint {
3681 label: "async_fn_traits",
3682 description: r##"# `async_fn_traits`
3683
3684See Also: [`fn_traits`](../library-features/fn-traits.md)
3685
3686----
3687
3688The `async_fn_traits` feature allows for implementation of the [`AsyncFn*`] traits
3689for creating custom closure-like types that return futures.
3690
3691[`AsyncFn*`]: ../../std/ops/trait.AsyncFn.html
3692
3693The main difference to the `Fn*` family of traits is that `AsyncFn` can return a future
3694that borrows from itself (`FnOnce::Output` has no lifetime parameters, while `AsyncFnMut::CallRefFuture` does).
3695"##,
3696 default_severity: Severity::Allow,
3697 warn_since: None,
3698 deny_since: None,
3699 },
3700 Lint {
3701 label: "async_for_loop",
3702 description: r##"# `async_for_loop`
3703
3704Allows `for await` loops.
3705
3706The tracking issue for this feature is: [#118898]
3707
3708[#118898]: https://github.com/rust-lang/rust/issues/118898
3709
3710------------------------
3711"##,
3712 default_severity: Severity::Allow,
3713 warn_since: None,
3714 deny_since: None,
3715 },
3716 Lint {
3717 label: "async_gen_internals",
3718 description: r##"# `async_gen_internals`
3719
3720
3721
3722This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
3723
3724------------------------
3725"##,
3726 default_severity: Severity::Allow,
3727 warn_since: None,
3728 deny_since: None,
3729 },
3730 Lint {
3731 label: "async_iter_from_iter",
3732 description: r##"# `async_iter_from_iter`
3733
3734
3735
3736The tracking issue for this feature is: [#81798]
3737
3738[#81798]: https://github.com/rust-lang/rust/issues/81798
3739
3740------------------------
3741"##,
3742 default_severity: Severity::Allow,
3743 warn_since: None,
3744 deny_since: None,
3745 },
3746 Lint {
3747 label: "async_iterator",
3748 description: r##"# `async_iterator`
3749
3750
3751
3752The tracking issue for this feature is: [#79024]
3753
3754[#79024]: https://github.com/rust-lang/rust/issues/79024
3755
3756------------------------
3757"##,
3758 default_severity: Severity::Allow,
3759 warn_since: None,
3760 deny_since: None,
3761 },
3762 Lint {
3763 label: "async_trait_bounds",
3764 description: r##"# `async_trait_bounds`
3765
3766Allows `async` trait bound modifier.
3767
3768The tracking issue for this feature is: [#62290]
3769
3770[#62290]: https://github.com/rust-lang/rust/issues/62290
3771
3772------------------------
3773"##,
3774 default_severity: Severity::Allow,
3775 warn_since: None,
3776 deny_since: None,
3777 },
3778 Lint {
3779 label: "atomic_internals",
3780 description: r##"# `atomic_internals`
3781
3782
3783
3784This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
3785
3786------------------------
3787"##,
3788 default_severity: Severity::Allow,
3789 warn_since: None,
3790 deny_since: None,
3791 },
3792 Lint {
3793 label: "atomic_ptr_null",
3794 description: r##"# `atomic_ptr_null`
3795
3796
3797
3798The tracking issue for this feature is: [#150733]
3799
3800[#150733]: https://github.com/rust-lang/rust/issues/150733
3801
3802------------------------
3803"##,
3804 default_severity: Severity::Allow,
3805 warn_since: None,
3806 deny_since: None,
3807 },
3808 Lint {
3809 label: "atomic_volatile",
3810 description: r##"# `atomic_volatile`
3811
3812
3813
3814The tracking issue for this feature is: [#158947]
3815
3816[#158947]: https://github.com/rust-lang/rust/issues/158947
3817
3818------------------------
3819"##,
3820 default_severity: Severity::Allow,
3821 warn_since: None,
3822 deny_since: None,
3823 },
3824 Lint {
3825 label: "auto_traits",
3826 description: r##"# `auto_traits`
3827
3828The tracking issue for this feature is [#13231]
3829
3830[#13231]: https://github.com/rust-lang/rust/issues/13231
3831
3832----
3833
3834The `auto_traits` feature gate allows you to define auto traits.
3835
3836Auto traits, like [`Send`] or [`Sync`] in the standard library, are marker traits
3837that are automatically implemented for every type, unless the type, or a type it contains,
3838has explicitly opted out via a negative impl. (Negative impls are separately controlled
3839by the `negative_impls` feature.)
3840
3841[`Send`]: ../../std/marker/trait.Send.html
3842[`Sync`]: ../../std/marker/trait.Sync.html
3843
3844```rust,ignore (partial-example)
3845impl !Trait for Type {}
3846```
3847
3848Example:
3849
3850```rust
3851#![feature(negative_impls)]
3852#![feature(auto_traits)]
3853
3854auto trait Valid {}
3855
3856struct True;
3857struct False;
3858
3859impl !Valid for False {}
3860
3861struct MaybeValid<T>(T);
3862
3863fn must_be_valid<T: Valid>(_t: T) { }
3864
3865fn main() {
3866 // works
3867 must_be_valid( MaybeValid(True) );
3868
3869 // compiler error - trait bound not satisfied
3870 // must_be_valid( MaybeValid(False) );
3871}
3872```
3873
3874## Automatic trait implementations
3875
3876When a type is declared as an `auto trait`, we will automatically
3877create impls for every struct/enum/union, unless an explicit impl is
3878provided. These automatic impls contain a where clause for each field
3879of the form `T: AutoTrait`, where `T` is the type of the field and
3880`AutoTrait` is the auto trait in question. As an example, consider the
3881struct `List` and the auto trait `Send`:
3882
3883```rust
3884struct List<T> {
3885 data: T,
3886 next: Option<Box<List<T>>>,
3887}
3888```
3889
3890Presuming that there is no explicit impl of `Send` for `List`, the
3891compiler will supply an automatic impl of the form:
3892
3893```rust
3894struct List<T> {
3895 data: T,
3896 next: Option<Box<List<T>>>,
3897}
3898
3899unsafe impl<T> Send for List<T>
3900where
3901 T: Send, // from the field `data`
3902 Option<Box<List<T>>>: Send, // from the field `next`
3903{ }
3904```
3905
3906Explicit impls may be either positive or negative. They take the form:
3907
3908```rust,ignore (partial-example)
3909impl<...> AutoTrait for StructName<..> { }
3910impl<...> !AutoTrait for StructName<..> { }
3911```
3912
3913## Coinduction: Auto traits permit cyclic matching
3914
3915Unlike ordinary trait matching, auto traits are **coinductive**. This
3916means, in short, that cycles which occur in trait matching are
3917considered ok. As an example, consider the recursive struct `List`
3918introduced in the previous section. In attempting to determine whether
3919`List: Send`, we would wind up in a cycle: to apply the impl, we must
3920show that `Option<Box<List>>: Send`, which will in turn require
3921`Box<List>: Send` and then finally `List: Send` again. Under ordinary
3922trait matching, this cycle would be an error, but for an auto trait it
3923is considered a successful match.
3924
3925## Items
3926
3927Auto traits cannot have any trait items, such as methods or associated types. This ensures that we can generate default implementations.
3928
3929## Supertraits
3930
3931Auto traits cannot have supertraits. This is for soundness reasons, as the interaction of coinduction with implied bounds is difficult to reconcile.
3932"##,
3933 default_severity: Severity::Allow,
3934 warn_since: None,
3935 deny_since: None,
3936 },
3937 Lint {
3938 label: "autodiff",
3939 description: r##"# `autodiff`
3940
3941
3942
3943The tracking issue for this feature is: [#124509]
3944
3945[#124509]: https://github.com/rust-lang/rust/issues/124509
3946
3947------------------------
3948"##,
3949 default_severity: Severity::Allow,
3950 warn_since: None,
3951 deny_since: None,
3952 },
3953 Lint {
3954 label: "avr_target_feature",
3955 description: r##"# `avr_target_feature`
3956
3957Target features on avr.
3958
3959The tracking issue for this feature is: [#146889]
3960
3961[#146889]: https://github.com/rust-lang/rust/issues/146889
3962
3963------------------------
3964"##,
3965 default_severity: Severity::Allow,
3966 warn_since: None,
3967 deny_since: None,
3968 },
3969 Lint {
3970 label: "avx10_target_feature",
3971 description: r##"# `avx10_target_feature`
3972
3973Allows using Intel AVX10 target features and intrinsics
3974
3975The tracking issue for this feature is: [#138843]
3976
3977[#138843]: https://github.com/rust-lang/rust/issues/138843
3978
3979------------------------
3980"##,
3981 default_severity: Severity::Allow,
3982 warn_since: None,
3983 deny_since: None,
3984 },
3985 Lint {
3986 label: "backtrace_frames",
3987 description: r##"# `backtrace_frames`
3988
3989
3990
3991The tracking issue for this feature is: [#79676]
3992
3993[#79676]: https://github.com/rust-lang/rust/issues/79676
3994
3995------------------------
3996"##,
3997 default_severity: Severity::Allow,
3998 warn_since: None,
3999 deny_since: None,
4000 },
4001 Lint {
4002 label: "bikeshed_guaranteed_no_drop",
4003 description: r##"# `bikeshed_guaranteed_no_drop`
4004
4005
4006
4007This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
4008
4009------------------------
4010"##,
4011 default_severity: Severity::Allow,
4012 warn_since: None,
4013 deny_since: None,
4014 },
4015 Lint {
4016 label: "binary_heap_as_mut_slice",
4017 description: r##"# `binary_heap_as_mut_slice`
4018
4019
4020
4021The tracking issue for this feature is: [#154009]
4022
4023[#154009]: https://github.com/rust-lang/rust/issues/154009
4024
4025------------------------
4026"##,
4027 default_severity: Severity::Allow,
4028 warn_since: None,
4029 deny_since: None,
4030 },
4031 Lint {
4032 label: "binary_heap_drain_sorted",
4033 description: r##"# `binary_heap_drain_sorted`
4034
4035
4036
4037The tracking issue for this feature is: [#59278]
4038
4039[#59278]: https://github.com/rust-lang/rust/issues/59278
4040
4041------------------------
4042"##,
4043 default_severity: Severity::Allow,
4044 warn_since: None,
4045 deny_since: None,
4046 },
4047 Lint {
4048 label: "binary_heap_from_raw_vec",
4049 description: r##"# `binary_heap_from_raw_vec`
4050
4051
4052
4053The tracking issue for this feature is: [#152500]
4054
4055[#152500]: https://github.com/rust-lang/rust/issues/152500
4056
4057------------------------
4058"##,
4059 default_severity: Severity::Allow,
4060 warn_since: None,
4061 deny_since: None,
4062 },
4063 Lint {
4064 label: "binary_heap_into_iter_sorted",
4065 description: r##"# `binary_heap_into_iter_sorted`
4066
4067
4068
4069The tracking issue for this feature is: [#59278]
4070
4071[#59278]: https://github.com/rust-lang/rust/issues/59278
4072
4073------------------------
4074"##,
4075 default_severity: Severity::Allow,
4076 warn_since: None,
4077 deny_since: None,
4078 },
4079 Lint {
4080 label: "binary_heap_peek_mut_refresh",
4081 description: r##"# `binary_heap_peek_mut_refresh`
4082
4083
4084
4085The tracking issue for this feature is: [#138355]
4086
4087[#138355]: https://github.com/rust-lang/rust/issues/138355
4088
4089------------------------
4090"##,
4091 default_severity: Severity::Allow,
4092 warn_since: None,
4093 deny_since: None,
4094 },
4095 Lint {
4096 label: "binary_heap_pop_if",
4097 description: r##"# `binary_heap_pop_if`
4098
4099
4100
4101The tracking issue for this feature is: [#151828]
4102
4103[#151828]: https://github.com/rust-lang/rust/issues/151828
4104
4105------------------------
4106"##,
4107 default_severity: Severity::Allow,
4108 warn_since: None,
4109 deny_since: None,
4110 },
4111 Lint {
4112 label: "borrowed_buf_init",
4113 description: r##"# `borrowed_buf_init`
4114
4115
4116
4117The tracking issue for this feature is: [#160476]
4118
4119[#160476]: https://github.com/rust-lang/rust/issues/160476
4120
4121------------------------
4122"##,
4123 default_severity: Severity::Allow,
4124 warn_since: None,
4125 deny_since: None,
4126 },
4127 Lint {
4128 label: "bound_as_ref",
4129 description: r##"# `bound_as_ref`
4130
4131
4132
4133The tracking issue for this feature is: [#80996]
4134
4135[#80996]: https://github.com/rust-lang/rust/issues/80996
4136
4137------------------------
4138"##,
4139 default_severity: Severity::Allow,
4140 warn_since: None,
4141 deny_since: None,
4142 },
4143 Lint {
4144 label: "bound_copied",
4145 description: r##"# `bound_copied`
4146
4147
4148
4149The tracking issue for this feature is: [#145966]
4150
4151[#145966]: https://github.com/rust-lang/rust/issues/145966
4152
4153------------------------
4154"##,
4155 default_severity: Severity::Allow,
4156 warn_since: None,
4157 deny_since: None,
4158 },
4159 Lint {
4160 label: "box_as_non_null",
4161 description: r##"# `box_as_non_null`
4162
4163
4164
4165The tracking issue for this feature is: [#157345]
4166
4167[#157345]: https://github.com/rust-lang/rust/issues/157345
4168
4169------------------------
4170"##,
4171 default_severity: Severity::Allow,
4172 warn_since: None,
4173 deny_since: None,
4174 },
4175 Lint {
4176 label: "box_internals",
4177 description: r##"# `box_internals`
4178
4179
4180
4181This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
4182
4183------------------------
4184"##,
4185 default_severity: Severity::Allow,
4186 warn_since: None,
4187 deny_since: None,
4188 },
4189 Lint {
4190 label: "box_into_boxed_slice",
4191 description: r##"# `box_into_boxed_slice`
4192
4193
4194
4195The tracking issue for this feature is: [#71582]
4196
4197[#71582]: https://github.com/rust-lang/rust/issues/71582
4198
4199------------------------
4200"##,
4201 default_severity: Severity::Allow,
4202 warn_since: None,
4203 deny_since: None,
4204 },
4205 Lint {
4206 label: "box_into_inner",
4207 description: r##"# `box_into_inner`
4208
4209
4210
4211The tracking issue for this feature is: [#80437]
4212
4213[#80437]: https://github.com/rust-lang/rust/issues/80437
4214
4215------------------------
4216"##,
4217 default_severity: Severity::Allow,
4218 warn_since: None,
4219 deny_since: None,
4220 },
4221 Lint {
4222 label: "bpf_target_feature",
4223 description: r##"# `bpf_target_feature`
4224
4225Target features on bpf.
4226
4227The tracking issue for this feature is: [#150247]
4228
4229[#150247]: https://github.com/rust-lang/rust/issues/150247
4230
4231------------------------
4232"##,
4233 default_severity: Severity::Allow,
4234 warn_since: None,
4235 deny_since: None,
4236 },
4237 Lint {
4238 label: "breakpoint",
4239 description: r##"# `breakpoint`
4240
4241
4242
4243The tracking issue for this feature is: [#133724]
4244
4245[#133724]: https://github.com/rust-lang/rust/issues/133724
4246
4247------------------------
4248"##,
4249 default_severity: Severity::Allow,
4250 warn_since: None,
4251 deny_since: None,
4252 },
4253 Lint {
4254 label: "btree_cursors",
4255 description: r##"# `btree_cursors`
4256
4257
4258
4259The tracking issue for this feature is: [#107540]
4260
4261[#107540]: https://github.com/rust-lang/rust/issues/107540
4262
4263------------------------
4264"##,
4265 default_severity: Severity::Allow,
4266 warn_since: None,
4267 deny_since: None,
4268 },
4269 Lint {
4270 label: "btree_merge",
4271 description: r##"# `btree_merge`
4272
4273
4274
4275The tracking issue for this feature is: [#152152]
4276
4277[#152152]: https://github.com/rust-lang/rust/issues/152152
4278
4279------------------------
4280"##,
4281 default_severity: Severity::Allow,
4282 warn_since: None,
4283 deny_since: None,
4284 },
4285 Lint {
4286 label: "btree_set_entry",
4287 description: r##"# `btree_set_entry`
4288
4289
4290
4291The tracking issue for this feature is: [#133549]
4292
4293[#133549]: https://github.com/rust-lang/rust/issues/133549
4294
4295------------------------
4296"##,
4297 default_severity: Severity::Allow,
4298 warn_since: None,
4299 deny_since: None,
4300 },
4301 Lint {
4302 label: "btreemap_alloc",
4303 description: r##"# `btreemap_alloc`
4304
4305
4306
4307The tracking issue for this feature is: [#163177]
4308
4309[#163177]: https://github.com/rust-lang/rust/issues/163177
4310
4311------------------------
4312"##,
4313 default_severity: Severity::Allow,
4314 warn_since: None,
4315 deny_since: None,
4316 },
4317 Lint {
4318 label: "buf_read_has_data_left",
4319 description: r##"# `buf_read_has_data_left`
4320
4321
4322
4323The tracking issue for this feature is: [#86423]
4324
4325[#86423]: https://github.com/rust-lang/rust/issues/86423
4326
4327------------------------
4328"##,
4329 default_severity: Severity::Allow,
4330 warn_since: None,
4331 deny_since: None,
4332 },
4333 Lint {
4334 label: "bufreader_peek",
4335 description: r##"# `bufreader_peek`
4336
4337
4338
4339The tracking issue for this feature is: [#128405]
4340
4341[#128405]: https://github.com/rust-lang/rust/issues/128405
4342
4343------------------------
4344"##,
4345 default_severity: Severity::Allow,
4346 warn_since: None,
4347 deny_since: None,
4348 },
4349 Lint {
4350 label: "builtin_syntax",
4351 description: r##"# `builtin_syntax`
4352
4353Allows builtin # foo() syntax
4354
4355The tracking issue for this feature is: [#110680]
4356
4357[#110680]: https://github.com/rust-lang/rust/issues/110680
4358
4359------------------------
4360"##,
4361 default_severity: Severity::Allow,
4362 warn_since: None,
4363 deny_since: None,
4364 },
4365 Lint {
4366 label: "byte_str",
4367 description: r##"# `byte_str`
4368
4369
4370
4371The tracking issue for this feature is: [#134915]
4372
4373[#134915]: https://github.com/rust-lang/rust/issues/134915
4374
4375------------------------
4376"##,
4377 default_severity: Severity::Allow,
4378 warn_since: None,
4379 deny_since: None,
4380 },
4381 Lint {
4382 label: "byte_str_internals",
4383 description: r##"# `byte_str_internals`
4384
4385
4386
4387This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
4388
4389------------------------
4390"##,
4391 default_severity: Severity::Allow,
4392 warn_since: None,
4393 deny_since: None,
4394 },
4395 Lint {
4396 label: "byte_str_to_string",
4397 description: r##"# `byte_str_to_string`
4398
4399
4400
4401The tracking issue for this feature is: [#134915]
4402
4403[#134915]: https://github.com/rust-lang/rust/issues/134915
4404
4405------------------------
4406"##,
4407 default_severity: Severity::Allow,
4408 warn_since: None,
4409 deny_since: None,
4410 },
4411 Lint {
4412 label: "c_size_t",
4413 description: r##"# `c_size_t`
4414
4415
4416
4417The tracking issue for this feature is: [#88345]
4418
4419[#88345]: https://github.com/rust-lang/rust/issues/88345
4420
4421------------------------
4422"##,
4423 default_severity: Severity::Allow,
4424 warn_since: None,
4425 deny_since: None,
4426 },
4427 Lint {
4428 label: "c_variadic_experimental_arch",
4429 description: r##"# `c_variadic_experimental_arch`
4430
4431Allows defining c-variadic functions on targets where this feature has not yet undergone sufficient testing for stabilization.
4432
4433The tracking issue for this feature is: [#155973]
4434
4435[#155973]: https://github.com/rust-lang/rust/issues/155973
4436
4437------------------------
4438"##,
4439 default_severity: Severity::Allow,
4440 warn_since: None,
4441 deny_since: None,
4442 },
4443 Lint {
4444 label: "c_variadic_int128",
4445 description: r##"# `c_variadic_int128`
4446
4447
4448
4449The tracking issue for this feature is: [#155752]
4450
4451[#155752]: https://github.com/rust-lang/rust/issues/155752
4452
4453------------------------
4454"##,
4455 default_severity: Severity::Allow,
4456 warn_since: None,
4457 deny_since: None,
4458 },
4459 Lint {
4460 label: "c_variadic_va_arg_safe",
4461 description: r##"# `c_variadic_va_arg_safe`
4462
4463
4464
4465The tracking issue for this feature is: [#162911]
4466
4467[#162911]: https://github.com/rust-lang/rust/issues/162911
4468
4469------------------------
4470"##,
4471 default_severity: Severity::Allow,
4472 warn_since: None,
4473 deny_since: None,
4474 },
4475 Lint {
4476 label: "c_void_variant",
4477 description: r##"# `c_void_variant`
4478
4479This feature is internal to the Rust compiler and is not intended for general use.
4480
4481------------------------
4482"##,
4483 default_severity: Severity::Allow,
4484 warn_since: None,
4485 deny_since: None,
4486 },
4487 Lint {
4488 label: "can_vector",
4489 description: r##"# `can_vector`
4490
4491
4492
4493The tracking issue for this feature is: [#69941]
4494
4495[#69941]: https://github.com/rust-lang/rust/issues/69941
4496
4497------------------------
4498"##,
4499 default_severity: Severity::Allow,
4500 warn_since: None,
4501 deny_since: None,
4502 },
4503 Lint {
4504 label: "case_ignorable",
4505 description: r##"# `case_ignorable`
4506
4507
4508
4509The tracking issue for this feature is: [#154848]
4510
4511[#154848]: https://github.com/rust-lang/rust/issues/154848
4512
4513------------------------
4514"##,
4515 default_severity: Severity::Allow,
4516 warn_since: None,
4517 deny_since: None,
4518 },
4519 Lint {
4520 label: "casefold",
4521 description: r##"# `casefold`
4522
4523
4524
4525The tracking issue for this feature is: [#157000]
4526
4527[#157000]: https://github.com/rust-lang/rust/issues/157000
4528
4529------------------------
4530"##,
4531 default_severity: Severity::Allow,
4532 warn_since: None,
4533 deny_since: None,
4534 },
4535 Lint {
4536 label: "cast_maybe_uninit",
4537 description: r##"# `cast_maybe_uninit`
4538
4539
4540
4541The tracking issue for this feature is: [#145036]
4542
4543[#145036]: https://github.com/rust-lang/rust/issues/145036
4544
4545------------------------
4546"##,
4547 default_severity: Severity::Allow,
4548 warn_since: None,
4549 deny_since: None,
4550 },
4551 Lint {
4552 label: "cell_get_cloned",
4553 description: r##"# `cell_get_cloned`
4554
4555
4556
4557The tracking issue for this feature is: [#145329]
4558
4559[#145329]: https://github.com/rust-lang/rust/issues/145329
4560
4561------------------------
4562"##,
4563 default_severity: Severity::Allow,
4564 warn_since: None,
4565 deny_since: None,
4566 },
4567 Lint {
4568 label: "cell_leak",
4569 description: r##"# `cell_leak`
4570
4571
4572
4573The tracking issue for this feature is: [#69099]
4574
4575[#69099]: https://github.com/rust-lang/rust/issues/69099
4576
4577------------------------
4578"##,
4579 default_severity: Severity::Allow,
4580 warn_since: None,
4581 deny_since: None,
4582 },
4583 Lint {
4584 label: "cfg_accessible",
4585 description: r##"# `cfg_accessible`
4586
4587
4588
4589The tracking issue for this feature is: [#64797]
4590
4591[#64797]: https://github.com/rust-lang/rust/issues/64797
4592
4593------------------------
4594"##,
4595 default_severity: Severity::Allow,
4596 warn_since: None,
4597 deny_since: None,
4598 },
4599 Lint {
4600 label: "cfg_contract_checks",
4601 description: r##"# `cfg_contract_checks`
4602
4603Allows the use of `#[cfg(contract_checks)` to check if contract checks are enabled.
4604
4605The tracking issue for this feature is: [#128044]
4606
4607[#128044]: https://github.com/rust-lang/rust/issues/128044
4608
4609------------------------
4610"##,
4611 default_severity: Severity::Allow,
4612 warn_since: None,
4613 deny_since: None,
4614 },
4615 Lint {
4616 label: "cfg_eval",
4617 description: r##"# `cfg_eval`
4618
4619
4620
4621The tracking issue for this feature is: [#82679]
4622
4623[#82679]: https://github.com/rust-lang/rust/issues/82679
4624
4625------------------------
4626"##,
4627 default_severity: Severity::Allow,
4628 warn_since: None,
4629 deny_since: None,
4630 },
4631 Lint {
4632 label: "cfg_overflow_checks",
4633 description: r##"# `cfg_overflow_checks`
4634
4635Allows the use of `#[cfg(overflow_checks)` to check if integer overflow behaviour.
4636
4637The tracking issue for this feature is: [#111466]
4638
4639[#111466]: https://github.com/rust-lang/rust/issues/111466
4640
4641------------------------
4642"##,
4643 default_severity: Severity::Allow,
4644 warn_since: None,
4645 deny_since: None,
4646 },
4647 Lint {
4648 label: "cfg_relocation_model",
4649 description: r##"# `cfg_relocation_model`
4650
4651Provides the relocation model information as cfg entry
4652
4653The tracking issue for this feature is: [#114929]
4654
4655[#114929]: https://github.com/rust-lang/rust/issues/114929
4656
4657------------------------
4658"##,
4659 default_severity: Severity::Allow,
4660 warn_since: None,
4661 deny_since: None,
4662 },
4663 Lint {
4664 label: "cfg_sanitize",
4665 description: r##"# `cfg_sanitize`
4666
4667The tracking issue for this feature is: [#39699]
4668
4669[#39699]: https://github.com/rust-lang/rust/issues/39699
4670
4671------------------------
4672
4673The `cfg_sanitize` feature makes it possible to execute different code
4674depending on whether a particular sanitizer is enabled or not.
4675
4676## Examples
4677
4678```rust
4679#![feature(cfg_sanitize)]
4680
4681#[cfg(sanitize = "thread")]
4682fn a() {
4683 // ...
4684}
4685
4686#[cfg(not(sanitize = "thread"))]
4687fn a() {
4688 // ...
4689}
4690
4691fn b() {
4692 if cfg!(sanitize = "leak") {
4693 // ...
4694 } else {
4695 // ...
4696 }
4697}
4698```
4699"##,
4700 default_severity: Severity::Allow,
4701 warn_since: None,
4702 deny_since: None,
4703 },
4704 Lint {
4705 label: "cfg_sanitizer_cfi",
4706 description: r##"# `cfg_sanitizer_cfi`
4707
4708Allows `cfg(sanitizer_cfi_generalize_pointers)` and `cfg(sanitizer_cfi_normalize_integers)`.
4709
4710The tracking issue for this feature is: [#89653]
4711
4712[#89653]: https://github.com/rust-lang/rust/issues/89653
4713
4714------------------------
4715"##,
4716 default_severity: Severity::Allow,
4717 warn_since: None,
4718 deny_since: None,
4719 },
4720 Lint {
4721 label: "cfg_target_compact",
4722 description: r##"# `cfg_target_compact`
4723
4724Allows `cfg(target(abi = "..."))`.
4725
4726The tracking issue for this feature is: [#96901]
4727
4728[#96901]: https://github.com/rust-lang/rust/issues/96901
4729
4730------------------------
4731"##,
4732 default_severity: Severity::Allow,
4733 warn_since: None,
4734 deny_since: None,
4735 },
4736 Lint {
4737 label: "cfg_target_has_atomic",
4738 description: r##"# `cfg_target_has_atomic`
4739
4740Allows `cfg(target_has_atomic_load_store = "...")`.
4741
4742The tracking issue for this feature is: [#94039]
4743
4744[#94039]: https://github.com/rust-lang/rust/issues/94039
4745
4746------------------------
4747"##,
4748 default_severity: Severity::Allow,
4749 warn_since: None,
4750 deny_since: None,
4751 },
4752 Lint {
4753 label: "cfg_target_has_reliable_f16_f128",
4754 description: r##"# `cfg_target_has_reliable_f16_f128`
4755
4756Allows checking whether or not the backend correctly supports unstable float types.
4757
4758This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
4759
4760------------------------
4761"##,
4762 default_severity: Severity::Allow,
4763 warn_since: None,
4764 deny_since: None,
4765 },
4766 Lint {
4767 label: "cfg_target_has_reliable_f16b",
4768 description: r##"# `cfg_target_has_reliable_f16b`
4769
4770Allows checking whether or not the backend correctly supports the unstable `f16b` type.
4771
4772This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
4773
4774------------------------
4775"##,
4776 default_severity: Severity::Allow,
4777 warn_since: None,
4778 deny_since: None,
4779 },
4780 Lint {
4781 label: "cfg_target_has_threads",
4782 description: r##"# `cfg_target_has_threads`
4783
4784Allows checking whether or not the target might have thread support.
4785
4786This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
4787
4788------------------------
4789"##,
4790 default_severity: Severity::Allow,
4791 warn_since: None,
4792 deny_since: None,
4793 },
4794 Lint {
4795 label: "cfg_target_object_format",
4796 description: r##"# `cfg_target_object_format`
4797
4798The tracking issue for this feature is: [#152586]
4799
4800[#152586]: https://github.com/rust-lang/rust/issues/152586
4801
4802------------------------
4803
4804The `cfg_target_object_format` feature makes it possible to execute different code
4805depending on the current target's object file format.
4806
4807## Examples
4808
4809```rust
4810#![feature(cfg_target_object_format)]
4811
4812#[cfg(target_object_format = "elf")]
4813fn a() {
4814 // ...
4815}
4816
4817#[cfg(target_object_format = "mach-o")]
4818fn a() {
4819 // ...
4820}
4821
4822fn b() {
4823 if cfg!(target_object_format = "wasm") {
4824 // ...
4825 } else {
4826 // ...
4827 }
4828}
4829```
4830"##,
4831 default_severity: Severity::Allow,
4832 warn_since: None,
4833 deny_since: None,
4834 },
4835 Lint {
4836 label: "cfg_target_thread_local",
4837 description: r##"# `cfg_target_thread_local`
4838
4839Allows `cfg(target_thread_local)`.
4840
4841The tracking issue for this feature is: [#29594]
4842
4843[#29594]: https://github.com/rust-lang/rust/issues/29594
4844
4845------------------------
4846"##,
4847 default_severity: Severity::Allow,
4848 warn_since: None,
4849 deny_since: None,
4850 },
4851 Lint {
4852 label: "cfg_ub_checks",
4853 description: r##"# `cfg_ub_checks`
4854
4855Allows the use of `#[cfg(ub_checks)` to check if UB checks are enabled.
4856
4857The tracking issue for this feature is: [#123499]
4858
4859[#123499]: https://github.com/rust-lang/rust/issues/123499
4860
4861------------------------
4862"##,
4863 default_severity: Severity::Allow,
4864 warn_since: None,
4865 deny_since: None,
4866 },
4867 Lint {
4868 label: "cfg_version",
4869 description: r##"# `cfg_version`
4870
4871The tracking issue for this feature is: [#64796]
4872
4873[#64796]: https://github.com/rust-lang/rust/issues/64796
4874
4875------------------------
4876
4877The `cfg_version` feature makes it possible to execute different code
4878depending on the compiler version. It will return true if the compiler
4879version is greater than or equal to the specified version.
4880
4881## Examples
4882
4883```rust
4884#![feature(cfg_version)]
4885
4886#[cfg(version("1.42"))] // 1.42 and above
4887fn a() {
4888 // ...
4889}
4890
4891#[cfg(not(version("1.42")))] // 1.41 and below
4892fn a() {
4893 // ...
4894}
4895
4896fn b() {
4897 if cfg!(version("1.42")) {
4898 // ...
4899 } else {
4900 // ...
4901 }
4902}
4903```
4904"##,
4905 default_severity: Severity::Allow,
4906 warn_since: None,
4907 deny_since: None,
4908 },
4909 Lint {
4910 label: "cfi_encoding",
4911 description: r##"# `cfi_encoding`
4912
4913The tracking issue for this feature is: [#89653]
4914
4915[#89653]: https://github.com/rust-lang/rust/issues/89653
4916
4917------------------------
4918
4919The `cfi_encoding` feature allows the user to define a CFI encoding for a type.
4920It allows the user to use a different names for types that otherwise would be
4921required to have the same name as used in externally defined C functions.
4922
4923## Examples
4924
4925```rust
4926#![feature(cfi_encoding, extern_types)]
4927
4928#[cfi_encoding = "3Foo"]
4929pub struct Type1(i32);
4930
4931extern {
4932 #[cfi_encoding = "3Bar"]
4933 type Type2;
4934}
4935```
4936"##,
4937 default_severity: Severity::Allow,
4938 warn_since: None,
4939 deny_since: None,
4940 },
4941 Lint {
4942 label: "char_internals",
4943 description: r##"# `char_internals`
4944
4945
4946
4947This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
4948
4949------------------------
4950"##,
4951 default_severity: Severity::Allow,
4952 warn_since: None,
4953 deny_since: None,
4954 },
4955 Lint {
4956 label: "char_to_u32",
4957 description: r##"# `char_to_u32`
4958
4959
4960
4961The tracking issue for this feature is: [#158938]
4962
4963[#158938]: https://github.com/rust-lang/rust/issues/158938
4964
4965------------------------
4966"##,
4967 default_severity: Severity::Allow,
4968 warn_since: None,
4969 deny_since: None,
4970 },
4971 Lint {
4972 label: "char_unassigned_private_use",
4973 description: r##"# `char_unassigned_private_use`
4974
4975
4976
4977The tracking issue for this feature is: [#158322]
4978
4979[#158322]: https://github.com/rust-lang/rust/issues/158322
4980
4981------------------------
4982"##,
4983 default_severity: Severity::Allow,
4984 warn_since: None,
4985 deny_since: None,
4986 },
4987 Lint {
4988 label: "checked_type_aliases",
4989 description: r##"# `checked_type_aliases`
4990
4991Allow to have type alias types for inter-crate use.
4992
4993The tracking issue for this feature is: [#112792]
4994
4995[#112792]: https://github.com/rust-lang/rust/issues/112792
4996
4997------------------------
4998"##,
4999 default_severity: Severity::Allow,
5000 warn_since: None,
5001 deny_since: None,
5002 },
5003 Lint {
5004 label: "clamp_bounds",
5005 description: r##"# `clamp_bounds`
5006
5007
5008
5009The tracking issue for this feature is: [#147781]
5010
5011[#147781]: https://github.com/rust-lang/rust/issues/147781
5012
5013------------------------
5014"##,
5015 default_severity: Severity::Allow,
5016 warn_since: None,
5017 deny_since: None,
5018 },
5019 Lint {
5020 label: "clamp_magnitude",
5021 description: r##"# `clamp_magnitude`
5022
5023
5024
5025The tracking issue for this feature is: [#148519]
5026
5027[#148519]: https://github.com/rust-lang/rust/issues/148519
5028
5029------------------------
5030"##,
5031 default_severity: Severity::Allow,
5032 warn_since: None,
5033 deny_since: None,
5034 },
5035 Lint {
5036 label: "clamp_to",
5037 description: r##"# `clamp_to`
5038
5039
5040
5041The tracking issue for this feature is: [#147781]
5042
5043[#147781]: https://github.com/rust-lang/rust/issues/147781
5044
5045------------------------
5046"##,
5047 default_severity: Severity::Allow,
5048 warn_since: None,
5049 deny_since: None,
5050 },
5051 Lint {
5052 label: "clflushopt_target_feature",
5053 description: r##"# `clflushopt_target_feature`
5054
5055The `clflushopt` target feature on x86.
5056
5057The tracking issue for this feature is: [#157096]
5058
5059[#157096]: https://github.com/rust-lang/rust/issues/157096
5060
5061------------------------
5062"##,
5063 default_severity: Severity::Allow,
5064 warn_since: None,
5065 deny_since: None,
5066 },
5067 Lint {
5068 label: "clone_from_ref",
5069 description: r##"# `clone_from_ref`
5070
5071
5072
5073The tracking issue for this feature is: [#149075]
5074
5075[#149075]: https://github.com/rust-lang/rust/issues/149075
5076
5077------------------------
5078"##,
5079 default_severity: Severity::Allow,
5080 warn_since: None,
5081 deny_since: None,
5082 },
5083 Lint {
5084 label: "clone_to_uninit",
5085 description: r##"# `clone_to_uninit`
5086
5087
5088
5089The tracking issue for this feature is: [#126799]
5090
5091[#126799]: https://github.com/rust-lang/rust/issues/126799
5092
5093------------------------
5094"##,
5095 default_severity: Severity::Allow,
5096 warn_since: None,
5097 deny_since: None,
5098 },
5099 Lint {
5100 label: "closure_lifetime_binder",
5101 description: r##"# `closure_lifetime_binder`
5102
5103Allows `for<...>` on closures and coroutines.
5104
5105The tracking issue for this feature is: [#97362]
5106
5107[#97362]: https://github.com/rust-lang/rust/issues/97362
5108
5109------------------------
5110"##,
5111 default_severity: Severity::Allow,
5112 warn_since: None,
5113 deny_since: None,
5114 },
5115 Lint {
5116 label: "closure_track_caller",
5117 description: r##"# `closure_track_caller`
5118
5119The tracking issue for this feature is: [#87417]
5120
5121[#87417]: https://github.com/rust-lang/rust/issues/87417
5122
5123------------------------
5124
5125Allows using the `#[track_caller]` attribute on closures and coroutines.
5126Calls made to the closure or coroutine will have caller information
5127available through `std::panic::Location::caller()`, just like using
5128`#[track_caller]` on a function.
5129"##,
5130 default_severity: Severity::Allow,
5131 warn_since: None,
5132 deny_since: None,
5133 },
5134 Lint {
5135 label: "cmp_minmax",
5136 description: r##"# `cmp_minmax`
5137
5138
5139
5140The tracking issue for this feature is: [#115939]
5141
5142[#115939]: https://github.com/rust-lang/rust/issues/115939
5143
5144------------------------
5145"##,
5146 default_severity: Severity::Allow,
5147 warn_since: None,
5148 deny_since: None,
5149 },
5150 Lint {
5151 label: "cmp_splat",
5152 description: r##"# `cmp_splat`
5153
5154
5155
5156The tracking issue for this feature is: [#160728]
5157
5158[#160728]: https://github.com/rust-lang/rust/issues/160728
5159
5160------------------------
5161"##,
5162 default_severity: Severity::Allow,
5163 warn_since: None,
5164 deny_since: None,
5165 },
5166 Lint {
5167 label: "cmp_splat_internals",
5168 description: r##"# `cmp_splat_internals`
5169
5170
5171
5172The tracking issue for this feature is: [#160728]
5173
5174[#160728]: https://github.com/rust-lang/rust/issues/160728
5175
5176------------------------
5177"##,
5178 default_severity: Severity::Allow,
5179 warn_since: None,
5180 deny_since: None,
5181 },
5182 Lint {
5183 label: "cmse_nonsecure_entry",
5184 description: r##"# `cmse_nonsecure_entry`
5185
5186The tracking issue for this feature is: [#75835]
5187
5188[#75835]: https://github.com/rust-lang/rust/issues/75835
5189
5190------------------------
5191
5192The [TrustZone-M
5193feature](https://developer.arm.com/documentation/100690/latest/) is available
5194for targets with the Armv8-M architecture profile (`thumbv8m` in their target
5195name).
5196LLVM, the Rust compiler and the linker are providing
5197[support](https://developer.arm.com/documentation/ecm0359818/latest/) for the
5198TrustZone-M feature.
5199
5200One of the things provided with this unstable feature is the "cmse-nonsecure-entry" ABI.
5201This ABI marks a Secure function as an entry function (see
5202[section 5.4](https://developer.arm.com/documentation/ecm0359818/latest/) for details).
5203With this ABI, the compiler will do the following:
5204* add a special symbol on the function which is the `__acle_se_` prefix and the
5205 standard function name
5206* constrain the number of parameters to avoid using the Non-Secure stack
5207* before returning from the function, clear registers that might contain Secure
5208 information
5209* use the `BXNS` instruction to return
5210
5211Because the stack can not be used to pass parameters, there will be compilation
5212errors if:
5213* the total size of all parameters is too big (for example, more than four 32-bit integers)
5214
5215The special symbol `__acle_se_` will be used by the linker to generate a secure
5216gateway veneer.
5217
5218<!-- NOTE(ignore) this example is specific to thumbv8m targets -->
5219
5220``` rust,ignore
5221#![no_std]
5222#![feature(cmse_nonsecure_entry)]
5223
5224#[no_mangle]
5225pub extern "cmse-nonsecure-entry" fn entry_function(input: u32) -> u32 {
5226 input + 6
5227}
5228```
5229
5230``` text
5231$ rustc --emit obj --crate-type lib --target thumbv8m.main-none-eabi function.rs
5232$ arm-none-eabi-objdump -D function.o
5233
523400000000 <entry_function>:
5235 0: b580 push {r7, lr}
5236 2: 466f mov r7, sp
5237 4: b082 sub sp, #8
5238 6: 9001 str r0, [sp, #4]
5239 8: 1d81 adds r1, r0, #6
5240 a: 460a mov r2, r1
5241 c: 4281 cmp r1, r0
5242 e: 9200 str r2, [sp, #0]
5243 10: d30b bcc.n 2a <entry_function+0x2a>
5244 12: e7ff b.n 14 <entry_function+0x14>
5245 14: 9800 ldr r0, [sp, #0]
5246 16: b002 add sp, #8
5247 18: e8bd 4080 ldmia.w sp!, {r7, lr}
5248 1c: 4671 mov r1, lr
5249 1e: 4672 mov r2, lr
5250 20: 4673 mov r3, lr
5251 22: 46f4 mov ip, lr
5252 24: f38e 8800 msr CPSR_f, lr
5253 28: 4774 bxns lr
5254 2a: f240 0000 movw r0, #0
5255 2e: f2c0 0000 movt r0, #0
5256 32: f240 0200 movw r2, #0
5257 36: f2c0 0200 movt r2, #0
5258 3a: 211c movs r1, #28
5259 3c: f7ff fffe bl 0 <_ZN4core9panicking5panic17h5c028258ca2fb3f5E>
5260 40: defe udf #254 ; 0xfe
5261```
5262"##,
5263 default_severity: Severity::Allow,
5264 warn_since: None,
5265 deny_since: None,
5266 },
5267 Lint {
5268 label: "codeview_annotation",
5269 description: r##"# `codeview_annotation`
5270
5271
5272
5273The tracking issue for this feature is: [#163964]
5274
5275[#163964]: https://github.com/rust-lang/rust/issues/163964
5276
5277------------------------
5278"##,
5279 default_severity: Severity::Allow,
5280 warn_since: None,
5281 deny_since: None,
5282 },
5283 Lint {
5284 label: "coerce_pointee_validated",
5285 description: r##"# `coerce_pointee_validated`
5286
5287
5288
5289This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
5290
5291------------------------
5292"##,
5293 default_severity: Severity::Allow,
5294 warn_since: None,
5295 deny_since: None,
5296 },
5297 Lint {
5298 label: "coerce_unsized",
5299 description: r##"# `coerce_unsized`
5300
5301
5302
5303The tracking issue for this feature is: [#18598]
5304
5305[#18598]: https://github.com/rust-lang/rust/issues/18598
5306
5307------------------------
5308"##,
5309 default_severity: Severity::Allow,
5310 warn_since: None,
5311 deny_since: None,
5312 },
5313 Lint {
5314 label: "command_resolved_envs",
5315 description: r##"# `command_resolved_envs`
5316
5317
5318
5319The tracking issue for this feature is: [#149070]
5320
5321[#149070]: https://github.com/rust-lang/rust/issues/149070
5322
5323------------------------
5324"##,
5325 default_severity: Severity::Allow,
5326 warn_since: None,
5327 deny_since: None,
5328 },
5329 Lint {
5330 label: "compiler_builtins",
5331 description: r##"# `compiler_builtins`
5332
5333This feature is internal to the Rust compiler and is not intended for general use.
5334
5335------------------------
5336"##,
5337 default_severity: Severity::Allow,
5338 warn_since: None,
5339 deny_since: None,
5340 },
5341 Lint {
5342 label: "complex_numbers",
5343 description: r##"# `complex_numbers`
5344
5345
5346
5347The tracking issue for this feature is: [#154023]
5348
5349[#154023]: https://github.com/rust-lang/rust/issues/154023
5350
5351------------------------
5352"##,
5353 default_severity: Severity::Allow,
5354 warn_since: None,
5355 deny_since: None,
5356 },
5357 Lint {
5358 label: "concat_bytes",
5359 description: r##"# `concat_bytes`
5360
5361
5362
5363The tracking issue for this feature is: [#87555]
5364
5365[#87555]: https://github.com/rust-lang/rust/issues/87555
5366
5367------------------------
5368"##,
5369 default_severity: Severity::Allow,
5370 warn_since: None,
5371 deny_since: None,
5372 },
5373 Lint {
5374 label: "const_alloc_error",
5375 description: r##"# `const_alloc_error`
5376
5377
5378
5379The tracking issue for this feature is: [#92523]
5380
5381[#92523]: https://github.com/rust-lang/rust/issues/92523
5382
5383------------------------
5384"##,
5385 default_severity: Severity::Allow,
5386 warn_since: None,
5387 deny_since: None,
5388 },
5389 Lint {
5390 label: "const_array",
5391 description: r##"# `const_array`
5392
5393
5394
5395The tracking issue for this feature is: [#147606]
5396
5397[#147606]: https://github.com/rust-lang/rust/issues/147606
5398
5399------------------------
5400"##,
5401 default_severity: Severity::Allow,
5402 warn_since: None,
5403 deny_since: None,
5404 },
5405 Lint {
5406 label: "const_async_blocks",
5407 description: r##"# `const_async_blocks`
5408
5409Allows `async {}` expressions in const contexts.
5410
5411The tracking issue for this feature is: [#85368]
5412
5413[#85368]: https://github.com/rust-lang/rust/issues/85368
5414
5415------------------------
5416"##,
5417 default_severity: Severity::Allow,
5418 warn_since: None,
5419 deny_since: None,
5420 },
5421 Lint {
5422 label: "const_atomic",
5423 description: r##"# `const_atomic`
5424
5425
5426
5427The tracking issue for this feature is: [#160078]
5428
5429[#160078]: https://github.com/rust-lang/rust/issues/160078
5430
5431------------------------
5432"##,
5433 default_severity: Severity::Allow,
5434 warn_since: None,
5435 deny_since: None,
5436 },
5437 Lint {
5438 label: "const_binary_search",
5439 description: r##"# `const_binary_search`
5440
5441
5442
5443The tracking issue for this feature is: [#159532]
5444
5445[#159532]: https://github.com/rust-lang/rust/issues/159532
5446
5447------------------------
5448"##,
5449 default_severity: Severity::Allow,
5450 warn_since: None,
5451 deny_since: None,
5452 },
5453 Lint {
5454 label: "const_block_items",
5455 description: r##"# `const_block_items`
5456
5457Allows `const { ... }` as a shorthand for `const _: () = const { ... };` for module items.
5458
5459The tracking issue for this feature is: [#149226]
5460
5461[#149226]: https://github.com/rust-lang/rust/issues/149226
5462
5463------------------------
5464"##,
5465 default_severity: Severity::Allow,
5466 warn_since: None,
5467 deny_since: None,
5468 },
5469 Lint {
5470 label: "const_bool",
5471 description: r##"# `const_bool`
5472
5473
5474
5475The tracking issue for this feature is: [#151531]
5476
5477[#151531]: https://github.com/rust-lang/rust/issues/151531
5478
5479------------------------
5480"##,
5481 default_severity: Severity::Allow,
5482 warn_since: None,
5483 deny_since: None,
5484 },
5485 Lint {
5486 label: "const_btree_len",
5487 description: r##"# `const_btree_len`
5488
5489
5490
5491The tracking issue for this feature is: [#71835]
5492
5493[#71835]: https://github.com/rust-lang/rust/issues/71835
5494
5495------------------------
5496"##,
5497 default_severity: Severity::Allow,
5498 warn_since: None,
5499 deny_since: None,
5500 },
5501 Lint {
5502 label: "const_c_variadic",
5503 description: r##"# `const_c_variadic`
5504
5505Allows defining and calling c-variadic functions in const contexts.
5506
5507The tracking issue for this feature is: [#151787]
5508
5509[#151787]: https://github.com/rust-lang/rust/issues/151787
5510
5511------------------------
5512"##,
5513 default_severity: Severity::Allow,
5514 warn_since: None,
5515 deny_since: None,
5516 },
5517 Lint {
5518 label: "const_carrying_mul_add",
5519 description: r##"# `const_carrying_mul_add`
5520
5521
5522
5523The tracking issue for this feature is: [#85532]
5524
5525[#85532]: https://github.com/rust-lang/rust/issues/85532
5526
5527------------------------
5528"##,
5529 default_severity: Severity::Allow,
5530 warn_since: None,
5531 deny_since: None,
5532 },
5533 Lint {
5534 label: "const_cell_traits",
5535 description: r##"# `const_cell_traits`
5536
5537
5538
5539The tracking issue for this feature is: [#147787]
5540
5541[#147787]: https://github.com/rust-lang/rust/issues/147787
5542
5543------------------------
5544"##,
5545 default_severity: Severity::Allow,
5546 warn_since: None,
5547 deny_since: None,
5548 },
5549 Lint {
5550 label: "const_clone",
5551 description: r##"# `const_clone`
5552
5553
5554
5555The tracking issue for this feature is: [#142757]
5556
5557[#142757]: https://github.com/rust-lang/rust/issues/142757
5558
5559------------------------
5560"##,
5561 default_severity: Severity::Allow,
5562 warn_since: None,
5563 deny_since: None,
5564 },
5565 Lint {
5566 label: "const_closures",
5567 description: r##"# `const_closures`
5568
5569Allows `const || {}` closures in const contexts.
5570
5571The tracking issue for this feature is: [#106003]
5572
5573[#106003]: https://github.com/rust-lang/rust/issues/106003
5574
5575------------------------
5576"##,
5577 default_severity: Severity::Allow,
5578 warn_since: None,
5579 deny_since: None,
5580 },
5581 Lint {
5582 label: "const_cmp",
5583 description: r##"# `const_cmp`
5584
5585
5586
5587The tracking issue for this feature is: [#143800]
5588
5589[#143800]: https://github.com/rust-lang/rust/issues/143800
5590
5591------------------------
5592"##,
5593 default_severity: Severity::Allow,
5594 warn_since: None,
5595 deny_since: None,
5596 },
5597 Lint {
5598 label: "const_control_flow",
5599 description: r##"# `const_control_flow`
5600
5601
5602
5603The tracking issue for this feature is: [#148739]
5604
5605[#148739]: https://github.com/rust-lang/rust/issues/148739
5606
5607------------------------
5608"##,
5609 default_severity: Severity::Allow,
5610 warn_since: None,
5611 deny_since: None,
5612 },
5613 Lint {
5614 label: "const_convert",
5615 description: r##"# `const_convert`
5616
5617
5618
5619The tracking issue for this feature is: [#143773]
5620
5621[#143773]: https://github.com/rust-lang/rust/issues/143773
5622
5623------------------------
5624"##,
5625 default_severity: Severity::Allow,
5626 warn_since: None,
5627 deny_since: None,
5628 },
5629 Lint {
5630 label: "const_default",
5631 description: r##"# `const_default`
5632
5633
5634
5635The tracking issue for this feature is: [#143894]
5636
5637[#143894]: https://github.com/rust-lang/rust/issues/143894
5638
5639------------------------
5640"##,
5641 default_severity: Severity::Allow,
5642 warn_since: None,
5643 deny_since: None,
5644 },
5645 Lint {
5646 label: "const_destruct",
5647 description: r##"# `const_destruct`
5648
5649Allows using `[const] Destruct` bounds and calling drop impls in const contexts.
5650
5651The tracking issue for this feature is: [#133214]
5652
5653[#133214]: https://github.com/rust-lang/rust/issues/133214
5654
5655------------------------
5656"##,
5657 default_severity: Severity::Allow,
5658 warn_since: None,
5659 deny_since: None,
5660 },
5661 Lint {
5662 label: "const_drop_guard",
5663 description: r##"# `const_drop_guard`
5664
5665
5666
5667This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
5668
5669------------------------
5670"##,
5671 default_severity: Severity::Allow,
5672 warn_since: None,
5673 deny_since: None,
5674 },
5675 Lint {
5676 label: "const_drop_in_place",
5677 description: r##"# `const_drop_in_place`
5678
5679
5680
5681The tracking issue for this feature is: [#109342]
5682
5683[#109342]: https://github.com/rust-lang/rust/issues/109342
5684
5685------------------------
5686"##,
5687 default_severity: Severity::Allow,
5688 warn_since: None,
5689 deny_since: None,
5690 },
5691 Lint {
5692 label: "const_eval_select",
5693 description: r##"# `const_eval_select`
5694
5695
5696
5697The tracking issue for this feature is: [#124625]
5698
5699[#124625]: https://github.com/rust-lang/rust/issues/124625
5700
5701------------------------
5702"##,
5703 default_severity: Severity::Allow,
5704 warn_since: None,
5705 deny_since: None,
5706 },
5707 Lint {
5708 label: "const_for",
5709 description: r##"# `const_for`
5710
5711Allows `for _ in _` loops in const contexts.
5712
5713The tracking issue for this feature is: [#87575]
5714
5715[#87575]: https://github.com/rust-lang/rust/issues/87575
5716
5717------------------------
5718"##,
5719 default_severity: Severity::Allow,
5720 warn_since: None,
5721 deny_since: None,
5722 },
5723 Lint {
5724 label: "const_format_args",
5725 description: r##"# `const_format_args`
5726
5727
5728
5729This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
5730
5731------------------------
5732"##,
5733 default_severity: Severity::Allow,
5734 warn_since: None,
5735 deny_since: None,
5736 },
5737 Lint {
5738 label: "const_heap",
5739 description: r##"# `const_heap`
5740
5741
5742
5743The tracking issue for this feature is: [#79597]
5744
5745[#79597]: https://github.com/rust-lang/rust/issues/79597
5746
5747------------------------
5748"##,
5749 default_severity: Severity::Allow,
5750 warn_since: None,
5751 deny_since: None,
5752 },
5753 Lint {
5754 label: "const_index",
5755 description: r##"# `const_index`
5756
5757
5758
5759The tracking issue for this feature is: [#143775]
5760
5761[#143775]: https://github.com/rust-lang/rust/issues/143775
5762
5763------------------------
5764"##,
5765 default_severity: Severity::Allow,
5766 warn_since: None,
5767 deny_since: None,
5768 },
5769 Lint {
5770 label: "const_iter",
5771 description: r##"# `const_iter`
5772
5773
5774
5775The tracking issue for this feature is: [#92476]
5776
5777[#92476]: https://github.com/rust-lang/rust/issues/92476
5778
5779------------------------
5780"##,
5781 default_severity: Severity::Allow,
5782 warn_since: None,
5783 deny_since: None,
5784 },
5785 Lint {
5786 label: "const_manually_drop_take",
5787 description: r##"# `const_manually_drop_take`
5788
5789
5790
5791The tracking issue for this feature is: [#148773]
5792
5793[#148773]: https://github.com/rust-lang/rust/issues/148773
5794
5795------------------------
5796"##,
5797 default_severity: Severity::Allow,
5798 warn_since: None,
5799 deny_since: None,
5800 },
5801 Lint {
5802 label: "const_never_short_circuit",
5803 description: r##"# `const_never_short_circuit`
5804
5805
5806
5807This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
5808
5809------------------------
5810"##,
5811 default_severity: Severity::Allow,
5812 warn_since: None,
5813 deny_since: None,
5814 },
5815 Lint {
5816 label: "const_nonnull_with_exposed_provenance",
5817 description: r##"# `const_nonnull_with_exposed_provenance`
5818
5819
5820
5821The tracking issue for this feature is: [#154215]
5822
5823[#154215]: https://github.com/rust-lang/rust/issues/154215
5824
5825------------------------
5826"##,
5827 default_severity: Severity::Allow,
5828 warn_since: None,
5829 deny_since: None,
5830 },
5831 Lint {
5832 label: "const_ops",
5833 description: r##"# `const_ops`
5834
5835
5836
5837The tracking issue for this feature is: [#143802]
5838
5839[#143802]: https://github.com/rust-lang/rust/issues/143802
5840
5841------------------------
5842"##,
5843 default_severity: Severity::Allow,
5844 warn_since: None,
5845 deny_since: None,
5846 },
5847 Lint {
5848 label: "const_option_ops",
5849 description: r##"# `const_option_ops`
5850
5851
5852
5853The tracking issue for this feature is: [#143956]
5854
5855[#143956]: https://github.com/rust-lang/rust/issues/143956
5856
5857------------------------
5858"##,
5859 default_severity: Severity::Allow,
5860 warn_since: None,
5861 deny_since: None,
5862 },
5863 Lint {
5864 label: "const_param_ty_trait",
5865 description: r##"# `const_param_ty_trait`
5866
5867
5868
5869The tracking issue for this feature is: [#95174]
5870
5871[#95174]: https://github.com/rust-lang/rust/issues/95174
5872
5873------------------------
5874"##,
5875 default_severity: Severity::Allow,
5876 warn_since: None,
5877 deny_since: None,
5878 },
5879 Lint {
5880 label: "const_param_ty_unchecked",
5881 description: r##"# `const_param_ty_unchecked`
5882
5883Allows skipping `ConstParamTy_` trait implementation checks
5884
5885This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
5886
5887------------------------
5888"##,
5889 default_severity: Severity::Allow,
5890 warn_since: None,
5891 deny_since: None,
5892 },
5893 Lint {
5894 label: "const_path_separators",
5895 description: r##"# `const_path_separators`
5896
5897
5898
5899The tracking issue for this feature is: [#153106]
5900
5901[#153106]: https://github.com/rust-lang/rust/issues/153106
5902
5903------------------------
5904"##,
5905 default_severity: Severity::Allow,
5906 warn_since: None,
5907 deny_since: None,
5908 },
5909 Lint {
5910 label: "const_precise_live_drops",
5911 description: r##"# `const_precise_live_drops`
5912
5913Be more precise when looking for live drops in a const context.
5914
5915The tracking issue for this feature is: [#73255]
5916
5917[#73255]: https://github.com/rust-lang/rust/issues/73255
5918
5919------------------------
5920"##,
5921 default_severity: Severity::Allow,
5922 warn_since: None,
5923 deny_since: None,
5924 },
5925 Lint {
5926 label: "const_range",
5927 description: r##"# `const_range`
5928
5929
5930
5931This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
5932
5933------------------------
5934"##,
5935 default_severity: Severity::Allow,
5936 warn_since: None,
5937 deny_since: None,
5938 },
5939 Lint {
5940 label: "const_range_bounds",
5941 description: r##"# `const_range_bounds`
5942
5943
5944
5945The tracking issue for this feature is: [#108082]
5946
5947[#108082]: https://github.com/rust-lang/rust/issues/108082
5948
5949------------------------
5950"##,
5951 default_severity: Severity::Allow,
5952 warn_since: None,
5953 deny_since: None,
5954 },
5955 Lint {
5956 label: "const_raw_ptr_comparison",
5957 description: r##"# `const_raw_ptr_comparison`
5958
5959
5960
5961The tracking issue for this feature is: [#53020]
5962
5963[#53020]: https://github.com/rust-lang/rust/issues/53020
5964
5965------------------------
5966"##,
5967 default_severity: Severity::Allow,
5968 warn_since: None,
5969 deny_since: None,
5970 },
5971 Lint {
5972 label: "const_ref_cell",
5973 description: r##"# `const_ref_cell`
5974
5975
5976
5977The tracking issue for this feature is: [#137844]
5978
5979[#137844]: https://github.com/rust-lang/rust/issues/137844
5980
5981------------------------
5982"##,
5983 default_severity: Severity::Allow,
5984 warn_since: None,
5985 deny_since: None,
5986 },
5987 Lint {
5988 label: "const_result_trait_fn",
5989 description: r##"# `const_result_trait_fn`
5990
5991
5992
5993The tracking issue for this feature is: [#144211]
5994
5995[#144211]: https://github.com/rust-lang/rust/issues/144211
5996
5997------------------------
5998"##,
5999 default_severity: Severity::Allow,
6000 warn_since: None,
6001 deny_since: None,
6002 },
6003 Lint {
6004 label: "const_result_unwrap_unchecked",
6005 description: r##"# `const_result_unwrap_unchecked`
6006
6007
6008
6009The tracking issue for this feature is: [#148714]
6010
6011[#148714]: https://github.com/rust-lang/rust/issues/148714
6012
6013------------------------
6014"##,
6015 default_severity: Severity::Allow,
6016 warn_since: None,
6017 deny_since: None,
6018 },
6019 Lint {
6020 label: "const_select_unpredictable",
6021 description: r##"# `const_select_unpredictable`
6022
6023
6024
6025The tracking issue for this feature is: [#145938]
6026
6027[#145938]: https://github.com/rust-lang/rust/issues/145938
6028
6029------------------------
6030"##,
6031 default_severity: Severity::Allow,
6032 warn_since: None,
6033 deny_since: None,
6034 },
6035 Lint {
6036 label: "const_slice_from_mut_ptr_range",
6037 description: r##"# `const_slice_from_mut_ptr_range`
6038
6039
6040
6041The tracking issue for this feature is: [#89792]
6042
6043[#89792]: https://github.com/rust-lang/rust/issues/89792
6044
6045------------------------
6046"##,
6047 default_severity: Severity::Allow,
6048 warn_since: None,
6049 deny_since: None,
6050 },
6051 Lint {
6052 label: "const_slice_from_ptr_range",
6053 description: r##"# `const_slice_from_ptr_range`
6054
6055
6056
6057The tracking issue for this feature is: [#89792]
6058
6059[#89792]: https://github.com/rust-lang/rust/issues/89792
6060
6061------------------------
6062"##,
6063 default_severity: Severity::Allow,
6064 warn_since: None,
6065 deny_since: None,
6066 },
6067 Lint {
6068 label: "const_slice_make_iter",
6069 description: r##"# `const_slice_make_iter`
6070
6071
6072
6073The tracking issue for this feature is: [#137737]
6074
6075[#137737]: https://github.com/rust-lang/rust/issues/137737
6076
6077------------------------
6078"##,
6079 default_severity: Severity::Allow,
6080 warn_since: None,
6081 deny_since: None,
6082 },
6083 Lint {
6084 label: "const_split_off_first_last",
6085 description: r##"# `const_split_off_first_last`
6086
6087
6088
6089The tracking issue for this feature is: [#138539]
6090
6091[#138539]: https://github.com/rust-lang/rust/issues/138539
6092
6093------------------------
6094"##,
6095 default_severity: Severity::Allow,
6096 warn_since: None,
6097 deny_since: None,
6098 },
6099 Lint {
6100 label: "const_swap_with_slice",
6101 description: r##"# `const_swap_with_slice`
6102
6103
6104
6105The tracking issue for this feature is: [#142204]
6106
6107[#142204]: https://github.com/rust-lang/rust/issues/142204
6108
6109------------------------
6110"##,
6111 default_severity: Severity::Allow,
6112 warn_since: None,
6113 deny_since: None,
6114 },
6115 Lint {
6116 label: "const_trait_impl",
6117 description: r##"# `const_trait_impl`
6118
6119Allows `impl const Trait for T` syntax.
6120
6121The tracking issue for this feature is: [#143874]
6122
6123[#143874]: https://github.com/rust-lang/rust/issues/143874
6124
6125------------------------
6126"##,
6127 default_severity: Severity::Allow,
6128 warn_since: None,
6129 deny_since: None,
6130 },
6131 Lint {
6132 label: "const_try",
6133 description: r##"# `const_try`
6134
6135Allows the `?` operator in const contexts.
6136
6137The tracking issue for this feature is: [#74935]
6138
6139[#74935]: https://github.com/rust-lang/rust/issues/74935
6140
6141------------------------
6142"##,
6143 default_severity: Severity::Allow,
6144 warn_since: None,
6145 deny_since: None,
6146 },
6147 Lint {
6148 label: "const_try_residual",
6149 description: r##"# `const_try_residual`
6150
6151
6152
6153The tracking issue for this feature is: [#91285]
6154
6155[#91285]: https://github.com/rust-lang/rust/issues/91285
6156
6157------------------------
6158"##,
6159 default_severity: Severity::Allow,
6160 warn_since: None,
6161 deny_since: None,
6162 },
6163 Lint {
6164 label: "const_type_name",
6165 description: r##"# `const_type_name`
6166
6167
6168
6169The tracking issue for this feature is: [#63084]
6170
6171[#63084]: https://github.com/rust-lang/rust/issues/63084
6172
6173------------------------
6174"##,
6175 default_severity: Severity::Allow,
6176 warn_since: None,
6177 deny_since: None,
6178 },
6179 Lint {
6180 label: "const_unsigned_bigint_helpers",
6181 description: r##"# `const_unsigned_bigint_helpers`
6182
6183
6184
6185The tracking issue for this feature is: [#152015]
6186
6187[#152015]: https://github.com/rust-lang/rust/issues/152015
6188
6189------------------------
6190"##,
6191 default_severity: Severity::Allow,
6192 warn_since: None,
6193 deny_since: None,
6194 },
6195 Lint {
6196 label: "const_volatile",
6197 description: r##"# `const_volatile`
6198
6199
6200
6201The tracking issue for this feature is: [#159094]
6202
6203[#159094]: https://github.com/rust-lang/rust/issues/159094
6204
6205------------------------
6206"##,
6207 default_severity: Severity::Allow,
6208 warn_since: None,
6209 deny_since: None,
6210 },
6211 Lint {
6212 label: "container_error_extra",
6213 description: r##"# `container_error_extra`
6214
6215
6216
6217This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
6218
6219------------------------
6220"##,
6221 default_severity: Severity::Allow,
6222 warn_since: None,
6223 deny_since: None,
6224 },
6225 Lint {
6226 label: "context_ext",
6227 description: r##"# `context_ext`
6228
6229
6230
6231The tracking issue for this feature is: [#123392]
6232
6233[#123392]: https://github.com/rust-lang/rust/issues/123392
6234
6235------------------------
6236"##,
6237 default_severity: Severity::Allow,
6238 warn_since: None,
6239 deny_since: None,
6240 },
6241 Lint {
6242 label: "contracts",
6243 description: r##"# `contracts`
6244
6245Allows use of contracts attributes.
6246
6247The tracking issue for this feature is: [#128044]
6248
6249[#128044]: https://github.com/rust-lang/rust/issues/128044
6250
6251------------------------
6252"##,
6253 default_severity: Severity::Allow,
6254 warn_since: None,
6255 deny_since: None,
6256 },
6257 Lint {
6258 label: "contracts_internals",
6259 description: r##"# `contracts_internals`
6260
6261Allows access to internal machinery used to implement contracts.
6262
6263The tracking issue for this feature is: [#128044]
6264
6265[#128044]: https://github.com/rust-lang/rust/issues/128044
6266
6267------------------------
6268"##,
6269 default_severity: Severity::Allow,
6270 warn_since: None,
6271 deny_since: None,
6272 },
6273 Lint {
6274 label: "control_flow_into_value",
6275 description: r##"# `control_flow_into_value`
6276
6277
6278
6279The tracking issue for this feature is: [#137461]
6280
6281[#137461]: https://github.com/rust-lang/rust/issues/137461
6282
6283------------------------
6284"##,
6285 default_severity: Severity::Allow,
6286 warn_since: None,
6287 deny_since: None,
6288 },
6289 Lint {
6290 label: "convert_float_to_int",
6291 description: r##"# `convert_float_to_int`
6292
6293
6294
6295The tracking issue for this feature is: [#67057]
6296
6297[#67057]: https://github.com/rust-lang/rust/issues/67057
6298
6299------------------------
6300"##,
6301 default_severity: Severity::Allow,
6302 warn_since: None,
6303 deny_since: None,
6304 },
6305 Lint {
6306 label: "copied_into_inner",
6307 description: r##"# `copied_into_inner`
6308
6309
6310
6311This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
6312
6313------------------------
6314"##,
6315 default_severity: Severity::Allow,
6316 warn_since: None,
6317 deny_since: None,
6318 },
6319 Lint {
6320 label: "core_float_math",
6321 description: r##"# `core_float_math`
6322
6323
6324
6325The tracking issue for this feature is: [#137578]
6326
6327[#137578]: https://github.com/rust-lang/rust/issues/137578
6328
6329------------------------
6330"##,
6331 default_severity: Severity::Allow,
6332 warn_since: None,
6333 deny_since: None,
6334 },
6335 Lint {
6336 label: "core_intrinsics",
6337 description: r##"# `core_intrinsics`
6338
6339This feature is internal to the Rust compiler and is not intended for general use.
6340
6341------------------------
6342"##,
6343 default_severity: Severity::Allow,
6344 warn_since: None,
6345 deny_since: None,
6346 },
6347 Lint {
6348 label: "core_intrinsics_fallbacks",
6349 description: r##"# `core_intrinsics_fallbacks`
6350
6351
6352
6353This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
6354
6355------------------------
6356"##,
6357 default_severity: Severity::Allow,
6358 warn_since: None,
6359 deny_since: None,
6360 },
6361 Lint {
6362 label: "core_io",
6363 description: r##"# `core_io`
6364
6365
6366
6367The tracking issue for this feature is: [#154046]
6368
6369[#154046]: https://github.com/rust-lang/rust/issues/154046
6370
6371------------------------
6372"##,
6373 default_severity: Severity::Allow,
6374 warn_since: None,
6375 deny_since: None,
6376 },
6377 Lint {
6378 label: "core_io_borrowed_buf",
6379 description: r##"# `core_io_borrowed_buf`
6380
6381
6382
6383The tracking issue for this feature is: [#117693]
6384
6385[#117693]: https://github.com/rust-lang/rust/issues/117693
6386
6387------------------------
6388"##,
6389 default_severity: Severity::Allow,
6390 warn_since: None,
6391 deny_since: None,
6392 },
6393 Lint {
6394 label: "core_io_internals",
6395 description: r##"# `core_io_internals`
6396
6397
6398
6399This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
6400
6401------------------------
6402"##,
6403 default_severity: Severity::Allow,
6404 warn_since: None,
6405 deny_since: None,
6406 },
6407 Lint {
6408 label: "core_os",
6409 description: r##"# `core_os`
6410
6411
6412
6413This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
6414
6415------------------------
6416"##,
6417 default_severity: Severity::Allow,
6418 warn_since: None,
6419 deny_since: None,
6420 },
6421 Lint {
6422 label: "core_private_bignum",
6423 description: r##"# `core_private_bignum`
6424
6425This feature is internal to the Rust compiler and is not intended for general use.
6426
6427------------------------
6428"##,
6429 default_severity: Severity::Allow,
6430 warn_since: None,
6431 deny_since: None,
6432 },
6433 Lint {
6434 label: "core_private_diy_float",
6435 description: r##"# `core_private_diy_float`
6436
6437This feature is internal to the Rust compiler and is not intended for general use.
6438
6439------------------------
6440"##,
6441 default_severity: Severity::Allow,
6442 warn_since: None,
6443 deny_since: None,
6444 },
6445 Lint {
6446 label: "coroutine_clone",
6447 description: r##"# `coroutine_clone`
6448
6449Allows coroutines to be cloned.
6450
6451The tracking issue for this feature is: [#95360]
6452
6453[#95360]: https://github.com/rust-lang/rust/issues/95360
6454
6455------------------------
6456"##,
6457 default_severity: Severity::Allow,
6458 warn_since: None,
6459 deny_since: None,
6460 },
6461 Lint {
6462 label: "coroutine_trait",
6463 description: r##"# `coroutine_trait`
6464
6465
6466
6467The tracking issue for this feature is: [#43122]
6468
6469[#43122]: https://github.com/rust-lang/rust/issues/43122
6470
6471------------------------
6472"##,
6473 default_severity: Severity::Allow,
6474 warn_since: None,
6475 deny_since: None,
6476 },
6477 Lint {
6478 label: "coroutines",
6479 description: r##"# `coroutines`
6480
6481The tracking issue for this feature is: [#43122]
6482
6483[#43122]: https://github.com/rust-lang/rust/issues/43122
6484
6485------------------------
6486
6487The `coroutines` feature gate in Rust allows you to define coroutine or
6488coroutine literals. A coroutine is a "resumable function" that syntactically
6489resembles a closure but compiles to much different semantics in the compiler
6490itself. The primary feature of a coroutine is that it can be suspended during
6491execution to be resumed at a later date. Coroutines use the `yield` keyword to
6492"return", and then the caller can `resume` a coroutine to resume execution just
6493after the `yield` keyword.
6494
6495Coroutines are an extra-unstable feature in the compiler right now. Added in
6496[RFC 2033] they're mostly intended right now as a information/constraint
6497gathering phase. The intent is that experimentation can happen on the nightly
6498compiler before actual stabilization. A further RFC will be required to
6499stabilize coroutines and will likely contain at least a few small
6500tweaks to the overall design.
6501
6502[RFC 2033]: https://github.com/rust-lang/rfcs/pull/2033
6503
6504A syntactical example of a coroutine is:
6505
6506```rust
6507#![feature(coroutines, coroutine_trait, stmt_expr_attributes)]
6508
6509use std::ops::{Coroutine, CoroutineState};
6510use std::pin::Pin;
6511
6512fn main() {
6513 let mut coroutine = #[coroutine] || {
6514 yield 1;
6515 return "foo"
6516 };
6517
6518 match Pin::new(&mut coroutine).resume(()) {
6519 CoroutineState::Yielded(1) => {}
6520 _ => panic!("unexpected value from resume"),
6521 }
6522 match Pin::new(&mut coroutine).resume(()) {
6523 CoroutineState::Complete("foo") => {}
6524 _ => panic!("unexpected value from resume"),
6525 }
6526}
6527```
6528
6529Coroutines are closure-like literals which are annotated with `#[coroutine]`
6530and can contain a `yield` statement. The
6531`yield` statement takes an optional expression of a value to yield out of the
6532coroutine. All coroutine literals implement the `Coroutine` trait in the
6533`std::ops` module. The `Coroutine` trait has one main method, `resume`, which
6534resumes execution of the coroutine at the previous suspension point.
6535
6536An example of the control flow of coroutines is that the following example
6537prints all numbers in order:
6538
6539```rust
6540#![feature(coroutines, coroutine_trait, stmt_expr_attributes)]
6541
6542use std::ops::Coroutine;
6543use std::pin::Pin;
6544
6545fn main() {
6546 let mut coroutine = #[coroutine] || {
6547 println!("2");
6548 yield;
6549 println!("4");
6550 };
6551
6552 println!("1");
6553 Pin::new(&mut coroutine).resume(());
6554 println!("3");
6555 Pin::new(&mut coroutine).resume(());
6556 println!("5");
6557}
6558```
6559
6560At this time the main use case of coroutines is an implementation
6561primitive for `async`/`await` and `gen` syntax, but coroutines
6562will likely be extended to other primitives in the future.
6563Feedback on the design and usage is always appreciated!
6564
6565### The `Coroutine` trait
6566
6567The `Coroutine` trait in `std::ops` currently looks like:
6568
6569```rust
6570# #![feature(arbitrary_self_types, coroutine_trait)]
6571# use std::ops::CoroutineState;
6572# use std::pin::Pin;
6573
6574pub trait Coroutine<R = ()> {
6575 type Yield;
6576 type Return;
6577 fn resume(self: Pin<&mut Self>, resume: R) -> CoroutineState<Self::Yield, Self::Return>;
6578}
6579```
6580
6581The `Coroutine::Yield` type is the type of values that can be yielded with the
6582`yield` statement. The `Coroutine::Return` type is the returned type of the
6583coroutine. This is typically the last expression in a coroutine's definition or
6584any value passed to `return` in a coroutine. The `resume` function is the entry
6585point for executing the `Coroutine` itself.
6586
6587The return value of `resume`, `CoroutineState`, looks like:
6588
6589```rust
6590pub enum CoroutineState<Y, R> {
6591 Yielded(Y),
6592 Complete(R),
6593}
6594```
6595
6596The `Yielded` variant indicates that the coroutine can later be resumed. This
6597corresponds to a `yield` point in a coroutine. The `Complete` variant indicates
6598that the coroutine is complete and cannot be resumed again. Calling `resume`
6599after a coroutine has returned `Complete` will likely result in a panic of the
6600program.
6601
6602### Closure-like semantics
6603
6604The closure-like syntax for coroutines alludes to the fact that they also have
6605closure-like semantics. Namely:
6606
6607* When created, a coroutine executes no code. A closure literal does not
6608 actually execute any of the closure's code on construction, and similarly a
6609 coroutine literal does not execute any code inside the coroutine when
6610 constructed.
6611
6612* Coroutines can capture outer variables by reference or by move, and this can
6613 be tweaked with the `move` keyword at the beginning of the closure. Like
6614 closures all coroutines will have an implicit environment which is inferred by
6615 the compiler. Outer variables can be moved into a coroutine for use as the
6616 coroutine progresses.
6617
6618* Coroutine literals produce a value with a unique type which implements the
6619 `std::ops::Coroutine` trait. This allows actual execution of the coroutine
6620 through the `Coroutine::resume` method as well as also naming it in return
6621 types and such.
6622
6623* Traits like `Send` and `Sync` are automatically implemented for a `Coroutine`
6624 depending on the captured variables of the environment. Unlike closures,
6625 coroutines also depend on variables live across suspension points. This means
6626 that although the ambient environment may be `Send` or `Sync`, the coroutine
6627 itself may not be due to internal variables live across `yield` points being
6628 not-`Send` or not-`Sync`. Note that coroutines do
6629 not implement traits like `Copy` or `Clone` automatically.
6630
6631* Whenever a coroutine is dropped it will drop all captured environment
6632 variables.
6633
6634### Coroutines as state machines
6635
6636In the compiler, coroutines are currently compiled as state machines. Each
6637`yield` expression will correspond to a different state that stores all live
6638variables over that suspension point. Resumption of a coroutine will dispatch on
6639the current state and then execute internally until a `yield` is reached, at
6640which point all state is saved off in the coroutine and a value is returned.
6641
6642Let's take a look at an example to see what's going on here:
6643
6644```rust
6645#![feature(coroutines, coroutine_trait, stmt_expr_attributes)]
6646
6647use std::ops::Coroutine;
6648use std::pin::Pin;
6649
6650fn main() {
6651 let ret = "foo";
6652 let mut coroutine = #[coroutine] move || {
6653 yield 1;
6654 return ret
6655 };
6656
6657 Pin::new(&mut coroutine).resume(());
6658 Pin::new(&mut coroutine).resume(());
6659}
6660```
6661
6662This coroutine literal will compile down to something similar to:
6663
6664```rust
6665#![feature(arbitrary_self_types, coroutine_trait)]
6666
6667use std::ops::{Coroutine, CoroutineState};
6668use std::pin::Pin;
6669
6670fn main() {
6671 let ret = "foo";
6672 let mut coroutine = {
6673 enum __Coroutine {
6674 Start(&'static str),
6675 Yield1(&'static str),
6676 Done,
6677 }
6678
6679 impl Coroutine for __Coroutine {
6680 type Yield = i32;
6681 type Return = &'static str;
6682
6683 fn resume(mut self: Pin<&mut Self>, resume: ()) -> CoroutineState<i32, &'static str> {
6684 use std::mem;
6685 match mem::replace(&mut *self, __Coroutine::Done) {
6686 __Coroutine::Start(s) => {
6687 *self = __Coroutine::Yield1(s);
6688 CoroutineState::Yielded(1)
6689 }
6690
6691 __Coroutine::Yield1(s) => {
6692 *self = __Coroutine::Done;
6693 CoroutineState::Complete(s)
6694 }
6695
6696 __Coroutine::Done => {
6697 panic!("coroutine resumed after completion")
6698 }
6699 }
6700 }
6701 }
6702
6703 __Coroutine::Start(ret)
6704 };
6705
6706 Pin::new(&mut coroutine).resume(());
6707 Pin::new(&mut coroutine).resume(());
6708}
6709```
6710
6711Notably here we can see that the compiler is generating a fresh type,
6712`__Coroutine` in this case. This type has a number of states (represented here
6713as an `enum`) corresponding to each of the conceptual states of the coroutine.
6714At the beginning we're closing over our outer variable `foo` and then that
6715variable is also live over the `yield` point, so it's stored in both states.
6716
6717When the coroutine starts it'll immediately yield 1, but it saves off its state
6718just before it does so indicating that it has reached the yield point. Upon
6719resuming again we'll execute the `return ret` which returns the `Complete`
6720state.
6721
6722Here we can also note that the `Done` state, if resumed, panics immediately as
6723it's invalid to resume a completed coroutine. It's also worth noting that this
6724is just a rough desugaring, not a normative specification for what the compiler
6725does.
6726"##,
6727 default_severity: Severity::Allow,
6728 warn_since: None,
6729 deny_since: None,
6730 },
6731 Lint {
6732 label: "covariant_unsafe_cell",
6733 description: r##"# `covariant_unsafe_cell`
6734
6735
6736
6737The tracking issue for this feature is: [#159735]
6738
6739[#159735]: https://github.com/rust-lang/rust/issues/159735
6740
6741------------------------
6742"##,
6743 default_severity: Severity::Allow,
6744 warn_since: None,
6745 deny_since: None,
6746 },
6747 Lint {
6748 label: "coverage_attribute",
6749 description: r##"# `coverage_attribute`
6750
6751The tracking issue for this feature is: [#84605]
6752
6753[#84605]: https://github.com/rust-lang/rust/issues/84605
6754
6755---
6756
6757The `coverage` attribute can be used to selectively disable coverage
6758instrumentation in an annotated function. This might be useful to:
6759
6760- Avoid instrumentation overhead in a performance critical function
6761- Avoid generating coverage for a function that is not meant to be executed,
6762 but still target 100% coverage for the rest of the program.
6763
6764## Example
6765
6766```rust
6767#![feature(coverage_attribute)]
6768
6769// `foo()` will get coverage instrumentation (by default)
6770fn foo() {
6771 // ...
6772}
6773
6774#[coverage(off)]
6775fn bar() {
6776 // ...
6777}
6778```
6779"##,
6780 default_severity: Severity::Allow,
6781 warn_since: None,
6782 deny_since: None,
6783 },
6784 Lint {
6785 label: "cow_is_borrowed",
6786 description: r##"# `cow_is_borrowed`
6787
6788
6789
6790The tracking issue for this feature is: [#65143]
6791
6792[#65143]: https://github.com/rust-lang/rust/issues/65143
6793
6794------------------------
6795"##,
6796 default_severity: Severity::Allow,
6797 warn_since: None,
6798 deny_since: None,
6799 },
6800 Lint {
6801 label: "csky_target_feature",
6802 description: r##"# `csky_target_feature`
6803
6804Target features on csky.
6805
6806The tracking issue for this feature is: [#150248]
6807
6808[#150248]: https://github.com/rust-lang/rust/issues/150248
6809
6810------------------------
6811"##,
6812 default_severity: Severity::Allow,
6813 warn_since: None,
6814 deny_since: None,
6815 },
6816 Lint {
6817 label: "cstr_bytes",
6818 description: r##"# `cstr_bytes`
6819
6820
6821
6822The tracking issue for this feature is: [#112115]
6823
6824[#112115]: https://github.com/rust-lang/rust/issues/112115
6825
6826------------------------
6827"##,
6828 default_severity: Severity::Allow,
6829 warn_since: None,
6830 deny_since: None,
6831 },
6832 Lint {
6833 label: "cstr_internals",
6834 description: r##"# `cstr_internals`
6835
6836
6837
6838This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
6839
6840------------------------
6841"##,
6842 default_severity: Severity::Allow,
6843 warn_since: None,
6844 deny_since: None,
6845 },
6846 Lint {
6847 label: "current_thread_id",
6848 description: r##"# `current_thread_id`
6849
6850
6851
6852The tracking issue for this feature is: [#147194]
6853
6854[#147194]: https://github.com/rust-lang/rust/issues/147194
6855
6856------------------------
6857"##,
6858 default_severity: Severity::Allow,
6859 warn_since: None,
6860 deny_since: None,
6861 },
6862 Lint {
6863 label: "cursor_split",
6864 description: r##"# `cursor_split`
6865
6866
6867
6868The tracking issue for this feature is: [#86369]
6869
6870[#86369]: https://github.com/rust-lang/rust/issues/86369
6871
6872------------------------
6873"##,
6874 default_severity: Severity::Allow,
6875 warn_since: None,
6876 deny_since: None,
6877 },
6878 Lint {
6879 label: "custom_inner_attributes",
6880 description: r##"# `custom_inner_attributes`
6881
6882Allows non-builtin attributes in inner attribute position.
6883
6884The tracking issue for this feature is: [#54726]
6885
6886[#54726]: https://github.com/rust-lang/rust/issues/54726
6887
6888------------------------
6889"##,
6890 default_severity: Severity::Allow,
6891 warn_since: None,
6892 deny_since: None,
6893 },
6894 Lint {
6895 label: "custom_mir",
6896 description: r##"# `custom_mir`
6897
6898Allows writing custom MIR
6899
6900This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
6901
6902------------------------
6903"##,
6904 default_severity: Severity::Allow,
6905 warn_since: None,
6906 deny_since: None,
6907 },
6908 Lint {
6909 label: "custom_test_frameworks",
6910 description: r##"# `custom_test_frameworks`
6911
6912The tracking issue for this feature is: [#50297]
6913
6914[#50297]: https://github.com/rust-lang/rust/issues/50297
6915
6916------------------------
6917
6918The `custom_test_frameworks` feature allows the use of `#[test_case]` and `#![test_runner]`.
6919Any function, const, or static can be annotated with `#[test_case]` causing it to be aggregated (like `#[test]`)
6920and be passed to the test runner determined by the `#![test_runner]` crate attribute.
6921
6922```rust
6923#![feature(custom_test_frameworks)]
6924#![test_runner(my_runner)]
6925
6926fn my_runner(tests: &[&i32]) {
6927 for t in tests {
6928 if **t == 0 {
6929 println!("PASSED");
6930 } else {
6931 println!("FAILED");
6932 }
6933 }
6934}
6935
6936#[test_case]
6937const WILL_PASS: i32 = 0;
6938
6939#[test_case]
6940const WILL_FAIL: i32 = 4;
6941```
6942"##,
6943 default_severity: Severity::Allow,
6944 warn_since: None,
6945 deny_since: None,
6946 },
6947 Lint {
6948 label: "darwin_objc",
6949 description: r##"# `darwin_objc`
6950
6951
6952
6953The tracking issue for this feature is: [#145496]
6954
6955[#145496]: https://github.com/rust-lang/rust/issues/145496
6956
6957------------------------
6958"##,
6959 default_severity: Severity::Allow,
6960 warn_since: None,
6961 deny_since: None,
6962 },
6963 Lint {
6964 label: "deadline_api",
6965 description: r##"# `deadline_api`
6966
6967
6968
6969The tracking issue for this feature is: [#46316]
6970
6971[#46316]: https://github.com/rust-lang/rust/issues/46316
6972
6973------------------------
6974"##,
6975 default_severity: Severity::Allow,
6976 warn_since: None,
6977 deny_since: None,
6978 },
6979 Lint {
6980 label: "dec2flt",
6981 description: r##"# `dec2flt`
6982
6983This feature is internal to the Rust compiler and is not intended for general use.
6984
6985------------------------
6986"##,
6987 default_severity: Severity::Allow,
6988 warn_since: None,
6989 deny_since: None,
6990 },
6991 Lint {
6992 label: "decl_macro",
6993 description: r##"# `decl_macro`
6994
6995Allows declarative macros 2.0 (`macro`).
6996
6997The tracking issue for this feature is: [#39412]
6998
6999[#39412]: https://github.com/rust-lang/rust/issues/39412
7000
7001------------------------
7002"##,
7003 default_severity: Severity::Allow,
7004 warn_since: None,
7005 deny_since: None,
7006 },
7007 Lint {
7008 label: "default_field_values",
7009 description: r##"# `default_field_values`
7010
7011The tracking issue for this feature is: [#132162]
7012
7013[#132162]: https://github.com/rust-lang/rust/issues/132162
7014
7015The RFC for this feature is: [#3681]
7016
7017[#3681]: https://rust-lang.github.io/rfcs/3681-default-field-values.html
7018
7019------------------------
7020
7021The `default_field_values` feature allows users to specify a const value for
7022individual fields in struct definitions, allowing those to be omitted from
7023initializers.
7024
7025## Examples
7026
7027```rust
7028#![feature(default_field_values)]
7029
7030#[derive(Default)]
7031struct Pet {
7032 name: Option<String>, // impl Default for Pet will use Default::default() for name
7033 age: i128 = 42, // impl Default for Pet will use the literal 42 for age
7034}
7035
7036fn main() {
7037 let a = Pet { name: Some(String::new()), .. }; // Pet { name: Some(""), age: 42 }
7038 let b = Pet::default(); // Pet { name: None, age: 42 }
7039 assert_eq!(a.age, b.age);
7040 // The following would be a compilation error: `name` needs to be specified
7041 // let _ = Pet { .. };
7042}
7043```
7044
7045## `#[derive(Default)]`
7046
7047When deriving Default, the provided values are then used. On enum variants,
7048the variant must still be marked with `#[default]` and have all its fields
7049with default values.
7050
7051```rust
7052#![feature(default_field_values)]
7053
7054#[derive(Default)]
7055enum A {
7056 #[default]
7057 B {
7058 x: i32 = 0,
7059 y: i32 = 0,
7060 },
7061 C,
7062}
7063```
7064
7065## Enum variants
7066
7067This feature also supports enum variants for both specifying default values
7068and `#[derive(Default)]`.
7069
7070## Interaction with `#[non_exhaustive]`
7071
7072A struct or enum variant marked with `#[non_exhaustive]` is not allowed to
7073have default field values.
7074
7075## Lints
7076
7077When manually implementing the `Default` trait for a type that has default
7078field values, if any of these are overridden in the impl the
7079`default_overrides_default_fields` lint will trigger. This lint is in place
7080to avoid surprising diverging behavior between `S { .. }` and
7081`S::default()`, where using the same type in both ways could result in
7082different values. The appropriate way to write a manual `Default`
7083implementation is to use the functional update syntax:
7084
7085```rust
7086#![feature(default_field_values)]
7087
7088struct Pet {
7089 name: String,
7090 age: i128 = 42, // impl Default for Pet will use the literal 42 for age
7091}
7092
7093impl Default for Pet {
7094 fn default() -> Pet {
7095 Pet {
7096 name: "no-name".to_string(),
7097 ..
7098 }
7099 }
7100}
7101```
7102"##,
7103 default_severity: Severity::Allow,
7104 warn_since: None,
7105 deny_since: None,
7106 },
7107 Lint {
7108 label: "default_ignorable",
7109 description: r##"# `default_ignorable`
7110
7111
7112
7113The tracking issue for this feature is: [#160583]
7114
7115[#160583]: https://github.com/rust-lang/rust/issues/160583
7116
7117------------------------
7118"##,
7119 default_severity: Severity::Allow,
7120 warn_since: None,
7121 deny_since: None,
7122 },
7123 Lint {
7124 label: "deprecated_suggestion",
7125 description: r##"# `deprecated_suggestion`
7126
7127Allows having using `suggestion` in the `#[deprecated]` attribute.
7128
7129The tracking issue for this feature is: [#94785]
7130
7131[#94785]: https://github.com/rust-lang/rust/issues/94785
7132
7133------------------------
7134"##,
7135 default_severity: Severity::Allow,
7136 warn_since: None,
7137 deny_since: None,
7138 },
7139 Lint {
7140 label: "deque_extend_front",
7141 description: r##"# `deque_extend_front`
7142
7143
7144
7145The tracking issue for this feature is: [#146975]
7146
7147[#146975]: https://github.com/rust-lang/rust/issues/146975
7148
7149------------------------
7150"##,
7151 default_severity: Severity::Allow,
7152 warn_since: None,
7153 deny_since: None,
7154 },
7155 Lint {
7156 label: "deref_patterns",
7157 description: r##"# `deref_patterns`
7158
7159The tracking issue for this feature is: [#87121]
7160
7161[#87121]: https://github.com/rust-lang/rust/issues/87121
7162
7163------------------------
7164
7165> **Note**: This feature supersedes `box_patterns`.
7166
7167This feature permits pattern matching on [smart pointers in the standard library] through their
7168`Deref` target types, either implicitly or with explicit `deref!(_)` patterns (the syntax of which
7169is currently a placeholder).
7170
7171```rust
7172#![feature(deref_patterns)]
7173
7174let mut v = vec![Box::new(Some(0))];
7175
7176// Implicit dereferences are inserted when a pattern can match against the
7177// result of repeatedly dereferencing but can't match against a smart
7178// pointer itself. This works alongside match ergonomics for references.
7179if let [Some(x)] = &mut v {
7180 *x += 1;
7181}
7182
7183// Explicit `deref!(_)` patterns may instead be used when finer control is
7184// needed, e.g. to dereference only a single smart pointer, or to bind the
7185// the result of dereferencing to a variable.
7186if let deref!([deref!(opt_x @ Some(1))]) = &mut v {
7187 opt_x.as_mut().map(|x| *x += 1);
7188}
7189
7190assert_eq!(v, [Box::new(Some(2))]);
7191```
7192
7193Without this feature, it may be necessary to introduce temporaries to represent dereferenced places
7194when matching on nested structures:
7195
7196```rust
7197let mut v = vec![Box::new(Some(0))];
7198if let [b] = &mut *v {
7199 if let Some(x) = &mut **b {
7200 *x += 1;
7201 }
7202}
7203if let [b] = &mut *v {
7204 if let opt_x @ Some(1) = &mut **b {
7205 opt_x.as_mut().map(|x| *x += 1);
7206 }
7207}
7208assert_eq!(v, [Box::new(Some(2))]);
7209```
7210
7211Deref patterns may move out of boxes:
7212
7213```rust
7214# #![feature(deref_patterns)]
7215struct NoCopy;
7216let deref!(x) = Box::new(NoCopy);
7217drop::<NoCopy>(x);
7218```
7219
7220Additionally, `deref_patterns` implements changes to string and byte string literal patterns,
7221allowing then to be used in deref patterns:
7222
7223```rust
7224# #![feature(deref_patterns)]
7225match ("test".to_string(), Box::from("test"), b"test".to_vec()) {
7226 ("test", "test", b"test") => {}
7227 _ => panic!(),
7228}
7229
7230// This works through multiple layers of reference and smart pointer:
7231match (&Box::new(&"test".to_string()), &&&"test") {
7232 ("test", "test") => {}
7233 _ => panic!(),
7234}
7235
7236// `deref!("...")` syntax may also be used:
7237match "test".to_string() {
7238 deref!("test") => {}
7239 _ => panic!(),
7240}
7241
7242// Matching on slices and arrays using literals is possible elsewhere as well:
7243match *"test" {
7244 "test" => {}
7245 _ => panic!(),
7246}
7247match *b"test" {
7248 b"test" => {}
7249 _ => panic!(),
7250}
7251match *(b"test" as &[u8]) {
7252 b"test" => {}
7253 _ => panic!(),
7254}
7255```
7256
7257[smart pointers in the standard library]: https://doc.rust-lang.org/std/ops/trait.DerefPure.html#implementors
7258"##,
7259 default_severity: Severity::Allow,
7260 warn_since: None,
7261 deny_since: None,
7262 },
7263 Lint {
7264 label: "deref_pure_trait",
7265 description: r##"# `deref_pure_trait`
7266
7267
7268
7269The tracking issue for this feature is: [#87121]
7270
7271[#87121]: https://github.com/rust-lang/rust/issues/87121
7272
7273------------------------
7274"##,
7275 default_severity: Severity::Allow,
7276 warn_since: None,
7277 deny_since: None,
7278 },
7279 Lint {
7280 label: "derive_clone_copy_internals",
7281 description: r##"# `derive_clone_copy_internals`
7282
7283This feature is internal to the Rust compiler and is not intended for general use.
7284
7285------------------------
7286"##,
7287 default_severity: Severity::Allow,
7288 warn_since: None,
7289 deny_since: None,
7290 },
7291 Lint {
7292 label: "derive_coerce_pointee",
7293 description: r##"# `derive_coerce_pointee`
7294
7295
7296
7297The tracking issue for this feature is: [#123430]
7298
7299[#123430]: https://github.com/rust-lang/rust/issues/123430
7300
7301------------------------
7302"##,
7303 default_severity: Severity::Allow,
7304 warn_since: None,
7305 deny_since: None,
7306 },
7307 Lint {
7308 label: "derive_const",
7309 description: r##"# `derive_const`
7310
7311
7312
7313The tracking issue for this feature is: [#118304]
7314
7315[#118304]: https://github.com/rust-lang/rust/issues/118304
7316
7317------------------------
7318"##,
7319 default_severity: Severity::Allow,
7320 warn_since: None,
7321 deny_since: None,
7322 },
7323 Lint {
7324 label: "derive_eq_internals",
7325 description: r##"# `derive_eq_internals`
7326
7327This feature is internal to the Rust compiler and is not intended for general use.
7328
7329------------------------
7330"##,
7331 default_severity: Severity::Allow,
7332 warn_since: None,
7333 deny_since: None,
7334 },
7335 Lint {
7336 label: "derive_from",
7337 description: r##"# `derive_from`
7338
7339Allows deriving the From trait on single-field structs.
7340
7341The tracking issue for this feature is: [#144889]
7342
7343[#144889]: https://github.com/rust-lang/rust/issues/144889
7344
7345------------------------
7346"##,
7347 default_severity: Severity::Allow,
7348 warn_since: None,
7349 deny_since: None,
7350 },
7351 Lint {
7352 label: "derive_macro_global_path",
7353 description: r##"# `derive_macro_global_path`
7354
7355
7356
7357The tracking issue for this feature is: [#154645]
7358
7359[#154645]: https://github.com/rust-lang/rust/issues/154645
7360
7361------------------------
7362"##,
7363 default_severity: Severity::Allow,
7364 warn_since: None,
7365 deny_since: None,
7366 },
7367 Lint {
7368 label: "diagnostic_on_const",
7369 description: r##"# `diagnostic_on_const`
7370
7371Allows giving non-const impls custom diagnostic messages if attempted to be used as const
7372
7373The tracking issue for this feature is: [#143874]
7374
7375[#143874]: https://github.com/rust-lang/rust/issues/143874
7376
7377------------------------
7378"##,
7379 default_severity: Severity::Allow,
7380 warn_since: None,
7381 deny_since: None,
7382 },
7383 Lint {
7384 label: "diagnostic_on_move",
7385 description: r##"# `diagnostic_on_move`
7386
7387The tracking issue for this feature is: [#154181]
7388
7389------------------------
7390
7391The `diagnostic_on_move` feature allows use of the `#[diagnostic::on_move]` attribute. It should be
7392placed on struct, enum and union declarations, though it is not an error to be located in other
7393positions. This attribute is a hint to the compiler to supplement the error message when the
7394annotated type is involved in a borrowcheck error.
7395
7396For example, [`File`] is annotated as such:
7397```rust
7398#![feature(diagnostic_on_move)]
7399
7400#[diagnostic::on_move(note = "you can use `File::try_clone` \
7401 to duplicate a `File` instance")]
7402pub struct File {
7403 // ...
7404}
7405```
7406
7407When you try to use a `File` after it's already been moved, it will helpfully tell you about `try_clone`.
7408
7409The message and label can also be customized:
7410
7411```rust
7412#![feature(diagnostic_on_move)]
7413
7414use std::marker::PhantomData;
7415
7416#[diagnostic::on_move(
7417 message = "`{Self}` cannot be used multiple times",
7418 label = "this token may only be used once",
7419 note = "you can create a new `Token` with `Token::conjure()`"
7420)]
7421pub struct Token<'brand> {
7422 spooky: PhantomData<&'brand ()>,
7423}
7424
7425impl Token<'_> {
7426 pub fn conjure<'u>() -> Token<'u> {
7427 Token {
7428 spooky: PhantomData,
7429 }
7430 }
7431}
7432```
7433The user may try to use it like this:
7434```rust,compile_fail,E0382
7435# #![feature(diagnostic_on_move)]
7436#
7437# use std::marker::PhantomData;
7438#
7439# #[diagnostic::on_move(
7440# message = "`{Self}` cannot be used multiple times",
7441# label = "this token may only be used once",
7442# note = "you can create a new `Token` with `Token::conjure()`"
7443# )]
7444# pub struct Token<'brand> {
7445# spooky: PhantomData<&'brand ()>,
7446# }
7447#
7448# impl Token<'_> {
7449# pub fn conjure<'u>() -> Token<'u> {
7450# Token {
7451# spooky: PhantomData,
7452# }
7453# }
7454# }
7455# fn main() {
7456let token = Token::conjure();
7457let _ = (token, token);
7458# }
7459```
7460This will result in the following error:
7461```text
7462error[E0382]: `Token` cannot be used multiple times
7463 --> src/main.rs:24:21
7464 |
7465 1 | let token = Token::conjure();
7466 | ----- this token may only be used once
7467 2 | let _ = (token, token);
7468 | ----- ^^^^^ value used here after move
7469 | |
7470 | value moved here
7471 |
7472 = note: you can create a new `Token` with `Token::conjure()`
7473```
7474
7475[`File`]: https://doc.rust-lang.org/nightly/std/fs/struct.File.html "File in std::fs"
7476[#154181]: https://github.com/rust-lang/rust/issues/154181 "Tracking Issue for #[diagnostic::on_move]"
7477"##,
7478 default_severity: Severity::Allow,
7479 warn_since: None,
7480 deny_since: None,
7481 },
7482 Lint {
7483 label: "diagnostic_on_type_error",
7484 description: r##"# `diagnostic_on_type_error`
7485
7486Allows giving custom types diagnostic messages on type errors
7487
7488The tracking issue for this feature is: [#155382]
7489
7490[#155382]: https://github.com/rust-lang/rust/issues/155382
7491
7492------------------------
7493"##,
7494 default_severity: Severity::Allow,
7495 warn_since: None,
7496 deny_since: None,
7497 },
7498 Lint {
7499 label: "diagnostic_on_unknown",
7500 description: r##"# `diagnostic_on_unknown`
7501
7502The tracking issue for this feature is: [#152900](https://github.com/rust-lang/rust/issues/152900)
7503
7504------------------------
7505
7506The `diagnostic_on_unknown` feature allows use of the `#[diagnostic::on_unknown]` attribute. It should be
7507placed on use and module declarations as well as the crate root, though it is not an error to be located in other
7508positions. This attribute is a hint to the compiler to supplement the error message when the
7509annotated declaration is involved in a name resolution error.
7510
7511Format parameters with the given named parameter will be replaced with the following text:
7512
7513- `{Unresolved}` — The `SimplePathSegment` of the import path that could not be resolved.
7514- `{this}` — The name of the annotated item. On `use` statements this is identical to `{unresolved}`.
7515
7516The original error message will not be suppressed but is emitted as a note instead.
7517
7518### On use declarations
7519
7520```rust,edition2018,compile_fail,E0432
7521#![feature(diagnostic_on_unknown)]
7522
7523#[diagnostic::on_unknown(
7524 message = "`{Unresolved}` doesn't exist",
7525 label = "you did something silly here"
7526)]
7527use doesnt_exist;
7528```
7529This will result in the following error:
7530```text
7531error[E0432]: `doesnt_exist` doesn't exist
7532 --> src/lib.rs:7:5
7533 |
75347 | use doesnt_exist;
7535 | ^^^^^^^^^^^^ you did something silly here
7536 |
7537 = note: unresolved import `doesnt_exist`
7538
7539For more information about this error, try `rustc --explain E0432`.
7540```
7541
7542### On module declarations
7543
7544```rust,edition2018,compile_fail,E0432
7545#![feature(diagnostic_on_unknown)]
7546
7547#[diagnostic::on_unknown(
7548 message = "module `{this}` is empty, there is no `{unresolved}` here",
7549 label = "can't import something from an empty module"
7550)]
7551mod empty {}
7552
7553use empty::what;
7554```
7555This will result in the following error:
7556
7557```text
7558error[E0432]: module `empty` is empty, there is no `what` here
7559 --> src/lib.rs:9:5
7560 |
75619 | use empty::what;
7562 | ^^^^^^^----
7563 | |
7564 | can't import something from an empty module
7565 |
7566 = note: unresolved import `empty::what`
7567```
7568
7569### On the crate root
7570
7571This additionally requires the `#![feature(custom_inner_attributes)]` feature:
7572
7573```rust,edition2018,compile_fail,E0432
7574#![feature(diagnostic_on_unknown)]
7575#![feature(custom_inner_attributes)]
7576#![diagnostic::on_unknown(message = "Say `{Unresolved}` again!")]
7577
7578use self::what;
7579```
7580### Example
7581
7582Consider the following pair of macros, one which creates a hidden module with a constant and another that reads it.
7583
7584```rust
7585#![feature(macro_metavar_expr, macro_attr)]
7586
7587macro_rules! instrument {
7588 attr() { $vis:vis fn $fn_name:ident ($($arg_name:ident : $arg_ty:ty),*) $(-> $ret:ty)? $body:block } => {
7589 $vis fn $fn_name ($($arg_name:$arg_ty),*) $(-> $ret)? $body
7590 #[doc(hidden)]
7591 $vis mod $fn_name {
7592 pub const LEN: usize = ${ count($arg_name) };
7593 }
7594 }
7595}
7596
7597macro_rules! count_args {
7598 ($name:ident) => {{
7599 $name::LEN
7600 }}
7601}
7602
7603#[instrument]
7604fn add(a: u8, b: u8) -> u8 {
7605 a + b
7606}
7607
7608fn main() {
7609 let n = count_args!(add);
7610 println!("`add` has {n} arguments");
7611}
7612```
7613
7614If the `#[instrument]` macro is omitted it will emit this confusing error:
7615```text
7616error[E0433]: cannot find module or crate `add` in this scope
7617 --> src/main.rs:25:25
7618 |
761925 | let n = count_args!(add);
7620 | ^^^ function `add` is not a crate or module
7621```
7622
7623`#[diagnostic::on_unknown]` can be used to customize this error message:
7624
7625```rust,edition2018,compile_fail,E0432
7626#![feature(diagnostic_on_unknown)]
7627# #![feature(macro_metavar_expr, macro_attr)]
7628#
7629# #[allow(unused_macros)]
7630# macro_rules! instrument {
7631# attr() { $vis:vis fn $fn_name:ident ($($arg_name:ident : $arg_ty:ty),*) $(-> $ret:ty)? $body:block } => {
7632# $vis fn $fn_name ($($arg_name:$arg_ty),*) $(-> $ret)? $body
7633# #[doc(hidden)]
7634# $vis mod $fn_name {
7635# pub const LEN: usize = ${ count($arg_name) };
7636# }
7637# }
7638# }
7639
7640macro_rules! count_args {
7641 ($name:ident) => {{
7642 #[diagnostic::on_unknown(
7643 message = "cannot count arguments of `{Unresolved}`",
7644 label = "`{Unresolved}` is not a function decorated \
7645 with the `#[instrument]` macro"
7646 )]
7647 use $name::LEN as length;
7648 length
7649 }}
7650}
7651
7652// #[instrument]
7653fn add(a: u8, b: u8) -> u8 {
7654 a + b
7655}
7656
7657fn main() {
7658 let n = count_args!(add);
7659 println!("`add` has {n} arguments");
7660}
7661```
7662This produces:
7663```text
7664error[E0432]: cannot count arguments of `add`
7665 --> src/main.rs:33:25
7666 |
766733 | let n = count_args!(add);
7668 | ^^^ `add` is not a function decorated with
7669 | the `#[instrument]` macro
7670 |
7671 = note: unresolved import `add`
7672```
7673
7674### Edition differences
7675
7676In the 2015 edition, use paths are relative to the crate root. For example, `use empty` will be resolved relative to the crate root and resolution will not encounter the `mod empty {}` declaration.
7677```rust,edition2015,compile_fail,E0432
7678#![feature(diagnostic_on_unknown)]
7679
7680mod foo {
7681 #[diagnostic::on_unknown(message = "oh oh")]
7682 mod empty {}
7683
7684 use empty::what;
7685}
7686```
7687
7688```text
7689error[E0432]: unresolved import `empty`
7690 --> src/main.rs:9:8
7691 |
76929 | use empty::what;
7693 | ^^^^^
7694 |
7695```
7696"##,
7697 default_severity: Severity::Allow,
7698 warn_since: None,
7699 deny_since: None,
7700 },
7701 Lint {
7702 label: "diagnostic_on_unmatched_args",
7703 description: r##"# `diagnostic_on_unmatched_args`
7704
7705The tracking issue for this feature is: [#155642]
7706
7707[#155642]: https://github.com/rust-lang/rust/issues/155642
7708
7709------------------------
7710
7711The `diagnostic_on_unmatched_args` feature adds the
7712`#[diagnostic::on_unmatched_args(...)]` attribute for declarative macros.
7713It lets a macro definition customize diagnostics for matcher failures after all arms have been
7714tried, such as incomplete invocations or trailing extra arguments.
7715
7716This attribute currently applies to declarative macros such as `macro_rules!` and `pub macro`.
7717It is currently used for errors emitted by declarative macro matching itself; fragment parser
7718errors still use their existing diagnostics.
7719
7720```rust,compile_fail
7721#![feature(diagnostic_on_unmatched_args)]
7722
7723#[diagnostic::on_unmatched_args(
7724 message = "invalid arguments to {this} macro invocation",
7725 label = "expected a type and value here",
7726 note = "this macro expects a type and a value, like `pair!(u8, 0)`",
7727 note = "see <link/to/docs>",
7728)]
7729macro_rules! pair {
7730 ($ty:ty, $value:expr) => {};
7731}
7732
7733pair!(u8);
7734```
7735
7736This emits output like:
7737
7738```text
7739error: invalid arguments to pair macro invocation
7740 --> example.rs:13:9
7741 |
77429 | macro_rules! pair {
7743 | ----------------- when calling this macro
7744...
774513 | pair!(u8);
7746 | ^ expected a type and value here
7747 |
7748note: while trying to match `,`
7749 --> example.rs:10:12
7750 |
775110 | ($ty:ty, $value:expr) => {};
7752 | ^
7753 = note: this macro expects a type and a value, like `pair!(u8, 0)`
7754 = note: see <link/to/docs>
7755```
7756"##,
7757 default_severity: Severity::Allow,
7758 warn_since: None,
7759 deny_since: None,
7760 },
7761 Lint {
7762 label: "diagnostic_opaque",
7763 description: r##"# `diagnostic_opaque`
7764
7765Used by macros to not show their bodies in error messages. No-op with `-Z macro-backtrace`.
7766
7767The tracking issue for this feature is: [#158813]
7768
7769[#158813]: https://github.com/rust-lang/rust/issues/158813
7770
7771------------------------
7772"##,
7773 default_severity: Severity::Allow,
7774 warn_since: None,
7775 deny_since: None,
7776 },
7777 Lint {
7778 label: "dir_entry_ext2",
7779 description: r##"# `dir_entry_ext2`
7780
7781
7782
7783The tracking issue for this feature is: [#85573]
7784
7785[#85573]: https://github.com/rust-lang/rust/issues/85573
7786
7787------------------------
7788"##,
7789 default_severity: Severity::Allow,
7790 warn_since: None,
7791 deny_since: None,
7792 },
7793 Lint {
7794 label: "dirfd",
7795 description: r##"# `dirfd`
7796
7797
7798
7799The tracking issue for this feature is: [#120426]
7800
7801[#120426]: https://github.com/rust-lang/rust/issues/120426
7802
7803------------------------
7804"##,
7805 default_severity: Severity::Allow,
7806 warn_since: None,
7807 deny_since: None,
7808 },
7809 Lint {
7810 label: "discriminant_kind",
7811 description: r##"# `discriminant_kind`
7812
7813
7814
7815This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
7816
7817------------------------
7818"##,
7819 default_severity: Severity::Allow,
7820 warn_since: None,
7821 deny_since: None,
7822 },
7823 Lint {
7824 label: "disjoint_bitor",
7825 description: r##"# `disjoint_bitor`
7826
7827
7828
7829The tracking issue for this feature is: [#135758]
7830
7831[#135758]: https://github.com/rust-lang/rust/issues/135758
7832
7833------------------------
7834"##,
7835 default_severity: Severity::Allow,
7836 warn_since: None,
7837 deny_since: None,
7838 },
7839 Lint {
7840 label: "dispatch_from_dyn",
7841 description: r##"# `dispatch_from_dyn`
7842
7843
7844
7845This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
7846
7847------------------------
7848"##,
7849 default_severity: Severity::Allow,
7850 warn_since: None,
7851 deny_since: None,
7852 },
7853 Lint {
7854 label: "doc_cfg",
7855 description: r##"# `doc_cfg`
7856
7857The tracking issue for this feature is: [#43781]
7858
7859------
7860
7861The `doc_cfg` feature allows an API be documented as only available in some specific platforms.
7862This attribute has two effects:
7863
78641. In the annotated item's documentation, there will be a message saying "Available on
7865 (platform) only".
7866
78672. The item's doc-tests will only run on the specific platform.
7868
7869In addition to allowing the use of the `#[doc(cfg)]` attribute, this feature enables the use of a
7870special conditional compilation flag, `#[cfg(doc)]`, set whenever building documentation on your
7871crate.
7872
7873This feature was introduced as part of PR [#43348] to allow the platform-specific parts of the
7874standard library be documented.
7875
7876```rust
7877#![feature(doc_cfg)]
7878
7879#[cfg(any(windows, doc))]
7880#[doc(cfg(windows))]
7881/// The application's icon in the notification area (a.k.a. system tray).
7882///
7883/// # Examples
7884///
7885/// ```no_run
7886/// extern crate my_awesome_ui_library;
7887/// use my_awesome_ui_library::current_app;
7888/// use my_awesome_ui_library::windows::notification;
7889///
7890/// let icon = current_app().get::<notification::Icon>();
7891/// icon.show();
7892/// icon.show_message("Hello");
7893/// ```
7894pub struct Icon {
7895 // ...
7896}
7897```
7898
7899[#43781]: https://github.com/rust-lang/rust/issues/43781
7900[#43348]: https://github.com/rust-lang/rust/issues/43348
7901"##,
7902 default_severity: Severity::Allow,
7903 warn_since: None,
7904 deny_since: None,
7905 },
7906 Lint {
7907 label: "doc_masked",
7908 description: r##"# `doc_masked`
7909
7910The tracking issue for this feature is: [#44027]
7911
7912-----
7913
7914The `doc_masked` feature allows a crate to exclude types from a given crate from appearing in lists
7915of trait implementations. The specifics of the feature are as follows:
7916
79171. When rustdoc encounters an `extern crate` statement annotated with a `#[doc(masked)]` attribute,
7918 it marks the crate as being masked.
7919
79202. When listing traits a given type implements, rustdoc ensures that traits from masked crates are
7921 not emitted into the documentation.
7922
79233. When listing types that implement a given trait, rustdoc ensures that types from masked crates
7924 are not emitted into the documentation.
7925
7926This feature was introduced in PR [#44026] to ensure that compiler-internal and
7927implementation-specific types and traits were not included in the standard library's documentation.
7928Such types would introduce broken links into the documentation.
7929
7930[#44026]: https://github.com/rust-lang/rust/pull/44026
7931[#44027]: https://github.com/rust-lang/rust/pull/44027
7932"##,
7933 default_severity: Severity::Allow,
7934 warn_since: None,
7935 deny_since: None,
7936 },
7937 Lint {
7938 label: "doc_notable_trait",
7939 description: r##"# `doc_notable_trait`
7940
7941The tracking issue for this feature is: [#45040]
7942
7943The `doc_notable_trait` feature allows the use of the `#[doc(notable_trait)]`
7944attribute, which will display the trait in a "Notable traits" dialog for
7945functions returning types that implement the trait. For example, this attribute
7946is applied to the `Iterator`, `Future`, `io::Read`, and `io::Write` traits in
7947the standard library.
7948
7949You can do this on your own traits like so:
7950
7951```
7952#![feature(doc_notable_trait)]
7953
7954#[doc(notable_trait)]
7955pub trait MyTrait {}
7956
7957pub struct MyStruct;
7958impl MyTrait for MyStruct {}
7959
7960/// The docs for this function will have a button that displays a dialog about
7961/// `MyStruct` implementing `MyTrait`.
7962pub fn my_fn() -> MyStruct { MyStruct }
7963```
7964
7965This feature was originally implemented in PR [#45039].
7966
7967See also its documentation in [the rustdoc book][rustdoc-book-notable_trait].
7968
7969[#45040]: https://github.com/rust-lang/rust/issues/45040
7970[#45039]: https://github.com/rust-lang/rust/pull/45039
7971[rustdoc-book-notable_trait]: ../../rustdoc/unstable-features.html#adding-your-trait-to-the-notable-traits-dialog
7972"##,
7973 default_severity: Severity::Allow,
7974 warn_since: None,
7975 deny_since: None,
7976 },
7977 Lint {
7978 label: "downcast_unchecked",
7979 description: r##"# `downcast_unchecked`
7980
7981
7982
7983The tracking issue for this feature is: [#90850]
7984
7985[#90850]: https://github.com/rust-lang/rust/issues/90850
7986
7987------------------------
7988"##,
7989 default_severity: Severity::Allow,
7990 warn_since: None,
7991 deny_since: None,
7992 },
7993 Lint {
7994 label: "drain_keep_rest",
7995 description: r##"# `drain_keep_rest`
7996
7997
7998
7999The tracking issue for this feature is: [#101122]
8000
8001[#101122]: https://github.com/rust-lang/rust/issues/101122
8002
8003------------------------
8004"##,
8005 default_severity: Severity::Allow,
8006 warn_since: None,
8007 deny_since: None,
8008 },
8009 Lint {
8010 label: "dropck_eyepatch",
8011 description: r##"# `dropck_eyepatch`
8012
8013Allows using the `may_dangle` attribute (RFC 1327).
8014
8015The tracking issue for this feature is: [#34761]
8016
8017[#34761]: https://github.com/rust-lang/rust/issues/34761
8018
8019------------------------
8020"##,
8021 default_severity: Severity::Allow,
8022 warn_since: None,
8023 deny_since: None,
8024 },
8025 Lint {
8026 label: "duration_constants",
8027 description: r##"# `duration_constants`
8028
8029
8030
8031The tracking issue for this feature is: [#57391]
8032
8033[#57391]: https://github.com/rust-lang/rust/issues/57391
8034
8035------------------------
8036"##,
8037 default_severity: Severity::Allow,
8038 warn_since: None,
8039 deny_since: None,
8040 },
8041 Lint {
8042 label: "duration_constructors",
8043 description: r##"# `duration_constructors`
8044
8045The tracking issue for this feature is: [#120301]
8046
8047[#120301]: https://github.com/rust-lang/rust/issues/120301
8048
8049------------------------
8050
8051Add the methods `from_days` and `from_weeks` to `Duration`.
8052"##,
8053 default_severity: Severity::Allow,
8054 warn_since: None,
8055 deny_since: None,
8056 },
8057 Lint {
8058 label: "duration_integer_division",
8059 description: r##"# `duration_integer_division`
8060
8061
8062
8063The tracking issue for this feature is: [#149573]
8064
8065[#149573]: https://github.com/rust-lang/rust/issues/149573
8066
8067------------------------
8068"##,
8069 default_severity: Severity::Allow,
8070 warn_since: None,
8071 deny_since: None,
8072 },
8073 Lint {
8074 label: "duration_millis_float",
8075 description: r##"# `duration_millis_float`
8076
8077
8078
8079The tracking issue for this feature is: [#122451]
8080
8081[#122451]: https://github.com/rust-lang/rust/issues/122451
8082
8083------------------------
8084"##,
8085 default_severity: Severity::Allow,
8086 warn_since: None,
8087 deny_since: None,
8088 },
8089 Lint {
8090 label: "duration_units",
8091 description: r##"# `duration_units`
8092
8093
8094
8095The tracking issue for this feature is: [#120301]
8096
8097[#120301]: https://github.com/rust-lang/rust/issues/120301
8098
8099------------------------
8100"##,
8101 default_severity: Severity::Allow,
8102 warn_since: None,
8103 deny_since: None,
8104 },
8105 Lint {
8106 label: "edition_panic",
8107 description: r##"# `edition_panic`
8108
8109
8110
8111This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
8112
8113------------------------
8114"##,
8115 default_severity: Severity::Allow,
8116 warn_since: None,
8117 deny_since: None,
8118 },
8119 Lint {
8120 label: "effective_target_features",
8121 description: r##"# `effective_target_features`
8122
8123Allows features to allow target_feature to better interact with traits.
8124
8125The tracking issue for this feature is: [#143352]
8126
8127[#143352]: https://github.com/rust-lang/rust/issues/143352
8128
8129------------------------
8130"##,
8131 default_severity: Severity::Allow,
8132 warn_since: None,
8133 deny_since: None,
8134 },
8135 Lint {
8136 label: "eii_internals",
8137 description: r##"# `eii_internals`
8138
8139Implementation details of externally implementable items
8140
8141This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
8142
8143------------------------
8144"##,
8145 default_severity: Severity::Allow,
8146 warn_since: None,
8147 deny_since: None,
8148 },
8149 Lint {
8150 label: "env_split_paths_ref",
8151 description: r##"# `env_split_paths_ref`
8152
8153
8154
8155This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
8156
8157------------------------
8158"##,
8159 default_severity: Severity::Allow,
8160 warn_since: None,
8161 deny_since: None,
8162 },
8163 Lint {
8164 label: "ergonomic_clones",
8165 description: r##"# `ergonomic_clones`
8166
8167Allows the .use postfix syntax `x.use` and use closures `use |x| { ... }`
8168
8169The tracking issue for this feature is: [#132290]
8170
8171[#132290]: https://github.com/rust-lang/rust/issues/132290
8172
8173------------------------
8174"##,
8175 default_severity: Severity::Allow,
8176 warn_since: None,
8177 deny_since: None,
8178 },
8179 Lint {
8180 label: "ermsb_target_feature",
8181 description: r##"# `ermsb_target_feature`
8182
8183ermsb target feature on x86.
8184
8185The tracking issue for this feature is: [#150249]
8186
8187[#150249]: https://github.com/rust-lang/rust/issues/150249
8188
8189------------------------
8190"##,
8191 default_severity: Severity::Allow,
8192 warn_since: None,
8193 deny_since: None,
8194 },
8195 Lint {
8196 label: "error_generic_member_access",
8197 description: r##"# `error_generic_member_access`
8198
8199
8200
8201The tracking issue for this feature is: [#99301]
8202
8203[#99301]: https://github.com/rust-lang/rust/issues/99301
8204
8205------------------------
8206"##,
8207 default_severity: Severity::Allow,
8208 warn_since: None,
8209 deny_since: None,
8210 },
8211 Lint {
8212 label: "error_iter",
8213 description: r##"# `error_iter`
8214
8215
8216
8217The tracking issue for this feature is: [#58520]
8218
8219[#58520]: https://github.com/rust-lang/rust/issues/58520
8220
8221------------------------
8222"##,
8223 default_severity: Severity::Allow,
8224 warn_since: None,
8225 deny_since: None,
8226 },
8227 Lint {
8228 label: "error_reporter",
8229 description: r##"# `error_reporter`
8230
8231
8232
8233The tracking issue for this feature is: [#90172]
8234
8235[#90172]: https://github.com/rust-lang/rust/issues/90172
8236
8237------------------------
8238"##,
8239 default_severity: Severity::Allow,
8240 warn_since: None,
8241 deny_since: None,
8242 },
8243 Lint {
8244 label: "error_type_id",
8245 description: r##"# `error_type_id`
8246
8247
8248
8249The tracking issue for this feature is: [#60784]
8250
8251[#60784]: https://github.com/rust-lang/rust/issues/60784
8252
8253------------------------
8254"##,
8255 default_severity: Severity::Allow,
8256 warn_since: None,
8257 deny_since: None,
8258 },
8259 Lint {
8260 label: "exact_bitshifts",
8261 description: r##"# `exact_bitshifts`
8262
8263
8264
8265The tracking issue for this feature is: [#144336]
8266
8267[#144336]: https://github.com/rust-lang/rust/issues/144336
8268
8269------------------------
8270"##,
8271 default_severity: Severity::Allow,
8272 warn_since: None,
8273 deny_since: None,
8274 },
8275 Lint {
8276 label: "exact_div",
8277 description: r##"# `exact_div`
8278
8279
8280
8281The tracking issue for this feature is: [#139911]
8282
8283[#139911]: https://github.com/rust-lang/rust/issues/139911
8284
8285------------------------
8286"##,
8287 default_severity: Severity::Allow,
8288 warn_since: None,
8289 deny_since: None,
8290 },
8291 Lint {
8292 label: "exact_size_is_empty",
8293 description: r##"# `exact_size_is_empty`
8294
8295
8296
8297The tracking issue for this feature is: [#35428]
8298
8299[#35428]: https://github.com/rust-lang/rust/issues/35428
8300
8301------------------------
8302"##,
8303 default_severity: Severity::Allow,
8304 warn_since: None,
8305 deny_since: None,
8306 },
8307 Lint {
8308 label: "exhaustive_patterns",
8309 description: r##"# `exhaustive_patterns`
8310
8311Allows exhaustive pattern matching on types that contain uninhabited types.
8312
8313The tracking issue for this feature is: [#51085]
8314
8315[#51085]: https://github.com/rust-lang/rust/issues/51085
8316
8317------------------------
8318"##,
8319 default_severity: Severity::Allow,
8320 warn_since: None,
8321 deny_since: None,
8322 },
8323 Lint {
8324 label: "exit_status_error",
8325 description: r##"# `exit_status_error`
8326
8327
8328
8329The tracking issue for this feature is: [#84908]
8330
8331[#84908]: https://github.com/rust-lang/rust/issues/84908
8332
8333------------------------
8334"##,
8335 default_severity: Severity::Allow,
8336 warn_since: None,
8337 deny_since: None,
8338 },
8339 Lint {
8340 label: "exitcode_exit_method",
8341 description: r##"# `exitcode_exit_method`
8342
8343
8344
8345The tracking issue for this feature is: [#97100]
8346
8347[#97100]: https://github.com/rust-lang/rust/issues/97100
8348
8349------------------------
8350"##,
8351 default_severity: Severity::Allow,
8352 warn_since: None,
8353 deny_since: None,
8354 },
8355 Lint {
8356 label: "explicit_extern_abis",
8357 description: r##"# `explicit_extern_abis`
8358
8359The tracking issue for this feature is: [#134986]
8360
8361------
8362
8363Disallow `extern` without an explicit ABI. We should write `extern "C"`
8364(or another ABI) instead of just `extern`.
8365
8366By making the ABI explicit, it becomes much clearer that "C" is just one of the
8367possible choices, rather than the "standard" way for external functions.
8368Removing the default makes it easier to add a new ABI on equal footing as "C".
8369
8370```rust,editionfuture,compile_fail
8371#![feature(explicit_extern_abis)]
8372
8373extern fn function1() {} // ERROR `extern` declarations without an explicit ABI
8374 // are disallowed
8375
8376extern "C" fn function2() {} // compiles
8377
8378extern "aapcs" fn function3() {} // compiles
8379```
8380
8381[#134986]: https://github.com/rust-lang/rust/issues/134986
8382"##,
8383 default_severity: Severity::Allow,
8384 warn_since: None,
8385 deny_since: None,
8386 },
8387 Lint {
8388 label: "explicit_tail_calls",
8389 description: r##"# `explicit_tail_calls`
8390
8391Allows explicit tail calls via `become` expression.
8392
8393The tracking issue for this feature is: [#112788]
8394
8395[#112788]: https://github.com/rust-lang/rust/issues/112788
8396
8397------------------------
8398"##,
8399 default_severity: Severity::Allow,
8400 warn_since: None,
8401 deny_since: None,
8402 },
8403 Lint {
8404 label: "export_stable",
8405 description: r##"# `export_stable`
8406
8407Allows using `#[export_stable]` which indicates that an item is exportable.
8408
8409The tracking issue for this feature is: [#139939]
8410
8411[#139939]: https://github.com/rust-lang/rust/issues/139939
8412
8413------------------------
8414"##,
8415 default_severity: Severity::Allow,
8416 warn_since: None,
8417 deny_since: None,
8418 },
8419 Lint {
8420 label: "extend_one",
8421 description: r##"# `extend_one`
8422
8423
8424
8425The tracking issue for this feature is: [#72631]
8426
8427[#72631]: https://github.com/rust-lang/rust/issues/72631
8428
8429------------------------
8430"##,
8431 default_severity: Severity::Allow,
8432 warn_since: None,
8433 deny_since: None,
8434 },
8435 Lint {
8436 label: "extend_one_unchecked",
8437 description: r##"# `extend_one_unchecked`
8438
8439
8440
8441This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
8442
8443------------------------
8444"##,
8445 default_severity: Severity::Allow,
8446 warn_since: None,
8447 deny_since: None,
8448 },
8449 Lint {
8450 label: "extern_item_impls",
8451 description: r##"# `extern_item_impls`
8452
8453Externally implementable items
8454
8455The tracking issue for this feature is: [#125418]
8456
8457[#125418]: https://github.com/rust-lang/rust/issues/125418
8458
8459------------------------
8460"##,
8461 default_severity: Severity::Allow,
8462 warn_since: None,
8463 deny_since: None,
8464 },
8465 Lint {
8466 label: "extern_types",
8467 description: r##"# `extern_types`
8468
8469Allows defining `extern type`s.
8470
8471The tracking issue for this feature is: [#43467]
8472
8473[#43467]: https://github.com/rust-lang/rust/issues/43467
8474
8475------------------------
8476"##,
8477 default_severity: Severity::Allow,
8478 warn_since: None,
8479 deny_since: None,
8480 },
8481 Lint {
8482 label: "f128",
8483 description: r##"# `f128`
8484
8485The tracking issue for this feature is: [#116909]
8486
8487[#116909]: https://github.com/rust-lang/rust/issues/116909
8488
8489---
8490
8491Enable the `f128` type for IEEE 128-bit floating numbers (quad precision).
8492"##,
8493 default_severity: Severity::Allow,
8494 warn_since: None,
8495 deny_since: None,
8496 },
8497 Lint {
8498 label: "f16",
8499 description: r##"# `f16`
8500
8501The tracking issue for this feature is: [#116909]
8502
8503[#116909]: https://github.com/rust-lang/rust/issues/116909
8504
8505---
8506
8507Enable the `f16` type for IEEE 16-bit floating numbers (half precision).
8508"##,
8509 default_severity: Severity::Allow,
8510 warn_since: None,
8511 deny_since: None,
8512 },
8513 Lint {
8514 label: "f16b",
8515 description: r##"# `f16b`
8516
8517The tracking issue for this feature is: [#160630]
8518
8519[#160630]: https://github.com/rust-lang/rust/issues/160630
8520
8521---
8522
8523Enable the `core::num::f16b` type for values stored in the bfloat16 format.
8524
8525`f16b` is a nominal library type, not a primitive floating-point type: it has no literal suffix, arithmetic operators, or numeric `as` casts. A compiler lang item connects its layout to the chosen backend's representation.
8526"##,
8527 default_severity: Severity::Allow,
8528 warn_since: None,
8529 deny_since: None,
8530 },
8531 Lint {
8532 label: "f32_from_f16",
8533 description: r##"# `f32_from_f16`
8534
8535
8536
8537The tracking issue for this feature is: [#154005]
8538
8539[#154005]: https://github.com/rust-lang/rust/issues/154005
8540
8541------------------------
8542"##,
8543 default_severity: Severity::Allow,
8544 warn_since: None,
8545 deny_since: None,
8546 },
8547 Lint {
8548 label: "fd",
8549 description: r##"# `fd`
8550
8551This feature is internal to the Rust compiler and is not intended for general use.
8552
8553------------------------
8554"##,
8555 default_severity: Severity::Allow,
8556 warn_since: None,
8557 deny_since: None,
8558 },
8559 Lint {
8560 label: "ffi_const",
8561 description: r##"# `ffi_const`
8562
8563The tracking issue for this feature is: [#58328]
8564
8565------
8566
8567The `#[ffi_const]` attribute applies clang's `const` attribute to foreign
8568functions declarations.
8569
8570That is, `#[ffi_const]` functions shall have no effects except for its return
8571value, which can only depend on the values of the function parameters, and is
8572not affected by changes to the observable state of the program.
8573
8574Applying the `#[ffi_const]` attribute to a function that violates these
8575requirements is undefined behaviour.
8576
8577This attribute enables Rust to perform common optimizations, like sub-expression
8578elimination, and it can avoid emitting some calls in repeated invocations of the
8579function with the same argument values regardless of other operations being
8580performed in between these functions calls (as opposed to `#[ffi_pure]`
8581functions).
8582
8583## Pitfalls
8584
8585A `#[ffi_const]` function can only read global memory that would not affect
8586its return value for the whole execution of the program (e.g. immutable global
8587memory). `#[ffi_const]` functions are referentially-transparent and therefore
8588more strict than `#[ffi_pure]` functions.
8589
8590A common pitfall involves applying the `#[ffi_const]` attribute to a
8591function that reads memory through pointer arguments which do not necessarily
8592point to immutable global memory.
8593
8594A `#[ffi_const]` function that returns unit has no effect on the abstract
8595machine's state, and a `#[ffi_const]` function cannot be `#[ffi_pure]`.
8596
8597A `#[ffi_const]` function must not diverge, neither via a side effect (e.g. a
8598call to `abort`) nor by infinite loops.
8599
8600When translating C headers to Rust FFI, it is worth verifying for which targets
8601the `const` attribute is enabled in those headers, and using the appropriate
8602`cfg` macros in the Rust side to match those definitions. While the semantics of
8603`const` are implemented identically by many C and C++ compilers, e.g., clang,
8604[GCC], [ARM C/C++ compiler], [IBM ILE C/C++], etc. they are not necessarily
8605implemented in this way on all of them. It is therefore also worth verifying
8606that the semantics of the C toolchain used to compile the binary being linked
8607against are compatible with those of the `#[ffi_const]`.
8608
8609[#58328]: https://github.com/rust-lang/rust/issues/58328
8610[ARM C/C++ compiler]: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491c/Cacgigch.html
8611[GCC]: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-const-function-attribute
8612[IBM ILE C/C++]: https://www.ibm.com/support/knowledgecenter/fr/ssw_ibm_i_71/rzarg/fn_attrib_const.htm
8613"##,
8614 default_severity: Severity::Allow,
8615 warn_since: None,
8616 deny_since: None,
8617 },
8618 Lint {
8619 label: "ffi_pure",
8620 description: r##"# `ffi_pure`
8621
8622The tracking issue for this feature is: [#58329]
8623
8624------
8625
8626The `#[ffi_pure]` attribute applies clang's `pure` attribute to foreign
8627functions declarations.
8628
8629That is, `#[ffi_pure]` functions shall have no effects except for its return
8630value, which shall not change across two consecutive function calls with
8631the same parameters.
8632
8633Applying the `#[ffi_pure]` attribute to a function that violates these
8634requirements is undefined behavior.
8635
8636This attribute enables Rust to perform common optimizations, like sub-expression
8637elimination and loop optimizations. Some common examples of pure functions are
8638`strlen` or `memcmp`.
8639
8640These optimizations are only applicable when the compiler can prove that no
8641program state observable by the `#[ffi_pure]` function has changed between calls
8642of the function, which could alter the result. See also the `#[ffi_const]`
8643attribute, which provides stronger guarantees regarding the allowable behavior
8644of a function, enabling further optimization.
8645
8646## Pitfalls
8647
8648A `#[ffi_pure]` function can read global memory through the function
8649parameters (e.g. pointers), globals, etc. `#[ffi_pure]` functions are not
8650referentially-transparent, and are therefore more relaxed than `#[ffi_const]`
8651functions.
8652
8653However, accessing global memory through volatile or atomic reads can violate the
8654requirement that two consecutive function calls shall return the same value.
8655
8656A `pure` function that returns unit has no effect on the abstract machine's
8657state.
8658
8659A `#[ffi_pure]` function must not diverge, neither via a side effect (e.g. a
8660call to `abort`) nor by infinite loops.
8661
8662When translating C headers to Rust FFI, it is worth verifying for which targets
8663the `pure` attribute is enabled in those headers, and using the appropriate
8664`cfg` macros in the Rust side to match those definitions. While the semantics of
8665`pure` are implemented identically by many C and C++ compilers, e.g., clang,
8666[GCC], [ARM C/C++ compiler], [IBM ILE C/C++], etc. they are not necessarily
8667implemented in this way on all of them. It is therefore also worth verifying
8668that the semantics of the C toolchain used to compile the binary being linked
8669against are compatible with those of the `#[ffi_pure]`.
8670
8671
8672[#58329]: https://github.com/rust-lang/rust/issues/58329
8673[ARM C/C++ compiler]: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491c/Cacigdac.html
8674[GCC]: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-pure-function-attribute
8675[IBM ILE C/C++]: https://www.ibm.com/support/knowledgecenter/fr/ssw_ibm_i_71/rzarg/fn_attrib_pure.htm
8676"##,
8677 default_severity: Severity::Allow,
8678 warn_since: None,
8679 deny_since: None,
8680 },
8681 Lint {
8682 label: "field_projections",
8683 description: r##"# `field_projections`
8684
8685Experimental field projections.
8686
8687The tracking issue for this feature is: [#145383]
8688
8689[#145383]: https://github.com/rust-lang/rust/issues/145383
8690
8691------------------------
8692"##,
8693 default_severity: Severity::Allow,
8694 warn_since: None,
8695 deny_since: None,
8696 },
8697 Lint {
8698 label: "field_representing_type_raw",
8699 description: r##"# `field_representing_type_raw`
8700
8701Implementation details of field representing types.
8702
8703This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
8704
8705------------------------
8706"##,
8707 default_severity: Severity::Allow,
8708 warn_since: None,
8709 deny_since: None,
8710 },
8711 Lint {
8712 label: "file_buffered",
8713 description: r##"# `file_buffered`
8714
8715
8716
8717The tracking issue for this feature is: [#130804]
8718
8719[#130804]: https://github.com/rust-lang/rust/issues/130804
8720
8721------------------------
8722"##,
8723 default_severity: Severity::Allow,
8724 warn_since: None,
8725 deny_since: None,
8726 },
8727 Lint {
8728 label: "final_associated_functions",
8729 description: r##"# `final_associated_functions`
8730
8731Allows marking trait functions as `final` to prevent overriding impls
8732
8733The tracking issue for this feature is: [#131179]
8734
8735[#131179]: https://github.com/rust-lang/rust/issues/131179
8736
8737------------------------
8738"##,
8739 default_severity: Severity::Allow,
8740 warn_since: None,
8741 deny_since: None,
8742 },
8743 Lint {
8744 label: "float_bits_const",
8745 description: r##"# `float_bits_const`
8746
8747
8748
8749The tracking issue for this feature is: [#151073]
8750
8751[#151073]: https://github.com/rust-lang/rust/issues/151073
8752
8753------------------------
8754"##,
8755 default_severity: Severity::Allow,
8756 warn_since: None,
8757 deny_since: None,
8758 },
8759 Lint {
8760 label: "float_conversions",
8761 description: r##"# `float_conversions`
8762
8763
8764
8765The tracking issue for this feature is: [#159913]
8766
8767[#159913]: https://github.com/rust-lang/rust/issues/159913
8768
8769------------------------
8770"##,
8771 default_severity: Severity::Allow,
8772 warn_since: None,
8773 deny_since: None,
8774 },
8775 Lint {
8776 label: "float_erf",
8777 description: r##"# `float_erf`
8778
8779
8780
8781The tracking issue for this feature is: [#136321]
8782
8783[#136321]: https://github.com/rust-lang/rust/issues/136321
8784
8785------------------------
8786"##,
8787 default_severity: Severity::Allow,
8788 warn_since: None,
8789 deny_since: None,
8790 },
8791 Lint {
8792 label: "float_exact_integer_constants",
8793 description: r##"# `float_exact_integer_constants`
8794
8795
8796
8797The tracking issue for this feature is: [#152466]
8798
8799[#152466]: https://github.com/rust-lang/rust/issues/152466
8800
8801------------------------
8802"##,
8803 default_severity: Severity::Allow,
8804 warn_since: None,
8805 deny_since: None,
8806 },
8807 Lint {
8808 label: "float_gamma",
8809 description: r##"# `float_gamma`
8810
8811
8812
8813The tracking issue for this feature is: [#99842]
8814
8815[#99842]: https://github.com/rust-lang/rust/issues/99842
8816
8817------------------------
8818"##,
8819 default_severity: Severity::Allow,
8820 warn_since: None,
8821 deny_since: None,
8822 },
8823 Lint {
8824 label: "float_masks",
8825 description: r##"# `float_masks`
8826
8827
8828
8829The tracking issue for this feature is: [#154064]
8830
8831[#154064]: https://github.com/rust-lang/rust/issues/154064
8832
8833------------------------
8834"##,
8835 default_severity: Severity::Allow,
8836 warn_since: None,
8837 deny_since: None,
8838 },
8839 Lint {
8840 label: "float_minimum_maximum",
8841 description: r##"# `float_minimum_maximum`
8842
8843
8844
8845The tracking issue for this feature is: [#91079]
8846
8847[#91079]: https://github.com/rust-lang/rust/issues/91079
8848
8849------------------------
8850"##,
8851 default_severity: Severity::Allow,
8852 warn_since: None,
8853 deny_since: None,
8854 },
8855 Lint {
8856 label: "float_mul_add_relaxed",
8857 description: r##"# `float_mul_add_relaxed`
8858
8859
8860
8861The tracking issue for this feature is: [#151770]
8862
8863[#151770]: https://github.com/rust-lang/rust/issues/151770
8864
8865------------------------
8866"##,
8867 default_severity: Severity::Allow,
8868 warn_since: None,
8869 deny_since: None,
8870 },
8871 Lint {
8872 label: "float_nan_to",
8873 description: r##"# `float_nan_to`
8874
8875
8876
8877The tracking issue for this feature is: [#161248]
8878
8879[#161248]: https://github.com/rust-lang/rust/issues/161248
8880
8881------------------------
8882"##,
8883 default_severity: Severity::Allow,
8884 warn_since: None,
8885 deny_since: None,
8886 },
8887 Lint {
8888 label: "flt2dec",
8889 description: r##"# `flt2dec`
8890
8891This feature is internal to the Rust compiler and is not intended for general use.
8892
8893------------------------
8894"##,
8895 default_severity: Severity::Allow,
8896 warn_since: None,
8897 deny_since: None,
8898 },
8899 Lint {
8900 label: "fma4_target_feature",
8901 description: r##"# `fma4_target_feature`
8902
8903fma4 target feature on x86.
8904
8905The tracking issue for this feature is: [#155233]
8906
8907[#155233]: https://github.com/rust-lang/rust/issues/155233
8908
8909------------------------
8910"##,
8911 default_severity: Severity::Allow,
8912 warn_since: None,
8913 deny_since: None,
8914 },
8915 Lint {
8916 label: "fmt_arguments_from_str",
8917 description: r##"# `fmt_arguments_from_str`
8918
8919
8920
8921The tracking issue for this feature is: [#148905]
8922
8923[#148905]: https://github.com/rust-lang/rust/issues/148905
8924
8925------------------------
8926"##,
8927 default_severity: Severity::Allow,
8928 warn_since: None,
8929 deny_since: None,
8930 },
8931 Lint {
8932 label: "fmt_debug",
8933 description: r##"# `fmt_debug`
8934
8935Controlling the behavior of fmt::Debug
8936
8937The tracking issue for this feature is: [#129709]
8938
8939[#129709]: https://github.com/rust-lang/rust/issues/129709
8940
8941------------------------
8942"##,
8943 default_severity: Severity::Allow,
8944 warn_since: None,
8945 deny_since: None,
8946 },
8947 Lint {
8948 label: "fmt_helpers_for_derive",
8949 description: r##"# `fmt_helpers_for_derive`
8950
8951
8952
8953This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
8954
8955------------------------
8956"##,
8957 default_severity: Severity::Allow,
8958 warn_since: None,
8959 deny_since: None,
8960 },
8961 Lint {
8962 label: "fmt_internals",
8963 description: r##"# `fmt_internals`
8964
8965This feature is internal to the Rust compiler and is not intended for general use.
8966
8967------------------------
8968"##,
8969 default_severity: Severity::Allow,
8970 warn_since: None,
8971 deny_since: None,
8972 },
8973 Lint {
8974 label: "fn_align",
8975 description: r##"# `fn_align`
8976
8977Allows using `#[align(...)]` on function items
8978
8979The tracking issue for this feature is: [#82232]
8980
8981[#82232]: https://github.com/rust-lang/rust/issues/82232
8982
8983------------------------
8984"##,
8985 default_severity: Severity::Allow,
8986 warn_since: None,
8987 deny_since: None,
8988 },
8989 Lint {
8990 label: "fn_delegation",
8991 description: r##"# `fn_delegation`
8992
8993Support delegating implementation of functions to other already implemented functions.
8994
8995The tracking issue for this feature is: [#118212]
8996
8997[#118212]: https://github.com/rust-lang/rust/issues/118212
8998
8999------------------------
9000"##,
9001 default_severity: Severity::Allow,
9002 warn_since: None,
9003 deny_since: None,
9004 },
9005 Lint {
9006 label: "fn_static",
9007 description: r##"# `fn_static`
9008
9009Traits for function pointers and items
9010
9011The tracking issue for this feature is: [#148768]
9012
9013[#148768]: https://github.com/rust-lang/rust/issues/148768
9014
9015------------------------
9016"##,
9017 default_severity: Severity::Allow,
9018 warn_since: None,
9019 deny_since: None,
9020 },
9021 Lint {
9022 label: "fn_traits",
9023 description: r##"# `fn_traits`
9024
9025The tracking issue for this feature is [#29625]
9026
9027See Also: [`unboxed_closures`](../language-features/unboxed-closures.md)
9028
9029[#29625]: https://github.com/rust-lang/rust/issues/29625
9030
9031----
9032
9033The `fn_traits` feature allows for implementation of the [`Fn*`] traits
9034for creating custom closure-like types.
9035
9036[`Fn*`]: ../../std/ops/trait.Fn.html
9037
9038```rust
9039#![feature(unboxed_closures)]
9040#![feature(fn_traits)]
9041
9042struct Adder {
9043 a: u32
9044}
9045
9046impl FnOnce<(u32, )> for Adder {
9047 type Output = u32;
9048 extern "rust-call" fn call_once(self, b: (u32, )) -> Self::Output {
9049 self.a + b.0
9050 }
9051}
9052
9053fn main() {
9054 let adder = Adder { a: 3 };
9055 assert_eq!(adder(2), 5);
9056}
9057```
9058"##,
9059 default_severity: Severity::Allow,
9060 warn_since: None,
9061 deny_since: None,
9062 },
9063 Lint {
9064 label: "forced_keywords",
9065 description: r##"# `forced_keywords`
9066
9067Allows using forced keywords `k#fn`.
9068
9069The tracking issue for this feature is: [#153839]
9070
9071[#153839]: https://github.com/rust-lang/rust/issues/153839
9072
9073------------------------
9074"##,
9075 default_severity: Severity::Allow,
9076 warn_since: None,
9077 deny_since: None,
9078 },
9079 Lint {
9080 label: "forget_unsized",
9081 description: r##"# `forget_unsized`
9082
9083
9084
9085This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
9086
9087------------------------
9088"##,
9089 default_severity: Severity::Allow,
9090 warn_since: None,
9091 deny_since: None,
9092 },
9093 Lint {
9094 label: "format_args_nl",
9095 description: r##"# `format_args_nl`
9096
9097
9098
9099This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
9100
9101------------------------
9102"##,
9103 default_severity: Severity::Allow,
9104 warn_since: None,
9105 deny_since: None,
9106 },
9107 Lint {
9108 label: "formatting_options",
9109 description: r##"# `formatting_options`
9110
9111
9112
9113The tracking issue for this feature is: [#118117]
9114
9115[#118117]: https://github.com/rust-lang/rust/issues/118117
9116
9117------------------------
9118"##,
9119 default_severity: Severity::Allow,
9120 warn_since: None,
9121 deny_since: None,
9122 },
9123 Lint {
9124 label: "freeze",
9125 description: r##"# `freeze`
9126
9127
9128
9129The tracking issue for this feature is: [#121675]
9130
9131[#121675]: https://github.com/rust-lang/rust/issues/121675
9132
9133------------------------
9134"##,
9135 default_severity: Severity::Allow,
9136 warn_since: None,
9137 deny_since: None,
9138 },
9139 Lint {
9140 label: "freeze_impls",
9141 description: r##"# `freeze_impls`
9142
9143Allows impls for the Freeze trait.
9144
9145The tracking issue for this feature is: [#121675]
9146
9147[#121675]: https://github.com/rust-lang/rust/issues/121675
9148
9149------------------------
9150"##,
9151 default_severity: Severity::Allow,
9152 warn_since: None,
9153 deny_since: None,
9154 },
9155 Lint {
9156 label: "frontmatter",
9157 description: r##"# `frontmatter`
9158
9159The tracking issue for this feature is: [#136889]
9160
9161------
9162
9163The `frontmatter` feature allows an extra metadata block at the top of files for consumption by
9164external tools. For example, it can be used by [`cargo-script`] files to specify dependencies.
9165
9166```rust
9167#!/usr/bin/env -S cargo -Zscript
9168---
9169[dependencies]
9170libc = "0.2.172"
9171---
9172#![feature(frontmatter)]
9173# mod libc { pub type c_int = i32; }
9174
9175fn main() {
9176 let x: libc::c_int = 1i32;
9177}
9178```
9179
9180[#136889]: https://github.com/rust-lang/rust/issues/136889
9181[`cargo-script`]: https://rust-lang.github.io/rfcs/3502-cargo-script.html
9182"##,
9183 default_severity: Severity::Allow,
9184 warn_since: None,
9185 deny_since: None,
9186 },
9187 Lint {
9188 label: "fs_home_dirs",
9189 description: r##"# `fs_home_dirs`
9190
9191
9192
9193The tracking issue for this feature is: [#162082]
9194
9195[#162082]: https://github.com/rust-lang/rust/issues/162082
9196
9197------------------------
9198"##,
9199 default_severity: Severity::Allow,
9200 warn_since: None,
9201 deny_since: None,
9202 },
9203 Lint {
9204 label: "fs_media_dirs",
9205 description: r##"# `fs_media_dirs`
9206
9207
9208
9209The tracking issue for this feature is: [#162083]
9210
9211[#162083]: https://github.com/rust-lang/rust/issues/162083
9212
9213------------------------
9214"##,
9215 default_severity: Severity::Allow,
9216 warn_since: None,
9217 deny_since: None,
9218 },
9219 Lint {
9220 label: "function_arg_const_generics",
9221 description: r##"# function_arg_const_generics
9222
9223The tracking issue for this feature is: [#163261]
9224
9225[#163261]: https://github.com/rust-lang/rust/issues/163261
9226
9227------------------------
9228
9229The `#![feature(function_arg_const_generics)]` allows const generic parameters to be declared in a function's value parameter list and supplied as ordinary call arguments, rather than through generic arguments (turbofish syntax).
9230
9231Warning: This feature is incomplete; its design and syntax may change.
9232
9233This feature requires either `#![feature(gca_min_const_items)]` or `#![feature(gca_adts)]`.
9234
9235## Examples
9236
9237Normally, const generic parameters are declared in the generic parameter list and supplied using turbofish syntax:
9238
9239```rust
9240fn foo<const N: usize>(value: u8) {
9241 let _ = N;
9242}
9243
9244fn main() {
9245 foo::<42>(10);
9246}
9247```
9248
9249With `function_arg_const_generics`, the const generic parameter can instead be declared in the function's value parameter list:
9250
9251```rust
9252#![allow(incomplete_features)]
9253#![feature(function_arg_const_generics, gca_min_const_items)]
9254
9255fn foo(const N: usize, value: u8) {
9256 let _ = (N, value);
9257}
9258
9259fn main() {
9260 foo(42, 10);
9261}
9262```
9263
9264Here, `N` is still a const generic parameter, but its value is supplied as the first argument to the function call.
9265
9266### Methods and trait functions
9267
9268Argument position const generic parameters are supported in free functions, inherent methods, trait methods, and trait implementations.
9269
9270```rust
9271#![allow(incomplete_features)]
9272#![feature(function_arg_const_generics, gca_min_const_items)]
9273
9274struct Foo;
9275
9276impl Foo {
9277 fn bar(&self, const N: usize) {
9278 let _ = N;
9279 }
9280}
9281
9282trait Trait {
9283 fn baz(const N: usize);
9284}
9285
9286impl Trait for Foo {
9287 fn baz(const N: usize) {
9288 let _ = N;
9289 }
9290}
9291
9292fn main() {
9293 Foo.bar(10);
9294 Foo::baz(20);
9295}
9296```
9297
9298### Supported const arguments
9299
9300Currently, only the following forms of const arguments are supported:
9301
9302- Literals.
9303- Paths to const generic parameters.
9304- Paths to const items, provided the const item is marked for use in the type system, for example using `gca!`.
9305
9306```rust
9307#![allow(incomplete_features)]
9308#![feature(function_arg_const_generics, gca_min_const_items)]
9309
9310fn foo(const N: usize) {
9311 let _ = N;
9312}
9313
9314const VALUE: usize = core::gca!(42);
9315
9316fn bar<const K: usize>() {
9317 foo(K);
9318}
9319
9320fn main() {
9321 foo(10); // OK: integer literal
9322 foo(VALUE); // OK: const item marked with gca!
9323 bar::<20>();
9324}
9325```
9326
9327### Restrictions
9328
9329Argument position const generic parameters have the following restrictions:
9330
9331- They must be declared using a plain identifier, such as `const N: usize`.
9332- They cannot be explicitly supplied using turbofish syntax.
9333- Arguments must use one of the supported const argument forms described above.
9334
9335For example, a runtime local variable cannot be used as a const argument:
9336
9337```rust,compile_fail
9338#![allow(incomplete_features)]
9339#![feature(function_arg_const_generics, gca_min_const_items)]
9340
9341fn foo(const N: usize) {}
9342
9343fn main() {
9344 let n = 10;
9345 foo(n); // ERROR: runtime local variable
9346}
9347```
9348
9349Similarly, argument position const generic parameters cannot be specified using turbofish syntax:
9350
9351```rust,compile_fail,E0107
9352#![allow(incomplete_features)]
9353#![feature(function_arg_const_generics, gca_min_const_items)]
9354
9355fn foo(const N: usize) {}
9356
9357fn main() {
9358 foo::<10>(10); // ERROR: N cannot be specified using turbofish
9359}
9360```
9361
9362Argument position const generic parameters are not currently supported in function pointer types, `Fn()` trait syntax, or foreign function declarations.
9363"##,
9364 default_severity: Severity::Allow,
9365 warn_since: None,
9366 deny_since: None,
9367 },
9368 Lint {
9369 label: "fundamental",
9370 description: r##"# `fundamental`
9371
9372Allows using the `#[fundamental]` attribute.
9373
9374The tracking issue for this feature is: [#29635]
9375
9376[#29635]: https://github.com/rust-lang/rust/issues/29635
9377
9378------------------------
9379"##,
9380 default_severity: Severity::Allow,
9381 warn_since: None,
9382 deny_since: None,
9383 },
9384 Lint {
9385 label: "future_join",
9386 description: r##"# `future_join`
9387
9388
9389
9390The tracking issue for this feature is: [#91642]
9391
9392[#91642]: https://github.com/rust-lang/rust/issues/91642
9393
9394------------------------
9395"##,
9396 default_severity: Severity::Allow,
9397 warn_since: None,
9398 deny_since: None,
9399 },
9400 Lint {
9401 label: "gca_adts",
9402 description: r##"# gca_adts
9403
9404Enables ADTs under the generic const args family of features (e.g. `gca!` macro).
9405
9406The tracking issue for this feature is: [#163420]
9407
9408[#163420]: https://github.com/rust-lang/rust/issues/163420
9409
9410## Examples
9411
9412```rust
9413#![feature(gca_min_const_items, min_adt_const_params, gca_adts)]
9414
9415use std::gca;
9416
9417struct S<const A: [u32; 2]>;
9418
9419fn main() {
9420 let _: S<gca!([1, 2])> = S::<gca!([1, 2])>;
9421}
9422```
9423"##,
9424 default_severity: Severity::Allow,
9425 warn_since: None,
9426 deny_since: None,
9427 },
9428 Lint {
9429 label: "gca_const_items",
9430 description: r##"# gca_const_items
9431
9432Allows using generics in more complex const expressions, based on definitional equality.
9433
9434The tracking issue for this feature is: [#151972]
9435
9436[#151972]: https://github.com/rust-lang/rust/issues/151972
9437
9438------------------------
9439
9440Warning: This feature is incomplete; its design and syntax may change.
9441
9442This feature enables many of the same use cases supported by [generic_const_exprs],
9443but based on the machinery developed for [gca_min_const_items]. In a way, it is
9444meant to be an interim successor for GCE (though it might not currently support all
9445the valid cases that supported by GCE).
9446
9447See also: [generic_const_items]
9448
9449[gca_min_const_items]: gca-min-const-items.md
9450[generic_const_exprs]: generic-const-exprs.md
9451[generic_const_items]: generic-const-items.md
9452
9453## Examples
9454
9455<!-- NOTE(ignore) gca_const_items requires -Znext-solver to compile -->
9456```rust,ignore (requires-Z-next-solver)
9457#![feature(generic_const_items)]
9458#![feature(gca_min_const_items)]
9459#![feature(gca_const_items)]
9460#![expect(incomplete_features)]
9461
9462type const ADD1<const N: usize>: usize = const { N + 1 };
9463
9464type const INC<const N: usize>: usize = ADD1::<N>;
9465
9466const ARR: [(); ADD1::<0>] = [(); INC::<0>];
9467```
9468"##,
9469 default_severity: Severity::Allow,
9470 warn_since: None,
9471 deny_since: None,
9472 },
9473 Lint {
9474 label: "gca_macroless_args",
9475 description: r##"# gca_macroless_args
9476
9477Enables using `#![feature(gca_min_const_items)]` without the `gca!` macro.
9478
9479The tracking issue for this feature is: [#159006]
9480
9481[#159006]: https://github.com/rust-lang/rust/issues/159006
9482
9483------------------------
9484
9485Warning: This feature is incomplete; its design and syntax may change.
9486
9487Related features:
9488- [gca_min_const_items]. See that doc for what the `gca!` is. This feature enables
9489support for directly represented const arguments without the macro.
9490- [gca_macroless_items]. For a version of this feature that works for const arguments
9491as the right hand side of a const item.
9492
9493[gca_min_const_items]: gca-min-const-items.md
9494[gca_macroless_items]: gca-macroless-items.md
9495
9496## Examples
9497
9498Here is an example from [gca_min_const_items]:
9499
9500[gca_min_const_items]: gca-min-const-items.md
9501
9502```rust
9503#![allow(incomplete_features)]
9504#![feature(gca_min_const_items)]
9505
9506trait Bar {
9507 #[rustc_always_gca]
9508 const VAL: usize;
9509 #[rustc_always_gca]
9510 const VAL2: usize;
9511}
9512
9513struct Baz;
9514
9515impl Bar for Baz {
9516 const VAL: usize = core::gca!(2);
9517 const VAL2: usize = core::gca!(const { Self::VAL * 2 });
9518}
9519
9520struct Foo<B: Bar> {
9521 arr1: [usize; core::gca!(B::VAL)],
9522 arr2: [usize; core::gca!(B::VAL2)],
9523}
9524```
9525
9526Using `#![feature(gca_macroless_args)]` enables you to write the above without the macro:
9527
9528```rust
9529#![allow(incomplete_features)]
9530#![feature(gca_min_const_items, gca_macroless_args)]
9531
9532trait Bar {
9533 #[rustc_always_gca]
9534 const VAL: usize;
9535 #[rustc_always_gca]
9536 const VAL2: usize;
9537}
9538
9539struct Baz;
9540
9541impl Bar for Baz {
9542 // note these still need a macro, macroless for these is `gca_macroless_items`
9543 const VAL: usize = core::gca!(2);
9544 const VAL2: usize = core::gca!(const { Self::VAL * 2 });
9545}
9546
9547struct Foo<B: Bar> {
9548 arr1: [usize; B::VAL],
9549 arr2: [usize; B::VAL2],
9550}
9551```
9552"##,
9553 default_severity: Severity::Allow,
9554 warn_since: None,
9555 deny_since: None,
9556 },
9557 Lint {
9558 label: "gca_macroless_items",
9559 description: r##"# gca_macroless_args
9560
9561Enables implementing const items under `#![feature(gca_min_const_items)]` and `#![feature(gca_const_items)]` without the `gca!` macro.
9562
9563The tracking issue for this feature is: [#162540]
9564
9565[#162540]: https://github.com/rust-lang/rust/issues/162540
9566
9567------------------------
9568
9569Warning: This feature is incomplete; its design and syntax may change.
9570
9571Related features:
9572- [gca_min_const_items]. See that doc for what the `gca!` is. This feature enables
9573support for directly represented const arguments as the rhs of const items without the macro.
9574- [gca_macroless_args]. For a version of this feature that works for const arguments in other
9575positions
9576
9577[gca_min_const_items]: gca-min-const-items.md
9578[gca_macroless_args]: gca-macroless-args.md
9579
9580## Examples
9581
9582Here is an example from [gca_min_const_items]:
9583
9584[gca_min_const_items]: gca-min-const-items.md
9585
9586```rust,ignore (needs new solver)
9587#![allow(incomplete_features)]
9588#![feature(
9589 gca_min_const_items,
9590 gca_const_items,
9591 gca_macroless_args,
9592 generic_const_items,
9593)]
9594
9595trait Trait {
9596 const ASSOC<const N: usize>: usize;
9597}
9598
9599impl Trait for () {
9600 const ASSOC<const N: usize>: usize = core::gca!(N);
9601}
9602
9603fn foo<const N: usize>() {
9604 let a: [(); <() as Trait>::ASSOC::<N>]
9605 = [(); N];
9606}
9607```
9608
9609Using `#![feature(gca_macroless_items)]` enables you to write the above without the macro:
9610
9611```rust,ignore (needs new solver)
9612#![allow(incomplete_features)]
9613#![feature(
9614 gca_min_const_items,
9615 gca_const_items,
9616 gca_macroless_args,
9617 gca_macroless_items,
9618 generic_const_items,
9619)]
9620
9621trait Trait {
9622 const ASSOC<const N: usize>: usize;
9623}
9624
9625impl Trait for () {
9626 const ASSOC<const N: usize>: usize = N;
9627}
9628
9629fn foo<const N: usize>() {
9630 let a: [(); <() as Trait>::ASSOC::<N>]
9631 = [(); N];
9632}
9633```
9634"##,
9635 default_severity: Severity::Allow,
9636 warn_since: None,
9637 deny_since: None,
9638 },
9639 Lint {
9640 label: "gca_min_const_items",
9641 description: r##"# gca_min_const_items
9642
9643Enables the generic const args MVP (paths to direct const items and primitives).
9644
9645The tracking issue for this feature is: [#132980]
9646
9647[#132980]: https://github.com/rust-lang/rust/issues/132980
9648
9649------------------------
9650
9651Warning: This feature is incomplete; its design and syntax may change.
9652
9653This feature acts as a minimal alternative to [generic_const_exprs] that allows a smaller subset of functionality,
9654and uses a different approach for implementation. It is intentionally more restrictive, which helps with avoiding edge
9655cases that make the `generic_const_exprs` hard to implement properly. See [Feature background][feature_background]
9656for more details.
9657
9658Related features: [gca_macroless_args], [gca_const_items], [generic_const_items].
9659
9660[feature_background]: https://github.com/rust-lang/project-const-generics/blob/main/documents/min_const_generics_plan.md
9661[generic_const_exprs]: generic-const-exprs.md
9662[gca_macroless_args]: gca-macroless-args.md
9663[gca_const_items]: gca-const-items.md
9664[generic_const_items]: generic-const-items.md
9665
9666## `gca!` macro
9667
9668This feature introduces a new macro: `gca!`.
9669
9670When an expression is used as a generic argument, it is typically lowered as an "anon const", which is an expression
9671that is opaque to the type system and cannot contain generics. Using `gca!` instead represents the
9672expression "directly", i.e. without an anon const, in a way that is visible to the type system.
9673
9674(Note that plain paths to generic parameters are always represented directly, without `gca!`, as this
9675already works on stable)
9676
9677See [gca_macroless_args] as a feature to disable the requirement of writing `gca!`.
9678
9679[gca_macroless_args]: gca-macroless-args.md
9680
9681## direct const items
9682
9683This feature introduces a new item kind: consts with a `gca!` right-hand side.
9684Constants with a direct right-hand side are allowed to be used in type contexts, e.g.:
9685
9686```compile_fail
9687#![allow(incomplete_features)]
9688#![feature(gca_min_const_items)]
9689
9690const X: usize = core::gca!(1);
9691const Y: usize = 1;
9692
9693struct Foo {
9694 good_arr: [(); core::gca!(X)], // Allowed
9695 bad_arr: [(); core::gca!(Y)], // Will not compile
9696}
9697```
9698
9699## Examples
9700
9701```rust
9702#![allow(incomplete_features)]
9703#![feature(gca_min_const_items)]
9704
9705trait Bar {
9706 #[rustc_always_gca]
9707 const VAL: usize;
9708 #[rustc_always_gca]
9709 const VAL2: usize;
9710}
9711
9712struct Baz;
9713
9714impl Bar for Baz {
9715 const VAL: usize = core::gca!(2);
9716 const VAL2: usize = core::gca!(const { Self::VAL * 2 });
9717}
9718
9719struct Foo<B: Bar> {
9720 arr1: [usize; core::gca!(B::VAL)],
9721 arr2: [usize; core::gca!(B::VAL2)],
9722}
9723```
9724
9725Note that with [generic_const_exprs] the same example would look as follows:
9726
9727```rust
9728#![allow(incomplete_features)]
9729#![feature(generic_const_exprs)]
9730
9731trait Bar {
9732 const VAL: usize;
9733 const VAL2: usize;
9734}
9735
9736struct Baz;
9737
9738impl Bar for Baz {
9739 const VAL: usize = 2;
9740 const VAL2: usize = const { Self::VAL * 2 };
9741}
9742
9743struct Foo<B: Bar>
9744where
9745 [(); B::VAL]:,
9746 [(); B::VAL2]:,
9747{
9748 arr1: [usize; B::VAL],
9749 arr2: [usize; B::VAL2],
9750}
9751```
9752
9753Use of const functions is allowed:
9754
9755```rust
9756#![allow(incomplete_features)]
9757#![feature(gca_min_const_items)]
9758
9759const VAL: usize = 1;
9760
9761const fn inc(val: usize) -> usize {
9762 val + 1
9763}
9764
9765const INC: usize = core::gca!(const { inc(VAL) });
9766
9767const ARR: [usize; INC] = [0; INC];
9768```
9769"##,
9770 default_severity: Severity::Allow,
9771 warn_since: None,
9772 deny_since: None,
9773 },
9774 Lint {
9775 label: "gen_blocks",
9776 description: r##"# `gen_blocks`
9777
9778Allows defining gen blocks and `gen fn`.
9779
9780The tracking issue for this feature is: [#117078]
9781
9782[#117078]: https://github.com/rust-lang/rust/issues/117078
9783
9784------------------------
9785"##,
9786 default_severity: Severity::Allow,
9787 warn_since: None,
9788 deny_since: None,
9789 },
9790 Lint {
9791 label: "gen_future",
9792 description: r##"# `gen_future`
9793
9794
9795
9796This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
9797
9798------------------------
9799"##,
9800 default_severity: Severity::Allow,
9801 warn_since: None,
9802 deny_since: None,
9803 },
9804 Lint {
9805 label: "generic_assert",
9806 description: r##"# `generic_assert`
9807
9808Outputs useful `assert!` messages
9809
9810This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
9811
9812------------------------
9813"##,
9814 default_severity: Severity::Allow,
9815 warn_since: None,
9816 deny_since: None,
9817 },
9818 Lint {
9819 label: "generic_assert_internals",
9820 description: r##"# `generic_assert_internals`
9821
9822
9823
9824The tracking issue for this feature is: [#44838]
9825
9826[#44838]: https://github.com/rust-lang/rust/issues/44838
9827
9828------------------------
9829"##,
9830 default_severity: Severity::Allow,
9831 warn_since: None,
9832 deny_since: None,
9833 },
9834 Lint {
9835 label: "generic_atomic",
9836 description: r##"# `generic_atomic`
9837
9838
9839
9840The tracking issue for this feature is: [#130539]
9841
9842[#130539]: https://github.com/rust-lang/rust/issues/130539
9843
9844------------------------
9845"##,
9846 default_severity: Severity::Allow,
9847 warn_since: None,
9848 deny_since: None,
9849 },
9850 Lint {
9851 label: "generic_const_exprs",
9852 description: r##"# generic_const_exprs
9853
9854Allows non-trivial generic constants which have to be shown to successfully evaluate
9855to a value by being part of an item signature.
9856
9857The tracking issue for this feature is: [#76560]
9858
9859
9860[#76560]: https://github.com/rust-lang/rust/issues/76560
9861
9862------------------------
9863
9864Warning: This feature is incomplete; its design and syntax may change.
9865
9866See also: [gca_min_const_items], [gca_const_items]
9867
9868[gca_min_const_items]: gca-min-const-items.md
9869[gca_const_items]: gca-const-items.md
9870
9871## Examples
9872
9873```rust
9874#![allow(incomplete_features)]
9875#![feature(generic_const_exprs)]
9876
9877// Use parameters that depend on a generic argument.
9878struct Foo<const N: usize>
9879where
9880 [(); N + 1]:,
9881{
9882 array: [usize; N + 1],
9883}
9884
9885// Use generic parameters in const operations.
9886trait Bar {
9887 const X: usize;
9888 const Y: usize;
9889}
9890
9891// Note `B::X * B::Y`.
9892const fn baz<B: Bar>(x: [usize; B::X], y: [usize; B::Y]) -> [usize; B::X * B::Y] {
9893 let mut out = [0; B::X * B::Y];
9894 let mut i = 0;
9895 while i < B::Y {
9896 let mut j = 0;
9897 while j < B::X {
9898 out[i * B::X + j] = y[i].saturating_mul(x[j]);
9899 j += 1;
9900 }
9901 i += 1;
9902 }
9903 out
9904}
9905
9906
9907// Create a new type based on a generic argument.
9908pub struct Grow<const N: usize> {
9909 arr: [usize; N],
9910}
9911
9912impl<const N: usize> Grow<N> {
9913 pub const fn grow(self, val: usize) -> Grow<{ N + 1 }> {
9914 let mut new_arr = [0; { N + 1 }];
9915 let mut idx = 0;
9916 while idx < N {
9917 new_arr[idx] = self.arr[idx];
9918 idx += 1;
9919 }
9920 new_arr[N] = val;
9921 Grow { arr: new_arr }
9922 }
9923}
9924```
9925"##,
9926 default_severity: Severity::Allow,
9927 warn_since: None,
9928 deny_since: None,
9929 },
9930 Lint {
9931 label: "generic_const_items",
9932 description: r##"# generic_const_items
9933
9934Allows generic parameters and where-clauses on free & associated const items.
9935
9936The tracking issue for this feature is: [#113521]
9937
9938[#113521]: https://github.com/rust-lang/rust/issues/113521
9939
9940------------------------
9941
9942Warning: This feature is an [experiment] and lacks an RFC.
9943There are no guarantees that it will ever be stabilized.
9944
9945See also: [generic_const_exprs], [gca_min_const_items].
9946
9947[experiment]: https://lang-team.rust-lang.org/how_to/experiment.html
9948[generic_const_exprs]: generic-const-exprs.md
9949[gca_min_const_items]: gca-min-const-items.md
9950
9951## Examples
9952
9953### Generic constant values
9954
9955```rust
9956#![allow(incomplete_features)]
9957#![feature(generic_const_items)]
9958
9959const GENERIC_VAL<const ARG: usize>: usize = ARG + 1;
9960
9961#[test]
9962fn generic_const_arg() {
9963 assert_eq!(GENERIC_VAL::<1>, 2);
9964 assert_eq!(GENERIC_VAL::<2>, 3);
9965}
9966```
9967
9968### Conditional constants
9969
9970```rust
9971#![allow(incomplete_features)]
9972#![feature(generic_const_items)]
9973
9974// `GENERIC_VAL::<0>` will fail to compile
9975const GENERIC_VAL<const ARG: usize>: usize = if ARG > 0 { ARG + 1 } else { panic!("0 value") };
9976
9977// Will fail to compile if the `Copy` derive is removed.
9978const COPY_MARKER<C: Copy>: () = ();
9979
9980#[derive(Clone, Copy)]
9981struct Foo;
9982
9983const FOO_IS_COPY: () = COPY_MARKER::<Foo>;
9984```
9985"##,
9986 default_severity: Severity::Allow,
9987 warn_since: None,
9988 deny_since: None,
9989 },
9990 Lint {
9991 label: "generic_const_parameter_types",
9992 description: r##"# `generic_const_parameter_types`
9993
9994Allows the type of const generics to depend on generic parameters
9995
9996The tracking issue for this feature is: [#137626]
9997
9998[#137626]: https://github.com/rust-lang/rust/issues/137626
9999
10000------------------------
10001"##,
10002 default_severity: Severity::Allow,
10003 warn_since: None,
10004 deny_since: None,
10005 },
10006 Lint {
10007 label: "generic_pattern_types",
10008 description: r##"# `generic_pattern_types`
10009
10010Allows any generic constants being used as pattern type range ends
10011
10012The tracking issue for this feature is: [#136574]
10013
10014[#136574]: https://github.com/rust-lang/rust/issues/136574
10015
10016------------------------
10017"##,
10018 default_severity: Severity::Allow,
10019 warn_since: None,
10020 deny_since: None,
10021 },
10022 Lint {
10023 label: "get_disjoint_mut_helpers",
10024 description: r##"# `get_disjoint_mut_helpers`
10025
10026
10027
10028This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
10029
10030------------------------
10031"##,
10032 default_severity: Severity::Allow,
10033 warn_since: None,
10034 deny_since: None,
10035 },
10036 Lint {
10037 label: "get_mut_unchecked",
10038 description: r##"# `get_mut_unchecked`
10039
10040
10041
10042The tracking issue for this feature is: [#63292]
10043
10044[#63292]: https://github.com/rust-lang/rust/issues/63292
10045
10046------------------------
10047"##,
10048 default_severity: Severity::Allow,
10049 warn_since: None,
10050 deny_since: None,
10051 },
10052 Lint {
10053 label: "gethostname",
10054 description: r##"# `gethostname`
10055
10056
10057
10058The tracking issue for this feature is: [#135142]
10059
10060[#135142]: https://github.com/rust-lang/rust/issues/135142
10061
10062------------------------
10063"##,
10064 default_severity: Severity::Allow,
10065 warn_since: None,
10066 deny_since: None,
10067 },
10068 Lint {
10069 label: "global_registration",
10070 description: r##"# `global_registration`
10071
10072Allows registering static items globally, possibly across crates, to iterate over at runtime.
10073
10074The tracking issue for this feature is: [#125119]
10075
10076[#125119]: https://github.com/rust-lang/rust/issues/125119
10077
10078------------------------
10079"##,
10080 default_severity: Severity::Allow,
10081 warn_since: None,
10082 deny_since: None,
10083 },
10084 Lint {
10085 label: "gpu_intrinsics",
10086 description: r##"# `gpu_intrinsics`
10087
10088
10089
10090This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
10091
10092------------------------
10093"##,
10094 default_severity: Severity::Allow,
10095 warn_since: None,
10096 deny_since: None,
10097 },
10098 Lint {
10099 label: "gpu_launch_sized_workgroup_mem",
10100 description: r##"# `gpu_launch_sized_workgroup_mem`
10101
10102
10103
10104The tracking issue for this feature is: [#135513]
10105
10106[#135513]: https://github.com/rust-lang/rust/issues/135513
10107
10108------------------------
10109"##,
10110 default_severity: Severity::Allow,
10111 warn_since: None,
10112 deny_since: None,
10113 },
10114 Lint {
10115 label: "gpu_offload",
10116 description: r##"# `gpu_offload`
10117
10118
10119
10120The tracking issue for this feature is: [#131513]
10121
10122[#131513]: https://github.com/rust-lang/rust/issues/131513
10123
10124------------------------
10125"##,
10126 default_severity: Severity::Allow,
10127 warn_since: None,
10128 deny_since: None,
10129 },
10130 Lint {
10131 label: "guard_patterns",
10132 description: r##"# `guard_patterns`
10133
10134Allows using guards in patterns.
10135
10136The tracking issue for this feature is: [#129967]
10137
10138[#129967]: https://github.com/rust-lang/rust/issues/129967
10139
10140------------------------
10141"##,
10142 default_severity: Severity::Allow,
10143 warn_since: None,
10144 deny_since: None,
10145 },
10146 Lint {
10147 label: "half_open_range_patterns_in_slices",
10148 description: r##"# `half_open_range_patterns_in_slices`
10149
10150The tracking issue for this feature is: [#67264]
10151It is a future part of the `exclusive_range_pattern` feature,
10152tracked at [#37854].
10153
10154[#67264]: https://github.com/rust-lang/rust/issues/67264
10155[#37854]: https://github.com/rust-lang/rust/issues/37854
10156-----
10157
10158This feature allow using top-level half-open range patterns in slices.
10159
10160```rust
10161#![feature(half_open_range_patterns_in_slices)]
10162
10163fn main() {
10164 let xs = [13, 1, 5, 2, 3, 1, 21, 8];
10165 let [a @ 3.., b @ ..3, c @ 4..6, ..] = xs else { return; };
10166}
10167```
10168
10169Note that this feature is not required if the patterns are wrapped between parenthesis.
10170
10171```rust
10172fn main() {
10173 let xs = [13, 1];
10174 let [(a @ 3..), c] = xs else { return; };
10175}
10176```
10177"##,
10178 default_severity: Severity::Allow,
10179 warn_since: None,
10180 deny_since: None,
10181 },
10182 Lint {
10183 label: "hash_map_internals",
10184 description: r##"# `hash_map_internals`
10185
10186
10187
10188This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
10189
10190------------------------
10191"##,
10192 default_severity: Severity::Allow,
10193 warn_since: None,
10194 deny_since: None,
10195 },
10196 Lint {
10197 label: "hash_map_macro",
10198 description: r##"# `hash_map_macro`
10199
10200
10201
10202The tracking issue for this feature is: [#144032]
10203
10204[#144032]: https://github.com/rust-lang/rust/issues/144032
10205
10206------------------------
10207"##,
10208 default_severity: Severity::Allow,
10209 warn_since: None,
10210 deny_since: None,
10211 },
10212 Lint {
10213 label: "hash_set_entry",
10214 description: r##"# `hash_set_entry`
10215
10216
10217
10218The tracking issue for this feature is: [#60896]
10219
10220[#60896]: https://github.com/rust-lang/rust/issues/60896
10221
10222------------------------
10223"##,
10224 default_severity: Severity::Allow,
10225 warn_since: None,
10226 deny_since: None,
10227 },
10228 Lint {
10229 label: "hasher_prefixfree_extras",
10230 description: r##"# `hasher_prefixfree_extras`
10231
10232
10233
10234The tracking issue for this feature is: [#96762]
10235
10236[#96762]: https://github.com/rust-lang/rust/issues/96762
10237
10238------------------------
10239"##,
10240 default_severity: Severity::Allow,
10241 warn_since: None,
10242 deny_since: None,
10243 },
10244 Lint {
10245 label: "hashmap_internals",
10246 description: r##"# `hashmap_internals`
10247
10248
10249
10250This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
10251
10252------------------------
10253"##,
10254 default_severity: Severity::Allow,
10255 warn_since: None,
10256 deny_since: None,
10257 },
10258 Lint {
10259 label: "hexagon_target_feature",
10260 description: r##"# `hexagon_target_feature`
10261
10262Target features on hexagon.
10263
10264The tracking issue for this feature is: [#150250]
10265
10266[#150250]: https://github.com/rust-lang/rust/issues/150250
10267
10268------------------------
10269"##,
10270 default_severity: Severity::Allow,
10271 warn_since: None,
10272 deny_since: None,
10273 },
10274 Lint {
10275 label: "hint_must_use",
10276 description: r##"# `hint_must_use`
10277
10278
10279
10280The tracking issue for this feature is: [#94745]
10281
10282[#94745]: https://github.com/rust-lang/rust/issues/94745
10283
10284------------------------
10285"##,
10286 default_severity: Severity::Allow,
10287 warn_since: None,
10288 deny_since: None,
10289 },
10290 Lint {
10291 label: "hint_prefetch",
10292 description: r##"# `hint_prefetch`
10293
10294
10295
10296The tracking issue for this feature is: [#146941]
10297
10298[#146941]: https://github.com/rust-lang/rust/issues/146941
10299
10300------------------------
10301"##,
10302 default_severity: Severity::Allow,
10303 warn_since: None,
10304 deny_since: None,
10305 },
10306 Lint {
10307 label: "impl_restriction",
10308 description: r##"# `impl_restriction`
10309
10310Allows `impl(crate) trait Foo` restrictions.
10311
10312The tracking issue for this feature is: [#105077]
10313
10314[#105077]: https://github.com/rust-lang/rust/issues/105077
10315
10316------------------------
10317"##,
10318 default_severity: Severity::Allow,
10319 warn_since: None,
10320 deny_since: None,
10321 },
10322 Lint {
10323 label: "impl_trait_in_assoc_type",
10324 description: r##"# `impl_trait_in_assoc_type`
10325
10326Allows `impl Trait` to be used inside associated types (RFC 2515).
10327
10328The tracking issue for this feature is: [#63063]
10329
10330[#63063]: https://github.com/rust-lang/rust/issues/63063
10331
10332------------------------
10333"##,
10334 default_severity: Severity::Allow,
10335 warn_since: None,
10336 deny_since: None,
10337 },
10338 Lint {
10339 label: "impl_trait_in_bindings",
10340 description: r##"# `impl_trait_in_bindings`
10341
10342Allows `impl Trait` in bindings (`let`).
10343
10344The tracking issue for this feature is: [#63065]
10345
10346[#63065]: https://github.com/rust-lang/rust/issues/63065
10347
10348------------------------
10349"##,
10350 default_severity: Severity::Allow,
10351 warn_since: None,
10352 deny_since: None,
10353 },
10354 Lint {
10355 label: "impl_trait_in_fn_trait_return",
10356 description: r##"# `impl_trait_in_fn_trait_return`
10357
10358Allows `impl Trait` as output type in `Fn` traits in return position of functions.
10359
10360The tracking issue for this feature is: [#99697]
10361
10362[#99697]: https://github.com/rust-lang/rust/issues/99697
10363
10364------------------------
10365"##,
10366 default_severity: Severity::Allow,
10367 warn_since: None,
10368 deny_since: None,
10369 },
10370 Lint {
10371 label: "import_trait_associated_functions",
10372 description: r##"# import_trait_associated_functions
10373
10374The tracking issue for this feature is: [#134691]
10375
10376[#134691]: https://github.com/rust-lang/rust/issues/134691
10377
10378------------------------
10379
10380This feature allows importing associated functions and constants from traits and then using them like regular items.
10381
10382```rust
10383#![feature(import_trait_associated_functions)]
10384
10385use std::ops::Add::add;
10386
10387fn main() {
10388 let numbers = vec![1, 2, 3, 4, 5, 6];
10389 let sum = numbers.into_iter().reduce(add); // instead of `.reduce(Add:add)`
10390
10391 assert_eq!(sum, Some(21));
10392}
10393```
10394"##,
10395 default_severity: Severity::Allow,
10396 warn_since: None,
10397 deny_since: None,
10398 },
10399 Lint {
10400 label: "inherent_associated_types",
10401 description: r##"# `inherent_associated_types`
10402
10403Allows associated types in inherent impls.
10404
10405The tracking issue for this feature is: [#8995]
10406
10407[#8995]: https://github.com/rust-lang/rust/issues/8995
10408
10409------------------------
10410"##,
10411 default_severity: Severity::Allow,
10412 warn_since: None,
10413 deny_since: None,
10414 },
10415 Lint {
10416 label: "inplace_iteration",
10417 description: r##"# `inplace_iteration`
10418
10419
10420
10421This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
10422
10423------------------------
10424"##,
10425 default_severity: Severity::Allow,
10426 warn_since: None,
10427 deny_since: None,
10428 },
10429 Lint {
10430 label: "instrument_fn",
10431 description: r##"# `instrument_fn`
10432
10433Enable #[instrument_fn] on function.
10434
10435The tracking issue for this feature is: [#157081]
10436
10437[#157081]: https://github.com/rust-lang/rust/issues/157081
10438
10439------------------------
10440"##,
10441 default_severity: Severity::Allow,
10442 warn_since: None,
10443 deny_since: None,
10444 },
10445 Lint {
10446 label: "int_from_ascii",
10447 description: r##"# `int_from_ascii`
10448
10449
10450
10451The tracking issue for this feature is: [#134821]
10452
10453[#134821]: https://github.com/rust-lang/rust/issues/134821
10454
10455------------------------
10456"##,
10457 default_severity: Severity::Allow,
10458 warn_since: None,
10459 deny_since: None,
10460 },
10461 Lint {
10462 label: "int_roundings",
10463 description: r##"# `int_roundings`
10464
10465
10466
10467The tracking issue for this feature is: [#88581]
10468
10469[#88581]: https://github.com/rust-lang/rust/issues/88581
10470
10471------------------------
10472"##,
10473 default_severity: Severity::Allow,
10474 warn_since: None,
10475 deny_since: None,
10476 },
10477 Lint {
10478 label: "integer_atomics",
10479 description: r##"# `integer_atomics`
10480
10481
10482
10483The tracking issue for this feature is: [#99069]
10484
10485[#99069]: https://github.com/rust-lang/rust/issues/99069
10486
10487------------------------
10488"##,
10489 default_severity: Severity::Allow,
10490 warn_since: None,
10491 deny_since: None,
10492 },
10493 Lint {
10494 label: "integer_cast_extras",
10495 description: r##"# `integer_cast_extras`
10496
10497
10498
10499The tracking issue for this feature is: [#154650]
10500
10501[#154650]: https://github.com/rust-lang/rust/issues/154650
10502
10503------------------------
10504"##,
10505 default_severity: Severity::Allow,
10506 warn_since: None,
10507 deny_since: None,
10508 },
10509 Lint {
10510 label: "integer_casts",
10511 description: r##"# `integer_casts`
10512
10513
10514
10515The tracking issue for this feature is: [#157388]
10516
10517[#157388]: https://github.com/rust-lang/rust/issues/157388
10518
10519------------------------
10520"##,
10521 default_severity: Severity::Allow,
10522 warn_since: None,
10523 deny_since: None,
10524 },
10525 Lint {
10526 label: "integer_widen_truncate",
10527 description: r##"# `integer_widen_truncate`
10528
10529
10530
10531The tracking issue for this feature is: [#154330]
10532
10533[#154330]: https://github.com/rust-lang/rust/issues/154330
10534
10535------------------------
10536"##,
10537 default_severity: Severity::Allow,
10538 warn_since: None,
10539 deny_since: None,
10540 },
10541 Lint {
10542 label: "internal_output_capture",
10543 description: r##"# `internal_output_capture`
10544
10545This feature is internal to the Rust compiler and is not intended for general use.
10546
10547------------------------
10548"##,
10549 default_severity: Severity::Allow,
10550 warn_since: None,
10551 deny_since: None,
10552 },
10553 Lint {
10554 label: "intra_doc_pointers",
10555 description: r##"# `intra-doc-pointers`
10556
10557The tracking issue for this feature is: [#80896]
10558
10559[#80896]: https://github.com/rust-lang/rust/issues/80896
10560
10561------------------------
10562
10563Rustdoc does not currently allow disambiguating between `*const` and `*mut`, and
10564raw pointers in intra-doc links are unstable until it does.
10565
10566```rust
10567#![feature(intra_doc_pointers)]
10568//! [pointer::add]
10569```
10570"##,
10571 default_severity: Severity::Allow,
10572 warn_since: None,
10573 deny_since: None,
10574 },
10575 Lint {
10576 label: "intrinsics",
10577 description: r##"# `intrinsics`
10578
10579The tracking issue for this feature is: None.
10580
10581Intrinsics are rarely intended to be stable directly, but are usually
10582exported in some sort of stable manner. Prefer using the stable interfaces to
10583the intrinsic directly when you can.
10584
10585------------------------
10586
10587
10588## Intrinsics with fallback logic
10589
10590Many intrinsics can be written in pure rust, albeit inefficiently or without supporting
10591some features that only exist on some backends. Backends can simply not implement those
10592intrinsics without causing any code miscompilations or failures to compile.
10593All intrinsic fallback bodies are automatically made cross-crate inlineable (like `#[inline]`)
10594by the codegen backend, but not the MIR inliner.
10595
10596```rust
10597#![feature(intrinsics)]
10598#![allow(internal_features)]
10599
10600#[rustc_intrinsic]
10601const unsafe fn const_deallocate(_ptr: *mut u8, _size: usize, _align: usize) {}
10602```
10603
10604Since these are just regular functions, it is perfectly ok to create the intrinsic twice:
10605
10606```rust
10607#![feature(intrinsics)]
10608#![allow(internal_features)]
10609
10610#[rustc_intrinsic]
10611const unsafe fn const_deallocate(_ptr: *mut u8, _size: usize, _align: usize) {}
10612
10613mod foo {
10614 #[rustc_intrinsic]
10615 const unsafe fn const_deallocate(_ptr: *mut u8, _size: usize, _align: usize) {
10616 panic!("noisy const dealloc")
10617 }
10618}
10619
10620```
10621
10622The behaviour on backends that override the intrinsic is exactly the same. On other
10623backends, the intrinsic behaviour depends on which implementation is called, just like
10624with any regular function.
10625
10626## Intrinsics lowered to MIR instructions
10627
10628Various intrinsics have native MIR operations that they correspond to. Instead of requiring
10629backends to implement both the intrinsic and the MIR operation, the `lower_intrinsics` pass
10630will convert the calls to the MIR operation. Backends do not need to know about these intrinsics
10631at all. These intrinsics only make sense without a body, and can be declared as a `#[rustc_intrinsic]`.
10632The body is never used as the lowering pass implements support for all backends, so we never have to
10633use the fallback logic.
10634
10635## Intrinsics without fallback logic
10636
10637These must be implemented by all backends.
10638
10639### `#[rustc_intrinsic]` declarations
10640
10641These are written without a body:
10642```rust
10643#![feature(intrinsics)]
10644#![allow(internal_features)]
10645
10646#[rustc_intrinsic]
10647pub fn abort_immediate() -> !;
10648```
10649"##,
10650 default_severity: Severity::Allow,
10651 warn_since: None,
10652 deny_since: None,
10653 },
10654 Lint {
10655 label: "io_const_error",
10656 description: r##"# `io_const_error`
10657
10658
10659
10660The tracking issue for this feature is: [#133448]
10661
10662[#133448]: https://github.com/rust-lang/rust/issues/133448
10663
10664------------------------
10665"##,
10666 default_severity: Severity::Allow,
10667 warn_since: None,
10668 deny_since: None,
10669 },
10670 Lint {
10671 label: "io_const_error_internals",
10672 description: r##"# `io_const_error_internals`
10673
10674
10675
10676This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
10677
10678------------------------
10679"##,
10680 default_severity: Severity::Allow,
10681 warn_since: None,
10682 deny_since: None,
10683 },
10684 Lint {
10685 label: "io_copy_internals",
10686 description: r##"# `io_copy_internals`
10687
10688
10689
10690This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
10691
10692------------------------
10693"##,
10694 default_severity: Severity::Allow,
10695 warn_since: None,
10696 deny_since: None,
10697 },
10698 Lint {
10699 label: "io_error_inprogress",
10700 description: r##"# `io_error_inprogress`
10701
10702
10703
10704The tracking issue for this feature is: [#130840]
10705
10706[#130840]: https://github.com/rust-lang/rust/issues/130840
10707
10708------------------------
10709"##,
10710 default_severity: Severity::Allow,
10711 warn_since: None,
10712 deny_since: None,
10713 },
10714 Lint {
10715 label: "io_error_input_output_error",
10716 description: r##"# `io_error_input_output_error`
10717
10718
10719
10720The tracking issue for this feature is: [#159066]
10721
10722[#159066]: https://github.com/rust-lang/rust/issues/159066
10723
10724------------------------
10725"##,
10726 default_severity: Severity::Allow,
10727 warn_since: None,
10728 deny_since: None,
10729 },
10730 Lint {
10731 label: "io_error_more",
10732 description: r##"# `io_error_more`
10733
10734
10735
10736The tracking issue for this feature is: [#86442]
10737
10738[#86442]: https://github.com/rust-lang/rust/issues/86442
10739
10740------------------------
10741"##,
10742 default_severity: Severity::Allow,
10743 warn_since: None,
10744 deny_since: None,
10745 },
10746 Lint {
10747 label: "io_error_too_many_open_files",
10748 description: r##"# `io_error_too_many_open_files`
10749
10750
10751
10752The tracking issue for this feature is: [#158319]
10753
10754[#158319]: https://github.com/rust-lang/rust/issues/158319
10755
10756------------------------
10757"##,
10758 default_severity: Severity::Allow,
10759 warn_since: None,
10760 deny_since: None,
10761 },
10762 Lint {
10763 label: "io_error_uncategorized",
10764 description: r##"# `io_error_uncategorized`
10765
10766
10767
10768This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
10769
10770------------------------
10771"##,
10772 default_severity: Severity::Allow,
10773 warn_since: None,
10774 deny_since: None,
10775 },
10776 Lint {
10777 label: "io_slice_as_bytes",
10778 description: r##"# `io_slice_as_bytes`
10779
10780
10781
10782The tracking issue for this feature is: [#132818]
10783
10784[#132818]: https://github.com/rust-lang/rust/issues/132818
10785
10786------------------------
10787"##,
10788 default_severity: Severity::Allow,
10789 warn_since: None,
10790 deny_since: None,
10791 },
10792 Lint {
10793 label: "ip",
10794 description: r##"# `ip`
10795
10796
10797
10798The tracking issue for this feature is: [#27709]
10799
10800[#27709]: https://github.com/rust-lang/rust/issues/27709
10801
10802------------------------
10803"##,
10804 default_severity: Severity::Allow,
10805 warn_since: None,
10806 deny_since: None,
10807 },
10808 Lint {
10809 label: "ip_as_octets",
10810 description: r##"# `ip_as_octets`
10811
10812
10813
10814The tracking issue for this feature is: [#137259]
10815
10816[#137259]: https://github.com/rust-lang/rust/issues/137259
10817
10818------------------------
10819"##,
10820 default_severity: Severity::Allow,
10821 warn_since: None,
10822 deny_since: None,
10823 },
10824 Lint {
10825 label: "ip_multicast_reserved",
10826 description: r##"# `ip_multicast_reserved`
10827
10828
10829
10830This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
10831
10832------------------------
10833"##,
10834 default_severity: Severity::Allow,
10835 warn_since: None,
10836 deny_since: None,
10837 },
10838 Lint {
10839 label: "ipv6_hop_limit",
10840 description: r##"# `ipv6_hop_limit`
10841
10842
10843
10844The tracking issue for this feature is: [#139166]
10845
10846[#139166]: https://github.com/rust-lang/rust/issues/139166
10847
10848------------------------
10849"##,
10850 default_severity: Severity::Allow,
10851 warn_since: None,
10852 deny_since: None,
10853 },
10854 Lint {
10855 label: "is_ascii_octdigit",
10856 description: r##"# `is_ascii_octdigit`
10857
10858
10859
10860The tracking issue for this feature is: [#101288]
10861
10862[#101288]: https://github.com/rust-lang/rust/issues/101288
10863
10864------------------------
10865"##,
10866 default_severity: Severity::Allow,
10867 warn_since: None,
10868 deny_since: None,
10869 },
10870 Lint {
10871 label: "iter_advance_by",
10872 description: r##"# `iter_advance_by`
10873
10874
10875
10876The tracking issue for this feature is: [#77404]
10877
10878[#77404]: https://github.com/rust-lang/rust/issues/77404
10879
10880------------------------
10881"##,
10882 default_severity: Severity::Allow,
10883 warn_since: None,
10884 deny_since: None,
10885 },
10886 Lint {
10887 label: "iter_array_chunks",
10888 description: r##"# `iter_array_chunks`
10889
10890
10891
10892The tracking issue for this feature is: [#100450]
10893
10894[#100450]: https://github.com/rust-lang/rust/issues/100450
10895
10896------------------------
10897"##,
10898 default_severity: Severity::Allow,
10899 warn_since: None,
10900 deny_since: None,
10901 },
10902 Lint {
10903 label: "iter_collect_into",
10904 description: r##"# `iter_collect_into`
10905
10906
10907
10908The tracking issue for this feature is: [#94780]
10909
10910[#94780]: https://github.com/rust-lang/rust/issues/94780
10911
10912------------------------
10913"##,
10914 default_severity: Severity::Allow,
10915 warn_since: None,
10916 deny_since: None,
10917 },
10918 Lint {
10919 label: "iter_from_coroutine",
10920 description: r##"# `iter_from_coroutine`
10921
10922
10923
10924The tracking issue for this feature is: [#43122]
10925
10926[#43122]: https://github.com/rust-lang/rust/issues/43122
10927
10928------------------------
10929"##,
10930 default_severity: Severity::Allow,
10931 warn_since: None,
10932 deny_since: None,
10933 },
10934 Lint {
10935 label: "iter_intersperse",
10936 description: r##"# `iter_intersperse`
10937
10938
10939
10940The tracking issue for this feature is: [#79524]
10941
10942[#79524]: https://github.com/rust-lang/rust/issues/79524
10943
10944------------------------
10945"##,
10946 default_severity: Severity::Allow,
10947 warn_since: None,
10948 deny_since: None,
10949 },
10950 Lint {
10951 label: "iter_is_partitioned",
10952 description: r##"# `iter_is_partitioned`
10953
10954
10955
10956The tracking issue for this feature is: [#62544]
10957
10958[#62544]: https://github.com/rust-lang/rust/issues/62544
10959
10960------------------------
10961"##,
10962 default_severity: Severity::Allow,
10963 warn_since: None,
10964 deny_since: None,
10965 },
10966 Lint {
10967 label: "iter_macro",
10968 description: r##"# `iter_macro`
10969
10970
10971
10972The tracking issue for this feature is: [#142269]
10973
10974[#142269]: https://github.com/rust-lang/rust/issues/142269
10975
10976------------------------
10977"##,
10978 default_severity: Severity::Allow,
10979 warn_since: None,
10980 deny_since: None,
10981 },
10982 Lint {
10983 label: "iter_map_windows",
10984 description: r##"# `iter_map_windows`
10985
10986
10987
10988The tracking issue for this feature is: [#87155]
10989
10990[#87155]: https://github.com/rust-lang/rust/issues/87155
10991
10992------------------------
10993"##,
10994 default_severity: Severity::Allow,
10995 warn_since: None,
10996 deny_since: None,
10997 },
10998 Lint {
10999 label: "iter_next_chunk",
11000 description: r##"# `iter_next_chunk`
11001
11002
11003
11004The tracking issue for this feature is: [#98326]
11005
11006[#98326]: https://github.com/rust-lang/rust/issues/98326
11007
11008------------------------
11009"##,
11010 default_severity: Severity::Allow,
11011 warn_since: None,
11012 deny_since: None,
11013 },
11014 Lint {
11015 label: "iter_order_by",
11016 description: r##"# `iter_order_by`
11017
11018
11019
11020The tracking issue for this feature is: [#64295]
11021
11022[#64295]: https://github.com/rust-lang/rust/issues/64295
11023
11024------------------------
11025"##,
11026 default_severity: Severity::Allow,
11027 warn_since: None,
11028 deny_since: None,
11029 },
11030 Lint {
11031 label: "iter_partition_in_place",
11032 description: r##"# `iter_partition_in_place`
11033
11034
11035
11036The tracking issue for this feature is: [#62543]
11037
11038[#62543]: https://github.com/rust-lang/rust/issues/62543
11039
11040------------------------
11041"##,
11042 default_severity: Severity::Allow,
11043 warn_since: None,
11044 deny_since: None,
11045 },
11046 Lint {
11047 label: "iterator_try_collect",
11048 description: r##"# `iterator_try_collect`
11049
11050
11051
11052The tracking issue for this feature is: [#94047]
11053
11054[#94047]: https://github.com/rust-lang/rust/issues/94047
11055
11056------------------------
11057"##,
11058 default_severity: Severity::Allow,
11059 warn_since: None,
11060 deny_since: None,
11061 },
11062 Lint {
11063 label: "iterator_try_reduce",
11064 description: r##"# `iterator_try_reduce`
11065
11066
11067
11068The tracking issue for this feature is: [#87053]
11069
11070[#87053]: https://github.com/rust-lang/rust/issues/87053
11071
11072------------------------
11073"##,
11074 default_severity: Severity::Allow,
11075 warn_since: None,
11076 deny_since: None,
11077 },
11078 Lint {
11079 label: "junction_point",
11080 description: r##"# `junction_point`
11081
11082
11083
11084The tracking issue for this feature is: [#121709]
11085
11086[#121709]: https://github.com/rust-lang/rust/issues/121709
11087
11088------------------------
11089"##,
11090 default_severity: Severity::Allow,
11091 warn_since: None,
11092 deny_since: None,
11093 },
11094 Lint {
11095 label: "lahfsahf_target_feature",
11096 description: r##"# `lahfsahf_target_feature`
11097
11098lahfsahf target feature on x86.
11099
11100The tracking issue for this feature is: [#150251]
11101
11102[#150251]: https://github.com/rust-lang/rust/issues/150251
11103
11104------------------------
11105"##,
11106 default_severity: Severity::Allow,
11107 warn_since: None,
11108 deny_since: None,
11109 },
11110 Lint {
11111 label: "lang_items",
11112 description: r##"# `lang_items`
11113
11114The tracking issue for this feature is: None.
11115
11116------------------------
11117
11118The `rustc` compiler has certain pluggable operations, that is,
11119functionality that isn't hard-coded into the language, but is
11120implemented in libraries, with a special marker to tell the compiler
11121it exists. The marker is the attribute `#[lang = "..."]` and there are
11122various different values of `...`, i.e. various different 'lang
11123items'. Most of them can only be defined once.
11124
11125Lang items are loaded lazily by the compiler; e.g. if one never uses `Box`
11126then there is no need to define a function for `exchange_malloc`.
11127`rustc` will emit an error when an item is needed but not found in the current
11128crate or any that it depends on.
11129
11130Some features provided by lang items:
11131
11132- overloadable operators via traits: the traits corresponding to the
11133 `==`, `<`, dereferencing (`*`) and `+` (etc.) operators are all
11134 marked with lang items; those specific four are `eq`, `partial_ord`,
11135 `deref`/`deref_mut`, and `add` respectively.
11136- panicking: the `panic` and `panic_impl` lang items, among others.
11137- stack unwinding: the lang item `eh_personality` is a function used by the
11138 failure mechanisms of the compiler. This is often mapped to GCC's personality
11139 function (see the [`std` implementation][personality] for more information),
11140 but programs which don't trigger a panic can be assured that this function is
11141 never called.
11142- the traits in `core::marker` used to indicate types of
11143 various kinds; e.g. lang items `sized`, `sync` and `copy`.
11144- memory allocation, see below.
11145
11146Most lang items are defined by `core`, but if you're trying to build
11147an executable without the `std` crate, you might run into the need
11148for lang item definitions.
11149
11150[personality]: https://github.com/rust-lang/rust/blob/HEAD/library/std/src/sys/personality/gcc.rs
11151
11152## Example: Implementing a `Box`
11153
11154`Box` pointers require two lang items: one for the type itself and one for
11155allocation. A freestanding program that uses the `Box` sugar for dynamic
11156allocations via `malloc` and `free`:
11157
11158```rust,ignore (libc-is-finicky)
11159#![feature(lang_items, core_intrinsics, rustc_private, panic_unwind, rustc_attrs)]
11160#![allow(internal_features)]
11161#![no_std]
11162#![no_main]
11163
11164extern crate libc;
11165extern crate unwind;
11166
11167use core::ffi::{c_int, c_void};
11168use core::intrinsics;
11169use core::panic::PanicInfo;
11170use core::ptr::NonNull;
11171
11172pub struct Global; // the global allocator
11173struct Unique<T>(NonNull<T>);
11174
11175#[lang = "owned_box"]
11176pub struct Box<T, A = Global>(Unique<T>, A);
11177
11178impl<T> Box<T> {
11179 pub fn new(x: T) -> Self {
11180 #[rustc_box]
11181 Box::new(x)
11182 }
11183}
11184
11185impl<T, A> Drop for Box<T, A> {
11186 fn drop(&mut self) {
11187 unsafe {
11188 libc::free(self.0.0.as_ptr() as *mut c_void);
11189 }
11190 }
11191}
11192
11193#[lang = "exchange_malloc"]
11194unsafe fn allocate(size: usize, _align: usize) -> *mut u8 {
11195 let p = libc::malloc(size) as *mut u8;
11196
11197 // Check if `malloc` failed:
11198 if p.is_null() {
11199 intrinsics::abort_immediate();
11200 }
11201
11202 p
11203}
11204
11205#[no_mangle]
11206extern "C" fn main(_argc: c_int, _argv: *const *const u8) -> c_int {
11207 let _x = Box::new(1);
11208
11209 0
11210}
11211
11212#[lang = "eh_personality"]
11213fn rust_eh_personality() {}
11214
11215#[panic_handler]
11216fn panic_handler(_info: &PanicInfo) -> ! { intrinsics::abort_immediate() }
11217```
11218
11219Note the use of `abort`: the `exchange_malloc` lang item is assumed to
11220return a valid pointer, and so needs to do the check internally.
11221
11222## List of all language items
11223
11224An up-to-date list of all language items can be found [here] in the compiler code.
11225
11226[here]: https://github.com/rust-lang/rust/blob/ac62df9b49f9b9036af2a4957db70bf3850785e1/compiler/rustc_attr_ir/src/lang_items.rs#L158
11227"##,
11228 default_severity: Severity::Allow,
11229 warn_since: None,
11230 deny_since: None,
11231 },
11232 Lint {
11233 label: "large_assignments",
11234 description: r##"# `large_assignments`
11235
11236Allows setting the threshold for the `large_assignments` lint.
11237
11238The tracking issue for this feature is: [#83518]
11239
11240[#83518]: https://github.com/rust-lang/rust/issues/83518
11241
11242------------------------
11243"##,
11244 default_severity: Severity::Allow,
11245 warn_since: None,
11246 deny_since: None,
11247 },
11248 Lint {
11249 label: "lazy_cell_into_inner",
11250 description: r##"# `lazy_cell_into_inner`
11251
11252
11253
11254The tracking issue for this feature is: [#125623]
11255
11256[#125623]: https://github.com/rust-lang/rust/issues/125623
11257
11258------------------------
11259"##,
11260 default_severity: Severity::Allow,
11261 warn_since: None,
11262 deny_since: None,
11263 },
11264 Lint {
11265 label: "legacy_receiver_trait",
11266 description: r##"# `legacy_receiver_trait`
11267
11268
11269
11270This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
11271
11272------------------------
11273"##,
11274 default_severity: Severity::Allow,
11275 warn_since: None,
11276 deny_since: None,
11277 },
11278 Lint {
11279 label: "liballoc_internals",
11280 description: r##"# `liballoc_internals`
11281
11282
11283
11284This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
11285
11286------------------------
11287"##,
11288 default_severity: Severity::Allow,
11289 warn_since: None,
11290 deny_since: None,
11291 },
11292 Lint {
11293 label: "libstd_sys_internals",
11294 description: r##"# `libstd_sys_internals`
11295
11296This feature is internal to the Rust compiler and is not intended for general use.
11297
11298------------------------
11299"##,
11300 default_severity: Severity::Allow,
11301 warn_since: None,
11302 deny_since: None,
11303 },
11304 Lint {
11305 label: "likely_unlikely",
11306 description: r##"# `likely_unlikely`
11307
11308
11309
11310The tracking issue for this feature is: [#151619]
11311
11312[#151619]: https://github.com/rust-lang/rust/issues/151619
11313
11314------------------------
11315"##,
11316 default_severity: Severity::Allow,
11317 warn_since: None,
11318 deny_since: None,
11319 },
11320 Lint {
11321 label: "link_arg_attribute",
11322 description: r##"# `link_arg_attribute`
11323
11324The tracking issue for this feature is: [#99427]
11325
11326------
11327
11328The `link_arg_attribute` feature allows passing arguments into the linker
11329from inside of the source code. Order is preserved for link attributes as
11330they were defined on a single extern block:
11331
11332```rust,no_run
11333#![feature(link_arg_attribute)]
11334
11335#[link(kind = "link-arg", name = "--start-group")]
11336#[link(kind = "static", name = "c")]
11337#[link(kind = "static", name = "gcc")]
11338#[link(kind = "link-arg", name = "--end-group")]
11339extern "C" {}
11340```
11341
11342[#99427]: https://github.com/rust-lang/rust/issues/99427
11343"##,
11344 default_severity: Severity::Allow,
11345 warn_since: None,
11346 deny_since: None,
11347 },
11348 Lint {
11349 label: "link_cfg",
11350 description: r##"# `link_cfg`
11351
11352This feature is internal to the Rust compiler and is not intended for general use.
11353
11354------------------------
11355"##,
11356 default_severity: Severity::Allow,
11357 warn_since: None,
11358 deny_since: None,
11359 },
11360 Lint {
11361 label: "link_enzyme_intrinsics",
11362 description: r##"# `link_enzyme_intrinsics`
11363
11364Allows using `#[link_name="__enzyme_*"]`.
11365
11366This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
11367
11368------------------------
11369"##,
11370 default_severity: Severity::Allow,
11371 warn_since: None,
11372 deny_since: None,
11373 },
11374 Lint {
11375 label: "link_llvm_intrinsics",
11376 description: r##"# `link_llvm_intrinsics`
11377
11378Allows using `#[link_name="llvm.*"]`.
11379
11380The tracking issue for this feature is: [#29602]
11381
11382[#29602]: https://github.com/rust-lang/rust/issues/29602
11383
11384------------------------
11385"##,
11386 default_severity: Severity::Allow,
11387 warn_since: None,
11388 deny_since: None,
11389 },
11390 Lint {
11391 label: "linkage",
11392 description: r##"# `linkage`
11393
11394Allows using the `#[linkage = ".."]` attribute.
11395
11396The tracking issue for this feature is: [#29603]
11397
11398[#29603]: https://github.com/rust-lang/rust/issues/29603
11399
11400------------------------
11401"##,
11402 default_severity: Severity::Allow,
11403 warn_since: None,
11404 deny_since: None,
11405 },
11406 Lint {
11407 label: "linked_list_cursors",
11408 description: r##"# `linked_list_cursors`
11409
11410
11411
11412The tracking issue for this feature is: [#58533]
11413
11414[#58533]: https://github.com/rust-lang/rust/issues/58533
11415
11416------------------------
11417"##,
11418 default_severity: Severity::Allow,
11419 warn_since: None,
11420 deny_since: None,
11421 },
11422 Lint {
11423 label: "linked_list_remove",
11424 description: r##"# `linked_list_remove`
11425
11426
11427
11428The tracking issue for this feature is: [#69210]
11429
11430[#69210]: https://github.com/rust-lang/rust/issues/69210
11431
11432------------------------
11433"##,
11434 default_severity: Severity::Allow,
11435 warn_since: None,
11436 deny_since: None,
11437 },
11438 Lint {
11439 label: "linked_list_retain",
11440 description: r##"# `linked_list_retain`
11441
11442
11443
11444The tracking issue for this feature is: [#114135]
11445
11446[#114135]: https://github.com/rust-lang/rust/issues/114135
11447
11448------------------------
11449"##,
11450 default_severity: Severity::Allow,
11451 warn_since: None,
11452 deny_since: None,
11453 },
11454 Lint {
11455 label: "linux_pidfd",
11456 description: r##"# `linux_pidfd`
11457
11458
11459
11460The tracking issue for this feature is: [#82971]
11461
11462[#82971]: https://github.com/rust-lang/rust/issues/82971
11463
11464------------------------
11465"##,
11466 default_severity: Severity::Allow,
11467 warn_since: None,
11468 deny_since: None,
11469 },
11470 Lint {
11471 label: "local_waker",
11472 description: r##"# `local_waker`
11473
11474
11475
11476The tracking issue for this feature is: [#118959]
11477
11478[#118959]: https://github.com/rust-lang/rust/issues/118959
11479
11480------------------------
11481"##,
11482 default_severity: Severity::Allow,
11483 warn_since: None,
11484 deny_since: None,
11485 },
11486 Lint {
11487 label: "lock_value_accessors",
11488 description: r##"# `lock_value_accessors`
11489
11490
11491
11492The tracking issue for this feature is: [#133407]
11493
11494[#133407]: https://github.com/rust-lang/rust/issues/133407
11495
11496------------------------
11497"##,
11498 default_severity: Severity::Allow,
11499 warn_since: None,
11500 deny_since: None,
11501 },
11502 Lint {
11503 label: "log_syntax",
11504 description: r##"# `log_syntax`
11505
11506
11507
11508The tracking issue for this feature is: [#29598]
11509
11510[#29598]: https://github.com/rust-lang/rust/issues/29598
11511
11512------------------------
11513"##,
11514 default_severity: Severity::Allow,
11515 warn_since: None,
11516 deny_since: None,
11517 },
11518 Lint {
11519 label: "loongarch_target_feature",
11520 description: r##"# `loongarch_target_feature`
11521
11522Target features on loongarch.
11523
11524The tracking issue for this feature is: [#150252]
11525
11526[#150252]: https://github.com/rust-lang/rust/issues/150252
11527
11528------------------------
11529"##,
11530 default_severity: Severity::Allow,
11531 warn_since: None,
11532 deny_since: None,
11533 },
11534 Lint {
11535 label: "loop_hints",
11536 description: r##"# `loop_hints`
11537
11538The tracking issue for this feature is: [#156874]
11539
11540[#156874]: https://github.com/rust-lang/rust/issues/156874
11541
11542------
11543
11544<!--
11545FIXME(#159429): temporarily renamed `#[unroll]` to mitigate a nameres ambiguity
11546-->
11547
11548Loop unrolling can be a powerful optimization but like inlining, it is sometimes useful to
11549manually provide hints to optimizations.
11550
11551`#[rustc_unroll]` will encourage unrolling of a loop.
11552
11553`#[rustc_unroll(full)]` is a stronger hint and can cause optimizations to completely ignore the code
11554side growth from repeating a loop body.
11555
11556`#[rustc_unroll(never)]` is a strong hint to not unroll the loop at all. Note that other loop
11557optimizations may still be applied.
11558
11559`#[rustc_unroll(N)]` is a hint to unroll `N` iterations of the loop.
11560
11561In all cases these are just hints and may be ignored. But unlike function inlining hints,
11562loops tend to be heavily modified during compilation, which can make obeying hints challenging.
11563If the attribute doesn't do what you want, please file an issue.
11564"##,
11565 default_severity: Severity::Allow,
11566 warn_since: None,
11567 deny_since: None,
11568 },
11569 Lint {
11570 label: "loop_match",
11571 description: r##"# `loop_match`
11572
11573The tracking issue for this feature is: [#132306]
11574
11575[#132306]: https://github.com/rust-lang/rust/issues/132306
11576
11577------
11578
11579The `#[loop_match]` and `#[const_continue]` attributes can be used to improve the code
11580generation of logic that fits this shape:
11581
11582```ignore (pseudo-rust)
11583loop {
11584 state = 'blk: {
11585 match state {
11586 State::A => {
11587 break 'blk State::B
11588 }
11589 State::B => { /* ... */ }
11590 /* ... */
11591 }
11592 }
11593}
11594```
11595
11596Here the loop itself can be annotated with `#[loop_match]`, and any `break 'blk` with
11597`#[const_continue]` if the value is know at compile time:
11598
11599```ignore (pseudo-rust)
11600#[loop_match]
11601loop {
11602 state = 'blk: {
11603 match state {
11604 State::A => {
11605 #[const_continue]
11606 break 'blk State::B
11607 }
11608 State::B => { /* ... */ }
11609 /* ... */
11610 }
11611 }
11612}
11613```
11614
11615The observable behavior of this loop is exactly the same as without the extra attributes.
11616The difference is in the generated output: normally, when the state is `A`, control flow
11617moves from the `A` branch, back to the top of the loop, then to the `B` branch. With the
11618attributes, The `A` branch will immediately jump to the `B` branch.
11619
11620Removing the indirection can be beneficial for stack usage and branch prediction, and
11621enables other optimizations by clearly splitting out the control flow paths that your
11622program will actually use.
11623"##,
11624 default_severity: Severity::Allow,
11625 warn_since: None,
11626 deny_since: None,
11627 },
11628 Lint {
11629 label: "m68k_target_feature",
11630 description: r##"# `m68k_target_feature`
11631
11632Target features on m68k.
11633
11634The tracking issue for this feature is: [#134328]
11635
11636[#134328]: https://github.com/rust-lang/rust/issues/134328
11637
11638------------------------
11639"##,
11640 default_severity: Severity::Allow,
11641 warn_since: None,
11642 deny_since: None,
11643 },
11644 Lint {
11645 label: "macro_attr",
11646 description: r##"# `macro_attr`
11647
11648Allow `macro_rules!` attribute rules
11649
11650The tracking issue for this feature is: [#143547]
11651
11652[#143547]: https://github.com/rust-lang/rust/issues/143547
11653
11654------------------------
11655"##,
11656 default_severity: Severity::Allow,
11657 warn_since: None,
11658 deny_since: None,
11659 },
11660 Lint {
11661 label: "macro_derive",
11662 description: r##"# `macro_derive`
11663
11664Allow `macro_rules!` derive rules
11665
11666The tracking issue for this feature is: [#143549]
11667
11668[#143549]: https://github.com/rust-lang/rust/issues/143549
11669
11670------------------------
11671"##,
11672 default_severity: Severity::Allow,
11673 warn_since: None,
11674 deny_since: None,
11675 },
11676 Lint {
11677 label: "macro_guard_matcher",
11678 description: r##"# `macro_guard_matcher`
11679
11680Allow `$x:guard` matcher in macros
11681
11682The tracking issue for this feature is: [#153104]
11683
11684[#153104]: https://github.com/rust-lang/rust/issues/153104
11685
11686------------------------
11687"##,
11688 default_severity: Severity::Allow,
11689 warn_since: None,
11690 deny_since: None,
11691 },
11692 Lint {
11693 label: "macro_metavar_expr",
11694 description: r##"# `macro_metavar_expr`
11695
11696The tracking issue for this feature is: [#83527]
11697
11698------------------------
11699
11700> This feature is not to be confused with [`macro_metavar_expr_concat`].
11701
11702[`macro_metavar_expr_concat`]: ./macro-metavar-expr-concat.md
11703[#83527]: https://github.com/rust-lang/rust/issues/83527
11704"##,
11705 default_severity: Severity::Allow,
11706 warn_since: None,
11707 deny_since: None,
11708 },
11709 Lint {
11710 label: "macro_metavar_expr_concat",
11711 description: r##"# `macro_metavar_expr_concat`
11712
11713The tracking issue for this feature is: [#124225]
11714
11715------------------------
11716
11717In stable Rust, there is no way to create new identifiers by joining identifiers to literals or other identifiers without using procedural macros such as [`paste`].
11718 `#![feature(macro_metavar_expr_concat)]` introduces a way to do this, using the concat metavariable expression.
11719
11720> This feature uses the syntax from [`macro_metavar_expr`] but is otherwise
11721> independent. It replaces the since-removed unstable feature
11722> [`concat_idents`].
11723
11724> This is an experimental feature; it and its syntax will require a RFC before stabilization.
11725
11726
11727### Overview
11728
11729`#![feature(macro_metavar_expr_concat)]` provides the `concat` metavariable expression for creating new identifiers:
11730
11731```rust
11732#![feature(macro_metavar_expr_concat)]
11733
11734macro_rules! create_some_structs {
11735 ($name:ident) => {
11736 pub struct ${ concat(First, $name) };
11737 pub struct ${ concat(Second, $name) };
11738 pub struct ${ concat(Third, $name) };
11739 }
11740}
11741
11742create_some_structs!(Thing);
11743```
11744
11745This macro invocation expands to:
11746
11747```rust
11748pub struct FirstThing;
11749pub struct SecondThing;
11750pub struct ThirdThing;
11751```
11752
11753### Syntax
11754
11755This feature builds upon the metavariable expression syntax `${ .. }` as specified in [RFC 3086] ([`macro_metavar_expr`]).
11756 `concat` is available like `${ concat(items) }`, where `items` is a comma separated sequence of idents and/or literals.
11757
11758### Examples
11759
11760#### Create a function or method with a concatenated name
11761
11762```rust
11763#![feature(macro_metavar_expr_concat)]
11764
11765macro_rules! make_getter {
11766 ($name:ident, $field: ident, $ret:ty) => {
11767 impl $name {
11768 pub fn ${ concat(get_, $field) }(&self) -> &$ret {
11769 &self.$field
11770 }
11771 }
11772 }
11773}
11774
11775pub struct Thing {
11776 description: String,
11777}
11778
11779make_getter!(Thing, description, String);
11780```
11781
11782This expands to:
11783
11784```rust
11785pub struct Thing {
11786 description: String,
11787}
11788
11789impl Thing {
11790 pub fn get_description(&self) -> &String {
11791 &self.description
11792 }
11793}
11794```
11795
11796#### Create names for macro generated tests
11797
11798```rust
11799#![feature(macro_metavar_expr_concat)]
11800
11801macro_rules! test_math {
11802 ($integer:ident) => {
11803 #[test]
11804 fn ${ concat(test_, $integer, _, addition) } () {
11805 let a: $integer = 73;
11806 let b: $integer = 42;
11807 assert_eq!(a + b, 115)
11808 }
11809
11810 #[test]
11811 fn ${ concat(test_, $integer, _, subtraction) } () {
11812 let a: $integer = 73;
11813 let b: $integer = 42;
11814 assert_eq!(a - b, 31)
11815 }
11816 }
11817}
11818
11819test_math!(i32);
11820test_math!(u64);
11821test_math!(u128);
11822```
11823
11824Running this returns the following output:
11825
11826```text
11827running 6 tests
11828test test_i32_subtraction ... ok
11829test test_i32_addition ... ok
11830test test_u128_addition ... ok
11831test test_u128_subtraction ... ok
11832test test_u64_addition ... ok
11833test test_u64_subtraction ... ok
11834
11835test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
11836```
11837
11838[`paste`]: https://crates.io/crates/paste
11839[RFC 3086]: https://rust-lang.github.io/rfcs/3086-macro-metavar-expr.html
11840[`macro_metavar_expr`]: ../language-features/macro-metavar-expr.md
11841[`concat_idents`]: https://github.com/rust-lang/rust/issues/29599
11842[#124225]: https://github.com/rust-lang/rust/issues/124225
11843[declarative macros]: https://doc.rust-lang.org/stable/reference/macros-by-example.html
11844"##,
11845 default_severity: Severity::Allow,
11846 warn_since: None,
11847 deny_since: None,
11848 },
11849 Lint {
11850 label: "map_try_insert",
11851 description: r##"# `map_try_insert`
11852
11853
11854
11855The tracking issue for this feature is: [#82766]
11856
11857[#82766]: https://github.com/rust-lang/rust/issues/82766
11858
11859------------------------
11860"##,
11861 default_severity: Severity::Allow,
11862 warn_since: None,
11863 deny_since: None,
11864 },
11865 Lint {
11866 label: "mapped_lock_guards",
11867 description: r##"# `mapped_lock_guards`
11868
11869
11870
11871The tracking issue for this feature is: [#117108]
11872
11873[#117108]: https://github.com/rust-lang/rust/issues/117108
11874
11875------------------------
11876"##,
11877 default_severity: Severity::Allow,
11878 warn_since: None,
11879 deny_since: None,
11880 },
11881 Lint {
11882 label: "marker_trait_attr",
11883 description: r##"# `marker_trait_attr`
11884
11885The tracking issue for this feature is: [#29864]
11886
11887[#29864]: https://github.com/rust-lang/rust/issues/29864
11888
11889------------------------
11890
11891Normally, Rust keeps you from adding trait implementations that could
11892overlap with each other, as it would be ambiguous which to use. This
11893feature, however, carves out an exception to that rule: a trait can
11894opt-in to having overlapping implementations, at the cost that those
11895implementations are not allowed to override anything (and thus the
11896trait itself cannot have any associated items, as they're pointless
11897when they'd need to do the same thing for every type anyway).
11898
11899```rust
11900#![feature(marker_trait_attr)]
11901
11902#[marker] trait CheapToClone: Clone {}
11903
11904impl<T: Copy> CheapToClone for T {}
11905
11906// These could potentially overlap with the blanket implementation above,
11907// so are only allowed because CheapToClone is a marker trait.
11908impl<T: CheapToClone, U: CheapToClone> CheapToClone for (T, U) {}
11909impl<T: CheapToClone> CheapToClone for std::ops::Range<T> {}
11910
11911fn cheap_clone<T: CheapToClone>(t: T) -> T {
11912 t.clone()
11913}
11914```
11915
11916This is expected to replace the unstable `overlapping_marker_traits`
11917feature, which applied to all empty traits (without needing an opt-in).
11918"##,
11919 default_severity: Severity::Allow,
11920 warn_since: None,
11921 deny_since: None,
11922 },
11923 Lint {
11924 label: "maybe_dangling",
11925 description: r##"# `maybe_dangling`
11926
11927
11928
11929The tracking issue for this feature is: [#118166]
11930
11931[#118166]: https://github.com/rust-lang/rust/issues/118166
11932
11933------------------------
11934"##,
11935 default_severity: Severity::Allow,
11936 warn_since: None,
11937 deny_since: None,
11938 },
11939 Lint {
11940 label: "maybe_uninit_array_assume_init",
11941 description: r##"# `maybe_uninit_array_assume_init`
11942
11943
11944
11945The tracking issue for this feature is: [#96097]
11946
11947[#96097]: https://github.com/rust-lang/rust/issues/96097
11948
11949------------------------
11950"##,
11951 default_severity: Severity::Allow,
11952 warn_since: None,
11953 deny_since: None,
11954 },
11955 Lint {
11956 label: "maybe_uninit_as_bytes",
11957 description: r##"# `maybe_uninit_as_bytes`
11958
11959
11960
11961The tracking issue for this feature is: [#93092]
11962
11963[#93092]: https://github.com/rust-lang/rust/issues/93092
11964
11965------------------------
11966"##,
11967 default_severity: Severity::Allow,
11968 warn_since: None,
11969 deny_since: None,
11970 },
11971 Lint {
11972 label: "maybe_uninit_fill",
11973 description: r##"# `maybe_uninit_fill`
11974
11975
11976
11977The tracking issue for this feature is: [#117428]
11978
11979[#117428]: https://github.com/rust-lang/rust/issues/117428
11980
11981------------------------
11982"##,
11983 default_severity: Severity::Allow,
11984 warn_since: None,
11985 deny_since: None,
11986 },
11987 Lint {
11988 label: "maybe_uninit_uninit_array_transpose",
11989 description: r##"# `maybe_uninit_uninit_array_transpose`
11990
11991
11992
11993The tracking issue for this feature is: [#96097]
11994
11995[#96097]: https://github.com/rust-lang/rust/issues/96097
11996
11997------------------------
11998"##,
11999 default_severity: Severity::Allow,
12000 warn_since: None,
12001 deny_since: None,
12002 },
12003 Lint {
12004 label: "mem_copy_fn",
12005 description: r##"# `mem_copy_fn`
12006
12007
12008
12009The tracking issue for this feature is: [#98262]
12010
12011[#98262]: https://github.com/rust-lang/rust/issues/98262
12012
12013------------------------
12014"##,
12015 default_severity: Severity::Allow,
12016 warn_since: None,
12017 deny_since: None,
12018 },
12019 Lint {
12020 label: "min_adt_const_params",
12021 description: r##"# `min_adt_const_params`
12022
12023Allows additional const parameter types, such as [u8; 10] or user defined types. User defined types must not have fields more private than the type itself.
12024
12025The tracking issue for this feature is: [#154042]
12026
12027[#154042]: https://github.com/rust-lang/rust/issues/154042
12028
12029------------------------
12030"##,
12031 default_severity: Severity::Allow,
12032 warn_since: None,
12033 deny_since: None,
12034 },
12035 Lint {
12036 label: "min_specialization",
12037 description: r##"# `min_specialization`
12038
12039A minimal, sound subset of specialization intended to be used by the standard library until the soundness issues with specialization are fixed.
12040
12041The tracking issue for this feature is: [#31844]
12042
12043[#31844]: https://github.com/rust-lang/rust/issues/31844
12044
12045------------------------
12046"##,
12047 default_severity: Severity::Allow,
12048 warn_since: None,
12049 deny_since: None,
12050 },
12051 Lint {
12052 label: "mips_target_feature",
12053 description: r##"# `mips_target_feature`
12054
12055Target features on mips.
12056
12057The tracking issue for this feature is: [#150253]
12058
12059[#150253]: https://github.com/rust-lang/rust/issues/150253
12060
12061------------------------
12062"##,
12063 default_severity: Severity::Allow,
12064 warn_since: None,
12065 deny_since: None,
12066 },
12067 Lint {
12068 label: "more_float_constants",
12069 description: r##"# `more_float_constants`
12070
12071
12072
12073The tracking issue for this feature is: [#146939]
12074
12075[#146939]: https://github.com/rust-lang/rust/issues/146939
12076
12077------------------------
12078"##,
12079 default_severity: Severity::Allow,
12080 warn_since: None,
12081 deny_since: None,
12082 },
12083 Lint {
12084 label: "more_maybe_bounds",
12085 description: r##"# `more_maybe_bounds`
12086
12087Allows using `?Trait` trait bounds in more contexts.
12088
12089This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
12090
12091------------------------
12092"##,
12093 default_severity: Severity::Allow,
12094 warn_since: None,
12095 deny_since: None,
12096 },
12097 Lint {
12098 label: "more_qualified_paths",
12099 description: r##"# `more_qualified_paths`
12100
12101The `more_qualified_paths` feature can be used in order to enable the
12102use of qualified paths in patterns.
12103
12104The tracking issue for this feature is: [#86935](https://github.com/rust-lang/rust/issues/86935).
12105
12106------------------------
12107
12108## Example
12109
12110```rust
12111#![feature(more_qualified_paths)]
12112
12113fn main() {
12114 // destructure through a qualified path
12115 let <Foo as A>::Assoc { br } = StructStruct { br: 2 };
12116}
12117
12118struct StructStruct {
12119 br: i8,
12120}
12121
12122struct Foo;
12123
12124trait A {
12125 type Assoc;
12126}
12127
12128impl A for Foo {
12129 type Assoc = StructStruct;
12130}
12131```
12132"##,
12133 default_severity: Severity::Allow,
12134 warn_since: None,
12135 deny_since: None,
12136 },
12137 Lint {
12138 label: "motor_ext",
12139 description: r##"# `motor_ext`
12140
12141
12142
12143The tracking issue for this feature is: [#147456]
12144
12145[#147456]: https://github.com/rust-lang/rust/issues/147456
12146
12147------------------------
12148"##,
12149 default_severity: Severity::Allow,
12150 warn_since: None,
12151 deny_since: None,
12152 },
12153 Lint {
12154 label: "movdir64b_target_feature",
12155 description: r##"# `movdir64b_target_feature`
12156
12157The `movdir64b` target feature on x86.
12158
12159The tracking issue for this feature is: [#163741]
12160
12161[#163741]: https://github.com/rust-lang/rust/issues/163741
12162
12163------------------------
12164"##,
12165 default_severity: Severity::Allow,
12166 warn_since: None,
12167 deny_since: None,
12168 },
12169 Lint {
12170 label: "movdiri_target_feature",
12171 description: r##"# `movdiri_target_feature`
12172
12173The `movdiri` target feature on x86.
12174
12175The tracking issue for this feature is: [#163741]
12176
12177[#163741]: https://github.com/rust-lang/rust/issues/163741
12178
12179------------------------
12180"##,
12181 default_severity: Severity::Allow,
12182 warn_since: None,
12183 deny_since: None,
12184 },
12185 Lint {
12186 label: "move_expr",
12187 description: r##"# `move_expr`
12188
12189Allows `move(expr)` in closures.
12190
12191The tracking issue for this feature is: [#155050]
12192
12193[#155050]: https://github.com/rust-lang/rust/issues/155050
12194
12195------------------------
12196"##,
12197 default_severity: Severity::Allow,
12198 warn_since: None,
12199 deny_since: None,
12200 },
12201 Lint {
12202 label: "movrs_target_feature",
12203 description: r##"# `movrs_target_feature`
12204
12205The `movrs` target feature on x86.
12206
12207The tracking issue for this feature is: [#137976]
12208
12209[#137976]: https://github.com/rust-lang/rust/issues/137976
12210
12211------------------------
12212"##,
12213 default_severity: Severity::Allow,
12214 warn_since: None,
12215 deny_since: None,
12216 },
12217 Lint {
12218 label: "mpmc_channel",
12219 description: r##"# `mpmc_channel`
12220
12221
12222
12223The tracking issue for this feature is: [#126840]
12224
12225[#126840]: https://github.com/rust-lang/rust/issues/126840
12226
12227------------------------
12228"##,
12229 default_severity: Severity::Allow,
12230 warn_since: None,
12231 deny_since: None,
12232 },
12233 Lint {
12234 label: "mpsc_is_disconnected",
12235 description: r##"# `mpsc_is_disconnected`
12236
12237
12238
12239The tracking issue for this feature is: [#153668]
12240
12241[#153668]: https://github.com/rust-lang/rust/issues/153668
12242
12243------------------------
12244"##,
12245 default_severity: Severity::Allow,
12246 warn_since: None,
12247 deny_since: None,
12248 },
12249 Lint {
12250 label: "multiple_supertrait_upcastable",
12251 description: r##"# `multiple_supertrait_upcastable`
12252
12253Allows the `multiple_supertrait_upcastable` lint.
12254
12255The tracking issue for this feature is: [#150833]
12256
12257[#150833]: https://github.com/rust-lang/rust/issues/150833
12258
12259------------------------
12260"##,
12261 default_severity: Severity::Allow,
12262 warn_since: None,
12263 deny_since: None,
12264 },
12265 Lint {
12266 label: "must_not_suspend",
12267 description: r##"# `must_not_suspend`
12268
12269Allows the `#[must_not_suspend]` attribute.
12270
12271The tracking issue for this feature is: [#83310]
12272
12273[#83310]: https://github.com/rust-lang/rust/issues/83310
12274
12275------------------------
12276"##,
12277 default_severity: Severity::Allow,
12278 warn_since: None,
12279 deny_since: None,
12280 },
12281 Lint {
12282 label: "mut_ref",
12283 description: r##"# `mut_ref`
12284
12285Allows `mut ref` and `mut ref mut` identifier patterns.
12286
12287The tracking issue for this feature is: [#123076]
12288
12289[#123076]: https://github.com/rust-lang/rust/issues/123076
12290
12291------------------------
12292"##,
12293 default_severity: Severity::Allow,
12294 warn_since: None,
12295 deny_since: None,
12296 },
12297 Lint {
12298 label: "mut_restriction",
12299 description: r##"# `mut_restriction`
12300
12301Allows `mut(crate) field: Type` restrictions.
12302
12303The tracking issue for this feature is: [#105077]
12304
12305[#105077]: https://github.com/rust-lang/rust/issues/105077
12306
12307------------------------
12308"##,
12309 default_severity: Severity::Allow,
12310 warn_since: None,
12311 deny_since: None,
12312 },
12313 Lint {
12314 label: "mutex_data_ptr",
12315 description: r##"# `mutex_data_ptr`
12316
12317
12318
12319The tracking issue for this feature is: [#140368]
12320
12321[#140368]: https://github.com/rust-lang/rust/issues/140368
12322
12323------------------------
12324"##,
12325 default_severity: Severity::Allow,
12326 warn_since: None,
12327 deny_since: None,
12328 },
12329 Lint {
12330 label: "naked_functions_rustic_abi",
12331 description: r##"# `naked_functions_rustic_abi`
12332
12333Allows using `#[naked]` on `extern "Rust"` functions.
12334
12335The tracking issue for this feature is: [#138997]
12336
12337[#138997]: https://github.com/rust-lang/rust/issues/138997
12338
12339------------------------
12340"##,
12341 default_severity: Severity::Allow,
12342 warn_since: None,
12343 deny_since: None,
12344 },
12345 Lint {
12346 label: "naked_functions_target_feature",
12347 description: r##"# `naked_functions_target_feature`
12348
12349Allows using `#[target_feature(enable = "...")]` on `#[naked]` on functions.
12350
12351The tracking issue for this feature is: [#138568]
12352
12353[#138568]: https://github.com/rust-lang/rust/issues/138568
12354
12355------------------------
12356"##,
12357 default_severity: Severity::Allow,
12358 warn_since: None,
12359 deny_since: None,
12360 },
12361 Lint {
12362 label: "named_fn_trait_parameters",
12363 description: r##"# `named_fn_trait_parameters`
12364
12365Allows providing names to parameters of `impl Fn` etc
12366
12367The tracking issue for this feature is: [#158499]
12368
12369[#158499]: https://github.com/rust-lang/rust/issues/158499
12370
12371------------------------
12372"##,
12373 default_severity: Severity::Allow,
12374 warn_since: None,
12375 deny_since: None,
12376 },
12377 Lint {
12378 label: "native_link_modifiers_as_needed",
12379 description: r##"# `native_link_modifiers_as_needed`
12380
12381The tracking issue for this feature is: [#81490]
12382
12383[#81490]: https://github.com/rust-lang/rust/issues/81490
12384
12385------------------------
12386
12387The `native_link_modifiers_as_needed` feature allows you to use the `as-needed` modifier.
12388
12389`as-needed` is only compatible with the `dynamic` and `framework` linking kinds. Using any other kind will result in a compiler error.
12390
12391`+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.
12392
12393This modifier translates to `--as-needed` for ld-like linkers, and to `-dead_strip_dylibs` / `-needed_library` / `-needed_framework` for ld64.
12394The modifier does nothing for linkers that don't support it (e.g. `link.exe`).
12395
12396The 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.
12397"##,
12398 default_severity: Severity::Allow,
12399 warn_since: None,
12400 deny_since: None,
12401 },
12402 Lint {
12403 label: "needs_panic_runtime",
12404 description: r##"# `needs_panic_runtime`
12405
12406Allows declaring with `#![needs_panic_runtime]` that a panic runtime is needed.
12407
12408The tracking issue for this feature is: [#32837]
12409
12410[#32837]: https://github.com/rust-lang/rust/issues/32837
12411
12412------------------------
12413"##,
12414 default_severity: Severity::Allow,
12415 warn_since: None,
12416 deny_since: None,
12417 },
12418 Lint {
12419 label: "negative_bounds",
12420 description: r##"# `negative_bounds`
12421
12422Allow negative trait bounds. This is an internal-only feature for testing the trait solver!
12423
12424This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
12425
12426------------------------
12427"##,
12428 default_severity: Severity::Allow,
12429 warn_since: None,
12430 deny_since: None,
12431 },
12432 Lint {
12433 label: "negative_impls",
12434 description: r##"# `negative_impls`
12435
12436The tracking issue for this feature is [#68318].
12437
12438[#68318]: https://github.com/rust-lang/rust/issues/68318
12439
12440----
12441
12442With the feature gate `negative_impls`, you can write negative impls as well as positive ones:
12443
12444```rust
12445#![feature(negative_impls)]
12446trait DerefMut { }
12447impl<T: ?Sized> !DerefMut for &T { }
12448```
12449
12450Negative 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.
12451
12452Negative impls have the following characteristics:
12453
12454* They do not have any items.
12455* They must obey the orphan rules as if they were a positive impl.
12456* They cannot "overlap" with any positive impls.
12457
12458## Semver interaction
12459
12460It is a breaking change to remove a negative impl. Negative impls are a commitment not to implement the given trait for the named types.
12461
12462## Orphan and overlap rules
12463
12464Negative 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.
12465
12466Similarly, 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.)
12467
12468## Interaction with auto traits
12469
12470Declaring a negative impl `impl !SomeAutoTrait for SomeType` for an
12471auto-trait serves two purposes:
12472
12473* as with any trait, it declares that `SomeType` will never implement `SomeAutoTrait`;
12474* it disables the automatic `SomeType: SomeAutoTrait` impl that would otherwise have been generated.
12475
12476Note that, at present, there is no way to indicate that a given type
12477does not implement an auto trait *but that it may do so in the
12478future*. For ordinary types, this is done by simply not declaring any
12479impl at all, but that is not an option for auto traits. A workaround
12480is that one could embed a marker type as one of the fields, where the
12481marker type is `!AutoTrait`.
12482
12483## Immediate uses
12484
12485Negative 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).
12486
12487This serves two purposes:
12488
12489* For proving the correctness of unsafe code, we can use that impl as evidence that no `DerefMut` or `Clone` impl exists.
12490* It prevents downstream crates from creating such impls.
12491"##,
12492 default_severity: Severity::Allow,
12493 warn_since: None,
12494 deny_since: None,
12495 },
12496 Lint {
12497 label: "never_patterns",
12498 description: r##"# `never_patterns`
12499
12500Allows the `!` pattern.
12501
12502The tracking issue for this feature is: [#118155]
12503
12504[#118155]: https://github.com/rust-lang/rust/issues/118155
12505
12506------------------------
12507"##,
12508 default_severity: Severity::Allow,
12509 warn_since: None,
12510 deny_since: None,
12511 },
12512 Lint {
12513 label: "new_range",
12514 description: r##"# `new_range`
12515
12516The tracking issue for this feature is: [#123741]
12517
12518[#123741]: https://github.com/rust-lang/rust/issues/123741
12519
12520---
12521
12522Switch the syntaxes `a..`, `a..b`, and `a..=b` to resolve the new range types.
12523"##,
12524 default_severity: Severity::Allow,
12525 warn_since: None,
12526 deny_since: None,
12527 },
12528 Lint {
12529 label: "new_range_remainder",
12530 description: r##"# `new_range_remainder`
12531
12532
12533
12534The tracking issue for this feature is: [#154458]
12535
12536[#154458]: https://github.com/rust-lang/rust/issues/154458
12537
12538------------------------
12539"##,
12540 default_severity: Severity::Allow,
12541 warn_since: None,
12542 deny_since: None,
12543 },
12544 Lint {
12545 label: "next_index",
12546 description: r##"# `next_index`
12547
12548
12549
12550The tracking issue for this feature is: [#130711]
12551
12552[#130711]: https://github.com/rust-lang/rust/issues/130711
12553
12554------------------------
12555"##,
12556 default_severity: Severity::Allow,
12557 warn_since: None,
12558 deny_since: None,
12559 },
12560 Lint {
12561 label: "no_core",
12562 description: r##"# `no_core`
12563
12564Allows `#![no_core]`.
12565
12566The tracking issue for this feature is: [#29639]
12567
12568[#29639]: https://github.com/rust-lang/rust/issues/29639
12569
12570------------------------
12571"##,
12572 default_severity: Severity::Allow,
12573 warn_since: None,
12574 deny_since: None,
12575 },
12576 Lint {
12577 label: "non_exhaustive_omitted_patterns_lint",
12578 description: r##"# `non_exhaustive_omitted_patterns_lint`
12579
12580Allows using the `non_exhaustive_omitted_patterns` lint.
12581
12582The tracking issue for this feature is: [#89554]
12583
12584[#89554]: https://github.com/rust-lang/rust/issues/89554
12585
12586------------------------
12587"##,
12588 default_severity: Severity::Allow,
12589 warn_since: None,
12590 deny_since: None,
12591 },
12592 Lint {
12593 label: "non_lifetime_binders",
12594 description: r##"# `non_lifetime_binders`
12595
12596Allows `for<T>` binders in where-clauses
12597
12598The tracking issue for this feature is: [#108185]
12599
12600[#108185]: https://github.com/rust-lang/rust/issues/108185
12601
12602------------------------
12603"##,
12604 default_severity: Severity::Allow,
12605 warn_since: None,
12606 deny_since: None,
12607 },
12608 Lint {
12609 label: "nonpoison_condvar",
12610 description: r##"# `nonpoison_condvar`
12611
12612
12613
12614The tracking issue for this feature is: [#134645]
12615
12616[#134645]: https://github.com/rust-lang/rust/issues/134645
12617
12618------------------------
12619"##,
12620 default_severity: Severity::Allow,
12621 warn_since: None,
12622 deny_since: None,
12623 },
12624 Lint {
12625 label: "nonpoison_mutex",
12626 description: r##"# `nonpoison_mutex`
12627
12628
12629
12630The tracking issue for this feature is: [#134645]
12631
12632[#134645]: https://github.com/rust-lang/rust/issues/134645
12633
12634------------------------
12635"##,
12636 default_severity: Severity::Allow,
12637 warn_since: None,
12638 deny_since: None,
12639 },
12640 Lint {
12641 label: "nonpoison_rwlock",
12642 description: r##"# `nonpoison_rwlock`
12643
12644
12645
12646The tracking issue for this feature is: [#134645]
12647
12648[#134645]: https://github.com/rust-lang/rust/issues/134645
12649
12650------------------------
12651"##,
12652 default_severity: Severity::Allow,
12653 warn_since: None,
12654 deny_since: None,
12655 },
12656 Lint {
12657 label: "nonzero_bitwise",
12658 description: r##"# `nonzero_bitwise`
12659
12660
12661
12662The tracking issue for this feature is: [#128281]
12663
12664[#128281]: https://github.com/rust-lang/rust/issues/128281
12665
12666------------------------
12667"##,
12668 default_severity: Severity::Allow,
12669 warn_since: None,
12670 deny_since: None,
12671 },
12672 Lint {
12673 label: "nonzero_from_mut",
12674 description: r##"# `nonzero_from_mut`
12675
12676
12677
12678The tracking issue for this feature is: [#106290]
12679
12680[#106290]: https://github.com/rust-lang/rust/issues/106290
12681
12682------------------------
12683"##,
12684 default_severity: Severity::Allow,
12685 warn_since: None,
12686 deny_since: None,
12687 },
12688 Lint {
12689 label: "nonzero_internals",
12690 description: r##"# `nonzero_internals`
12691
12692
12693
12694This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
12695
12696------------------------
12697"##,
12698 default_severity: Severity::Allow,
12699 warn_since: None,
12700 deny_since: None,
12701 },
12702 Lint {
12703 label: "nonzero_ops",
12704 description: r##"# `nonzero_ops`
12705
12706
12707
12708The tracking issue for this feature is: [#84186]
12709
12710[#84186]: https://github.com/rust-lang/rust/issues/84186
12711
12712------------------------
12713"##,
12714 default_severity: Severity::Allow,
12715 warn_since: None,
12716 deny_since: None,
12717 },
12718 Lint {
12719 label: "normalize_lexically",
12720 description: r##"# `normalize_lexically`
12721
12722
12723
12724The tracking issue for this feature is: [#134694]
12725
12726[#134694]: https://github.com/rust-lang/rust/issues/134694
12727
12728------------------------
12729"##,
12730 default_severity: Severity::Allow,
12731 warn_since: None,
12732 deny_since: None,
12733 },
12734 Lint {
12735 label: "num_internals",
12736 description: r##"# `num_internals`
12737
12738
12739
12740This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
12741
12742------------------------
12743"##,
12744 default_severity: Severity::Allow,
12745 warn_since: None,
12746 deny_since: None,
12747 },
12748 Lint {
12749 label: "numfmt",
12750 description: r##"# `numfmt`
12751
12752
12753
12754This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
12755
12756------------------------
12757"##,
12758 default_severity: Severity::Allow,
12759 warn_since: None,
12760 deny_since: None,
12761 },
12762 Lint {
12763 label: "nvptx_target_feature",
12764 description: r##"# `nvptx_target_feature`
12765
12766Target features on nvptx.
12767
12768The tracking issue for this feature is: [#150254]
12769
12770[#150254]: https://github.com/rust-lang/rust/issues/150254
12771
12772------------------------
12773"##,
12774 default_severity: Severity::Allow,
12775 warn_since: None,
12776 deny_since: None,
12777 },
12778 Lint {
12779 label: "objc_class_variant",
12780 description: r##"# `objc_class_variant`
12781
12782
12783
12784This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
12785
12786------------------------
12787"##,
12788 default_severity: Severity::Allow,
12789 warn_since: None,
12790 deny_since: None,
12791 },
12792 Lint {
12793 label: "objc_selector_variant",
12794 description: r##"# `objc_selector_variant`
12795
12796
12797
12798This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
12799
12800------------------------
12801"##,
12802 default_severity: Severity::Allow,
12803 warn_since: None,
12804 deny_since: None,
12805 },
12806 Lint {
12807 label: "offset_of_enum",
12808 description: r##"# `offset_of_enum`
12809
12810The tracking issue for this feature is: [#120141]
12811
12812[#120141]: https://github.com/rust-lang/rust/issues/120141
12813
12814------------------------
12815
12816When the `offset_of_enum` feature is enabled, the [`offset_of!`] macro may be used to obtain the
12817offsets of fields of `enum`s; to express this, `enum` variants may be traversed as if they were
12818fields. Variants themselves do not have an offset, so they cannot appear as the last path component.
12819
12820```rust
12821#![feature(offset_of_enum)]
12822use std::mem;
12823
12824#[repr(u8)]
12825enum Enum {
12826 A(u8, u16),
12827 B { one: u8, two: u16 },
12828}
12829
12830assert_eq!(mem::offset_of!(Enum, A.0), 1);
12831assert_eq!(mem::offset_of!(Enum, B.two), 2);
12832
12833assert_eq!(mem::offset_of!(Option<&u8>, Some.0), 0);
12834```
12835
12836[`offset_of!`]: ../../std/mem/macro.offset_of.html
12837"##,
12838 default_severity: Severity::Allow,
12839 warn_since: None,
12840 deny_since: None,
12841 },
12842 Lint {
12843 label: "offset_of_slice",
12844 description: r##"# `offset_of_slice`
12845
12846The tracking issue for this feature is: [#126151]
12847
12848[#126151]: https://github.com/rust-lang/rust/issues/126151
12849
12850------------------------
12851
12852When the `offset_of_slice` feature is enabled, the [`offset_of!`] macro may be used to determine
12853the offset of fields whose type is `[T]`, that is, a slice of dynamic size.
12854
12855In general, fields whose type is dynamically sized do not have statically known offsets because
12856they do not have statically known alignments. However, `[T]` has the same alignment as `T`, so
12857it specifically may be allowed.
12858
12859```rust
12860#![feature(offset_of_slice)]
12861
12862#[repr(C)]
12863pub struct Struct {
12864 head: u32,
12865 tail: [u8],
12866}
12867
12868fn main() {
12869 assert_eq!(std::mem::offset_of!(Struct, tail), 4);
12870}
12871```
12872
12873[`offset_of!`]: ../../std/mem/macro.offset_of.html
12874"##,
12875 default_severity: Severity::Allow,
12876 warn_since: None,
12877 deny_since: None,
12878 },
12879 Lint {
12880 label: "once_cell_get_mut",
12881 description: r##"# `once_cell_get_mut`
12882
12883
12884
12885The tracking issue for this feature is: [#121641]
12886
12887[#121641]: https://github.com/rust-lang/rust/issues/121641
12888
12889------------------------
12890"##,
12891 default_severity: Severity::Allow,
12892 warn_since: None,
12893 deny_since: None,
12894 },
12895 Lint {
12896 label: "once_cell_new_init",
12897 description: r##"# `once_cell_new_init`
12898
12899
12900
12901The tracking issue for this feature is: [#159859]
12902
12903[#159859]: https://github.com/rust-lang/rust/issues/159859
12904
12905------------------------
12906"##,
12907 default_severity: Severity::Allow,
12908 warn_since: None,
12909 deny_since: None,
12910 },
12911 Lint {
12912 label: "once_cell_try",
12913 description: r##"# `once_cell_try`
12914
12915
12916
12917The tracking issue for this feature is: [#109737]
12918
12919[#109737]: https://github.com/rust-lang/rust/issues/109737
12920
12921------------------------
12922"##,
12923 default_severity: Severity::Allow,
12924 warn_since: None,
12925 deny_since: None,
12926 },
12927 Lint {
12928 label: "once_cell_try_insert",
12929 description: r##"# `once_cell_try_insert`
12930
12931
12932
12933The tracking issue for this feature is: [#116693]
12934
12935[#116693]: https://github.com/rust-lang/rust/issues/116693
12936
12937------------------------
12938"##,
12939 default_severity: Severity::Allow,
12940 warn_since: None,
12941 deny_since: None,
12942 },
12943 Lint {
12944 label: "once_lazy_lock_get_unchecked",
12945 description: r##"# `once_lazy_lock_get_unchecked`
12946
12947
12948
12949The tracking issue for this feature is: [#162716]
12950
12951[#162716]: https://github.com/rust-lang/rust/issues/162716
12952
12953------------------------
12954"##,
12955 default_severity: Severity::Allow,
12956 warn_since: None,
12957 deny_since: None,
12958 },
12959 Lint {
12960 label: "once_lock_new_init",
12961 description: r##"# `once_lock_new_init`
12962
12963
12964
12965The tracking issue for this feature is: [#159860]
12966
12967[#159860]: https://github.com/rust-lang/rust/issues/159860
12968
12969------------------------
12970"##,
12971 default_severity: Severity::Allow,
12972 warn_since: None,
12973 deny_since: None,
12974 },
12975 Lint {
12976 label: "one_sided_range",
12977 description: r##"# `one_sided_range`
12978
12979
12980
12981The tracking issue for this feature is: [#69780]
12982
12983[#69780]: https://github.com/rust-lang/rust/issues/69780
12984
12985------------------------
12986"##,
12987 default_severity: Severity::Allow,
12988 warn_since: None,
12989 deny_since: None,
12990 },
12991 Lint {
12992 label: "oneshot_channel",
12993 description: r##"# `oneshot_channel`
12994
12995
12996
12997The tracking issue for this feature is: [#143674]
12998
12999[#143674]: https://github.com/rust-lang/rust/issues/143674
13000
13001------------------------
13002"##,
13003 default_severity: Severity::Allow,
13004 warn_since: None,
13005 deny_since: None,
13006 },
13007 Lint {
13008 label: "option_array_transpose",
13009 description: r##"# `option_array_transpose`
13010
13011
13012
13013The tracking issue for this feature is: [#130828]
13014
13015[#130828]: https://github.com/rust-lang/rust/issues/130828
13016
13017------------------------
13018"##,
13019 default_severity: Severity::Allow,
13020 warn_since: None,
13021 deny_since: None,
13022 },
13023 Lint {
13024 label: "option_get_or_try_insert_with",
13025 description: r##"# `option_get_or_try_insert_with`
13026
13027
13028
13029The tracking issue for this feature is: [#143648]
13030
13031[#143648]: https://github.com/rust-lang/rust/issues/143648
13032
13033------------------------
13034"##,
13035 default_severity: Severity::Allow,
13036 warn_since: None,
13037 deny_since: None,
13038 },
13039 Lint {
13040 label: "option_into_flat_iter",
13041 description: r##"# `option_into_flat_iter`
13042
13043
13044
13045The tracking issue for this feature is: [#148441]
13046
13047[#148441]: https://github.com/rust-lang/rust/issues/148441
13048
13049------------------------
13050"##,
13051 default_severity: Severity::Allow,
13052 warn_since: None,
13053 deny_since: None,
13054 },
13055 Lint {
13056 label: "option_reduce",
13057 description: r##"# `option_reduce`
13058
13059
13060
13061The tracking issue for this feature is: [#144273]
13062
13063[#144273]: https://github.com/rust-lang/rust/issues/144273
13064
13065------------------------
13066"##,
13067 default_severity: Severity::Allow,
13068 warn_since: None,
13069 deny_since: None,
13070 },
13071 Lint {
13072 label: "option_reference_flattening",
13073 description: r##"# `option_reference_flattening`
13074
13075
13076
13077The tracking issue for this feature is: [#149221]
13078
13079[#149221]: https://github.com/rust-lang/rust/issues/149221
13080
13081------------------------
13082"##,
13083 default_severity: Severity::Allow,
13084 warn_since: None,
13085 deny_since: None,
13086 },
13087 Lint {
13088 label: "option_zip",
13089 description: r##"# `option_zip`
13090
13091
13092
13093The tracking issue for this feature is: [#70086]
13094
13095[#70086]: https://github.com/rust-lang/rust/issues/70086
13096
13097------------------------
13098"##,
13099 default_severity: Severity::Allow,
13100 warn_since: None,
13101 deny_since: None,
13102 },
13103 Lint {
13104 label: "os_str_slice",
13105 description: r##"# `os_str_slice`
13106
13107
13108
13109The tracking issue for this feature is: [#118485]
13110
13111[#118485]: https://github.com/rust-lang/rust/issues/118485
13112
13113------------------------
13114"##,
13115 default_severity: Severity::Allow,
13116 warn_since: None,
13117 deny_since: None,
13118 },
13119 Lint {
13120 label: "os_str_split_at",
13121 description: r##"# `os_str_split_at`
13122
13123
13124
13125This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
13126
13127------------------------
13128"##,
13129 default_severity: Severity::Allow,
13130 warn_since: None,
13131 deny_since: None,
13132 },
13133 Lint {
13134 label: "os_string_truncate",
13135 description: r##"# `os_string_truncate`
13136
13137
13138
13139The tracking issue for this feature is: [#133262]
13140
13141[#133262]: https://github.com/rust-lang/rust/issues/133262
13142
13143------------------------
13144"##,
13145 default_severity: Severity::Allow,
13146 warn_since: None,
13147 deny_since: None,
13148 },
13149 Lint {
13150 label: "panic_abort",
13151 description: r##"# `panic_abort`
13152
13153
13154
13155The tracking issue for this feature is: [#32837]
13156
13157[#32837]: https://github.com/rust-lang/rust/issues/32837
13158
13159------------------------
13160"##,
13161 default_severity: Severity::Allow,
13162 warn_since: None,
13163 deny_since: None,
13164 },
13165 Lint {
13166 label: "panic_always_abort",
13167 description: r##"# `panic_always_abort`
13168
13169
13170
13171The tracking issue for this feature is: [#84438]
13172
13173[#84438]: https://github.com/rust-lang/rust/issues/84438
13174
13175------------------------
13176"##,
13177 default_severity: Severity::Allow,
13178 warn_since: None,
13179 deny_since: None,
13180 },
13181 Lint {
13182 label: "panic_backtrace_config",
13183 description: r##"# `panic_backtrace_config`
13184
13185
13186
13187The tracking issue for this feature is: [#93346]
13188
13189[#93346]: https://github.com/rust-lang/rust/issues/93346
13190
13191------------------------
13192"##,
13193 default_severity: Severity::Allow,
13194 warn_since: None,
13195 deny_since: None,
13196 },
13197 Lint {
13198 label: "panic_can_unwind",
13199 description: r##"# `panic_can_unwind`
13200
13201
13202
13203The tracking issue for this feature is: [#92988]
13204
13205[#92988]: https://github.com/rust-lang/rust/issues/92988
13206
13207------------------------
13208"##,
13209 default_severity: Severity::Allow,
13210 warn_since: None,
13211 deny_since: None,
13212 },
13213 Lint {
13214 label: "panic_internals",
13215 description: r##"# `panic_internals`
13216
13217
13218
13219This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
13220
13221------------------------
13222"##,
13223 default_severity: Severity::Allow,
13224 warn_since: None,
13225 deny_since: None,
13226 },
13227 Lint {
13228 label: "panic_runtime",
13229 description: r##"# `panic_runtime`
13230
13231Allows using the `#![panic_runtime]` attribute.
13232
13233The tracking issue for this feature is: [#32837]
13234
13235[#32837]: https://github.com/rust-lang/rust/issues/32837
13236
13237------------------------
13238"##,
13239 default_severity: Severity::Allow,
13240 warn_since: None,
13241 deny_since: None,
13242 },
13243 Lint {
13244 label: "panic_unwind",
13245 description: r##"# `panic_unwind`
13246
13247
13248
13249The tracking issue for this feature is: [#32837]
13250
13251[#32837]: https://github.com/rust-lang/rust/issues/32837
13252
13253------------------------
13254"##,
13255 default_severity: Severity::Allow,
13256 warn_since: None,
13257 deny_since: None,
13258 },
13259 Lint {
13260 label: "panic_update_hook",
13261 description: r##"# `panic_update_hook`
13262
13263
13264
13265The tracking issue for this feature is: [#92649]
13266
13267[#92649]: https://github.com/rust-lang/rust/issues/92649
13268
13269------------------------
13270"##,
13271 default_severity: Severity::Allow,
13272 warn_since: None,
13273 deny_since: None,
13274 },
13275 Lint {
13276 label: "partial_ord_chaining_methods",
13277 description: r##"# `partial_ord_chaining_methods`
13278
13279
13280
13281This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
13282
13283------------------------
13284"##,
13285 default_severity: Severity::Allow,
13286 warn_since: None,
13287 deny_since: None,
13288 },
13289 Lint {
13290 label: "patchable_function_entry",
13291 description: r##"# `patchable_function_entry`
13292
13293Allows specifying nop padding on functions for dynamic patching.
13294
13295The tracking issue for this feature is: [#123115]
13296
13297[#123115]: https://github.com/rust-lang/rust/issues/123115
13298
13299------------------------
13300"##,
13301 default_severity: Severity::Allow,
13302 warn_since: None,
13303 deny_since: None,
13304 },
13305 Lint {
13306 label: "path_absolute_method",
13307 description: r##"# `path_absolute_method`
13308
13309
13310
13311The tracking issue for this feature is: [#153328]
13312
13313[#153328]: https://github.com/rust-lang/rust/issues/153328
13314
13315------------------------
13316"##,
13317 default_severity: Severity::Allow,
13318 warn_since: None,
13319 deny_since: None,
13320 },
13321 Lint {
13322 label: "path_trailing_sep",
13323 description: r##"# `path_trailing_sep`
13324
13325
13326
13327The tracking issue for this feature is: [#142503]
13328
13329[#142503]: https://github.com/rust-lang/rust/issues/142503
13330
13331------------------------
13332"##,
13333 default_severity: Severity::Allow,
13334 warn_since: None,
13335 deny_since: None,
13336 },
13337 Lint {
13338 label: "pattern",
13339 description: r##"# `pattern`
13340
13341
13342
13343The tracking issue for this feature is: [#27721]
13344
13345[#27721]: https://github.com/rust-lang/rust/issues/27721
13346
13347------------------------
13348"##,
13349 default_severity: Severity::Allow,
13350 warn_since: None,
13351 deny_since: None,
13352 },
13353 Lint {
13354 label: "pattern_complexity_limit",
13355 description: r##"# `pattern_complexity_limit`
13356
13357Set the maximum pattern complexity allowed (not limited by default).
13358
13359This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
13360
13361------------------------
13362"##,
13363 default_severity: Severity::Allow,
13364 warn_since: None,
13365 deny_since: None,
13366 },
13367 Lint {
13368 label: "pattern_type_macro",
13369 description: r##"# `pattern_type_macro`
13370
13371
13372
13373The tracking issue for this feature is: [#123646]
13374
13375[#123646]: https://github.com/rust-lang/rust/issues/123646
13376
13377------------------------
13378"##,
13379 default_severity: Severity::Allow,
13380 warn_since: None,
13381 deny_since: None,
13382 },
13383 Lint {
13384 label: "pattern_type_range_trait",
13385 description: r##"# `pattern_type_range_trait`
13386
13387
13388
13389The tracking issue for this feature is: [#123646]
13390
13391[#123646]: https://github.com/rust-lang/rust/issues/123646
13392
13393------------------------
13394"##,
13395 default_severity: Severity::Allow,
13396 warn_since: None,
13397 deny_since: None,
13398 },
13399 Lint {
13400 label: "pattern_types",
13401 description: r##"# `pattern_types`
13402
13403Allows using pattern types.
13404
13405The tracking issue for this feature is: [#123646]
13406
13407[#123646]: https://github.com/rust-lang/rust/issues/123646
13408
13409------------------------
13410"##,
13411 default_severity: Severity::Allow,
13412 warn_since: None,
13413 deny_since: None,
13414 },
13415 Lint {
13416 label: "peer_credentials_unix_socket",
13417 description: r##"# `peer_credentials_unix_socket`
13418
13419
13420
13421The tracking issue for this feature is: [#42839]
13422
13423[#42839]: https://github.com/rust-lang/rust/issues/42839
13424
13425------------------------
13426"##,
13427 default_severity: Severity::Allow,
13428 warn_since: None,
13429 deny_since: None,
13430 },
13431 Lint {
13432 label: "phantom_variance_markers",
13433 description: r##"# `phantom_variance_markers`
13434
13435
13436
13437The tracking issue for this feature is: [#135806]
13438
13439[#135806]: https://github.com/rust-lang/rust/issues/135806
13440
13441------------------------
13442"##,
13443 default_severity: Severity::Allow,
13444 warn_since: None,
13445 deny_since: None,
13446 },
13447 Lint {
13448 label: "pin_coerce_unsized_trait",
13449 description: r##"# `pin_coerce_unsized_trait`
13450
13451
13452
13453The tracking issue for this feature is: [#150112]
13454
13455[#150112]: https://github.com/rust-lang/rust/issues/150112
13456
13457------------------------
13458"##,
13459 default_severity: Severity::Allow,
13460 warn_since: None,
13461 deny_since: None,
13462 },
13463 Lint {
13464 label: "pin_derefmut_internals",
13465 description: r##"# `pin_derefmut_internals`
13466
13467
13468
13469This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
13470
13471------------------------
13472"##,
13473 default_severity: Severity::Allow,
13474 warn_since: None,
13475 deny_since: None,
13476 },
13477 Lint {
13478 label: "pin_ergonomics",
13479 description: r##"# `pin_ergonomics`
13480
13481Experimental features that make `Pin` more ergonomic.
13482
13483The tracking issue for this feature is: [#130494]
13484
13485[#130494]: https://github.com/rust-lang/rust/issues/130494
13486
13487------------------------
13488"##,
13489 default_severity: Severity::Allow,
13490 warn_since: None,
13491 deny_since: None,
13492 },
13493 Lint {
13494 label: "pin_macro_internals",
13495 description: r##"# `pin_macro_internals`
13496
13497
13498
13499This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
13500
13501------------------------
13502"##,
13503 default_severity: Severity::Allow,
13504 warn_since: None,
13505 deny_since: None,
13506 },
13507 Lint {
13508 label: "pointer_is_aligned_to",
13509 description: r##"# `pointer_is_aligned_to`
13510
13511
13512
13513The tracking issue for this feature is: [#96284]
13514
13515[#96284]: https://github.com/rust-lang/rust/issues/96284
13516
13517------------------------
13518"##,
13519 default_severity: Severity::Allow,
13520 warn_since: None,
13521 deny_since: None,
13522 },
13523 Lint {
13524 label: "portable_simd",
13525 description: r##"# `portable_simd`
13526
13527
13528
13529The tracking issue for this feature is: [#86656]
13530
13531[#86656]: https://github.com/rust-lang/rust/issues/86656
13532
13533------------------------
13534"##,
13535 default_severity: Severity::Allow,
13536 warn_since: None,
13537 deny_since: None,
13538 },
13539 Lint {
13540 label: "postfix_match",
13541 description: r##"# `postfix-match`
13542
13543`postfix-match` adds the feature for matching upon values postfix
13544the expressions that generate the values.
13545
13546The tracking issue for this feature is: [#121618](https://github.com/rust-lang/rust/issues/121618).
13547
13548------------------------
13549
13550```rust,edition2021
13551#![feature(postfix_match)]
13552
13553enum Foo {
13554 Bar,
13555 Baz
13556}
13557
13558fn get_foo() -> Foo {
13559 Foo::Bar
13560}
13561
13562get_foo().match {
13563 Foo::Bar => {},
13564 Foo::Baz => panic!(),
13565}
13566```
13567"##,
13568 default_severity: Severity::Allow,
13569 warn_since: None,
13570 deny_since: None,
13571 },
13572 Lint {
13573 label: "powerpc_ppcf128",
13574 description: r##"# `powerpc_ppcf128`
13575
13576
13577
13578The tracking issue for this feature is: [#163323]
13579
13580[#163323]: https://github.com/rust-lang/rust/issues/163323
13581
13582------------------------
13583"##,
13584 default_severity: Severity::Allow,
13585 warn_since: None,
13586 deny_since: None,
13587 },
13588 Lint {
13589 label: "powerpc_target_feature",
13590 description: r##"# `powerpc_target_feature`
13591
13592Target features on powerpc.
13593
13594The tracking issue for this feature is: [#150255]
13595
13596[#150255]: https://github.com/rust-lang/rust/issues/150255
13597
13598------------------------
13599"##,
13600 default_severity: Severity::Allow,
13601 warn_since: None,
13602 deny_since: None,
13603 },
13604 Lint {
13605 label: "prelude_future",
13606 description: r##"# `prelude_future`
13607
13608
13609
13610This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
13611
13612------------------------
13613"##,
13614 default_severity: Severity::Allow,
13615 warn_since: None,
13616 deny_since: None,
13617 },
13618 Lint {
13619 label: "prelude_import",
13620 description: r##"# `prelude_import`
13621
13622Allows using `#[prelude_import]` on glob `use` items.
13623
13624This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
13625
13626------------------------
13627"##,
13628 default_severity: Severity::Allow,
13629 warn_since: None,
13630 deny_since: None,
13631 },
13632 Lint {
13633 label: "prelude_next",
13634 description: r##"# `prelude_next`
13635
13636
13637
13638This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
13639
13640------------------------
13641"##,
13642 default_severity: Severity::Allow,
13643 warn_since: None,
13644 deny_since: None,
13645 },
13646 Lint {
13647 label: "prfchw_target_feature",
13648 description: r##"# `prfchw_target_feature`
13649
13650The prfchw target feature on x86.
13651
13652The tracking issue for this feature is: [#150256]
13653
13654[#150256]: https://github.com/rust-lang/rust/issues/150256
13655
13656------------------------
13657"##,
13658 default_severity: Severity::Allow,
13659 warn_since: None,
13660 deny_since: None,
13661 },
13662 Lint {
13663 label: "print_internals",
13664 description: r##"# `print_internals`
13665
13666This feature is internal to the Rust compiler and is not intended for general use.
13667
13668------------------------
13669"##,
13670 default_severity: Severity::Allow,
13671 warn_since: None,
13672 deny_since: None,
13673 },
13674 Lint {
13675 label: "proc_macro_def_site",
13676 description: r##"# `proc_macro_def_site`
13677
13678
13679
13680The tracking issue for this feature is: [#54724]
13681
13682[#54724]: https://github.com/rust-lang/rust/issues/54724
13683
13684------------------------
13685"##,
13686 default_severity: Severity::Allow,
13687 warn_since: None,
13688 deny_since: None,
13689 },
13690 Lint {
13691 label: "proc_macro_diagnostic",
13692 description: r##"# `proc_macro_diagnostic`
13693
13694
13695
13696The tracking issue for this feature is: [#54140]
13697
13698[#54140]: https://github.com/rust-lang/rust/issues/54140
13699
13700------------------------
13701"##,
13702 default_severity: Severity::Allow,
13703 warn_since: None,
13704 deny_since: None,
13705 },
13706 Lint {
13707 label: "proc_macro_expand",
13708 description: r##"# `proc_macro_expand`
13709
13710
13711
13712The tracking issue for this feature is: [#90765]
13713
13714[#90765]: https://github.com/rust-lang/rust/issues/90765
13715
13716------------------------
13717"##,
13718 default_severity: Severity::Allow,
13719 warn_since: None,
13720 deny_since: None,
13721 },
13722 Lint {
13723 label: "proc_macro_hygiene",
13724 description: r##"# `proc_macro_hygiene`
13725
13726Allows macro attributes on expressions and statements.
13727
13728The tracking issue for this feature is: [#54727]
13729
13730[#54727]: https://github.com/rust-lang/rust/issues/54727
13731
13732------------------------
13733"##,
13734 default_severity: Severity::Allow,
13735 warn_since: None,
13736 deny_since: None,
13737 },
13738 Lint {
13739 label: "proc_macro_internals",
13740 description: r##"# `proc_macro_internals`
13741
13742
13743
13744This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
13745
13746------------------------
13747"##,
13748 default_severity: Severity::Allow,
13749 warn_since: None,
13750 deny_since: None,
13751 },
13752 Lint {
13753 label: "proc_macro_quote",
13754 description: r##"# `proc_macro_quote`
13755
13756
13757
13758The tracking issue for this feature is: [#54722]
13759
13760[#54722]: https://github.com/rust-lang/rust/issues/54722
13761
13762------------------------
13763"##,
13764 default_severity: Severity::Allow,
13765 warn_since: None,
13766 deny_since: None,
13767 },
13768 Lint {
13769 label: "proc_macro_span",
13770 description: r##"# `proc_macro_span`
13771
13772
13773
13774The tracking issue for this feature is: [#54725]
13775
13776[#54725]: https://github.com/rust-lang/rust/issues/54725
13777
13778------------------------
13779"##,
13780 default_severity: Severity::Allow,
13781 warn_since: None,
13782 deny_since: None,
13783 },
13784 Lint {
13785 label: "proc_macro_totokens",
13786 description: r##"# `proc_macro_totokens`
13787
13788
13789
13790The tracking issue for this feature is: [#130977]
13791
13792[#130977]: https://github.com/rust-lang/rust/issues/130977
13793
13794------------------------
13795"##,
13796 default_severity: Severity::Allow,
13797 warn_since: None,
13798 deny_since: None,
13799 },
13800 Lint {
13801 label: "proc_macro_tracked_env",
13802 description: r##"# `proc_macro_tracked_env`
13803
13804
13805
13806The tracking issue for this feature is: [#99515]
13807
13808[#99515]: https://github.com/rust-lang/rust/issues/99515
13809
13810------------------------
13811"##,
13812 default_severity: Severity::Allow,
13813 warn_since: None,
13814 deny_since: None,
13815 },
13816 Lint {
13817 label: "proc_macro_tracked_path",
13818 description: r##"# `proc_macro_tracked_path`
13819
13820
13821
13822The tracking issue for this feature is: [#99515]
13823
13824[#99515]: https://github.com/rust-lang/rust/issues/99515
13825
13826------------------------
13827"##,
13828 default_severity: Severity::Allow,
13829 warn_since: None,
13830 deny_since: None,
13831 },
13832 Lint {
13833 label: "proc_macro_value",
13834 description: r##"# `proc_macro_value`
13835
13836
13837
13838The tracking issue for this feature is: [#136652]
13839
13840[#136652]: https://github.com/rust-lang/rust/issues/136652
13841
13842------------------------
13843"##,
13844 default_severity: Severity::Allow,
13845 warn_since: None,
13846 deny_since: None,
13847 },
13848 Lint {
13849 label: "process_chroot",
13850 description: r##"# `process_chroot`
13851
13852
13853
13854The tracking issue for this feature is: [#141298]
13855
13856[#141298]: https://github.com/rust-lang/rust/issues/141298
13857
13858------------------------
13859"##,
13860 default_severity: Severity::Allow,
13861 warn_since: None,
13862 deny_since: None,
13863 },
13864 Lint {
13865 label: "process_exitcode_internals",
13866 description: r##"# `process_exitcode_internals`
13867
13868
13869
13870This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
13871
13872------------------------
13873"##,
13874 default_severity: Severity::Allow,
13875 warn_since: None,
13876 deny_since: None,
13877 },
13878 Lint {
13879 label: "process_internals",
13880 description: r##"# `process_internals`
13881
13882
13883
13884This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
13885
13886------------------------
13887"##,
13888 default_severity: Severity::Allow,
13889 warn_since: None,
13890 deny_since: None,
13891 },
13892 Lint {
13893 label: "process_setsid",
13894 description: r##"# `process_setsid`
13895
13896
13897
13898The tracking issue for this feature is: [#105376]
13899
13900[#105376]: https://github.com/rust-lang/rust/issues/105376
13901
13902------------------------
13903"##,
13904 default_severity: Severity::Allow,
13905 warn_since: None,
13906 deny_since: None,
13907 },
13908 Lint {
13909 label: "profiler_runtime",
13910 description: r##"# `profiler_runtime`
13911
13912The tracking issue for this feature is: [#42524](https://github.com/rust-lang/rust/issues/42524).
13913
13914------------------------
13915"##,
13916 default_severity: Severity::Allow,
13917 warn_since: None,
13918 deny_since: None,
13919 },
13920 Lint {
13921 label: "profiler_runtime_lib",
13922 description: r##"# `profiler_runtime_lib`
13923
13924This feature is internal to the Rust compiler and is not intended for general use.
13925
13926------------------------
13927"##,
13928 default_severity: Severity::Allow,
13929 warn_since: None,
13930 deny_since: None,
13931 },
13932 Lint {
13933 label: "profiling_marker_api",
13934 description: r##"# `profiling_marker_api`
13935
13936
13937
13938The tracking issue for this feature is: [#148197]
13939
13940[#148197]: https://github.com/rust-lang/rust/issues/148197
13941
13942------------------------
13943"##,
13944 default_severity: Severity::Allow,
13945 warn_since: None,
13946 deny_since: None,
13947 },
13948 Lint {
13949 label: "ptr_alignment_type",
13950 description: r##"# `ptr_alignment_type`
13951
13952
13953
13954The tracking issue for this feature is: [#102070]
13955
13956[#102070]: https://github.com/rust-lang/rust/issues/102070
13957
13958------------------------
13959"##,
13960 default_severity: Severity::Allow,
13961 warn_since: None,
13962 deny_since: None,
13963 },
13964 Lint {
13965 label: "ptr_as_uninit",
13966 description: r##"# `ptr_as_uninit`
13967
13968
13969
13970The tracking issue for this feature is: [#75402]
13971
13972[#75402]: https://github.com/rust-lang/rust/issues/75402
13973
13974------------------------
13975"##,
13976 default_severity: Severity::Allow,
13977 warn_since: None,
13978 deny_since: None,
13979 },
13980 Lint {
13981 label: "ptr_cast_array",
13982 description: r##"# `ptr_cast_array`
13983
13984
13985
13986The tracking issue for this feature is: [#144514]
13987
13988[#144514]: https://github.com/rust-lang/rust/issues/144514
13989
13990------------------------
13991"##,
13992 default_severity: Severity::Allow,
13993 warn_since: None,
13994 deny_since: None,
13995 },
13996 Lint {
13997 label: "ptr_cast_slice",
13998 description: r##"# `ptr_cast_slice`
13999
14000
14001
14002The tracking issue for this feature is: [#149103]
14003
14004[#149103]: https://github.com/rust-lang/rust/issues/149103
14005
14006------------------------
14007"##,
14008 default_severity: Severity::Allow,
14009 warn_since: None,
14010 deny_since: None,
14011 },
14012 Lint {
14013 label: "ptr_mask",
14014 description: r##"# `ptr_mask`
14015
14016
14017
14018The tracking issue for this feature is: [#98290]
14019
14020[#98290]: https://github.com/rust-lang/rust/issues/98290
14021
14022------------------------
14023"##,
14024 default_severity: Severity::Allow,
14025 warn_since: None,
14026 deny_since: None,
14027 },
14028 Lint {
14029 label: "ptr_metadata",
14030 description: r##"# `ptr_metadata`
14031
14032
14033
14034The tracking issue for this feature is: [#81513]
14035
14036[#81513]: https://github.com/rust-lang/rust/issues/81513
14037
14038------------------------
14039"##,
14040 default_severity: Severity::Allow,
14041 warn_since: None,
14042 deny_since: None,
14043 },
14044 Lint {
14045 label: "pub_crate_should_not_need_unstable_attr",
14046 description: r##"# `pub_crate_should_not_need_unstable_attr`
14047
14048
14049
14050This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
14051
14052------------------------
14053"##,
14054 default_severity: Severity::Allow,
14055 warn_since: None,
14056 deny_since: None,
14057 },
14058 Lint {
14059 label: "random",
14060 description: r##"# `random`
14061
14062
14063
14064The tracking issue for this feature is: [#130703]
14065
14066[#130703]: https://github.com/rust-lang/rust/issues/130703
14067
14068------------------------
14069"##,
14070 default_severity: Severity::Allow,
14071 warn_since: None,
14072 deny_since: None,
14073 },
14074 Lint {
14075 label: "range_bounds_is_empty",
14076 description: r##"# `range_bounds_is_empty`
14077
14078
14079
14080The tracking issue for this feature is: [#137300]
14081
14082[#137300]: https://github.com/rust-lang/rust/issues/137300
14083
14084------------------------
14085"##,
14086 default_severity: Severity::Allow,
14087 warn_since: None,
14088 deny_since: None,
14089 },
14090 Lint {
14091 label: "range_into_bounds",
14092 description: r##"# `range_into_bounds`
14093
14094
14095
14096The tracking issue for this feature is: [#136903]
14097
14098[#136903]: https://github.com/rust-lang/rust/issues/136903
14099
14100------------------------
14101"##,
14102 default_severity: Severity::Allow,
14103 warn_since: None,
14104 deny_since: None,
14105 },
14106 Lint {
14107 label: "raw_dylib_elf",
14108 description: r##"# `raw_dylib_elf`
14109
14110Allows the use of raw-dylibs on ELF platforms
14111
14112The tracking issue for this feature is: [#135694]
14113
14114[#135694]: https://github.com/rust-lang/rust/issues/135694
14115
14116------------------------
14117"##,
14118 default_severity: Severity::Allow,
14119 warn_since: None,
14120 deny_since: None,
14121 },
14122 Lint {
14123 label: "raw_os_error_ty",
14124 description: r##"# `raw_os_error_ty`
14125
14126
14127
14128The tracking issue for this feature is: [#107792]
14129
14130[#107792]: https://github.com/rust-lang/rust/issues/107792
14131
14132------------------------
14133"##,
14134 default_severity: Severity::Allow,
14135 warn_since: None,
14136 deny_since: None,
14137 },
14138 Lint {
14139 label: "raw_slice_split",
14140 description: r##"# `raw_slice_split`
14141
14142
14143
14144The tracking issue for this feature is: [#95595]
14145
14146[#95595]: https://github.com/rust-lang/rust/issues/95595
14147
14148------------------------
14149"##,
14150 default_severity: Severity::Allow,
14151 warn_since: None,
14152 deny_since: None,
14153 },
14154 Lint {
14155 label: "raw_vec_internals",
14156 description: r##"# `raw_vec_internals`
14157
14158
14159
14160This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
14161
14162------------------------
14163"##,
14164 default_severity: Severity::Allow,
14165 warn_since: None,
14166 deny_since: None,
14167 },
14168 Lint {
14169 label: "read_array",
14170 description: r##"# `read_array`
14171
14172
14173
14174The tracking issue for this feature is: [#148848]
14175
14176[#148848]: https://github.com/rust-lang/rust/issues/148848
14177
14178------------------------
14179"##,
14180 default_severity: Severity::Allow,
14181 warn_since: None,
14182 deny_since: None,
14183 },
14184 Lint {
14185 label: "read_buf",
14186 description: r##"# `read_buf`
14187
14188
14189
14190The tracking issue for this feature is: [#78485]
14191
14192[#78485]: https://github.com/rust-lang/rust/issues/78485
14193
14194------------------------
14195"##,
14196 default_severity: Severity::Allow,
14197 warn_since: None,
14198 deny_since: None,
14199 },
14200 Lint {
14201 label: "read_buf_at",
14202 description: r##"# `read_buf_at`
14203
14204
14205
14206The tracking issue for this feature is: [#140771]
14207
14208[#140771]: https://github.com/rust-lang/rust/issues/140771
14209
14210------------------------
14211"##,
14212 default_severity: Severity::Allow,
14213 warn_since: None,
14214 deny_since: None,
14215 },
14216 Lint {
14217 label: "read_le",
14218 description: r##"# `read_le`
14219
14220
14221
14222The tracking issue for this feature is: [#156984]
14223
14224[#156984]: https://github.com/rust-lang/rust/issues/156984
14225
14226------------------------
14227"##,
14228 default_severity: Severity::Allow,
14229 warn_since: None,
14230 deny_since: None,
14231 },
14232 Lint {
14233 label: "read_le_be_internals",
14234 description: r##"# `read_le_be_internals`
14235
14236
14237
14238This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
14239
14240------------------------
14241"##,
14242 default_severity: Severity::Allow,
14243 warn_since: None,
14244 deny_since: None,
14245 },
14246 Lint {
14247 label: "reborrow",
14248 description: r##"# `reborrow`
14249
14250Allows the `Reborrow` and `CoerceShared` traits.
14251
14252The tracking issue for this feature is: [#145612]
14253
14254[#145612]: https://github.com/rust-lang/rust/issues/145612
14255
14256------------------------
14257"##,
14258 default_severity: Severity::Allow,
14259 warn_since: None,
14260 deny_since: None,
14261 },
14262 Lint {
14263 label: "reentrant_lock",
14264 description: r##"# `reentrant_lock`
14265
14266
14267
14268The tracking issue for this feature is: [#121440]
14269
14270[#121440]: https://github.com/rust-lang/rust/issues/121440
14271
14272------------------------
14273"##,
14274 default_severity: Severity::Allow,
14275 warn_since: None,
14276 deny_since: None,
14277 },
14278 Lint {
14279 label: "reentrant_lock_data_ptr",
14280 description: r##"# `reentrant_lock_data_ptr`
14281
14282
14283
14284The tracking issue for this feature is: [#140368]
14285
14286[#140368]: https://github.com/rust-lang/rust/issues/140368
14287
14288------------------------
14289"##,
14290 default_severity: Severity::Allow,
14291 warn_since: None,
14292 deny_since: None,
14293 },
14294 Lint {
14295 label: "ref_pat_eat_one_layer_2024",
14296 description: r##"# `ref_pat_eat_one_layer_2024`
14297
14298The tracking issue for this feature is: [#123076]
14299
14300[#123076]: https://github.com/rust-lang/rust/issues/123076
14301
14302---
14303
14304This feature is incomplete and not yet intended for general use.
14305
14306This implements experimental, Edition-dependent match ergonomics under consideration for inclusion
14307in Rust, allowing `&` patterns in more places. For example:
14308
14309```rust,edition2024
14310#![feature(ref_pat_eat_one_layer_2024)]
14311#![allow(incomplete_features)]
14312#
14313# // Tests type equality in a way that avoids coercing `&&T` or `&mut T` to `&T`.
14314# trait Eq<T> {}
14315# impl<T> Eq<T> for T {}
14316# fn has_type<T>(_: impl Eq<T>) {}
14317
14318// `&` can match against a `ref` binding mode instead of a reference type:
14319let (x, &y) = &(0, 1);
14320has_type::<&u8>(x);
14321has_type::<u8>(y);
14322
14323// `&` can match against `&mut` references:
14324let &z = &mut 2;
14325has_type::<u8>(z);
14326```
14327
14328For specifics, see the corresponding typing rules for [Editions 2021 and earlier] and for
14329[Editions 2024 and later]. For more information on binding modes, see [The Rust Reference].
14330
14331For alternative experimental match ergonomics, see the feature
14332[`ref_pat_eat_one_layer_2024_structural`](./ref-pat-eat-one-layer-2024-structural.md).
14333
14334[Editions 2021 and earlier]: https://nadrieril.github.io/typing-rust-patterns/?compare=false&opts1=AQEBAQIBAQABAAAAAQEBAAEBAAABAAA%3D&mode=rules&do_cmp=false
14335[Editions 2024 and later]: https://nadrieril.github.io/typing-rust-patterns/?compare=false&opts1=AQEBAAABAQABAgIAAQEBAAEBAAABAAA%3D&mode=rules&do_cmp=false
14336[The Rust Reference]: https://doc.rust-lang.org/reference/patterns.html#binding-modes
14337"##,
14338 default_severity: Severity::Allow,
14339 warn_since: None,
14340 deny_since: None,
14341 },
14342 Lint {
14343 label: "ref_pat_eat_one_layer_2024_structural",
14344 description: r##"# `ref_pat_eat_one_layer_2024_structural`
14345
14346The tracking issue for this feature is: [#123076]
14347
14348[#123076]: https://github.com/rust-lang/rust/issues/123076
14349
14350---
14351
14352This feature is incomplete and not yet intended for general use.
14353
14354This implements experimental, Edition-dependent match ergonomics under consideration for inclusion
14355in Rust, allowing `&` patterns in more places. For example:
14356```rust,edition2024
14357#![feature(ref_pat_eat_one_layer_2024_structural)]
14358#![allow(incomplete_features)]
14359#
14360# // Tests type equality in a way that avoids coercing `&&T` or `&mut T` to `&T`.
14361# trait Eq<T> {}
14362# impl<T> Eq<T> for T {}
14363# fn has_type<T>(_: impl Eq<T>) {}
14364
14365// `&` can match against a `ref` binding mode instead of a reference type:
14366let (x, &y) = &(0, 1);
14367has_type::<&u8>(x);
14368has_type::<u8>(y);
14369
14370// `&` can match against `&mut` references:
14371let &z = &mut 2;
14372has_type::<u8>(z);
14373```
14374
14375For specifics, see the corresponding typing rules for [Editions 2021 and earlier] and for
14376[Editions 2024 and later]. For more information on binding modes, see [The Rust Reference].
14377
14378For alternative experimental match ergonomics, see the feature
14379[`ref_pat_eat_one_layer_2024`](./ref-pat-eat-one-layer-2024.md).
14380
14381[Editions 2021 and earlier]: https://nadrieril.github.io/typing-rust-patterns/?compare=false&opts1=AQEBAQIBAQEBAAAAAAAAAAAAAAAAAAA%3D&mode=rules&do_cmp=false
14382[Editions 2024 and later]: https://nadrieril.github.io/typing-rust-patterns/?compare=false&opts1=AQEBAgEBAQEBAgIAAAAAAAAAAAAAAAA%3D&mode=rules&do_cmp=false
14383[The Rust Reference]: https://doc.rust-lang.org/reference/patterns.html#binding-modes
14384"##,
14385 default_severity: Severity::Allow,
14386 warn_since: None,
14387 deny_since: None,
14388 },
14389 Lint {
14390 label: "refcell_try_map",
14391 description: r##"# `refcell_try_map`
14392
14393
14394
14395The tracking issue for this feature is: [#143801]
14396
14397[#143801]: https://github.com/rust-lang/rust/issues/143801
14398
14399------------------------
14400"##,
14401 default_severity: Severity::Allow,
14402 warn_since: None,
14403 deny_since: None,
14404 },
14405 Lint {
14406 label: "register_tool",
14407 description: r##"# `register_tool`
14408
14409The tracking issue for this feature is: [#66079]
14410
14411[#66079]: https://github.com/rust-lang/rust/issues/66079
14412
14413------------------------
14414
14415The `register_tool` language feature informs the compiler that attributes in your code are meant to be used with tools other than the compiler itself. This can be useful if your code has semantic meaning without the external tool, but enables additional features when the tool is present.
14416
14417`register_tool` also allows configuring lint levels for external tools.
14418
14419Tool attributes are only meant for ignorable attributes. If your code *changes* meaning when the attribute is present, it should not use a tool attribute (because it cannot be compiled with anything other than the external tool, and in a sense is a fork of the language).
14420
14421------------------------
14422
14423`#![register_tool(tool)]` is an attribute, and is only valid at the crate root.
14424Attributes using the registered tool are checked for valid syntax, and lint attributes are checked to be in a valid format. However, the compiler cannot validate the semantics of the attribute, nor can it tell whether the configured lint is present in the external tool.
14425
14426Semantically, `clippy::*`, `rustdoc::*`, and `rustfmt::*` lints and attributes all behave as if `#![register_tool(clippy, rustdoc, rustfmt)]` were injected into the crate root, except that the `rustdoc` namespace can only be used for lints, not for attributes.
14427When compiling with `-Z unstable-features`, `rustc::*` lints can also be used. Like `rustdoc`, the `rustc` namespace can only be used with lints, not attributes.
14428
14429The compiler will emit an error if it encounters a lint/attribute whose namespace isn't a registered tool.
14430
14431Tool namespaces cannot be nested; `register_tool(main_tool::subtool)` is an error.
14432
14433## Examples
14434
14435Tool attributes:
14436
14437```rust
14438#![feature(register_tool)]
14439#![register_tool(c2rust)]
14440
14441// Mark which C header file this module was generated from.
14442#[c2rust::header_src = "operations.h"]
14443pub mod operations_h {
14444 use std::ffi::c_int;
14445
14446 // Mark which source line this struct was generated from.
14447 #[c2rust::src_loc = "11:0"]
14448 pub struct Point {
14449 pub x: c_int,
14450 pub y: c_int,
14451 }
14452}
14453```
14454
14455Tool lints:
14456
14457```
14458#![feature(register_tool)]
14459#![register_tool(bevy)]
14460#![deny(bevy::duplicate_bevy_dependencies)]
14461```
14462"##,
14463 default_severity: Severity::Allow,
14464 warn_since: None,
14465 deny_since: None,
14466 },
14467 Lint {
14468 label: "rename_noreplace",
14469 description: r##"# `rename_noreplace`
14470
14471
14472
14473The tracking issue for this feature is: [#161427]
14474
14475[#161427]: https://github.com/rust-lang/rust/issues/161427
14476
14477------------------------
14478"##,
14479 default_severity: Severity::Allow,
14480 warn_since: None,
14481 deny_since: None,
14482 },
14483 Lint {
14484 label: "repr_simd",
14485 description: r##"# `repr_simd`
14486
14487Allows `repr(simd)` and importing the various simd intrinsics.
14488
14489The tracking issue for this feature is: [#27731]
14490
14491[#27731]: https://github.com/rust-lang/rust/issues/27731
14492
14493------------------------
14494"##,
14495 default_severity: Severity::Allow,
14496 warn_since: None,
14497 deny_since: None,
14498 },
14499 Lint {
14500 label: "restricted_std",
14501 description: r##"# `restricted_std`
14502
14503
14504
14505This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
14506
14507------------------------
14508"##,
14509 default_severity: Severity::Allow,
14510 warn_since: None,
14511 deny_since: None,
14512 },
14513 Lint {
14514 label: "return_address",
14515 description: r##"# `return_address`
14516
14517
14518
14519The tracking issue for this feature is: [#154966]
14520
14521[#154966]: https://github.com/rust-lang/rust/issues/154966
14522
14523------------------------
14524"##,
14525 default_severity: Severity::Allow,
14526 warn_since: None,
14527 deny_since: None,
14528 },
14529 Lint {
14530 label: "return_type_notation",
14531 description: r##"# `return_type_notation`
14532
14533Allows bounding the return type of AFIT/RPITIT.
14534
14535The tracking issue for this feature is: [#109417]
14536
14537[#109417]: https://github.com/rust-lang/rust/issues/109417
14538
14539------------------------
14540"##,
14541 default_severity: Severity::Allow,
14542 warn_since: None,
14543 deny_since: None,
14544 },
14545 Lint {
14546 label: "rev_into_inner",
14547 description: r##"# `rev_into_inner`
14548
14549
14550
14551The tracking issue for this feature is: [#144277]
14552
14553[#144277]: https://github.com/rust-lang/rust/issues/144277
14554
14555------------------------
14556"##,
14557 default_severity: Severity::Allow,
14558 warn_since: None,
14559 deny_since: None,
14560 },
14561 Lint {
14562 label: "riscv_target_feature",
14563 description: r##"# `riscv_target_feature`
14564
14565Target features on riscv.
14566
14567The tracking issue for this feature is: [#150257]
14568
14569[#150257]: https://github.com/rust-lang/rust/issues/150257
14570
14571------------------------
14572"##,
14573 default_severity: Severity::Allow,
14574 warn_since: None,
14575 deny_since: None,
14576 },
14577 Lint {
14578 label: "rt",
14579 description: r##"# `rt`
14580
14581This feature is internal to the Rust compiler and is not intended for general use.
14582
14583------------------------
14584"##,
14585 default_severity: Severity::Allow,
14586 warn_since: None,
14587 deny_since: None,
14588 },
14589 Lint {
14590 label: "rtm_target_feature",
14591 description: r##"# `rtm_target_feature`
14592
14593The rtm target feature on x86.
14594
14595The tracking issue for this feature is: [#150258]
14596
14597[#150258]: https://github.com/rust-lang/rust/issues/150258
14598
14599------------------------
14600"##,
14601 default_severity: Severity::Allow,
14602 warn_since: None,
14603 deny_since: None,
14604 },
14605 Lint {
14606 label: "rust_cold_cc",
14607 description: r##"# `rust_cold_cc`
14608
14609Allows `extern "rust-cold"`.
14610
14611The tracking issue for this feature is: [#97544]
14612
14613[#97544]: https://github.com/rust-lang/rust/issues/97544
14614
14615------------------------
14616"##,
14617 default_severity: Severity::Allow,
14618 warn_since: None,
14619 deny_since: None,
14620 },
14621 Lint {
14622 label: "rust_preserve_none_cc",
14623 description: r##"# `rust_preserve_none_cc`
14624
14625Allows `extern "rust-preserve-none"`.
14626
14627The tracking issue for this feature is: [#151401]
14628
14629[#151401]: https://github.com/rust-lang/rust/issues/151401
14630
14631------------------------
14632"##,
14633 default_severity: Severity::Allow,
14634 warn_since: None,
14635 deny_since: None,
14636 },
14637 Lint {
14638 label: "rust_tail_cc",
14639 description: r##"# `rust_tail_cc`
14640
14641Allows `extern "tail"`.
14642
14643The tracking issue for this feature is: [#157427]
14644
14645[#157427]: https://github.com/rust-lang/rust/issues/157427
14646
14647------------------------
14648"##,
14649 default_severity: Severity::Allow,
14650 warn_since: None,
14651 deny_since: None,
14652 },
14653 Lint {
14654 label: "rustc_attrs",
14655 description: r##"# `rustc_attrs`
14656
14657This feature has no tracking issue, and is therefore internal to
14658the compiler, not being intended for general use.
14659
14660Note: `rustc_attrs` enables many rustc-internal attributes and this page
14661only discuss a few of them.
14662
14663------------------------
14664
14665The `rustc_attrs` feature allows debugging rustc type layouts by using
14666`#[rustc_dump_layout(...)]` to debug layout at compile time (it even works
14667with `cargo check`) as an alternative to `rustc -Z print-type-sizes`
14668that is way more verbose.
14669
14670Options provided by `#[rustc_dump_layout(...)]` are `backend_repr`, `align`,
14671`debug`, `homogeneous_aggregate` and `size`.
14672Note that it only works on sized types without generics.
14673
14674## Examples
14675
14676```rust,compile_fail
14677#![feature(rustc_attrs)]
14678
14679#[rustc_dump_layout(backend_repr, size)]
14680pub enum X {
14681 Y(u8, u8, u8),
14682 Z(isize),
14683}
14684```
14685
14686When that is compiled, the compiler will error with something like
14687
14688```text
14689error: backend_repr: Aggregate { sized: true }
14690 --> src/lib.rs:4:1
14691 |
146924 | / pub enum T {
146935 | | Y(u8, u8, u8),
146946 | | Z(isize),
146957 | | }
14696 | |_^
14697
14698error: size: Size { raw: 16 }
14699 --> src/lib.rs:4:1
14700 |
147014 | / pub enum T {
147025 | | Y(u8, u8, u8),
147036 | | Z(isize),
147047 | | }
14705 | |_^
14706
14707error: aborting due to 2 previous errors
14708```
14709"##,
14710 default_severity: Severity::Allow,
14711 warn_since: None,
14712 deny_since: None,
14713 },
14714 Lint {
14715 label: "rustc_private",
14716 description: r##"# `rustc_private`
14717
14718The tracking issue for this feature is: [#27812]
14719
14720[#27812]: https://github.com/rust-lang/rust/issues/27812
14721
14722------------------------
14723
14724This feature allows access to unstable internal compiler crates such as `rustc_driver`.
14725
14726The presence of this feature changes the way the linkage format for dylibs is calculated in a way
14727that is necessary for linking against dylibs that statically link `std` (such as `rustc_driver`).
14728This makes this feature "viral" in linkage; its use in a given crate makes its use required in
14729dependent crates which link to it (including integration tests, which are built as separate crates).
14730
14731## Common linker failures related to missing LLVM libraries
14732
14733### When using `rustc-private` with Official Toolchains
14734
14735When using the `rustc_private` feature with official toolchains distributed via rustup, you'll need to install:
14736
147371. The `rustc-dev` component (provides compiler libraries)
147382. The `llvm-tools` component (provides LLVM libraries needed for linking)
14739
14740You can install these components using `rustup`:
14741
14742```text
14743rustup component add rustc-dev llvm-tools
14744```
14745
14746Without the `llvm-tools` component, you may encounter linking errors like:
14747
14748```text
14749error: linking with `cc` failed: exit status: 1
14750 |
14751 = note: rust-lld: error: unable to find library -lLLVM-{version}
14752```
14753
14754### When using `rustc-private` with Custom Toolchains
14755
14756For custom-built toolchains or environments not using rustup, different configuration may be required:
14757
14758- Ensure LLVM libraries are available in your library search paths
14759- You might need to configure library paths explicitly depending on your LLVM installation
14760"##,
14761 default_severity: Severity::Allow,
14762 warn_since: None,
14763 deny_since: None,
14764 },
14765 Lint {
14766 label: "rustdoc_internals",
14767 description: r##"# `rustdoc_internals`
14768
14769Allows using internal rustdoc features like `doc(keyword)`.
14770
14771The tracking issue for this feature is: [#90418]
14772
14773[#90418]: https://github.com/rust-lang/rust/issues/90418
14774
14775------------------------
14776"##,
14777 default_severity: Severity::Allow,
14778 warn_since: None,
14779 deny_since: None,
14780 },
14781 Lint {
14782 label: "rustdoc_missing_doc_code_examples",
14783 description: r##"# `rustdoc_missing_doc_code_examples`
14784
14785Allows using the `rustdoc::missing_doc_code_examples` lint
14786
14787The tracking issue for this feature is: [#101730]
14788
14789[#101730]: https://github.com/rust-lang/rust/issues/101730
14790
14791------------------------
14792"##,
14793 default_severity: Severity::Allow,
14794 warn_since: None,
14795 deny_since: None,
14796 },
14797 Lint {
14798 label: "rwlock_data_ptr",
14799 description: r##"# `rwlock_data_ptr`
14800
14801
14802
14803The tracking issue for this feature is: [#140368]
14804
14805[#140368]: https://github.com/rust-lang/rust/issues/140368
14806
14807------------------------
14808"##,
14809 default_severity: Severity::Allow,
14810 warn_since: None,
14811 deny_since: None,
14812 },
14813 Lint {
14814 label: "s390x_target_feature",
14815 description: r##"# `s390x_target_feature`
14816
14817Target features on s390x.
14818
14819The tracking issue for this feature is: [#150259]
14820
14821[#150259]: https://github.com/rust-lang/rust/issues/150259
14822
14823------------------------
14824"##,
14825 default_severity: Severity::Allow,
14826 warn_since: None,
14827 deny_since: None,
14828 },
14829 Lint {
14830 label: "sanitize",
14831 description: r##"# `sanitize`
14832
14833The tracking issue for this feature is: [#39699]
14834
14835[#39699]: https://github.com/rust-lang/rust/issues/39699
14836
14837------------------------
14838
14839The `sanitize` attribute can be used to selectively disable or enable sanitizer
14840instrumentation in an annotated function. This might be useful to: avoid
14841instrumentation overhead in a performance critical function, or avoid
14842instrumenting code that contains constructs unsupported by given sanitizer.
14843
14844The precise effect of this annotation depends on particular sanitizer in use.
14845For example, with `sanitize(thread = "off")`, the thread sanitizer will no
14846longer instrument non-atomic store / load operations, but it will instrument
14847atomic operations to avoid reporting false positives and provide meaning full
14848stack traces.
14849
14850This attribute was previously named `no_sanitize`.
14851
14852## Examples
14853
14854``` rust
14855#![feature(sanitize)]
14856
14857#[sanitize(address = "off")]
14858fn foo() {
14859 // ...
14860}
14861```
14862
14863It is also possible to disable sanitizers for entire modules and enable them
14864for single items or functions.
14865
14866```rust
14867#![feature(sanitize)]
14868
14869#[sanitize(address = "off")]
14870mod foo {
14871 fn unsanitized() {
14872 // ...
14873 }
14874
14875 #[sanitize(address = "on")]
14876 fn sanitized() {
14877 // ...
14878 }
14879}
14880```
14881
14882It's also applicable to impl blocks.
14883
14884```rust
14885#![feature(sanitize)]
14886
14887trait MyTrait {
14888 fn foo(&self);
14889 fn bar(&self);
14890}
14891
14892#[sanitize(address = "off")]
14893impl MyTrait for () {
14894 fn foo(&self) {
14895 // ...
14896 }
14897
14898 #[sanitize(address = "on")]
14899 fn bar(&self) {
14900 // ...
14901 }
14902}
14903```
14904"##,
14905 default_severity: Severity::Allow,
14906 warn_since: None,
14907 deny_since: None,
14908 },
14909 Lint {
14910 label: "seek_io_take_position",
14911 description: r##"# `seek_io_take_position`
14912
14913
14914
14915The tracking issue for this feature is: [#97227]
14916
14917[#97227]: https://github.com/rust-lang/rust/issues/97227
14918
14919------------------------
14920"##,
14921 default_severity: Severity::Allow,
14922 warn_since: None,
14923 deny_since: None,
14924 },
14925 Lint {
14926 label: "seek_read_exact_seek_write_all",
14927 description: r##"# `seek_read_exact_seek_write_all`
14928
14929
14930
14931The tracking issue for this feature is: [#162868]
14932
14933[#162868]: https://github.com/rust-lang/rust/issues/162868
14934
14935------------------------
14936"##,
14937 default_severity: Severity::Allow,
14938 warn_since: None,
14939 deny_since: None,
14940 },
14941 Lint {
14942 label: "seek_stream_len",
14943 description: r##"# `seek_stream_len`
14944
14945
14946
14947The tracking issue for this feature is: [#59359]
14948
14949[#59359]: https://github.com/rust-lang/rust/issues/59359
14950
14951------------------------
14952"##,
14953 default_severity: Severity::Allow,
14954 warn_since: None,
14955 deny_since: None,
14956 },
14957 Lint {
14958 label: "set_permissions_nofollow",
14959 description: r##"# `set_permissions_nofollow`
14960
14961
14962
14963The tracking issue for this feature is: [#141607]
14964
14965[#141607]: https://github.com/rust-lang/rust/issues/141607
14966
14967------------------------
14968"##,
14969 default_severity: Severity::Allow,
14970 warn_since: None,
14971 deny_since: None,
14972 },
14973 Lint {
14974 label: "set_ptr_value",
14975 description: r##"# `set_ptr_value`
14976
14977
14978
14979The tracking issue for this feature is: [#75091]
14980
14981[#75091]: https://github.com/rust-lang/rust/issues/75091
14982
14983------------------------
14984"##,
14985 default_severity: Severity::Allow,
14986 warn_since: None,
14987 deny_since: None,
14988 },
14989 Lint {
14990 label: "setgroups",
14991 description: r##"# `setgroups`
14992
14993
14994
14995The tracking issue for this feature is: [#90747]
14996
14997[#90747]: https://github.com/rust-lang/rust/issues/90747
14998
14999------------------------
15000"##,
15001 default_severity: Severity::Allow,
15002 warn_since: None,
15003 deny_since: None,
15004 },
15005 Lint {
15006 label: "sgx_platform",
15007 description: r##"# `sgx_platform`
15008
15009
15010
15011The tracking issue for this feature is: [#56975]
15012
15013[#56975]: https://github.com/rust-lang/rust/issues/56975
15014
15015------------------------
15016"##,
15017 default_severity: Severity::Allow,
15018 warn_since: None,
15019 deny_since: None,
15020 },
15021 Lint {
15022 label: "share_trait",
15023 description: r##"# `share_trait`
15024
15025
15026
15027The tracking issue for this feature is: [#156756]
15028
15029[#156756]: https://github.com/rust-lang/rust/issues/156756
15030
15031------------------------
15032"##,
15033 default_severity: Severity::Allow,
15034 warn_since: None,
15035 deny_since: None,
15036 },
15037 Lint {
15038 label: "signed_bigint_helpers",
15039 description: r##"# `signed_bigint_helpers`
15040
15041
15042
15043The tracking issue for this feature is: [#151989]
15044
15045[#151989]: https://github.com/rust-lang/rust/issues/151989
15046
15047------------------------
15048"##,
15049 default_severity: Severity::Allow,
15050 warn_since: None,
15051 deny_since: None,
15052 },
15053 Lint {
15054 label: "simd_ffi",
15055 description: r##"# `simd_ffi`
15056
15057Allows the use of SIMD types in functions declared in `extern` blocks.
15058
15059The tracking issue for this feature is: [#27731]
15060
15061[#27731]: https://github.com/rust-lang/rust/issues/27731
15062
15063------------------------
15064"##,
15065 default_severity: Severity::Allow,
15066 warn_since: None,
15067 deny_since: None,
15068 },
15069 Lint {
15070 label: "sized_hierarchy",
15071 description: r##"# `sized_hierarchy`
15072
15073Introduces a hierarchy of `Sized` traits (RFC 3729).
15074
15075The tracking issue for this feature is: [#144404]
15076
15077[#144404]: https://github.com/rust-lang/rust/issues/144404
15078
15079------------------------
15080"##,
15081 default_severity: Severity::Allow,
15082 warn_since: None,
15083 deny_since: None,
15084 },
15085 Lint {
15086 label: "sized_type_properties",
15087 description: r##"# `sized_type_properties`
15088
15089
15090
15091This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
15092
15093------------------------
15094"##,
15095 default_severity: Severity::Allow,
15096 warn_since: None,
15097 deny_since: None,
15098 },
15099 Lint {
15100 label: "slice_concat_ext",
15101 description: r##"# `slice_concat_ext`
15102
15103
15104
15105The tracking issue for this feature is: [#27747]
15106
15107[#27747]: https://github.com/rust-lang/rust/issues/27747
15108
15109------------------------
15110"##,
15111 default_severity: Severity::Allow,
15112 warn_since: None,
15113 deny_since: None,
15114 },
15115 Lint {
15116 label: "slice_concat_trait",
15117 description: r##"# `slice_concat_trait`
15118
15119
15120
15121The tracking issue for this feature is: [#27747]
15122
15123[#27747]: https://github.com/rust-lang/rust/issues/27747
15124
15125------------------------
15126"##,
15127 default_severity: Severity::Allow,
15128 warn_since: None,
15129 deny_since: None,
15130 },
15131 Lint {
15132 label: "slice_from_ptr_range",
15133 description: r##"# `slice_from_ptr_range`
15134
15135
15136
15137The tracking issue for this feature is: [#89792]
15138
15139[#89792]: https://github.com/rust-lang/rust/issues/89792
15140
15141------------------------
15142"##,
15143 default_severity: Severity::Allow,
15144 warn_since: None,
15145 deny_since: None,
15146 },
15147 Lint {
15148 label: "slice_index_methods",
15149 description: r##"# `slice_index_methods`
15150
15151
15152
15153This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
15154
15155------------------------
15156"##,
15157 default_severity: Severity::Allow,
15158 warn_since: None,
15159 deny_since: None,
15160 },
15161 Lint {
15162 label: "slice_internals",
15163 description: r##"# `slice_internals`
15164
15165
15166
15167This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
15168
15169------------------------
15170"##,
15171 default_severity: Severity::Allow,
15172 warn_since: None,
15173 deny_since: None,
15174 },
15175 Lint {
15176 label: "slice_iter_mut_as_mut_slice",
15177 description: r##"# `slice_iter_mut_as_mut_slice`
15178
15179
15180
15181The tracking issue for this feature is: [#93079]
15182
15183[#93079]: https://github.com/rust-lang/rust/issues/93079
15184
15185------------------------
15186"##,
15187 default_severity: Severity::Allow,
15188 warn_since: None,
15189 deny_since: None,
15190 },
15191 Lint {
15192 label: "slice_partial_sort_unstable",
15193 description: r##"# `slice_partial_sort_unstable`
15194
15195
15196
15197The tracking issue for this feature is: [#149046]
15198
15199[#149046]: https://github.com/rust-lang/rust/issues/149046
15200
15201------------------------
15202"##,
15203 default_severity: Severity::Allow,
15204 warn_since: None,
15205 deny_since: None,
15206 },
15207 Lint {
15208 label: "slice_partition_dedup",
15209 description: r##"# `slice_partition_dedup`
15210
15211
15212
15213The tracking issue for this feature is: [#54279]
15214
15215[#54279]: https://github.com/rust-lang/rust/issues/54279
15216
15217------------------------
15218"##,
15219 default_severity: Severity::Allow,
15220 warn_since: None,
15221 deny_since: None,
15222 },
15223 Lint {
15224 label: "slice_pattern",
15225 description: r##"# `slice_pattern`
15226
15227
15228
15229The tracking issue for this feature is: [#56345]
15230
15231[#56345]: https://github.com/rust-lang/rust/issues/56345
15232
15233------------------------
15234"##,
15235 default_severity: Severity::Allow,
15236 warn_since: None,
15237 deny_since: None,
15238 },
15239 Lint {
15240 label: "slice_ptr_get",
15241 description: r##"# `slice_ptr_get`
15242
15243
15244
15245The tracking issue for this feature is: [#74265]
15246
15247[#74265]: https://github.com/rust-lang/rust/issues/74265
15248
15249------------------------
15250"##,
15251 default_severity: Severity::Allow,
15252 warn_since: None,
15253 deny_since: None,
15254 },
15255 Lint {
15256 label: "slice_range",
15257 description: r##"# `slice_range`
15258
15259
15260
15261The tracking issue for this feature is: [#76393]
15262
15263[#76393]: https://github.com/rust-lang/rust/issues/76393
15264
15265------------------------
15266"##,
15267 default_severity: Severity::Allow,
15268 warn_since: None,
15269 deny_since: None,
15270 },
15271 Lint {
15272 label: "slice_shift",
15273 description: r##"# `slice_shift`
15274
15275
15276
15277The tracking issue for this feature is: [#151772]
15278
15279[#151772]: https://github.com/rust-lang/rust/issues/151772
15280
15281------------------------
15282"##,
15283 default_severity: Severity::Allow,
15284 warn_since: None,
15285 deny_since: None,
15286 },
15287 Lint {
15288 label: "slice_split_once",
15289 description: r##"# `slice_split_once`
15290
15291
15292
15293The tracking issue for this feature is: [#112811]
15294
15295[#112811]: https://github.com/rust-lang/rust/issues/112811
15296
15297------------------------
15298"##,
15299 default_severity: Severity::Allow,
15300 warn_since: None,
15301 deny_since: None,
15302 },
15303 Lint {
15304 label: "slice_swap_unchecked",
15305 description: r##"# `slice_swap_unchecked`
15306
15307
15308
15309The tracking issue for this feature is: [#88539]
15310
15311[#88539]: https://github.com/rust-lang/rust/issues/88539
15312
15313------------------------
15314"##,
15315 default_severity: Severity::Allow,
15316 warn_since: None,
15317 deny_since: None,
15318 },
15319 Lint {
15320 label: "sliceindex_wrappers",
15321 description: r##"# `sliceindex_wrappers`
15322
15323
15324
15325The tracking issue for this feature is: [#146179]
15326
15327[#146179]: https://github.com/rust-lang/rust/issues/146179
15328
15329------------------------
15330"##,
15331 default_severity: Severity::Allow,
15332 warn_since: None,
15333 deny_since: None,
15334 },
15335 Lint {
15336 label: "smart_pointer_try_map",
15337 description: r##"# `smart_pointer_try_map`
15338
15339
15340
15341The tracking issue for this feature is: [#144419]
15342
15343[#144419]: https://github.com/rust-lang/rust/issues/144419
15344
15345------------------------
15346"##,
15347 default_severity: Severity::Allow,
15348 warn_since: None,
15349 deny_since: None,
15350 },
15351 Lint {
15352 label: "solid_ext",
15353 description: r##"# `solid_ext`
15354
15355
15356
15357This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
15358
15359------------------------
15360"##,
15361 default_severity: Severity::Allow,
15362 warn_since: None,
15363 deny_since: None,
15364 },
15365 Lint {
15366 label: "sort_floats",
15367 description: r##"# `sort_floats`
15368
15369
15370
15371The tracking issue for this feature is: [#93396]
15372
15373[#93396]: https://github.com/rust-lang/rust/issues/93396
15374
15375------------------------
15376"##,
15377 default_severity: Severity::Allow,
15378 warn_since: None,
15379 deny_since: None,
15380 },
15381 Lint {
15382 label: "sparc_target_feature",
15383 description: r##"# `sparc_target_feature`
15384
15385Target features on sparc.
15386
15387The tracking issue for this feature is: [#132783]
15388
15389[#132783]: https://github.com/rust-lang/rust/issues/132783
15390
15391------------------------
15392"##,
15393 default_severity: Severity::Allow,
15394 warn_since: None,
15395 deny_since: None,
15396 },
15397 Lint {
15398 label: "specialization",
15399 description: r##"# `specialization`
15400
15401Allows specialization of implementations (RFC 1210).
15402
15403The tracking issue for this feature is: [#31844]
15404
15405[#31844]: https://github.com/rust-lang/rust/issues/31844
15406
15407------------------------
15408"##,
15409 default_severity: Severity::Allow,
15410 warn_since: None,
15411 deny_since: None,
15412 },
15413 Lint {
15414 label: "splat",
15415 description: r##"# `splat`
15416
15417Experimental "splatting" of function call arguments at the call site. e.g. `foo(a, b, c)` calls `#[rustc_splat] fn foo((a: A, b: B, c: C))`.
15418
15419The tracking issue for this feature is: [#153629]
15420
15421[#153629]: https://github.com/rust-lang/rust/issues/153629
15422
15423------------------------
15424"##,
15425 default_severity: Severity::Allow,
15426 warn_since: None,
15427 deny_since: None,
15428 },
15429 Lint {
15430 label: "split_array",
15431 description: r##"# `split_array`
15432
15433
15434
15435The tracking issue for this feature is: [#90091]
15436
15437[#90091]: https://github.com/rust-lang/rust/issues/90091
15438
15439------------------------
15440"##,
15441 default_severity: Severity::Allow,
15442 warn_since: None,
15443 deny_since: None,
15444 },
15445 Lint {
15446 label: "split_as_slice",
15447 description: r##"# `split_as_slice`
15448
15449
15450
15451The tracking issue for this feature is: [#96137]
15452
15453[#96137]: https://github.com/rust-lang/rust/issues/96137
15454
15455------------------------
15456"##,
15457 default_severity: Severity::Allow,
15458 warn_since: None,
15459 deny_since: None,
15460 },
15461 Lint {
15462 label: "staged_api",
15463 description: r##"# `staged_api`
15464
15465Allows using the `#[stable]` and `#[unstable]` attributes.
15466
15467This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
15468
15469------------------------
15470"##,
15471 default_severity: Severity::Allow,
15472 warn_since: None,
15473 deny_since: None,
15474 },
15475 Lint {
15476 label: "static_align",
15477 description: r##"# `static_align`
15478
15479Allows using `#[rustc_align_static(...)]` on static items.
15480
15481The tracking issue for this feature is: [#146177]
15482
15483[#146177]: https://github.com/rust-lang/rust/issues/146177
15484
15485------------------------
15486"##,
15487 default_severity: Severity::Allow,
15488 warn_since: None,
15489 deny_since: None,
15490 },
15491 Lint {
15492 label: "std_internals",
15493 description: r##"# `std_internals`
15494
15495
15496
15497This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
15498
15499------------------------
15500"##,
15501 default_severity: Severity::Allow,
15502 warn_since: None,
15503 deny_since: None,
15504 },
15505 Lint {
15506 label: "stdarch_aarch64_feature_detection",
15507 description: r##"# `stdarch_aarch64_feature_detection`
15508
15509
15510
15511The tracking issue for this feature is: [#127764]
15512
15513[#127764]: https://github.com/rust-lang/rust/issues/127764
15514
15515------------------------
15516"##,
15517 default_severity: Severity::Allow,
15518 warn_since: None,
15519 deny_since: None,
15520 },
15521 Lint {
15522 label: "stdarch_arm_feature_detection",
15523 description: r##"# `stdarch_arm_feature_detection`
15524
15525
15526
15527The tracking issue for this feature is: [#111190]
15528
15529[#111190]: https://github.com/rust-lang/rust/issues/111190
15530
15531------------------------
15532"##,
15533 default_severity: Severity::Allow,
15534 warn_since: None,
15535 deny_since: None,
15536 },
15537 Lint {
15538 label: "stdarch_internal",
15539 description: r##"# `stdarch_internal`
15540
15541
15542
15543This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
15544
15545------------------------
15546"##,
15547 default_severity: Severity::Allow,
15548 warn_since: None,
15549 deny_since: None,
15550 },
15551 Lint {
15552 label: "stdarch_loongarch_feature_detection",
15553 description: r##"# `stdarch_loongarch_feature_detection`
15554
15555
15556
15557The tracking issue for this feature is: [#117425]
15558
15559[#117425]: https://github.com/rust-lang/rust/issues/117425
15560
15561------------------------
15562"##,
15563 default_severity: Severity::Allow,
15564 warn_since: None,
15565 deny_since: None,
15566 },
15567 Lint {
15568 label: "stdarch_mips_feature_detection",
15569 description: r##"# `stdarch_mips_feature_detection`
15570
15571
15572
15573The tracking issue for this feature is: [#111188]
15574
15575[#111188]: https://github.com/rust-lang/rust/issues/111188
15576
15577------------------------
15578"##,
15579 default_severity: Severity::Allow,
15580 warn_since: None,
15581 deny_since: None,
15582 },
15583 Lint {
15584 label: "stdarch_powerpc_feature_detection",
15585 description: r##"# `stdarch_powerpc_feature_detection`
15586
15587
15588
15589The tracking issue for this feature is: [#111191]
15590
15591[#111191]: https://github.com/rust-lang/rust/issues/111191
15592
15593------------------------
15594"##,
15595 default_severity: Severity::Allow,
15596 warn_since: None,
15597 deny_since: None,
15598 },
15599 Lint {
15600 label: "stdarch_riscv_feature_detection",
15601 description: r##"# `stdarch_riscv_feature_detection`
15602
15603
15604
15605The tracking issue for this feature is: [#111192]
15606
15607[#111192]: https://github.com/rust-lang/rust/issues/111192
15608
15609------------------------
15610"##,
15611 default_severity: Severity::Allow,
15612 warn_since: None,
15613 deny_since: None,
15614 },
15615 Lint {
15616 label: "stdio_fd_consts",
15617 description: r##"# `stdio_fd_consts`
15618
15619
15620
15621The tracking issue for this feature is: [#150836]
15622
15623[#150836]: https://github.com/rust-lang/rust/issues/150836
15624
15625------------------------
15626"##,
15627 default_severity: Severity::Allow,
15628 warn_since: None,
15629 deny_since: None,
15630 },
15631 Lint {
15632 label: "stdio_makes_pipe",
15633 description: r##"# `stdio_makes_pipe`
15634
15635
15636
15637The tracking issue for this feature is: [#98288]
15638
15639[#98288]: https://github.com/rust-lang/rust/issues/98288
15640
15641------------------------
15642"##,
15643 default_severity: Severity::Allow,
15644 warn_since: None,
15645 deny_since: None,
15646 },
15647 Lint {
15648 label: "stdio_swap",
15649 description: r##"# `stdio_swap`
15650
15651
15652
15653The tracking issue for this feature is: [#150667]
15654
15655[#150667]: https://github.com/rust-lang/rust/issues/150667
15656
15657------------------------
15658"##,
15659 default_severity: Severity::Allow,
15660 warn_since: None,
15661 deny_since: None,
15662 },
15663 Lint {
15664 label: "step_trait",
15665 description: r##"# `step_trait`
15666
15667
15668
15669The tracking issue for this feature is: [#42168]
15670
15671[#42168]: https://github.com/rust-lang/rust/issues/42168
15672
15673------------------------
15674"##,
15675 default_severity: Severity::Allow,
15676 warn_since: None,
15677 deny_since: None,
15678 },
15679 Lint {
15680 label: "stmt_expr_attributes",
15681 description: r##"# `stmt_expr_attributes`
15682
15683Allows attributes on expressions and non-item statements.
15684
15685The tracking issue for this feature is: [#15701]
15686
15687[#15701]: https://github.com/rust-lang/rust/issues/15701
15688
15689------------------------
15690"##,
15691 default_severity: Severity::Allow,
15692 warn_since: None,
15693 deny_since: None,
15694 },
15695 Lint {
15696 label: "str_as_str",
15697 description: r##"# `str_as_str`
15698
15699
15700
15701The tracking issue for this feature is: [#130366]
15702
15703[#130366]: https://github.com/rust-lang/rust/issues/130366
15704
15705------------------------
15706"##,
15707 default_severity: Severity::Allow,
15708 warn_since: None,
15709 deny_since: None,
15710 },
15711 Lint {
15712 label: "str_copy_from_str",
15713 description: r##"# `str_copy_from_str`
15714
15715
15716
15717The tracking issue for this feature is: [#159841]
15718
15719[#159841]: https://github.com/rust-lang/rust/issues/159841
15720
15721------------------------
15722"##,
15723 default_severity: Severity::Allow,
15724 warn_since: None,
15725 deny_since: None,
15726 },
15727 Lint {
15728 label: "str_from_raw_parts",
15729 description: r##"# `str_from_raw_parts`
15730
15731
15732
15733The tracking issue for this feature is: [#119206]
15734
15735[#119206]: https://github.com/rust-lang/rust/issues/119206
15736
15737------------------------
15738"##,
15739 default_severity: Severity::Allow,
15740 warn_since: None,
15741 deny_since: None,
15742 },
15743 Lint {
15744 label: "str_internals",
15745 description: r##"# `str_internals`
15746
15747This feature is internal to the Rust compiler and is not intended for general use.
15748
15749------------------------
15750"##,
15751 default_severity: Severity::Allow,
15752 warn_since: None,
15753 deny_since: None,
15754 },
15755 Lint {
15756 label: "str_lines_remainder",
15757 description: r##"# `str_lines_remainder`
15758
15759
15760
15761The tracking issue for this feature is: [#77998]
15762
15763[#77998]: https://github.com/rust-lang/rust/issues/77998
15764
15765------------------------
15766"##,
15767 default_severity: Severity::Allow,
15768 warn_since: None,
15769 deny_since: None,
15770 },
15771 Lint {
15772 label: "str_split_inclusive_remainder",
15773 description: r##"# `str_split_inclusive_remainder`
15774
15775
15776
15777The tracking issue for this feature is: [#77998]
15778
15779[#77998]: https://github.com/rust-lang/rust/issues/77998
15780
15781------------------------
15782"##,
15783 default_severity: Severity::Allow,
15784 warn_since: None,
15785 deny_since: None,
15786 },
15787 Lint {
15788 label: "str_split_remainder",
15789 description: r##"# `str_split_remainder`
15790
15791
15792
15793The tracking issue for this feature is: [#77998]
15794
15795[#77998]: https://github.com/rust-lang/rust/issues/77998
15796
15797------------------------
15798"##,
15799 default_severity: Severity::Allow,
15800 warn_since: None,
15801 deny_since: None,
15802 },
15803 Lint {
15804 label: "str_split_whitespace_remainder",
15805 description: r##"# `str_split_whitespace_remainder`
15806
15807
15808
15809The tracking issue for this feature is: [#77998]
15810
15811[#77998]: https://github.com/rust-lang/rust/issues/77998
15812
15813------------------------
15814"##,
15815 default_severity: Severity::Allow,
15816 warn_since: None,
15817 deny_since: None,
15818 },
15819 Lint {
15820 label: "strict_provenance_lints",
15821 description: r##"# `strict_provenance_lints`
15822
15823The tracking issue for this feature is: [#130351]
15824
15825[#130351]: https://github.com/rust-lang/rust/issues/130351
15826-----
15827
15828The `strict_provenance_lints` feature allows to enable the `implicit_provenance_casts` lint.
15829
15830## Example
15831
15832```rust
15833#![feature(strict_provenance_lints)]
15834#![warn(implicit_provenance_casts)]
15835
15836fn main() {
15837 let dangling = 16_usize as *const u8;
15838 //~^ WARNING: cast from `usize` to `*const u8` implicitly relies on exposed provenance
15839 let _addr = dangling as usize;
15840 //~^ WARNING: cast from `*const u8` to `usize` implicitly exposes pointer provenance
15841}
15842```
15843"##,
15844 default_severity: Severity::Allow,
15845 warn_since: None,
15846 deny_since: None,
15847 },
15848 Lint {
15849 label: "string_into_chars",
15850 description: r##"# `string_into_chars`
15851
15852
15853
15854The tracking issue for this feature is: [#133125]
15855
15856[#133125]: https://github.com/rust-lang/rust/issues/133125
15857
15858------------------------
15859"##,
15860 default_severity: Severity::Allow,
15861 warn_since: None,
15862 deny_since: None,
15863 },
15864 Lint {
15865 label: "string_remove_matches",
15866 description: r##"# `string_remove_matches`
15867
15868
15869
15870The tracking issue for this feature is: [#72826]
15871
15872[#72826]: https://github.com/rust-lang/rust/issues/72826
15873
15874------------------------
15875"##,
15876 default_severity: Severity::Allow,
15877 warn_since: None,
15878 deny_since: None,
15879 },
15880 Lint {
15881 label: "string_replace_in_place",
15882 description: r##"# `string_replace_in_place`
15883
15884
15885
15886The tracking issue for this feature is: [#147949]
15887
15888[#147949]: https://github.com/rust-lang/rust/issues/147949
15889
15890------------------------
15891"##,
15892 default_severity: Severity::Allow,
15893 warn_since: None,
15894 deny_since: None,
15895 },
15896 Lint {
15897 label: "structural_match",
15898 description: r##"# `structural_match`
15899
15900Allows using `#[structural_match]` which indicates that a type is structurally matchable. FIXME: Subsumed by trait `StructuralPartialEq`, cannot move to removed until a library feature with the same name exists.
15901
15902The tracking issue for this feature is: [#31434]
15903
15904[#31434]: https://github.com/rust-lang/rust/issues/31434
15905
15906------------------------
15907"##,
15908 default_severity: Severity::Allow,
15909 warn_since: None,
15910 deny_since: None,
15911 },
15912 Lint {
15913 label: "super_let",
15914 description: r##"# `super_let`
15915
15916Allows `super let` statements.
15917
15918The tracking issue for this feature is: [#139076]
15919
15920[#139076]: https://github.com/rust-lang/rust/issues/139076
15921
15922------------------------
15923"##,
15924 default_severity: Severity::Allow,
15925 warn_since: None,
15926 deny_since: None,
15927 },
15928 Lint {
15929 label: "supertrait_item_shadowing",
15930 description: r##"# `supertrait_item_shadowing`
15931
15932Allows subtrait items to shadow supertrait items.
15933
15934The tracking issue for this feature is: [#89151]
15935
15936[#89151]: https://github.com/rust-lang/rust/issues/89151
15937
15938------------------------
15939"##,
15940 default_severity: Severity::Allow,
15941 warn_since: None,
15942 deny_since: None,
15943 },
15944 Lint {
15945 label: "sync_nonpoison",
15946 description: r##"# `sync_nonpoison`
15947
15948
15949
15950The tracking issue for this feature is: [#134645]
15951
15952[#134645]: https://github.com/rust-lang/rust/issues/134645
15953
15954------------------------
15955"##,
15956 default_severity: Severity::Allow,
15957 warn_since: None,
15958 deny_since: None,
15959 },
15960 Lint {
15961 label: "sync_poison_mod",
15962 description: r##"# `sync_poison_mod`
15963
15964
15965
15966The tracking issue for this feature is: [#134646]
15967
15968[#134646]: https://github.com/rust-lang/rust/issues/134646
15969
15970------------------------
15971"##,
15972 default_severity: Severity::Allow,
15973 warn_since: None,
15974 deny_since: None,
15975 },
15976 Lint {
15977 label: "sync_unsafe_cell",
15978 description: r##"# `sync_unsafe_cell`
15979
15980
15981
15982The tracking issue for this feature is: [#95439]
15983
15984[#95439]: https://github.com/rust-lang/rust/issues/95439
15985
15986------------------------
15987"##,
15988 default_severity: Severity::Allow,
15989 warn_since: None,
15990 deny_since: None,
15991 },
15992 Lint {
15993 label: "tcp_deferaccept",
15994 description: r##"# `tcp_deferaccept`
15995
15996
15997
15998The tracking issue for this feature is: [#119639]
15999
16000[#119639]: https://github.com/rust-lang/rust/issues/119639
16001
16002------------------------
16003"##,
16004 default_severity: Severity::Allow,
16005 warn_since: None,
16006 deny_since: None,
16007 },
16008 Lint {
16009 label: "tcp_keepalive",
16010 description: r##"# `tcp_keepalive`
16011
16012
16013
16014The tracking issue for this feature is: [#155889]
16015
16016[#155889]: https://github.com/rust-lang/rust/issues/155889
16017
16018------------------------
16019"##,
16020 default_severity: Severity::Allow,
16021 warn_since: None,
16022 deny_since: None,
16023 },
16024 Lint {
16025 label: "tcp_linger",
16026 description: r##"# `tcp_linger`
16027
16028
16029
16030The tracking issue for this feature is: [#88494]
16031
16032[#88494]: https://github.com/rust-lang/rust/issues/88494
16033
16034------------------------
16035"##,
16036 default_severity: Severity::Allow,
16037 warn_since: None,
16038 deny_since: None,
16039 },
16040 Lint {
16041 label: "tcplistener_into_incoming",
16042 description: r##"# `tcplistener_into_incoming`
16043
16044
16045
16046The tracking issue for this feature is: [#88373]
16047
16048[#88373]: https://github.com/rust-lang/rust/issues/88373
16049
16050------------------------
16051"##,
16052 default_severity: Severity::Allow,
16053 warn_since: None,
16054 deny_since: None,
16055 },
16056 Lint {
16057 label: "temporary_niche_types",
16058 description: r##"# `temporary_niche_types`
16059
16060
16061
16062This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
16063
16064------------------------
16065"##,
16066 default_severity: Severity::Allow,
16067 warn_since: None,
16068 deny_since: None,
16069 },
16070 Lint {
16071 label: "test",
16072 description: r##"# `test`
16073
16074The tracking issue for this feature is: None.
16075
16076------------------------
16077
16078The internals of the `test` crate are unstable, behind the `test` flag. The
16079most widely used part of the `test` crate are benchmark tests, which can test
16080the performance of your code. Let's make our `src/lib.rs` look like this
16081(comments elided):
16082
16083```rust,no_run
16084#![feature(test)]
16085
16086extern crate test;
16087
16088pub fn add_two(a: i32) -> i32 {
16089 a + 2
16090}
16091
16092#[cfg(test)]
16093mod tests {
16094 use super::*;
16095 use test::Bencher;
16096
16097 #[test]
16098 fn it_works() {
16099 assert_eq!(4, add_two(2));
16100 }
16101
16102 #[bench]
16103 fn bench_add_two(b: &mut Bencher) {
16104 b.iter(|| add_two(2));
16105 }
16106}
16107```
16108
16109Note the `test` feature gate, which enables this unstable feature.
16110
16111We've imported the `test` crate, which contains our benchmarking support.
16112We have a new function as well, with the `bench` attribute. Unlike regular
16113tests, which take no arguments, benchmark tests take a `&mut Bencher`. This
16114`Bencher` provides an `iter` method, which takes a closure. This closure
16115contains the code we'd like to benchmark.
16116
16117We can run benchmark tests with `cargo bench`:
16118
16119```bash
16120$ cargo bench
16121 Compiling adder v0.0.1 (file:///home/steve/tmp/adder)
16122 Running target/release/adder-91b3e234d4ed382a
16123
16124running 2 tests
16125test tests::it_works ... ignored
16126test tests::bench_add_two ... bench: 1 ns/iter (+/- 0)
16127
16128test result: ok. 0 passed; 0 failed; 1 ignored; 1 measured
16129```
16130
16131Our non-benchmark test was ignored. You may have noticed that `cargo bench`
16132takes a bit longer than `cargo test`. This is because Rust runs our benchmark
16133a number of times, and then takes the average. Because we're doing so little
16134work in this example, we have a `1 ns/iter (+/- 0)`, but this would show
16135the variance if there was one.
16136
16137Advice on writing benchmarks:
16138
16139
16140* Move setup code outside the `iter` loop; only put the part you want to measure inside
16141* Make the code do "the same thing" on each iteration; do not accumulate or change state
16142* Make the outer function idempotent too; the benchmark runner is likely to run
16143 it many times
16144* Make the inner `iter` loop short and fast so benchmark runs are fast and the
16145 calibrator can adjust the run-length at fine resolution
16146* Make the code in the `iter` loop do something simple, to assist in pinpointing
16147 performance improvements (or regressions)
16148
16149## Gotcha: optimizations
16150
16151There's another tricky part to writing benchmarks: benchmarks compiled with
16152optimizations activated can be dramatically changed by the optimizer so that
16153the benchmark is no longer benchmarking what one expects. For example, the
16154compiler might recognize that some calculation has no external effects and
16155remove it entirely.
16156
16157```rust,no_run
16158#![feature(test)]
16159
16160extern crate test;
16161use test::Bencher;
16162
16163#[bench]
16164fn bench_xor_1000_ints(b: &mut Bencher) {
16165 b.iter(|| {
16166 (0..1000).fold(0, |old, new| old ^ new);
16167 });
16168}
16169```
16170
16171gives the following results
16172
16173```text
16174running 1 test
16175test bench_xor_1000_ints ... bench: 0 ns/iter (+/- 0)
16176
16177test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured
16178```
16179
16180The benchmarking runner offers two ways to avoid this. Either, the closure that
16181the `iter` method receives can return an arbitrary value which forces the
16182optimizer to consider the result used and ensures it cannot remove the
16183computation entirely. This could be done for the example above by adjusting the
16184`b.iter` call to
16185
16186```rust
16187# struct X;
16188# impl X { fn iter<T, F>(&self, _: F) where F: FnMut() -> T {} } let b = X;
16189b.iter(|| {
16190 // Note lack of `;` (could also use an explicit `return`).
16191 (0..1000).fold(0, |old, new| old ^ new)
16192});
16193```
16194
16195Or, the other option is to call the generic `test::black_box` function, which
16196is an opaque "black box" to the optimizer and so forces it to consider any
16197argument as used.
16198
16199```rust
16200#![feature(test)]
16201
16202extern crate test;
16203
16204# fn main() {
16205# struct X;
16206# impl X { fn iter<T, F>(&self, _: F) where F: FnMut() -> T {} } let b = X;
16207b.iter(|| {
16208 let n = test::black_box(1000);
16209
16210 (0..n).fold(0, |a, b| a ^ b)
16211})
16212# }
16213```
16214
16215Neither of these read or modify the value, and are very cheap for small values.
16216Larger values can be passed indirectly to reduce overhead (e.g.
16217`black_box(&huge_struct)`).
16218
16219Performing either of the above changes gives the following benchmarking results
16220
16221```text
16222running 1 test
16223test bench_xor_1000_ints ... bench: 131 ns/iter (+/- 3)
16224
16225test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured
16226```
16227
16228However, the optimizer can still modify a testcase in an undesirable manner
16229even when using either of the above.
16230"##,
16231 default_severity: Severity::Allow,
16232 warn_since: None,
16233 deny_since: None,
16234 },
16235 Lint {
16236 label: "test_binder_constraints",
16237 description: r##"# `test_binder_constraints`
16238
16239Perma-unstable, only used in the test suite for binders (`for<'a>`).
16240
16241This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
16242
16243------------------------
16244"##,
16245 default_severity: Severity::Allow,
16246 warn_since: None,
16247 deny_since: None,
16248 },
16249 Lint {
16250 label: "test_incomplete_feature",
16251 description: r##"# `test_incomplete_feature`
16252
16253Perma-unstable, only used to test the `incomplete_features` lint.
16254
16255This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
16256
16257------------------------
16258"##,
16259 default_severity: Severity::Allow,
16260 warn_since: None,
16261 deny_since: None,
16262 },
16263 Lint {
16264 label: "test_unstable_lint",
16265 description: r##"# `test_unstable_lint`
16266
16267Added for testing unstable lints; perma-unstable.
16268
16269This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
16270
16271------------------------
16272"##,
16273 default_severity: Severity::Allow,
16274 warn_since: None,
16275 deny_since: None,
16276 },
16277 Lint {
16278 label: "thin_box",
16279 description: r##"# `thin_box`
16280
16281
16282
16283The tracking issue for this feature is: [#92791]
16284
16285[#92791]: https://github.com/rust-lang/rust/issues/92791
16286
16287------------------------
16288"##,
16289 default_severity: Severity::Allow,
16290 warn_since: None,
16291 deny_since: None,
16292 },
16293 Lint {
16294 label: "thread_id_value",
16295 description: r##"# `thread_id_value`
16296
16297
16298
16299The tracking issue for this feature is: [#67939]
16300
16301[#67939]: https://github.com/rust-lang/rust/issues/67939
16302
16303------------------------
16304"##,
16305 default_severity: Severity::Allow,
16306 warn_since: None,
16307 deny_since: None,
16308 },
16309 Lint {
16310 label: "thread_local",
16311 description: r##"# `thread_local`
16312
16313Allows using `#[thread_local]` on `static` items.
16314
16315The tracking issue for this feature is: [#29594]
16316
16317[#29594]: https://github.com/rust-lang/rust/issues/29594
16318
16319------------------------
16320"##,
16321 default_severity: Severity::Allow,
16322 warn_since: None,
16323 deny_since: None,
16324 },
16325 Lint {
16326 label: "thread_local_internals",
16327 description: r##"# `thread_local_internals`
16328
16329This feature is internal to the Rust compiler and is not intended for general use.
16330
16331------------------------
16332"##,
16333 default_severity: Severity::Allow,
16334 warn_since: None,
16335 deny_since: None,
16336 },
16337 Lint {
16338 label: "thread_os_id",
16339 description: r##"# `thread_os_id`
16340
16341
16342
16343The tracking issue for this feature is: [#160215]
16344
16345[#160215]: https://github.com/rust-lang/rust/issues/160215
16346
16347------------------------
16348"##,
16349 default_severity: Severity::Allow,
16350 warn_since: None,
16351 deny_since: None,
16352 },
16353 Lint {
16354 label: "thread_raw",
16355 description: r##"# `thread_raw`
16356
16357
16358
16359The tracking issue for this feature is: [#97523]
16360
16361[#97523]: https://github.com/rust-lang/rust/issues/97523
16362
16363------------------------
16364"##,
16365 default_severity: Severity::Allow,
16366 warn_since: None,
16367 deny_since: None,
16368 },
16369 Lint {
16370 label: "thread_sleep_until",
16371 description: r##"# `thread_sleep_until`
16372
16373
16374
16375The tracking issue for this feature is: [#113752]
16376
16377[#113752]: https://github.com/rust-lang/rust/issues/113752
16378
16379------------------------
16380"##,
16381 default_severity: Severity::Allow,
16382 warn_since: None,
16383 deny_since: None,
16384 },
16385 Lint {
16386 label: "thread_spawn_hook",
16387 description: r##"# `thread_spawn_hook`
16388
16389
16390
16391The tracking issue for this feature is: [#132951]
16392
16393[#132951]: https://github.com/rust-lang/rust/issues/132951
16394
16395------------------------
16396"##,
16397 default_severity: Severity::Allow,
16398 warn_since: None,
16399 deny_since: None,
16400 },
16401 Lint {
16402 label: "time_saturating_systemtime",
16403 description: r##"# `time_saturating_systemtime`
16404
16405
16406
16407The tracking issue for this feature is: [#151199]
16408
16409[#151199]: https://github.com/rust-lang/rust/issues/151199
16410
16411------------------------
16412"##,
16413 default_severity: Severity::Allow,
16414 warn_since: None,
16415 deny_since: None,
16416 },
16417 Lint {
16418 label: "time_systemtime_limits",
16419 description: r##"# `time_systemtime_limits`
16420
16421
16422
16423The tracking issue for this feature is: [#149067]
16424
16425[#149067]: https://github.com/rust-lang/rust/issues/149067
16426
16427------------------------
16428"##,
16429 default_severity: Severity::Allow,
16430 warn_since: None,
16431 deny_since: None,
16432 },
16433 Lint {
16434 label: "titlecase",
16435 description: r##"# `titlecase`
16436
16437
16438
16439The tracking issue for this feature is: [#153892]
16440
16441[#153892]: https://github.com/rust-lang/rust/issues/153892
16442
16443------------------------
16444"##,
16445 default_severity: Severity::Allow,
16446 warn_since: None,
16447 deny_since: None,
16448 },
16449 Lint {
16450 label: "trace_macros",
16451 description: r##"# `trace_macros`
16452
16453The tracking issue for this feature is [#29598].
16454
16455[#29598]: https://github.com/rust-lang/rust/issues/29598
16456
16457------------------------
16458
16459With `trace_macros` you can trace the expansion of macros in your code.
16460
16461## Examples
16462
16463```rust
16464#![feature(trace_macros)]
16465
16466fn main() {
16467 trace_macros!(true);
16468 println!("Hello, Rust!");
16469 trace_macros!(false);
16470}
16471```
16472
16473The `cargo build` output:
16474
16475```txt
16476note: trace_macro
16477 --> src/main.rs:5:5
16478 |
164795 | println!("Hello, Rust!");
16480 | ^^^^^^^^^^^^^^^^^^^^^^^^^
16481 |
16482 = note: expanding `println! { "Hello, Rust!" }`
16483 = note: to `print ! ( concat ! ( "Hello, Rust!" , "\n" ) )`
16484 = note: expanding `print! { concat ! ( "Hello, Rust!" , "\n" ) }`
16485 = note: to `$crate :: io :: _print ( format_args ! ( concat ! ( "Hello, Rust!" , "\n" ) )
16486 )`
16487
16488 Finished dev [unoptimized + debuginfo] target(s) in 0.60 secs
16489```
16490"##,
16491 default_severity: Severity::Allow,
16492 warn_since: None,
16493 deny_since: None,
16494 },
16495 Lint {
16496 label: "trait_alias",
16497 description: r##"# `trait_alias`
16498
16499The tracking issue for this feature is: [#41517]
16500
16501[#41517]: https://github.com/rust-lang/rust/issues/41517
16502
16503------------------------
16504
16505The `trait_alias` feature adds support for trait aliases. These allow aliases
16506to be created for one or more traits (currently just a single regular trait plus
16507any number of auto-traits), and used wherever traits would normally be used as
16508either bounds or trait objects.
16509
16510```rust
16511#![feature(trait_alias)]
16512
16513trait Foo = std::fmt::Debug + Send;
16514trait Bar = Foo + Sync;
16515
16516// Use trait alias as bound on type parameter.
16517fn foo<T: Foo>(v: &T) {
16518 println!("{:?}", v);
16519}
16520
16521pub fn main() {
16522 foo(&1);
16523
16524 // Use trait alias for trait objects.
16525 let a: &dyn Bar = &123;
16526 println!("{:?}", a);
16527 let b = Box::new(456) as Box<dyn Foo>;
16528 println!("{:?}", b);
16529}
16530```
16531"##,
16532 default_severity: Severity::Allow,
16533 warn_since: None,
16534 deny_since: None,
16535 },
16536 Lint {
16537 label: "transmutability",
16538 description: r##"# `transmutability`
16539
16540
16541
16542The tracking issue for this feature is: [#99571]
16543
16544[#99571]: https://github.com/rust-lang/rust/issues/99571
16545
16546------------------------
16547"##,
16548 default_severity: Severity::Allow,
16549 warn_since: None,
16550 deny_since: None,
16551 },
16552 Lint {
16553 label: "transmute_generic_consts",
16554 description: r##"# `transmute_generic_consts`
16555
16556Allows for transmuting between arrays with sizes that contain generic consts.
16557
16558The tracking issue for this feature is: [#109929]
16559
16560[#109929]: https://github.com/rust-lang/rust/issues/109929
16561
16562------------------------
16563"##,
16564 default_severity: Severity::Allow,
16565 warn_since: None,
16566 deny_since: None,
16567 },
16568 Lint {
16569 label: "transmute_neo",
16570 description: r##"# `transmute_neo`
16571
16572
16573
16574The tracking issue for this feature is: [#155079]
16575
16576[#155079]: https://github.com/rust-lang/rust/issues/155079
16577
16578------------------------
16579"##,
16580 default_severity: Severity::Allow,
16581 warn_since: None,
16582 deny_since: None,
16583 },
16584 Lint {
16585 label: "transmute_prefix",
16586 description: r##"# `transmute_prefix`
16587
16588
16589
16590The tracking issue for this feature is: [#155079]
16591
16592[#155079]: https://github.com/rust-lang/rust/issues/155079
16593
16594------------------------
16595"##,
16596 default_severity: Severity::Allow,
16597 warn_since: None,
16598 deny_since: None,
16599 },
16600 Lint {
16601 label: "transparent_unions",
16602 description: r##"# `transparent_unions`
16603
16604The tracking issue for this feature is [#60405]
16605
16606[#60405]: https://github.com/rust-lang/rust/issues/60405
16607
16608----
16609
16610The `transparent_unions` feature allows you mark `union`s as
16611`#[repr(transparent)]`. A `union` may be `#[repr(transparent)]` in exactly the
16612same conditions in which a `struct` may be `#[repr(transparent)]` (generally,
16613this means the `union` must have exactly one non-zero-sized field). Some
16614concrete illustrations follow.
16615
16616```rust
16617#![feature(transparent_unions)]
16618
16619// This union has the same representation as `f32`.
16620#[repr(transparent)]
16621union SingleFieldUnion {
16622 field: f32,
16623}
16624
16625// This union has the same representation as `usize`.
16626#[repr(transparent)]
16627union MultiFieldUnion {
16628 field: usize,
16629 nothing: (),
16630}
16631```
16632
16633For consistency with transparent `struct`s, `union`s must have exactly one
16634non-zero-sized field. If all fields are zero-sized, the `union` must not be
16635`#[repr(transparent)]`:
16636
16637```rust
16638#![feature(transparent_unions)]
16639
16640// This (non-transparent) union is already valid in stable Rust:
16641pub union GoodUnion {
16642 pub nothing: (),
16643}
16644
16645// Error: transparent union needs exactly one non-zero-sized field, but has 0
16646// #[repr(transparent)]
16647// pub union BadUnion {
16648// pub nothing: (),
16649// }
16650```
16651
16652The one exception is if the `union` is generic over `T` and has a field of type
16653`T`, it may be `#[repr(transparent)]` even if `T` is a zero-sized type:
16654
16655```rust
16656#![feature(transparent_unions)]
16657
16658// This union has the same representation as `T`.
16659#[repr(transparent)]
16660pub union GenericUnion<T: Copy> { // Unions with non-`Copy` fields are unstable.
16661 pub field: T,
16662 pub nothing: (),
16663}
16664
16665// This is okay even though `()` is a zero-sized type.
16666pub const THIS_IS_OKAY: GenericUnion<()> = GenericUnion { field: () };
16667```
16668
16669Like transparent `struct`s, a transparent `union` of type `U` has the same
16670layout, size, and ABI as its single non-ZST field. If it is generic over a type
16671`T`, and all its fields are ZSTs except for exactly one field of type `T`, then
16672it has the same layout and ABI as `T` (even if `T` is a ZST when monomorphized).
16673
16674Like transparent `struct`s, transparent `union`s are FFI-safe if and only if
16675their underlying representation type is also FFI-safe.
16676
16677A `union` may not be eligible for the same nonnull-style optimizations that a
16678`struct` or `enum` (with the same fields) are eligible for. Adding
16679`#[repr(transparent)]` to `union` does not change this. To give a more concrete
16680example, it is unspecified whether `size_of::<T>()` is equal to
16681`size_of::<Option<T>>()`, where `T` is a `union` (regardless of whether or not
16682it is transparent). The Rust compiler is free to perform this optimization if
16683possible, but is not required to, and different compiler versions may differ in
16684their application of these optimizations.
16685"##,
16686 default_severity: Severity::Allow,
16687 warn_since: None,
16688 deny_since: None,
16689 },
16690 Lint {
16691 label: "trivial_bounds",
16692 description: r##"# `trivial_bounds`
16693
16694Allows inconsistent bounds in where clauses.
16695
16696The tracking issue for this feature is: [#48214]
16697
16698[#48214]: https://github.com/rust-lang/rust/issues/48214
16699
16700------------------------
16701"##,
16702 default_severity: Severity::Allow,
16703 warn_since: None,
16704 deny_since: None,
16705 },
16706 Lint {
16707 label: "trivial_clone",
16708 description: r##"# `trivial_clone`
16709
16710
16711
16712This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
16713
16714------------------------
16715"##,
16716 default_severity: Severity::Allow,
16717 warn_since: None,
16718 deny_since: None,
16719 },
16720 Lint {
16721 label: "trusted_fused",
16722 description: r##"# `trusted_fused`
16723
16724
16725
16726This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
16727
16728------------------------
16729"##,
16730 default_severity: Severity::Allow,
16731 warn_since: None,
16732 deny_since: None,
16733 },
16734 Lint {
16735 label: "trusted_len",
16736 description: r##"# `trusted_len`
16737
16738
16739
16740The tracking issue for this feature is: [#37572]
16741
16742[#37572]: https://github.com/rust-lang/rust/issues/37572
16743
16744------------------------
16745"##,
16746 default_severity: Severity::Allow,
16747 warn_since: None,
16748 deny_since: None,
16749 },
16750 Lint {
16751 label: "trusted_random_access",
16752 description: r##"# `trusted_random_access`
16753
16754
16755
16756This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
16757
16758------------------------
16759"##,
16760 default_severity: Severity::Allow,
16761 warn_since: None,
16762 deny_since: None,
16763 },
16764 Lint {
16765 label: "trusted_step",
16766 description: r##"# `trusted_step`
16767
16768
16769
16770The tracking issue for this feature is: [#85731]
16771
16772[#85731]: https://github.com/rust-lang/rust/issues/85731
16773
16774------------------------
16775"##,
16776 default_severity: Severity::Allow,
16777 warn_since: None,
16778 deny_since: None,
16779 },
16780 Lint {
16781 label: "try_as_dyn",
16782 description: r##"# `try_as_dyn`
16783
16784The tracking issue for this feature is: [#144361]
16785
16786[#144361]: https://github.com/rust-lang/rust/issues/144361
16787
16788------------------------
16789
16790The `try_as_dyn` feature allows going from a generic `T` with no bounds
16791to a `dyn Trait`, if `T: Trait` and various conditions are upheld. It is
16792very related to specialization, as it allows you to specialize within
16793function bodies, but in a more general manner than `Any::downcast`.
16794
16795```rust
16796#![feature(try_as_dyn)]
16797
16798fn downcast_debug_format<T: 'static>(t: &T) -> String {
16799 match std::any::try_as_dyn::<_, dyn std::fmt::Debug>(t) {
16800 Some(d) => format!("{d:?}"),
16801 None => "default".to_string()
16802 }
16803}
16804```
16805
16806
16807## Rules and reasons for them
16808
16809> [!IMPORTANT]
16810> The main problem of **`try_as_dyn` and specialization is the compiler's inability, while trait-checking, to distinguish/_discriminate_ between any two given lifetimes**[^1].
16811
16812[^1]: the compiler cannot _branch_ on whether "`'a : 'b` holds": for soundness, it can either choose not to know the answer, or _assume_ that it holds and produce an obligation for the borrow-checker which shall "assert this" (making compilation fail in a fatal manner if not). Most usages of Rust lie in the latter category (typical `where` clauses anywhere), whilst specialization/`try_as_dyn()` wants to support fallibility of the operation (_i.e._, being queried on a type not fulfilling the predicate without causing a compilation error). This rules out the latter, resulting in the need for the former, _i.e._, for the `try_as_dyn()` attempt to unconditionally "fail" with `None`.
16813
16814### `'static` is not mentioned anywhere in the `impl` block header.
16815
16816The most obvious one: if you have `impl IsStatic for &'static str`, then determining whether `&'? str : IsStatic` does hold amounts to discriminating `'? : 'static`.
16817
16818### Each outlives `where` bound (`Type: 'a` and `'a: 'b`) does not mention lifetime-infected parameters.
16819
16820Parameters are considered lifetime-infected if they are defined in an `impl` block's generic parameter list.
16821Const generics are exempt, as they can't affect lifetimes.
16822`for<'a>` lifetimes (and in the future types) are not lifetime-infected.
16823
16824We can create lifetime discrimination this way. For instance, given `impl<'a, 'b> Outlives<'a> for &'b str where 'b : 'a {}`, `Outlives<'static>` amounts to `IsStatic` from previous bullet.
16825
16826### Each lifetime-infected parameter is mentioned at most once in the `Self` type and the implemented trait's generic parameters, combined.
16827
16828Repetition of a parameter entails equality of those two use-sites; in lifetime-terms, this would be a double `'a : 'b` / `'b : 'a` clause, for instance.
16829Follow-up from the previous example: `impl<'a> Uses<'a> for &'a str {}`, and check whether `&'? str : Uses<'static>`.
16830
16831### Each individual trait where bound (`Type: Trait`) mentions each lifetime-infected parameter at most once.
16832
16833Mentioning a lifetime-infected parameter in multiple `where` bounds is allowed.
16834
16835Looking at the previous rules, which focuses on `Self : …`, this is just observing that shifting the requirements to other parameters within `where` clauses \[ought to\] boil down to the same set of issues.
16836
16837This is _unnecessarily restrictive_: we should be able to loosen it up somehow. Repetition only in `where` clauses seems fine.
16838
16839
16840### The `impl` block is a handwritten impl
16841
16842as opposed to a type implementing a trait automatically by the compiler (such as auto-traits, `dyn Bounds… : Bounds…`, and closures)
16843
16844
16845The reason for this is that some such auto-generated impls _come with hidden bounds or whatnot_, which run afoul of the previous rules, whilst also being _extremely challenging for the current compiler logic to know of such bounds_.
16846IIUC, this restriction could be lifted in the future should the compiler logic be better at spotting these hidden bounds, when present.
16847
16848One contrived such example being the case of `dyn 'u + for<'a> Outlives<'a>`, where the compiler-generated `impl` for it of `Outlives` is: `impl<'b, 'u> Outlives<'b> for dyn 'u + for<'a> Outlives<'a> where 'b : 'u {}` which violates the "`'a: 'b` not to mention lt-infected params" rule, whilst also being hard to detect in current compiler logic.
16849
16850### Associated type projections (`<Type as Trait>::Assoc`) are not mentioned anywhere in the `impl` block header.
16851
16852Associated-type equality bounds can very much amount to lifetime-infected parameter equality constraints,
16853which are problematic as per the "at most one mention of each lifetime-infected parameter in header" rule.
16854To illustrate, with the following definitions, `&'? str: Trait<'static>` discriminates `'?` against `'static`:
16855```rust
16856trait Trait<'x> {}
16857impl<'a, 'b> Trait<'b> for &'a str
16858where
16859 // &'a str = &'b str,
16860 Option<&'a str>: IntoIterator<Item = &'b str>,
16861{}
16862```
16863
16864```rust
16865trait Trait<'x> {}
16866impl<'a> Trait<'a> for &'a str {}
16867```
16868
16869### Each trait `where` bound with an associated type equality (`Type: Trait<Assoc = Type2>`) does not mention lifetime-infected parameters.
16870
16871Checking whether `Option<&'? str>: IntoIterator<Item = &'static str>` holds discriminates `'?` against `'static`.
16872"##,
16873 default_severity: Severity::Allow,
16874 warn_since: None,
16875 deny_since: None,
16876 },
16877 Lint {
16878 label: "try_blocks",
16879 description: r##"# `try_blocks`
16880
16881The tracking issue for this feature is: [#154391]
16882
16883[#154391]: https://github.com/rust-lang/rust/issues/154391
16884
16885------------------------
16886
16887The `try_blocks` feature adds support for `try` blocks. A `try`
16888block creates a new scope one can use the `?` operator in.
16889
16890```rust,edition2018
16891#![feature(try_blocks)]
16892
16893use std::num::ParseIntError;
16894
16895let result = try {
16896 "1".parse::<i32>()?
16897 + "2".parse::<i32>()?
16898 + "3".parse::<i32>()?
16899};
16900assert_eq!(result, Ok(6));
16901
16902let result = try {
16903 "1".parse::<i32>()?
16904 + "foo".parse::<i32>()?
16905 + "3".parse::<i32>()?
16906};
16907assert!(result.is_err());
16908```
16909"##,
16910 default_severity: Severity::Allow,
16911 warn_since: None,
16912 deny_since: None,
16913 },
16914 Lint {
16915 label: "try_blocks_heterogeneous",
16916 description: r##"# `try_blocks_heterogeneous`
16917
16918Allows using `try bikeshed TargetType {...}` expressions.
16919
16920The tracking issue for this feature is: [#149488]
16921
16922[#149488]: https://github.com/rust-lang/rust/issues/149488
16923
16924------------------------
16925"##,
16926 default_severity: Severity::Allow,
16927 warn_since: None,
16928 deny_since: None,
16929 },
16930 Lint {
16931 label: "try_entry",
16932 description: r##"# `try_entry`
16933
16934
16935
16936The tracking issue for this feature is: [#157354]
16937
16938[#157354]: https://github.com/rust-lang/rust/issues/157354
16939
16940------------------------
16941"##,
16942 default_severity: Severity::Allow,
16943 warn_since: None,
16944 deny_since: None,
16945 },
16946 Lint {
16947 label: "try_find",
16948 description: r##"# `try_find`
16949
16950
16951
16952The tracking issue for this feature is: [#63178]
16953
16954[#63178]: https://github.com/rust-lang/rust/issues/63178
16955
16956------------------------
16957"##,
16958 default_severity: Severity::Allow,
16959 warn_since: None,
16960 deny_since: None,
16961 },
16962 Lint {
16963 label: "try_from_int_error_kind",
16964 description: r##"# `try_from_int_error_kind`
16965
16966
16967
16968The tracking issue for this feature is: [#153978]
16969
16970[#153978]: https://github.com/rust-lang/rust/issues/153978
16971
16972------------------------
16973"##,
16974 default_severity: Severity::Allow,
16975 warn_since: None,
16976 deny_since: None,
16977 },
16978 Lint {
16979 label: "try_reserve_kind",
16980 description: r##"# `try_reserve_kind`
16981
16982
16983
16984The tracking issue for this feature is: [#48043]
16985
16986[#48043]: https://github.com/rust-lang/rust/issues/48043
16987
16988------------------------
16989"##,
16990 default_severity: Severity::Allow,
16991 warn_since: None,
16992 deny_since: None,
16993 },
16994 Lint {
16995 label: "try_trait_v2",
16996 description: r##"# `try_trait_v2`
16997
16998
16999
17000The tracking issue for this feature is: [#84277]
17001
17002[#84277]: https://github.com/rust-lang/rust/issues/84277
17003
17004------------------------
17005"##,
17006 default_severity: Severity::Allow,
17007 warn_since: None,
17008 deny_since: None,
17009 },
17010 Lint {
17011 label: "try_trait_v2_residual",
17012 description: r##"# `try_trait_v2_residual`
17013
17014
17015
17016The tracking issue for this feature is: [#91285]
17017
17018[#91285]: https://github.com/rust-lang/rust/issues/91285
17019
17020------------------------
17021"##,
17022 default_severity: Severity::Allow,
17023 warn_since: None,
17024 deny_since: None,
17025 },
17026 Lint {
17027 label: "try_trait_v2_yeet",
17028 description: r##"# `try_trait_v2_yeet`
17029
17030
17031
17032The tracking issue for this feature is: [#96374]
17033
17034[#96374]: https://github.com/rust-lang/rust/issues/96374
17035
17036------------------------
17037"##,
17038 default_severity: Severity::Allow,
17039 warn_since: None,
17040 deny_since: None,
17041 },
17042 Lint {
17043 label: "try_with_capacity",
17044 description: r##"# `try_with_capacity`
17045
17046
17047
17048The tracking issue for this feature is: [#91913]
17049
17050[#91913]: https://github.com/rust-lang/rust/issues/91913
17051
17052------------------------
17053"##,
17054 default_severity: Severity::Allow,
17055 warn_since: None,
17056 deny_since: None,
17057 },
17058 Lint {
17059 label: "tuple_trait",
17060 description: r##"# `tuple_trait`
17061
17062The tracking issue for this feature is [#157987].
17063
17064[#157987]: https://github.com/rust-lang/rust/issues/157987
17065"##,
17066 default_severity: Severity::Allow,
17067 warn_since: None,
17068 deny_since: None,
17069 },
17070 Lint {
17071 label: "type_alias_impl_trait",
17072 description: r##"# `type_alias_impl_trait`
17073
17074The tracking issue for this feature is: [#63063]
17075
17076------------------------
17077
17078> This feature is not to be confused with [`trait_alias`] or [`impl_trait_in_assoc_type`].
17079
17080### What is `impl Trait`?
17081
17082`impl Trait` in return position is useful for declaring types that are constrained by traits, but whose concrete type should be hidden:
17083
17084```rust
17085use std::fmt::Debug;
17086
17087fn new() -> impl Debug {
17088 42
17089}
17090
17091fn main() {
17092 let thing = new();
17093 // What actually is a `thing`?
17094 // No idea but we know it implements `Debug`, so we can debug print it
17095 println!("{thing:?}");
17096}
17097```
17098
17099See the [reference] for more information about `impl Trait` in return position.
17100
17101### `type_alias_impl_trait`
17102
17103However, we might want to use an `impl Trait` in multiple locations but actually use the same concrete type everywhere while keeping it hidden.
17104This can be useful in libraries where you want to hide implementation details.
17105
17106The `#[define_opaque]` attribute must be used to explicitly list opaque items constrained by the item it's on.
17107
17108```rust
17109#![feature(type_alias_impl_trait)]
17110# #![allow(unused_variables, dead_code)]
17111trait Trait {}
17112
17113struct MyType;
17114
17115impl Trait for MyType {}
17116
17117type Alias = impl Trait;
17118
17119#[define_opaque(Alias)] // To constrain the type alias to `MyType`
17120fn new() -> Alias {
17121 MyType
17122}
17123
17124#[define_opaque(Alias)] // So we can name the concrete type inside this item
17125fn main() {
17126 let thing: MyType = new();
17127}
17128
17129// It can be a part of a struct too
17130struct HaveAlias {
17131 stuff: String,
17132 thing: Alias,
17133}
17134```
17135
17136In this example, the concrete type referred to by `Alias` is guaranteed to be the same wherever `Alias` occurs.
17137
17138> Originally this feature included type aliases as an associated type of a trait. In [#110237] this was split off to [`impl_trait_in_assoc_type`].
17139
17140### `type_alias_impl_trait` in argument position.
17141
17142Note that using `Alias` as an argument type is *not* the same as argument-position `impl Trait`, as `Alias` refers to a unique type, whereas the concrete type for argument-position `impl Trait` is chosen by the caller.
17143
17144```rust
17145# #![feature(type_alias_impl_trait)]
17146# #![allow(unused_variables)]
17147# pub mod x {
17148# pub trait Trait {}
17149#
17150# struct MyType;
17151#
17152# impl Trait for MyType {}
17153#
17154# pub type Alias = impl Trait;
17155#
17156# #[define_opaque(Alias)]
17157# pub fn new() -> Alias {
17158# MyType
17159# }
17160# }
17161# use x::*;
17162// this...
17163pub fn take_alias(x: Alias) {
17164 // ...
17165}
17166
17167// ...is *not* the same as
17168pub fn take_impl(x: impl Trait) {
17169 // ...
17170}
17171# fn main(){}
17172```
17173
17174```rust,compile_fail,E0308
17175# #![feature(type_alias_impl_trait)]
17176# #![allow(unused_variables)]
17177# pub mod x {
17178# pub trait Trait {}
17179#
17180# struct MyType;
17181#
17182# impl Trait for MyType {}
17183#
17184# pub type Alias = impl Trait;
17185#
17186# #[define_opaque(Alias)]
17187# pub fn new() -> Alias {
17188# MyType
17189# }
17190# }
17191# use x::*;
17192# pub fn take_alias(x: Alias) {
17193# // ...
17194# }
17195#
17196# pub fn take_impl(x: impl Trait) {
17197# // ...
17198# }
17199#
17200// a user's crate using the trait and type alias
17201struct UserType;
17202impl Trait for UserType {}
17203
17204# fn main(){
17205let x = UserType;
17206take_alias(x);
17207// ERROR expected opaque type, found `UserType`
17208// this function *actually* takes a `MyType` as is constrained in `new`
17209
17210let x = UserType;
17211take_impl(x);
17212// OK
17213
17214let x = new();
17215take_alias(x);
17216// OK
17217
17218let x = new();
17219take_impl(x);
17220// OK
17221# }
17222```
17223
17224Note that the user cannot use `#[define_opaque(Alias)]` to reify the opaque type because only the crate where the type alias is declared may do so. But if this happened in the same crate and the opaque type was reified, they'd get a familiar error: "expected `MyType`, got `UserType`".
17225
17226[#63063]: https://github.com/rust-lang/rust/issues/63063
17227[#110237]: https://github.com/rust-lang/rust/pull/110237
17228[reference]: https://doc.rust-lang.org/stable/reference/types/impl-trait.html#abstract-return-types
17229[`trait_alias`]: ./trait-alias.md
17230[`impl_trait_in_assoc_type`]: ./impl-trait-in-assoc-type.md
17231"##,
17232 default_severity: Severity::Allow,
17233 warn_since: None,
17234 deny_since: None,
17235 },
17236 Lint {
17237 label: "type_ascription",
17238 description: r##"# `type_ascription`
17239
17240
17241
17242The tracking issue for this feature is: [#23416]
17243
17244[#23416]: https://github.com/rust-lang/rust/issues/23416
17245
17246------------------------
17247"##,
17248 default_severity: Severity::Allow,
17249 warn_since: None,
17250 deny_since: None,
17251 },
17252 Lint {
17253 label: "type_changing_struct_update",
17254 description: r##"# `type_changing_struct_update`
17255
17256The tracking issue for this feature is: [#86555]
17257
17258[#86555]: https://github.com/rust-lang/rust/issues/86555
17259
17260------------------------
17261
17262This implements [RFC2528]. When turned on, you can create instances of the same struct
17263that have different generic type or lifetime parameters.
17264
17265[RFC2528]: https://rust-lang.github.io/rfcs/2528-type-changing-struct-update-syntax.html
17266
17267```rust
17268#![allow(unused_variables, dead_code)]
17269#![feature(type_changing_struct_update)]
17270
17271fn main () {
17272 struct Foo<T, U> {
17273 field1: T,
17274 field2: U,
17275 }
17276
17277 let base: Foo<String, i32> = Foo {
17278 field1: String::from("hello"),
17279 field2: 1234,
17280 };
17281 let updated: Foo<f64, i32> = Foo {
17282 field1: 3.14,
17283 ..base
17284 };
17285}
17286```
17287"##,
17288 default_severity: Severity::Allow,
17289 warn_since: None,
17290 deny_since: None,
17291 },
17292 Lint {
17293 label: "type_info",
17294 description: r##"# `type_info`
17295
17296
17297
17298The tracking issue for this feature is: [#146922]
17299
17300[#146922]: https://github.com/rust-lang/rust/issues/146922
17301
17302------------------------
17303"##,
17304 default_severity: Severity::Allow,
17305 warn_since: None,
17306 deny_since: None,
17307 },
17308 Lint {
17309 label: "u8_split_ascii_whitespace",
17310 description: r##"# `u8_split_ascii_whitespace`
17311
17312
17313
17314The tracking issue for this feature is: [#147878]
17315
17316[#147878]: https://github.com/rust-lang/rust/issues/147878
17317
17318------------------------
17319"##,
17320 default_severity: Severity::Allow,
17321 warn_since: None,
17322 deny_since: None,
17323 },
17324 Lint {
17325 label: "ub_checks",
17326 description: r##"# `ub_checks`
17327
17328
17329
17330This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
17331
17332------------------------
17333"##,
17334 default_severity: Severity::Allow,
17335 warn_since: None,
17336 deny_since: None,
17337 },
17338 Lint {
17339 label: "uefi_std",
17340 description: r##"# `uefi_std`
17341
17342
17343
17344The tracking issue for this feature is: [#100499]
17345
17346[#100499]: https://github.com/rust-lang/rust/issues/100499
17347
17348------------------------
17349"##,
17350 default_severity: Severity::Allow,
17351 warn_since: None,
17352 deny_since: None,
17353 },
17354 Lint {
17355 label: "uint_carryless_mul",
17356 description: r##"# `uint_carryless_mul`
17357
17358
17359
17360The tracking issue for this feature is: [#152080]
17361
17362[#152080]: https://github.com/rust-lang/rust/issues/152080
17363
17364------------------------
17365"##,
17366 default_severity: Severity::Allow,
17367 warn_since: None,
17368 deny_since: None,
17369 },
17370 Lint {
17371 label: "uint_gather_scatter_bits",
17372 description: r##"# `uint_gather_scatter_bits`
17373
17374
17375
17376The tracking issue for this feature is: [#149069]
17377
17378[#149069]: https://github.com/rust-lang/rust/issues/149069
17379
17380------------------------
17381"##,
17382 default_severity: Severity::Allow,
17383 warn_since: None,
17384 deny_since: None,
17385 },
17386 Lint {
17387 label: "unboxed_closures",
17388 description: r##"# `unboxed_closures`
17389
17390The tracking issue for this feature is [#29625]
17391
17392See Also: [`fn_traits`](../library-features/fn-traits.md)
17393
17394[#29625]: https://github.com/rust-lang/rust/issues/29625
17395
17396----
17397
17398The `unboxed_closures` feature allows you to write functions using the `"rust-call"` ABI,
17399required for implementing the [`Fn*`] family of traits. `"rust-call"` functions must have
17400exactly one (non self) argument, a tuple representing the argument list.
17401
17402[`Fn*`]: ../../std/ops/trait.Fn.html
17403
17404```rust
17405#![feature(unboxed_closures)]
17406
17407extern "rust-call" fn add_args(args: (u32, u32)) -> u32 {
17408 args.0 + args.1
17409}
17410
17411fn main() {}
17412```
17413"##,
17414 default_severity: Severity::Allow,
17415 warn_since: None,
17416 deny_since: None,
17417 },
17418 Lint {
17419 label: "unicode_internals",
17420 description: r##"# `unicode_internals`
17421
17422
17423
17424This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
17425
17426------------------------
17427"##,
17428 default_severity: Severity::Allow,
17429 warn_since: None,
17430 deny_since: None,
17431 },
17432 Lint {
17433 label: "unique_rc_arc",
17434 description: r##"# `unique_rc_arc`
17435
17436
17437
17438The tracking issue for this feature is: [#112566]
17439
17440[#112566]: https://github.com/rust-lang/rust/issues/112566
17441
17442------------------------
17443"##,
17444 default_severity: Severity::Allow,
17445 warn_since: None,
17446 deny_since: None,
17447 },
17448 Lint {
17449 label: "unix_file_vectored_at",
17450 description: r##"# `unix_file_vectored_at`
17451
17452
17453
17454The tracking issue for this feature is: [#89517]
17455
17456[#89517]: https://github.com/rust-lang/rust/issues/89517
17457
17458------------------------
17459"##,
17460 default_severity: Severity::Allow,
17461 warn_since: None,
17462 deny_since: None,
17463 },
17464 Lint {
17465 label: "unix_kill_process_group",
17466 description: r##"# `unix_kill_process_group`
17467
17468
17469
17470The tracking issue for this feature is: [#156537]
17471
17472[#156537]: https://github.com/rust-lang/rust/issues/156537
17473
17474------------------------
17475"##,
17476 default_severity: Severity::Allow,
17477 warn_since: None,
17478 deny_since: None,
17479 },
17480 Lint {
17481 label: "unix_mkfifo",
17482 description: r##"# `unix_mkfifo`
17483
17484
17485
17486The tracking issue for this feature is: [#139324]
17487
17488[#139324]: https://github.com/rust-lang/rust/issues/139324
17489
17490------------------------
17491"##,
17492 default_severity: Severity::Allow,
17493 warn_since: None,
17494 deny_since: None,
17495 },
17496 Lint {
17497 label: "unix_send_signal",
17498 description: r##"# `unix_send_signal`
17499
17500
17501
17502The tracking issue for this feature is: [#141975]
17503
17504[#141975]: https://github.com/rust-lang/rust/issues/141975
17505
17506------------------------
17507"##,
17508 default_severity: Severity::Allow,
17509 warn_since: None,
17510 deny_since: None,
17511 },
17512 Lint {
17513 label: "unix_set_mark",
17514 description: r##"# `unix_set_mark`
17515
17516
17517
17518The tracking issue for this feature is: [#96467]
17519
17520[#96467]: https://github.com/rust-lang/rust/issues/96467
17521
17522------------------------
17523"##,
17524 default_severity: Severity::Allow,
17525 warn_since: None,
17526 deny_since: None,
17527 },
17528 Lint {
17529 label: "unix_socket_ancillary_data",
17530 description: r##"# `unix_socket_ancillary_data`
17531
17532
17533
17534The tracking issue for this feature is: [#76915]
17535
17536[#76915]: https://github.com/rust-lang/rust/issues/76915
17537
17538------------------------
17539"##,
17540 default_severity: Severity::Allow,
17541 warn_since: None,
17542 deny_since: None,
17543 },
17544 Lint {
17545 label: "unix_socket_exclbind",
17546 description: r##"# `unix_socket_exclbind`
17547
17548
17549
17550The tracking issue for this feature is: [#123481]
17551
17552[#123481]: https://github.com/rust-lang/rust/issues/123481
17553
17554------------------------
17555"##,
17556 default_severity: Severity::Allow,
17557 warn_since: None,
17558 deny_since: None,
17559 },
17560 Lint {
17561 label: "unix_socket_peek",
17562 description: r##"# `unix_socket_peek`
17563
17564
17565
17566The tracking issue for this feature is: [#76923]
17567
17568[#76923]: https://github.com/rust-lang/rust/issues/76923
17569
17570------------------------
17571"##,
17572 default_severity: Severity::Allow,
17573 warn_since: None,
17574 deny_since: None,
17575 },
17576 Lint {
17577 label: "unnamed_enum_variants",
17578 description: r##"# `unnamed_enum_variants`
17579
17580Allows using `_ = <range-or-int>` enum variants.
17581
17582The tracking issue for this feature is: [#156628]
17583
17584[#156628]: https://github.com/rust-lang/rust/issues/156628
17585
17586------------------------
17587"##,
17588 default_severity: Severity::Allow,
17589 warn_since: None,
17590 deny_since: None,
17591 },
17592 Lint {
17593 label: "unqualified_local_imports",
17594 description: r##"# `unqualified_local_imports`
17595
17596Helps with formatting for `group_imports = "StdExternalCrate"`.
17597
17598The tracking issue for this feature is: [#138299]
17599
17600[#138299]: https://github.com/rust-lang/rust/issues/138299
17601
17602------------------------
17603"##,
17604 default_severity: Severity::Allow,
17605 warn_since: None,
17606 deny_since: None,
17607 },
17608 Lint {
17609 label: "unsafe_binders",
17610 description: r##"# `unsafe_binders`
17611
17612Allows using `unsafe<'a> &'a T` unsafe binder types.
17613
17614The tracking issue for this feature is: [#130516]
17615
17616[#130516]: https://github.com/rust-lang/rust/issues/130516
17617
17618------------------------
17619"##,
17620 default_severity: Severity::Allow,
17621 warn_since: None,
17622 deny_since: None,
17623 },
17624 Lint {
17625 label: "unsafe_fields",
17626 description: r##"# `unsafe_fields`
17627
17628Allows declaring fields `unsafe`.
17629
17630The tracking issue for this feature is: [#132922]
17631
17632[#132922]: https://github.com/rust-lang/rust/issues/132922
17633
17634------------------------
17635"##,
17636 default_severity: Severity::Allow,
17637 warn_since: None,
17638 deny_since: None,
17639 },
17640 Lint {
17641 label: "unsafe_pinned",
17642 description: r##"# `unsafe_pinned`
17643
17644
17645
17646The tracking issue for this feature is: [#125735]
17647
17648[#125735]: https://github.com/rust-lang/rust/issues/125735
17649
17650------------------------
17651"##,
17652 default_severity: Severity::Allow,
17653 warn_since: None,
17654 deny_since: None,
17655 },
17656 Lint {
17657 label: "unsafe_unpin",
17658 description: r##"# `unsafe_unpin`
17659
17660
17661
17662The tracking issue for this feature is: [#125735]
17663
17664[#125735]: https://github.com/rust-lang/rust/issues/125735
17665
17666------------------------
17667"##,
17668 default_severity: Severity::Allow,
17669 warn_since: None,
17670 deny_since: None,
17671 },
17672 Lint {
17673 label: "unsize",
17674 description: r##"# `unsize`
17675
17676
17677
17678The tracking issue for this feature is: [#18598]
17679
17680[#18598]: https://github.com/rust-lang/rust/issues/18598
17681
17682------------------------
17683"##,
17684 default_severity: Severity::Allow,
17685 warn_since: None,
17686 deny_since: None,
17687 },
17688 Lint {
17689 label: "unsized_const_params",
17690 description: r##"# `unsized_const_params`
17691
17692Allows const generic parameters to be defined with types that are not `Sized`, e.g. `fn foo<const N: [u8]>() {`.
17693
17694The tracking issue for this feature is: [#128028]
17695
17696[#128028]: https://github.com/rust-lang/rust/issues/128028
17697
17698------------------------
17699"##,
17700 default_severity: Severity::Allow,
17701 warn_since: None,
17702 deny_since: None,
17703 },
17704 Lint {
17705 label: "unsized_fn_params",
17706 description: r##"# `unsized_fn_params`
17707
17708Allows unsized fn parameters.
17709
17710The tracking issue for this feature is: [#48055]
17711
17712[#48055]: https://github.com/rust-lang/rust/issues/48055
17713
17714------------------------
17715"##,
17716 default_severity: Severity::Allow,
17717 warn_since: None,
17718 deny_since: None,
17719 },
17720 Lint {
17721 label: "update_panic_count",
17722 description: r##"# `update_panic_count`
17723
17724This feature is internal to the Rust compiler and is not intended for general use.
17725
17726------------------------
17727"##,
17728 default_severity: Severity::Allow,
17729 warn_since: None,
17730 deny_since: None,
17731 },
17732 Lint {
17733 label: "used_with_arg",
17734 description: r##"# `used_with_arg`
17735
17736Allows using the `#[used(linker)]` (or `#[used(compiler)]`) attribute.
17737
17738The tracking issue for this feature is: [#93798]
17739
17740[#93798]: https://github.com/rust-lang/rust/issues/93798
17741
17742------------------------
17743"##,
17744 default_severity: Severity::Allow,
17745 warn_since: None,
17746 deny_since: None,
17747 },
17748 Lint {
17749 label: "utf16_extra",
17750 description: r##"# `utf16_extra`
17751
17752
17753
17754The tracking issue for this feature is: [#94919]
17755
17756[#94919]: https://github.com/rust-lang/rust/issues/94919
17757
17758------------------------
17759"##,
17760 default_severity: Severity::Allow,
17761 warn_since: None,
17762 deny_since: None,
17763 },
17764 Lint {
17765 label: "variant_count",
17766 description: r##"# `variant_count`
17767
17768
17769
17770The tracking issue for this feature is: [#73662]
17771
17772[#73662]: https://github.com/rust-lang/rust/issues/73662
17773
17774------------------------
17775"##,
17776 default_severity: Severity::Allow,
17777 warn_since: None,
17778 deny_since: None,
17779 },
17780 Lint {
17781 label: "vec_as_non_null",
17782 description: r##"# `vec_as_non_null`
17783
17784
17785
17786The tracking issue for this feature is: [#157843]
17787
17788[#157843]: https://github.com/rust-lang/rust/issues/157843
17789
17790------------------------
17791"##,
17792 default_severity: Severity::Allow,
17793 warn_since: None,
17794 deny_since: None,
17795 },
17796 Lint {
17797 label: "vec_deque_extract_if",
17798 description: r##"# `vec_deque_extract_if`
17799
17800
17801
17802The tracking issue for this feature is: [#147750]
17803
17804[#147750]: https://github.com/rust-lang/rust/issues/147750
17805
17806------------------------
17807"##,
17808 default_severity: Severity::Allow,
17809 warn_since: None,
17810 deny_since: None,
17811 },
17812 Lint {
17813 label: "vec_deque_iter_as_slices",
17814 description: r##"# `vec_deque_iter_as_slices`
17815
17816
17817
17818The tracking issue for this feature is: [#123947]
17819
17820[#123947]: https://github.com/rust-lang/rust/issues/123947
17821
17822------------------------
17823"##,
17824 default_severity: Severity::Allow,
17825 warn_since: None,
17826 deny_since: None,
17827 },
17828 Lint {
17829 label: "vec_deque_retain_range",
17830 description: r##"# `vec_deque_retain_range`
17831
17832
17833
17834The tracking issue for this feature is: [#156215]
17835
17836[#156215]: https://github.com/rust-lang/rust/issues/156215
17837
17838------------------------
17839"##,
17840 default_severity: Severity::Allow,
17841 warn_since: None,
17842 deny_since: None,
17843 },
17844 Lint {
17845 label: "vec_fallible_shrink",
17846 description: r##"# `vec_fallible_shrink`
17847
17848
17849
17850The tracking issue for this feature is: [#152350]
17851
17852[#152350]: https://github.com/rust-lang/rust/issues/152350
17853
17854------------------------
17855"##,
17856 default_severity: Severity::Allow,
17857 warn_since: None,
17858 deny_since: None,
17859 },
17860 Lint {
17861 label: "vec_into_chunks",
17862 description: r##"# `vec_into_chunks`
17863
17864
17865
17866The tracking issue for this feature is: [#142137]
17867
17868[#142137]: https://github.com/rust-lang/rust/issues/142137
17869
17870------------------------
17871"##,
17872 default_severity: Severity::Allow,
17873 warn_since: None,
17874 deny_since: None,
17875 },
17876 Lint {
17877 label: "vec_peek_mut",
17878 description: r##"# `vec_peek_mut`
17879
17880
17881
17882The tracking issue for this feature is: [#122742]
17883
17884[#122742]: https://github.com/rust-lang/rust/issues/122742
17885
17886------------------------
17887"##,
17888 default_severity: Severity::Allow,
17889 warn_since: None,
17890 deny_since: None,
17891 },
17892 Lint {
17893 label: "vec_push_within_capacity",
17894 description: r##"# `vec_push_within_capacity`
17895
17896
17897
17898The tracking issue for this feature is: [#100486]
17899
17900[#100486]: https://github.com/rust-lang/rust/issues/100486
17901
17902------------------------
17903"##,
17904 default_severity: Severity::Allow,
17905 warn_since: None,
17906 deny_since: None,
17907 },
17908 Lint {
17909 label: "vec_recycle",
17910 description: r##"# `vec_recycle`
17911
17912
17913
17914The tracking issue for this feature is: [#148227]
17915
17916[#148227]: https://github.com/rust-lang/rust/issues/148227
17917
17918------------------------
17919"##,
17920 default_severity: Severity::Allow,
17921 warn_since: None,
17922 deny_since: None,
17923 },
17924 Lint {
17925 label: "vec_split_at_spare",
17926 description: r##"# `vec_split_at_spare`
17927
17928
17929
17930The tracking issue for this feature is: [#81944]
17931
17932[#81944]: https://github.com/rust-lang/rust/issues/81944
17933
17934------------------------
17935"##,
17936 default_severity: Severity::Allow,
17937 warn_since: None,
17938 deny_since: None,
17939 },
17940 Lint {
17941 label: "view_type_macro",
17942 description: r##"# `view_type_macro`
17943
17944
17945
17946The tracking issue for this feature is: [#155938]
17947
17948[#155938]: https://github.com/rust-lang/rust/issues/155938
17949
17950------------------------
17951"##,
17952 default_severity: Severity::Allow,
17953 warn_since: None,
17954 deny_since: None,
17955 },
17956 Lint {
17957 label: "view_types",
17958 description: r##"# `view_types`
17959
17960Allows view types.
17961
17962The tracking issue for this feature is: [#155938]
17963
17964[#155938]: https://github.com/rust-lang/rust/issues/155938
17965
17966------------------------
17967"##,
17968 default_severity: Severity::Allow,
17969 warn_since: None,
17970 deny_since: None,
17971 },
17972 Lint {
17973 label: "waker_fn",
17974 description: r##"# `waker_fn`
17975
17976
17977
17978The tracking issue for this feature is: [#149580]
17979
17980[#149580]: https://github.com/rust-lang/rust/issues/149580
17981
17982------------------------
17983"##,
17984 default_severity: Severity::Allow,
17985 warn_since: None,
17986 deny_since: None,
17987 },
17988 Lint {
17989 label: "waker_from_fn_ptr",
17990 description: r##"# `waker_from_fn_ptr`
17991
17992
17993
17994The tracking issue for this feature is: [#148457]
17995
17996[#148457]: https://github.com/rust-lang/rust/issues/148457
17997
17998------------------------
17999"##,
18000 default_severity: Severity::Allow,
18001 warn_since: None,
18002 deny_since: None,
18003 },
18004 Lint {
18005 label: "wasi_ext",
18006 description: r##"# `wasi_ext`
18007
18008
18009
18010The tracking issue for this feature is: [#71213]
18011
18012[#71213]: https://github.com/rust-lang/rust/issues/71213
18013
18014------------------------
18015"##,
18016 default_severity: Severity::Allow,
18017 warn_since: None,
18018 deny_since: None,
18019 },
18020 Lint {
18021 label: "wasip2",
18022 description: r##"# `wasip2`
18023
18024
18025
18026This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
18027
18028------------------------
18029"##,
18030 default_severity: Severity::Allow,
18031 warn_since: None,
18032 deny_since: None,
18033 },
18034 Lint {
18035 label: "wasm_target_feature",
18036 description: r##"# `wasm_target_feature`
18037
18038Target features on wasm.
18039
18040The tracking issue for this feature is: [#150260]
18041
18042[#150260]: https://github.com/rust-lang/rust/issues/150260
18043
18044------------------------
18045"##,
18046 default_severity: Severity::Allow,
18047 warn_since: None,
18048 deny_since: None,
18049 },
18050 Lint {
18051 label: "where_clause_attrs",
18052 description: r##"# `where_clause_attrs`
18053
18054Allows use of attributes in `where` clauses.
18055
18056The tracking issue for this feature is: [#115590]
18057
18058[#115590]: https://github.com/rust-lang/rust/issues/115590
18059
18060------------------------
18061"##,
18062 default_severity: Severity::Allow,
18063 warn_since: None,
18064 deny_since: None,
18065 },
18066 Lint {
18067 label: "widening_mul",
18068 description: r##"# `widening_mul`
18069
18070
18071
18072The tracking issue for this feature is: [#152016]
18073
18074[#152016]: https://github.com/rust-lang/rust/issues/152016
18075
18076------------------------
18077"##,
18078 default_severity: Severity::Allow,
18079 warn_since: None,
18080 deny_since: None,
18081 },
18082 Lint {
18083 label: "windows_by_handle",
18084 description: r##"# `windows_by_handle`
18085
18086
18087
18088The tracking issue for this feature is: [#63010]
18089
18090[#63010]: https://github.com/rust-lang/rust/issues/63010
18091
18092------------------------
18093"##,
18094 default_severity: Severity::Allow,
18095 warn_since: None,
18096 deny_since: None,
18097 },
18098 Lint {
18099 label: "windows_c",
18100 description: r##"# `windows_c`
18101
18102This feature is internal to the Rust compiler and is not intended for general use.
18103
18104------------------------
18105"##,
18106 default_severity: Severity::Allow,
18107 warn_since: None,
18108 deny_since: None,
18109 },
18110 Lint {
18111 label: "windows_change_time",
18112 description: r##"# `windows_change_time`
18113
18114
18115
18116The tracking issue for this feature is: [#121478]
18117
18118[#121478]: https://github.com/rust-lang/rust/issues/121478
18119
18120------------------------
18121"##,
18122 default_severity: Severity::Allow,
18123 warn_since: None,
18124 deny_since: None,
18125 },
18126 Lint {
18127 label: "windows_freeze_file_times",
18128 description: r##"# `windows_freeze_file_times`
18129
18130
18131
18132The tracking issue for this feature is: [#149715]
18133
18134[#149715]: https://github.com/rust-lang/rust/issues/149715
18135
18136------------------------
18137"##,
18138 default_severity: Severity::Allow,
18139 warn_since: None,
18140 deny_since: None,
18141 },
18142 Lint {
18143 label: "windows_handle",
18144 description: r##"# `windows_handle`
18145
18146This feature is internal to the Rust compiler and is not intended for general use.
18147
18148------------------------
18149"##,
18150 default_severity: Severity::Allow,
18151 warn_since: None,
18152 deny_since: None,
18153 },
18154 Lint {
18155 label: "windows_net",
18156 description: r##"# `windows_net`
18157
18158This feature is internal to the Rust compiler and is not intended for general use.
18159
18160------------------------
18161"##,
18162 default_severity: Severity::Allow,
18163 warn_since: None,
18164 deny_since: None,
18165 },
18166 Lint {
18167 label: "windows_permissions_ext",
18168 description: r##"# `windows_permissions_ext`
18169
18170
18171
18172The tracking issue for this feature is: [#152956]
18173
18174[#152956]: https://github.com/rust-lang/rust/issues/152956
18175
18176------------------------
18177"##,
18178 default_severity: Severity::Allow,
18179 warn_since: None,
18180 deny_since: None,
18181 },
18182 Lint {
18183 label: "windows_process_exit_code_from",
18184 description: r##"# `windows_process_exit_code_from`
18185
18186
18187
18188The tracking issue for this feature is: [#111688]
18189
18190[#111688]: https://github.com/rust-lang/rust/issues/111688
18191
18192------------------------
18193"##,
18194 default_severity: Severity::Allow,
18195 warn_since: None,
18196 deny_since: None,
18197 },
18198 Lint {
18199 label: "windows_process_extensions_async_pipes",
18200 description: r##"# `windows_process_extensions_async_pipes`
18201
18202
18203
18204The tracking issue for this feature is: [#98289]
18205
18206[#98289]: https://github.com/rust-lang/rust/issues/98289
18207
18208------------------------
18209"##,
18210 default_severity: Severity::Allow,
18211 warn_since: None,
18212 deny_since: None,
18213 },
18214 Lint {
18215 label: "windows_process_extensions_desktop",
18216 description: r##"# `windows_process_extensions_desktop`
18217
18218
18219
18220The tracking issue for this feature is: [#158852]
18221
18222[#158852]: https://github.com/rust-lang/rust/issues/158852
18223
18224------------------------
18225"##,
18226 default_severity: Severity::Allow,
18227 warn_since: None,
18228 deny_since: None,
18229 },
18230 Lint {
18231 label: "windows_process_extensions_force_quotes",
18232 description: r##"# `windows_process_extensions_force_quotes`
18233
18234
18235
18236The tracking issue for this feature is: [#82227]
18237
18238[#82227]: https://github.com/rust-lang/rust/issues/82227
18239
18240------------------------
18241"##,
18242 default_severity: Severity::Allow,
18243 warn_since: None,
18244 deny_since: None,
18245 },
18246 Lint {
18247 label: "windows_process_extensions_inherit_handles",
18248 description: r##"# `windows_process_extensions_inherit_handles`
18249
18250
18251
18252The tracking issue for this feature is: [#146407]
18253
18254[#146407]: https://github.com/rust-lang/rust/issues/146407
18255
18256------------------------
18257"##,
18258 default_severity: Severity::Allow,
18259 warn_since: None,
18260 deny_since: None,
18261 },
18262 Lint {
18263 label: "windows_process_extensions_raw_attribute",
18264 description: r##"# `windows_process_extensions_raw_attribute`
18265
18266
18267
18268The tracking issue for this feature is: [#114854]
18269
18270[#114854]: https://github.com/rust-lang/rust/issues/114854
18271
18272------------------------
18273"##,
18274 default_severity: Severity::Allow,
18275 warn_since: None,
18276 deny_since: None,
18277 },
18278 Lint {
18279 label: "windows_process_extensions_startupinfo",
18280 description: r##"# `windows_process_extensions_startupinfo`
18281
18282
18283
18284The tracking issue for this feature is: [#141010]
18285
18286[#141010]: https://github.com/rust-lang/rust/issues/141010
18287
18288------------------------
18289"##,
18290 default_severity: Severity::Allow,
18291 warn_since: None,
18292 deny_since: None,
18293 },
18294 Lint {
18295 label: "windows_stdio",
18296 description: r##"# `windows_stdio`
18297
18298This feature is internal to the Rust compiler and is not intended for general use.
18299
18300------------------------
18301"##,
18302 default_severity: Severity::Allow,
18303 warn_since: None,
18304 deny_since: None,
18305 },
18306 Lint {
18307 label: "windows_unix_domain_sockets",
18308 description: r##"# `windows_unix_domain_sockets`
18309
18310
18311
18312The tracking issue for this feature is: [#150487]
18313
18314[#150487]: https://github.com/rust-lang/rust/issues/150487
18315
18316------------------------
18317"##,
18318 default_severity: Severity::Allow,
18319 warn_since: None,
18320 deny_since: None,
18321 },
18322 Lint {
18323 label: "with_negative_coherence",
18324 description: r##"# `with_negative_coherence`
18325
18326Use for stable + negative coherence and strict coherence depending on trait's rustc_strict_coherence value.
18327
18328This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
18329
18330------------------------
18331"##,
18332 default_severity: Severity::Allow,
18333 warn_since: None,
18334 deny_since: None,
18335 },
18336 Lint {
18337 label: "wrapping_int_impl",
18338 description: r##"# `wrapping_int_impl`
18339
18340
18341
18342The tracking issue for this feature is: [#32463]
18343
18344[#32463]: https://github.com/rust-lang/rust/issues/32463
18345
18346------------------------
18347"##,
18348 default_severity: Severity::Allow,
18349 warn_since: None,
18350 deny_since: None,
18351 },
18352 Lint {
18353 label: "wrapping_next_power_of_two",
18354 description: r##"# `wrapping_next_power_of_two`
18355
18356
18357
18358The tracking issue for this feature is: [#32463]
18359
18360[#32463]: https://github.com/rust-lang/rust/issues/32463
18361
18362------------------------
18363"##,
18364 default_severity: Severity::Allow,
18365 warn_since: None,
18366 deny_since: None,
18367 },
18368 Lint {
18369 label: "write_all_vectored",
18370 description: r##"# `write_all_vectored`
18371
18372
18373
18374The tracking issue for this feature is: [#70436]
18375
18376[#70436]: https://github.com/rust-lang/rust/issues/70436
18377
18378------------------------
18379"##,
18380 default_severity: Severity::Allow,
18381 warn_since: None,
18382 deny_since: None,
18383 },
18384 Lint {
18385 label: "wtf8_internals",
18386 description: r##"# `wtf8_internals`
18387
18388
18389
18390This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
18391
18392------------------------
18393"##,
18394 default_severity: Severity::Allow,
18395 warn_since: None,
18396 deny_since: None,
18397 },
18398 Lint {
18399 label: "x86_amx_intrinsics",
18400 description: r##"# `x86_amx_intrinsics`
18401
18402Allows use of x86 `AMX` target-feature attributes and intrinsics
18403
18404The tracking issue for this feature is: [#126622]
18405
18406[#126622]: https://github.com/rust-lang/rust/issues/126622
18407
18408------------------------
18409"##,
18410 default_severity: Severity::Allow,
18411 warn_since: None,
18412 deny_since: None,
18413 },
18414 Lint {
18415 label: "x87_target_feature",
18416 description: r##"# `x87_target_feature`
18417
18418The x87 target feature on x86.
18419
18420The tracking issue for this feature is: [#150261]
18421
18422[#150261]: https://github.com/rust-lang/rust/issues/150261
18423
18424------------------------
18425"##,
18426 default_severity: Severity::Allow,
18427 warn_since: None,
18428 deny_since: None,
18429 },
18430 Lint {
18431 label: "xop_target_feature",
18432 description: r##"# `xop_target_feature`
18433
18434Allows use of the `xop` target-feature
18435
18436The tracking issue for this feature is: [#127208]
18437
18438[#127208]: https://github.com/rust-lang/rust/issues/127208
18439
18440------------------------
18441"##,
18442 default_severity: Severity::Allow,
18443 warn_since: None,
18444 deny_since: None,
18445 },
18446 Lint {
18447 label: "xtensa_target_feature",
18448 description: r##"# `xtensa_target_feature`
18449
18450Allows use of the Xtensa target-features
18451
18452The tracking issue for this feature is: [#157063]
18453
18454[#157063]: https://github.com/rust-lang/rust/issues/157063
18455
18456------------------------
18457"##,
18458 default_severity: Severity::Allow,
18459 warn_since: None,
18460 deny_since: None,
18461 },
18462 Lint {
18463 label: "yeet_desugar_details",
18464 description: r##"# `yeet_desugar_details`
18465
18466
18467
18468This feature has no tracking issue, and is therefore likely internal to the compiler, not being intended for general use.
18469
18470------------------------
18471"##,
18472 default_severity: Severity::Allow,
18473 warn_since: None,
18474 deny_since: None,
18475 },
18476 Lint {
18477 label: "yeet_expr",
18478 description: r##"# `yeet_expr`
18479
18480The tracking issue for this feature is: [#96373]
18481
18482[#96373]: https://github.com/rust-lang/rust/issues/96373
18483
18484------------------------
18485
18486The `yeet_expr` feature adds support for `do yeet` expressions,
18487which can be used to early-exit from a function or `try` block.
18488
18489These are highly experimental, thus the placeholder syntax.
18490
18491```rust,edition2021
18492#![feature(yeet_expr)]
18493
18494fn foo() -> Result<String, i32> {
18495 do yeet 4;
18496}
18497assert_eq!(foo(), Err(4));
18498
18499fn bar() -> Option<String> {
18500 do yeet;
18501}
18502assert_eq!(bar(), None);
18503```
18504"##,
18505 default_severity: Severity::Allow,
18506 warn_since: None,
18507 deny_since: None,
18508 },
18509 Lint {
18510 label: "yield_expr",
18511 description: r##"# `yield_expr`
18512
18513Allows the `yield` keyword for coroutines/generators.
18514
18515The tracking issue for this feature is: [#43122]
18516
18517[#43122]: https://github.com/rust-lang/rust/issues/43122
18518
18519------------------------
18520"##,
18521 default_severity: Severity::Allow,
18522 warn_since: None,
18523 deny_since: None,
18524 },
18525];
18526
18527pub const CLIPPY_LINTS: &[Lint] = &[
18528 Lint {
18529 label: "clippy::absolute_paths",
18530 description: r##"Checks for usage of items through absolute paths, like `std::env::current_dir`."##,
18531 default_severity: Severity::Allow,
18532 warn_since: None,
18533 deny_since: None,
18534 },
18535 Lint {
18536 label: "clippy::absurd_extreme_comparisons",
18537 description: r##"Checks for comparisons where one side of the relation is
18538either the minimum or maximum value for its type and warns if it involves a
18539case that is always true or always false. Only integer and boolean types are
18540checked."##,
18541 default_severity: Severity::Allow,
18542 warn_since: None,
18543 deny_since: None,
18544 },
18545 Lint {
18546 label: "clippy::alloc_instead_of_core",
18547 description: r##"Finds items imported through `alloc` when available through `core`."##,
18548 default_severity: Severity::Allow,
18549 warn_since: None,
18550 deny_since: None,
18551 },
18552 Lint {
18553 label: "clippy::allow_attributes",
18554 description: r##"Checks for usage of the `#[allow]` attribute and suggests replacing it with
18555the `#[expect]` (See [RFC 2383](https://rust-lang.github.io/rfcs/2383-lint-reasons.html))
18556
18557This lint only warns outer attributes (`#[allow]`), as inner attributes
18558(`#![allow]`) are usually used to enable or disable lints on a global scale."##,
18559 default_severity: Severity::Allow,
18560 warn_since: None,
18561 deny_since: None,
18562 },
18563 Lint {
18564 label: "clippy::allow_attributes_without_reason",
18565 description: r##"Checks for attributes that allow lints without a reason."##,
18566 default_severity: Severity::Allow,
18567 warn_since: None,
18568 deny_since: None,
18569 },
18570 Lint {
18571 label: "clippy::almost_complete_range",
18572 description: r##"Checks for ranges which almost include the entire range of letters from 'a' to 'z'
18573or digits from '0' to '9', but don't because they're a half open range."##,
18574 default_severity: Severity::Allow,
18575 warn_since: None,
18576 deny_since: None,
18577 },
18578 Lint {
18579 label: "clippy::almost_swapped",
18580 description: r##"Checks for `foo = bar; bar = foo` sequences."##,
18581 default_severity: Severity::Allow,
18582 warn_since: None,
18583 deny_since: None,
18584 },
18585 Lint {
18586 label: "clippy::approx_constant",
18587 description: r##"Checks for floating point literals that approximate
18588constants which are defined in
18589[`std::f32::consts`](https://doc.rust-lang.org/stable/std/f32/consts/#constants)
18590or
18591[`std::f64::consts`](https://doc.rust-lang.org/stable/std/f64/consts/#constants),
18592respectively, suggesting to use the predefined constant."##,
18593 default_severity: Severity::Allow,
18594 warn_since: None,
18595 deny_since: None,
18596 },
18597 Lint {
18598 label: "clippy::arc_with_non_send_sync",
18599 description: r##".
18600This lint warns when you use `Arc` with a type that does not implement `Send` or `Sync`."##,
18601 default_severity: Severity::Allow,
18602 warn_since: None,
18603 deny_since: None,
18604 },
18605 Lint {
18606 label: "clippy::arithmetic_side_effects",
18607 description: r##"Checks any kind of arithmetic operation of any type.
18608
18609Operators like `+`, `-`, `*` or `<<` are usually capable of overflowing according to the [Rust
18610Reference](https://doc.rust-lang.org/reference/expressions/operator-expr.html#overflow),
18611or can panic (`/`, `%`).
18612
18613Known safe built-in types like `Wrapping` or `Saturating`, floats, operations in constant
18614environments, allowed types and non-constant operations that won't overflow are ignored."##,
18615 default_severity: Severity::Allow,
18616 warn_since: None,
18617 deny_since: None,
18618 },
18619 Lint {
18620 label: "clippy::as_conversions",
18621 description: r##"Checks for usage of `as` conversions.
18622
18623Note that this lint is specialized in linting *every single* use of `as`
18624regardless of whether good alternatives exist or not.
18625If you want more precise lints for `as`, please consider using these separate lints:
18626`unnecessary_cast`, `cast_lossless/cast_possible_truncation/cast_possible_wrap/cast_precision_loss/cast_sign_loss`,
18627`fn_to_numeric_cast(_with_truncation)`, `char_lit_as_u8`, `ref_to_mut` and `ptr_as_ptr`.
18628There is a good explanation the reason why this lint should work in this way and how it is useful
18629[in this issue](https://github.com/rust-lang/rust-clippy/issues/5122)."##,
18630 default_severity: Severity::Allow,
18631 warn_since: None,
18632 deny_since: None,
18633 },
18634 Lint {
18635 label: "clippy::as_ptr_cast_mut",
18636 description: r##"Checks for the result of a `&self`-taking `as_ptr` being cast to a mutable pointer."##,
18637 default_severity: Severity::Allow,
18638 warn_since: None,
18639 deny_since: None,
18640 },
18641 Lint {
18642 label: "clippy::as_underscore",
18643 description: r##"Checks for the usage of `as _` conversion using inferred type."##,
18644 default_severity: Severity::Allow,
18645 warn_since: None,
18646 deny_since: None,
18647 },
18648 Lint {
18649 label: "clippy::assertions_on_constants",
18650 description: r##"Checks for `assert!(true)` and `assert!(false)` calls."##,
18651 default_severity: Severity::Allow,
18652 warn_since: None,
18653 deny_since: None,
18654 },
18655 Lint {
18656 label: "clippy::assertions_on_result_states",
18657 description: r##"Checks for `assert!(r.is_ok())` or `assert!(r.is_err())` calls."##,
18658 default_severity: Severity::Allow,
18659 warn_since: None,
18660 deny_since: None,
18661 },
18662 Lint {
18663 label: "clippy::assign_op_pattern",
18664 description: r##"Checks for `a = a op b` or `a = b commutative_op a`
18665patterns."##,
18666 default_severity: Severity::Allow,
18667 warn_since: None,
18668 deny_since: None,
18669 },
18670 Lint {
18671 label: "clippy::assign_ops",
18672 description: r##"Nothing. This lint has been deprecated"##,
18673 default_severity: Severity::Allow,
18674 warn_since: None,
18675 deny_since: None,
18676 },
18677 Lint {
18678 label: "clippy::assigning_clones",
18679 description: r##"Checks for code like `foo = bar.clone();`"##,
18680 default_severity: Severity::Allow,
18681 warn_since: None,
18682 deny_since: None,
18683 },
18684 Lint {
18685 label: "clippy::async_yields_async",
18686 description: r##"Checks for async blocks that yield values of types
18687that can themselves be awaited."##,
18688 default_severity: Severity::Allow,
18689 warn_since: None,
18690 deny_since: None,
18691 },
18692 Lint {
18693 label: "clippy::await_holding_invalid_type",
18694 description: r##"Allows users to configure types which should not be held across await
18695suspension points."##,
18696 default_severity: Severity::Allow,
18697 warn_since: None,
18698 deny_since: None,
18699 },
18700 Lint {
18701 label: "clippy::await_holding_lock",
18702 description: r##"Checks for calls to `await` while holding a non-async-aware
18703`MutexGuard`."##,
18704 default_severity: Severity::Allow,
18705 warn_since: None,
18706 deny_since: None,
18707 },
18708 Lint {
18709 label: "clippy::await_holding_refcell_ref",
18710 description: r##"Checks for calls to `await` while holding a `RefCell`, `Ref`, or `RefMut`."##,
18711 default_severity: Severity::Allow,
18712 warn_since: None,
18713 deny_since: None,
18714 },
18715 Lint {
18716 label: "clippy::bad_bit_mask",
18717 description: r##"Checks for incompatible bit masks in comparisons.
18718
18719The formula for detecting if an expression of the type `_ <bit_op> m
18720<cmp_op> c` (where `<bit_op>` is one of {`&`, `|`} and `<cmp_op>` is one of
18721{`!=`, `>=`, `>`, `!=`, `>=`, `>`}) can be determined from the following
18722table:
18723
18724|Comparison |Bit Op|Example |is always|Formula |
18725|------------|------|-------------|---------|----------------------|
18726|`==` or `!=`| `&` |`x & 2 == 3` |`false` |`c & m != c` |
18727|`<` or `>=`| `&` |`x & 2 < 3` |`true` |`m < c` |
18728|`>` or `<=`| `&` |`x & 1 > 1` |`false` |`m <= c` |
18729|`==` or `!=`| `\\|` |`x \\| 1 == 0`|`false` |`c \\| m != c` |
18730|`<` or `>=`| `\\|` |`x \\| 1 < 1` |`false` |`m >= c` |
18731|`<=` or `>` | `\\|` |`x \\| 1 > 0` |`true` |`m > c` |"##,
18732 default_severity: Severity::Allow,
18733 warn_since: None,
18734 deny_since: None,
18735 },
18736 Lint {
18737 label: "clippy::big_endian_bytes",
18738 description: r##"Checks for the usage of the `to_be_bytes` method and/or the function `from_be_bytes`."##,
18739 default_severity: Severity::Allow,
18740 warn_since: None,
18741 deny_since: None,
18742 },
18743 Lint {
18744 label: "clippy::bind_instead_of_map",
18745 description: r##"Checks for usage of `_.and_then(|x| Some(y))`, `_.and_then(|x| Ok(y))`
18746or `_.or_else(|x| Err(y))`."##,
18747 default_severity: Severity::Allow,
18748 warn_since: None,
18749 deny_since: None,
18750 },
18751 Lint {
18752 label: "clippy::blanket_clippy_restriction_lints",
18753 description: r##"Checks for `warn`/`deny`/`forbid` attributes targeting the whole clippy::restriction category."##,
18754 default_severity: Severity::Allow,
18755 warn_since: None,
18756 deny_since: None,
18757 },
18758 Lint {
18759 label: "clippy::blocks_in_conditions",
18760 description: r##"Checks for `if` and `match` conditions that use blocks containing an
18761expression, statements or conditions that use closures with blocks."##,
18762 default_severity: Severity::Allow,
18763 warn_since: None,
18764 deny_since: None,
18765 },
18766 Lint {
18767 label: "clippy::bool_assert_comparison",
18768 description: r##"This lint warns about boolean comparisons in assert-like macros."##,
18769 default_severity: Severity::Allow,
18770 warn_since: None,
18771 deny_since: None,
18772 },
18773 Lint {
18774 label: "clippy::bool_comparison",
18775 description: r##"Checks for expressions of the form `x == true`,
18776`x != true` and order comparisons such as `x < true` (or vice versa) and
18777suggest using the variable directly."##,
18778 default_severity: Severity::Allow,
18779 warn_since: None,
18780 deny_since: None,
18781 },
18782 Lint {
18783 label: "clippy::bool_to_int_with_if",
18784 description: r##"Instead of using an if statement to convert a bool to an int,
18785this lint suggests using a `from()` function or an `as` coercion."##,
18786 default_severity: Severity::Allow,
18787 warn_since: None,
18788 deny_since: None,
18789 },
18790 Lint {
18791 label: "clippy::borrow_as_ptr",
18792 description: r##"Checks for the usage of `&expr as *const T` or
18793`&mut expr as *mut T`, and suggest using `ptr::addr_of` or
18794`ptr::addr_of_mut` instead."##,
18795 default_severity: Severity::Allow,
18796 warn_since: None,
18797 deny_since: None,
18798 },
18799 Lint {
18800 label: "clippy::borrow_deref_ref",
18801 description: r##"Checks for `&*(&T)`."##,
18802 default_severity: Severity::Allow,
18803 warn_since: None,
18804 deny_since: None,
18805 },
18806 Lint {
18807 label: "clippy::borrow_interior_mutable_const",
18808 description: r##"Checks if `const` items which is interior mutable (e.g.,
18809contains a `Cell`, `Mutex`, `AtomicXxxx`, etc.) has been borrowed directly."##,
18810 default_severity: Severity::Allow,
18811 warn_since: None,
18812 deny_since: None,
18813 },
18814 Lint {
18815 label: "clippy::borrowed_box",
18816 description: r##"Checks for usage of `&Box<T>` anywhere in the code.
18817Check the [Box documentation](https://doc.rust-lang.org/std/boxed/index.html) for more information."##,
18818 default_severity: Severity::Allow,
18819 warn_since: None,
18820 deny_since: None,
18821 },
18822 Lint {
18823 label: "clippy::box_collection",
18824 description: r##"Checks for usage of `Box<T>` where T is a collection such as Vec anywhere in the code.
18825Check the [Box documentation](https://doc.rust-lang.org/std/boxed/index.html) for more information."##,
18826 default_severity: Severity::Allow,
18827 warn_since: None,
18828 deny_since: None,
18829 },
18830 Lint {
18831 label: "clippy::box_default",
18832 description: r##"checks for `Box::new(Default::default())`, which can be written as
18833`Box::default()`."##,
18834 default_severity: Severity::Allow,
18835 warn_since: None,
18836 deny_since: None,
18837 },
18838 Lint {
18839 label: "clippy::boxed_local",
18840 description: r##"Checks for usage of `Box<T>` where an unboxed `T` would
18841work fine."##,
18842 default_severity: Severity::Allow,
18843 warn_since: None,
18844 deny_since: None,
18845 },
18846 Lint {
18847 label: "clippy::branches_sharing_code",
18848 description: r##"Checks if the `if` and `else` block contain shared code that can be
18849moved out of the blocks."##,
18850 default_severity: Severity::Allow,
18851 warn_since: None,
18852 deny_since: None,
18853 },
18854 Lint {
18855 label: "clippy::builtin_type_shadow",
18856 description: r##"Warns if a generic shadows a built-in type."##,
18857 default_severity: Severity::Allow,
18858 warn_since: None,
18859 deny_since: None,
18860 },
18861 Lint {
18862 label: "clippy::byte_char_slices",
18863 description: r##"Checks for hard to read slices of byte characters, that could be more easily expressed as a
18864byte string."##,
18865 default_severity: Severity::Allow,
18866 warn_since: None,
18867 deny_since: None,
18868 },
18869 Lint {
18870 label: "clippy::bytes_count_to_len",
18871 description: r##"It checks for `str::bytes().count()` and suggests replacing it with
18872`str::len()`."##,
18873 default_severity: Severity::Allow,
18874 warn_since: None,
18875 deny_since: None,
18876 },
18877 Lint {
18878 label: "clippy::bytes_nth",
18879 description: r##"Checks for the use of `.bytes().nth()`."##,
18880 default_severity: Severity::Allow,
18881 warn_since: None,
18882 deny_since: None,
18883 },
18884 Lint {
18885 label: "clippy::cargo_common_metadata",
18886 description: r##"Checks to see if all common metadata is defined in
18887`Cargo.toml`. See: https://rust-lang-nursery.github.io/api-guidelines/documentation.html#cargotoml-includes-all-common-metadata-c-metadata"##,
18888 default_severity: Severity::Allow,
18889 warn_since: None,
18890 deny_since: None,
18891 },
18892 Lint {
18893 label: "clippy::case_sensitive_file_extension_comparisons",
18894 description: r##"Checks for calls to `ends_with` with possible file extensions
18895and suggests to use a case-insensitive approach instead."##,
18896 default_severity: Severity::Allow,
18897 warn_since: None,
18898 deny_since: None,
18899 },
18900 Lint {
18901 label: "clippy::cast_abs_to_unsigned",
18902 description: r##"Checks for usage of the `abs()` method that cast the result to unsigned."##,
18903 default_severity: Severity::Allow,
18904 warn_since: None,
18905 deny_since: None,
18906 },
18907 Lint {
18908 label: "clippy::cast_enum_constructor",
18909 description: r##"Checks for casts from an enum tuple constructor to an integer."##,
18910 default_severity: Severity::Allow,
18911 warn_since: None,
18912 deny_since: None,
18913 },
18914 Lint {
18915 label: "clippy::cast_enum_truncation",
18916 description: r##"Checks for casts from an enum type to an integral type that will definitely truncate the
18917value."##,
18918 default_severity: Severity::Allow,
18919 warn_since: None,
18920 deny_since: None,
18921 },
18922 Lint {
18923 label: "clippy::cast_lossless",
18924 description: r##"Checks for casts between numeric types that can be replaced by safe
18925conversion functions."##,
18926 default_severity: Severity::Allow,
18927 warn_since: None,
18928 deny_since: None,
18929 },
18930 Lint {
18931 label: "clippy::cast_nan_to_int",
18932 description: r##"Checks for a known NaN float being cast to an integer"##,
18933 default_severity: Severity::Allow,
18934 warn_since: None,
18935 deny_since: None,
18936 },
18937 Lint {
18938 label: "clippy::cast_possible_truncation",
18939 description: r##"Checks for casts between numeric types that may
18940truncate large values. This is expected behavior, so the cast is `Allow` by
18941default. It suggests user either explicitly ignore the lint,
18942or use `try_from()` and handle the truncation, default, or panic explicitly."##,
18943 default_severity: Severity::Allow,
18944 warn_since: None,
18945 deny_since: None,
18946 },
18947 Lint {
18948 label: "clippy::cast_possible_wrap",
18949 description: r##"Checks for casts from an unsigned type to a signed type of
18950the same size, or possibly smaller due to target-dependent integers.
18951Performing such a cast is a no-op for the compiler (that is, nothing is
18952changed at the bit level), and the binary representation of the value is
18953reinterpreted. This can cause wrapping if the value is too big
18954for the target signed type. However, the cast works as defined, so this lint
18955is `Allow` by default."##,
18956 default_severity: Severity::Allow,
18957 warn_since: None,
18958 deny_since: None,
18959 },
18960 Lint {
18961 label: "clippy::cast_precision_loss",
18962 description: r##"Checks for casts from any numeric type to a float type where
18963the receiving type cannot store all values from the original type without
18964rounding errors. This possible rounding is to be expected, so this lint is
18965`Allow` by default.
18966
18967Basically, this warns on casting any integer with 32 or more bits to `f32`
18968or any 64-bit integer to `f64`."##,
18969 default_severity: Severity::Allow,
18970 warn_since: None,
18971 deny_since: None,
18972 },
18973 Lint {
18974 label: "clippy::cast_ptr_alignment",
18975 description: r##"Checks for casts, using `as` or `pointer::cast`, from a
18976less strictly aligned pointer to a more strictly aligned pointer."##,
18977 default_severity: Severity::Allow,
18978 warn_since: None,
18979 deny_since: None,
18980 },
18981 Lint {
18982 label: "clippy::cast_sign_loss",
18983 description: r##"Checks for casts from a signed to an unsigned numeric
18984type. In this case, negative values wrap around to large positive values,
18985which can be quite surprising in practice. However, since the cast works as
18986defined, this lint is `Allow` by default."##,
18987 default_severity: Severity::Allow,
18988 warn_since: None,
18989 deny_since: None,
18990 },
18991 Lint {
18992 label: "clippy::cast_slice_different_sizes",
18993 description: r##"Checks for `as` casts between raw pointers to slices with differently sized elements."##,
18994 default_severity: Severity::Allow,
18995 warn_since: None,
18996 deny_since: None,
18997 },
18998 Lint {
18999 label: "clippy::cast_slice_from_raw_parts",
19000 description: r##"Checks for a raw slice being cast to a slice pointer"##,
19001 default_severity: Severity::Allow,
19002 warn_since: None,
19003 deny_since: None,
19004 },
19005 Lint {
19006 label: "clippy::cfg_not_test",
19007 description: r##"Checks for usage of `cfg` that excludes code from `test` builds. (i.e., `#[cfg(not(test))]`)"##,
19008 default_severity: Severity::Allow,
19009 warn_since: None,
19010 deny_since: None,
19011 },
19012 Lint {
19013 label: "clippy::char_lit_as_u8",
19014 description: r##"Checks for expressions where a character literal is cast
19015to `u8` and suggests using a byte literal instead."##,
19016 default_severity: Severity::Allow,
19017 warn_since: None,
19018 deny_since: None,
19019 },
19020 Lint {
19021 label: "clippy::chars_last_cmp",
19022 description: r##"Checks for usage of `_.chars().last()` or
19023`_.chars().next_back()` on a `str` to check if it ends with a given char."##,
19024 default_severity: Severity::Allow,
19025 warn_since: None,
19026 deny_since: None,
19027 },
19028 Lint {
19029 label: "clippy::chars_next_cmp",
19030 description: r##"Checks for usage of `.chars().next()` on a `str` to check
19031if it starts with a given char."##,
19032 default_severity: Severity::Allow,
19033 warn_since: None,
19034 deny_since: None,
19035 },
19036 Lint {
19037 label: "clippy::checked_conversions",
19038 description: r##"Checks for explicit bounds checking when casting."##,
19039 default_severity: Severity::Allow,
19040 warn_since: None,
19041 deny_since: None,
19042 },
19043 Lint {
19044 label: "clippy::clear_with_drain",
19045 description: r##"Checks for usage of `.drain(..)` for the sole purpose of clearing a container."##,
19046 default_severity: Severity::Allow,
19047 warn_since: None,
19048 deny_since: None,
19049 },
19050 Lint {
19051 label: "clippy::clone_on_copy",
19052 description: r##"Checks for usage of `.clone()` on a `Copy` type."##,
19053 default_severity: Severity::Allow,
19054 warn_since: None,
19055 deny_since: None,
19056 },
19057 Lint {
19058 label: "clippy::clone_on_ref_ptr",
19059 description: r##"Checks for usage of `.clone()` on a ref-counted pointer,
19060(`Rc`, `Arc`, `rc::Weak`, or `sync::Weak`), and suggests calling Clone via unified
19061function syntax instead (e.g., `Rc::clone(foo)`)."##,
19062 default_severity: Severity::Allow,
19063 warn_since: None,
19064 deny_since: None,
19065 },
19066 Lint {
19067 label: "clippy::cloned_instead_of_copied",
19068 description: r##"Checks for usage of `cloned()` on an `Iterator` or `Option` where
19069`copied()` could be used instead."##,
19070 default_severity: Severity::Allow,
19071 warn_since: None,
19072 deny_since: None,
19073 },
19074 Lint {
19075 label: "clippy::cmp_null",
19076 description: r##"This lint checks for equality comparisons with `ptr::null`"##,
19077 default_severity: Severity::Allow,
19078 warn_since: None,
19079 deny_since: None,
19080 },
19081 Lint {
19082 label: "clippy::cmp_owned",
19083 description: r##"Checks for conversions to owned values just for the sake
19084of a comparison."##,
19085 default_severity: Severity::Allow,
19086 warn_since: None,
19087 deny_since: None,
19088 },
19089 Lint {
19090 label: "clippy::cognitive_complexity",
19091 description: r##"Checks for methods with high cognitive complexity."##,
19092 default_severity: Severity::Allow,
19093 warn_since: None,
19094 deny_since: None,
19095 },
19096 Lint {
19097 label: "clippy::collapsible_else_if",
19098 description: r##"Checks for collapsible `else { if ... }` expressions
19099that can be collapsed to `else if ...`."##,
19100 default_severity: Severity::Allow,
19101 warn_since: None,
19102 deny_since: None,
19103 },
19104 Lint {
19105 label: "clippy::collapsible_if",
19106 description: r##"Checks for nested `if` statements which can be collapsed
19107by `&&`-combining their conditions."##,
19108 default_severity: Severity::Allow,
19109 warn_since: None,
19110 deny_since: None,
19111 },
19112 Lint {
19113 label: "clippy::collapsible_match",
19114 description: r##"Finds nested `match` or `if let` expressions where the patterns may be collapsed together
19115without adding any branches.
19116
19117Note that this lint is not intended to find _all_ cases where nested match patterns can be merged, but only
19118cases where merging would most likely make the code more readable."##,
19119 default_severity: Severity::Allow,
19120 warn_since: None,
19121 deny_since: None,
19122 },
19123 Lint {
19124 label: "clippy::collapsible_str_replace",
19125 description: r##"Checks for consecutive calls to `str::replace` (2 or more)
19126that can be collapsed into a single call."##,
19127 default_severity: Severity::Allow,
19128 warn_since: None,
19129 deny_since: None,
19130 },
19131 Lint {
19132 label: "clippy::collection_is_never_read",
19133 description: r##"Checks for collections that are never queried."##,
19134 default_severity: Severity::Allow,
19135 warn_since: None,
19136 deny_since: None,
19137 },
19138 Lint {
19139 label: "clippy::comparison_chain",
19140 description: r##"Checks comparison chains written with `if` that can be
19141rewritten with `match` and `cmp`."##,
19142 default_severity: Severity::Allow,
19143 warn_since: None,
19144 deny_since: None,
19145 },
19146 Lint {
19147 label: "clippy::comparison_to_empty",
19148 description: r##"Checks for comparing to an empty slice such as `` or `[]`,
19149and suggests using `.is_empty()` where applicable."##,
19150 default_severity: Severity::Allow,
19151 warn_since: None,
19152 deny_since: None,
19153 },
19154 Lint {
19155 label: "clippy::const_is_empty",
19156 description: r##"It identifies calls to `.is_empty()` on constant values."##,
19157 default_severity: Severity::Allow,
19158 warn_since: None,
19159 deny_since: None,
19160 },
19161 Lint {
19162 label: "clippy::copy_iterator",
19163 description: r##"Checks for types that implement `Copy` as well as
19164`Iterator`."##,
19165 default_severity: Severity::Allow,
19166 warn_since: None,
19167 deny_since: None,
19168 },
19169 Lint {
19170 label: "clippy::crate_in_macro_def",
19171 description: r##"Checks for usage of `crate` as opposed to `$crate` in a macro definition."##,
19172 default_severity: Severity::Allow,
19173 warn_since: None,
19174 deny_since: None,
19175 },
19176 Lint {
19177 label: "clippy::create_dir",
19178 description: r##"Checks usage of `std::fs::create_dir` and suggest using `std::fs::create_dir_all` instead."##,
19179 default_severity: Severity::Allow,
19180 warn_since: None,
19181 deny_since: None,
19182 },
19183 Lint {
19184 label: "clippy::crosspointer_transmute",
19185 description: r##"Checks for transmutes between a type `T` and `*T`."##,
19186 default_severity: Severity::Allow,
19187 warn_since: None,
19188 deny_since: None,
19189 },
19190 Lint {
19191 label: "clippy::dbg_macro",
19192 description: r##"Checks for usage of the [`dbg!`](https://doc.rust-lang.org/std/macro.dbg.html) macro."##,
19193 default_severity: Severity::Allow,
19194 warn_since: None,
19195 deny_since: None,
19196 },
19197 Lint {
19198 label: "clippy::debug_assert_with_mut_call",
19199 description: r##"Checks for function/method calls with a mutable
19200parameter in `debug_assert!`, `debug_assert_eq!` and `debug_assert_ne!` macros."##,
19201 default_severity: Severity::Allow,
19202 warn_since: None,
19203 deny_since: None,
19204 },
19205 Lint {
19206 label: "clippy::decimal_literal_representation",
19207 description: r##"Warns if there is a better representation for a numeric literal."##,
19208 default_severity: Severity::Allow,
19209 warn_since: None,
19210 deny_since: None,
19211 },
19212 Lint {
19213 label: "clippy::declare_interior_mutable_const",
19214 description: r##"Checks for declaration of `const` items which is interior
19215mutable (e.g., contains a `Cell`, `Mutex`, `AtomicXxxx`, etc.)."##,
19216 default_severity: Severity::Allow,
19217 warn_since: None,
19218 deny_since: None,
19219 },
19220 Lint {
19221 label: "clippy::default_constructed_unit_structs",
19222 description: r##"Checks for construction on unit struct using `default`."##,
19223 default_severity: Severity::Allow,
19224 warn_since: None,
19225 deny_since: None,
19226 },
19227 Lint {
19228 label: "clippy::default_instead_of_iter_empty",
19229 description: r##"It checks for `std::iter::Empty::default()` and suggests replacing it with
19230`std::iter::empty()`."##,
19231 default_severity: Severity::Allow,
19232 warn_since: None,
19233 deny_since: None,
19234 },
19235 Lint {
19236 label: "clippy::default_numeric_fallback",
19237 description: r##"Checks for usage of unconstrained numeric literals which may cause default numeric fallback in type
19238inference.
19239
19240Default numeric fallback means that if numeric types have not yet been bound to concrete
19241types at the end of type inference, then integer type is bound to `i32`, and similarly
19242floating type is bound to `f64`.
19243
19244See [RFC0212](https://github.com/rust-lang/rfcs/blob/master/text/0212-restore-int-fallback.md) for more information about the fallback."##,
19245 default_severity: Severity::Allow,
19246 warn_since: None,
19247 deny_since: None,
19248 },
19249 Lint {
19250 label: "clippy::default_trait_access",
19251 description: r##"Checks for literal calls to `Default::default()`."##,
19252 default_severity: Severity::Allow,
19253 warn_since: None,
19254 deny_since: None,
19255 },
19256 Lint {
19257 label: "clippy::default_union_representation",
19258 description: r##"Displays a warning when a union is declared with the default representation (without a `#[repr(C)]` attribute)."##,
19259 default_severity: Severity::Allow,
19260 warn_since: None,
19261 deny_since: None,
19262 },
19263 Lint {
19264 label: "clippy::deprecated_cfg_attr",
19265 description: r##"Checks for `#[cfg_attr(rustfmt, rustfmt_skip)]` and suggests to replace it
19266with `#[rustfmt::skip]`."##,
19267 default_severity: Severity::Allow,
19268 warn_since: None,
19269 deny_since: None,
19270 },
19271 Lint {
19272 label: "clippy::deprecated_clippy_cfg_attr",
19273 description: r##"Checks for `#[cfg_attr(feature = cargo-clippy, ...)]` and for
19274`#[cfg(feature = cargo-clippy)]` and suggests to replace it with
19275`#[cfg_attr(clippy, ...)]` or `#[cfg(clippy)]`."##,
19276 default_severity: Severity::Allow,
19277 warn_since: None,
19278 deny_since: None,
19279 },
19280 Lint {
19281 label: "clippy::deprecated_semver",
19282 description: r##"Checks for `#[deprecated]` annotations with a `since`
19283field that is not a valid semantic version. Also allows TBD to signal
19284future deprecation."##,
19285 default_severity: Severity::Allow,
19286 warn_since: None,
19287 deny_since: None,
19288 },
19289 Lint {
19290 label: "clippy::deref_addrof",
19291 description: r##"Checks for usage of `*&` and `*&mut` in expressions."##,
19292 default_severity: Severity::Allow,
19293 warn_since: None,
19294 deny_since: None,
19295 },
19296 Lint {
19297 label: "clippy::deref_by_slicing",
19298 description: r##"Checks for slicing expressions which are equivalent to dereferencing the
19299value."##,
19300 default_severity: Severity::Allow,
19301 warn_since: None,
19302 deny_since: None,
19303 },
19304 Lint {
19305 label: "clippy::derivable_impls",
19306 description: r##"Detects manual `std::default::Default` implementations that are identical to a derived implementation."##,
19307 default_severity: Severity::Allow,
19308 warn_since: None,
19309 deny_since: None,
19310 },
19311 Lint {
19312 label: "clippy::derive_ord_xor_partial_ord",
19313 description: r##"Lints against manual `PartialOrd` and `Ord` implementations for types with a derived `Ord`
19314or `PartialOrd` implementation."##,
19315 default_severity: Severity::Allow,
19316 warn_since: None,
19317 deny_since: None,
19318 },
19319 Lint {
19320 label: "clippy::derive_partial_eq_without_eq",
19321 description: r##"Checks for types that derive `PartialEq` and could implement `Eq`."##,
19322 default_severity: Severity::Allow,
19323 warn_since: None,
19324 deny_since: None,
19325 },
19326 Lint {
19327 label: "clippy::derived_hash_with_manual_eq",
19328 description: r##"Lints against manual `PartialEq` implementations for types with a derived `Hash`
19329implementation."##,
19330 default_severity: Severity::Allow,
19331 warn_since: None,
19332 deny_since: None,
19333 },
19334 Lint {
19335 label: "clippy::disallowed_macros",
19336 description: r##"Denies the configured macros in clippy.toml
19337
19338Note: Even though this lint is warn-by-default, it will only trigger if
19339macros are defined in the clippy.toml file."##,
19340 default_severity: Severity::Allow,
19341 warn_since: None,
19342 deny_since: None,
19343 },
19344 Lint {
19345 label: "clippy::disallowed_methods",
19346 description: r##"Denies the configured methods and functions in clippy.toml
19347
19348Note: Even though this lint is warn-by-default, it will only trigger if
19349methods are defined in the clippy.toml file."##,
19350 default_severity: Severity::Allow,
19351 warn_since: None,
19352 deny_since: None,
19353 },
19354 Lint {
19355 label: "clippy::disallowed_names",
19356 description: r##"Checks for usage of disallowed names for variables, such
19357as `foo`."##,
19358 default_severity: Severity::Allow,
19359 warn_since: None,
19360 deny_since: None,
19361 },
19362 Lint {
19363 label: "clippy::disallowed_script_idents",
19364 description: r##"Checks for usage of unicode scripts other than those explicitly allowed
19365by the lint config.
19366
19367This lint doesn't take into account non-text scripts such as `Unknown` and `Linear_A`.
19368It also ignores the `Common` script type.
19369While configuring, be sure to use official script name [aliases] from
19370[the list of supported scripts][supported_scripts].
19371
19372See also: [`non_ascii_idents`].
19373
19374[aliases]: http://www.unicode.org/reports/tr24/tr24-31.html#Script_Value_Aliases
19375[supported_scripts]: https://www.unicode.org/iso15924/iso15924-codes.html"##,
19376 default_severity: Severity::Allow,
19377 warn_since: None,
19378 deny_since: None,
19379 },
19380 Lint {
19381 label: "clippy::disallowed_types",
19382 description: r##"Denies the configured types in clippy.toml.
19383
19384Note: Even though this lint is warn-by-default, it will only trigger if
19385types are defined in the clippy.toml file."##,
19386 default_severity: Severity::Allow,
19387 warn_since: None,
19388 deny_since: None,
19389 },
19390 Lint {
19391 label: "clippy::diverging_sub_expression",
19392 description: r##"Checks for diverging calls that are not match arms or
19393statements."##,
19394 default_severity: Severity::Allow,
19395 warn_since: None,
19396 deny_since: None,
19397 },
19398 Lint {
19399 label: "clippy::doc_lazy_continuation",
19400 description: r##"In CommonMark Markdown, the language used to write doc comments, a
19401paragraph nested within a list or block quote does not need any line
19402after the first one to be indented or marked. The specification calls
19403this a lazy paragraph continuation."##,
19404 default_severity: Severity::Allow,
19405 warn_since: None,
19406 deny_since: None,
19407 },
19408 Lint {
19409 label: "clippy::doc_link_with_quotes",
19410 description: r##"Detects the syntax `['foo']` in documentation comments (notice quotes instead of backticks)
19411outside of code blocks"##,
19412 default_severity: Severity::Allow,
19413 warn_since: None,
19414 deny_since: None,
19415 },
19416 Lint {
19417 label: "clippy::doc_markdown",
19418 description: r##"Checks for the presence of `_`, `::` or camel-case words
19419outside ticks in documentation."##,
19420 default_severity: Severity::Allow,
19421 warn_since: None,
19422 deny_since: None,
19423 },
19424 Lint {
19425 label: "clippy::double_comparisons",
19426 description: r##"Checks for double comparisons that could be simplified to a single expression."##,
19427 default_severity: Severity::Allow,
19428 warn_since: None,
19429 deny_since: None,
19430 },
19431 Lint {
19432 label: "clippy::double_must_use",
19433 description: r##"Checks for a `#[must_use]` attribute without
19434further information on functions and methods that return a type already
19435marked as `#[must_use]`."##,
19436 default_severity: Severity::Allow,
19437 warn_since: None,
19438 deny_since: None,
19439 },
19440 Lint {
19441 label: "clippy::double_neg",
19442 description: r##"Detects expressions of the form `--x`."##,
19443 default_severity: Severity::Allow,
19444 warn_since: None,
19445 deny_since: None,
19446 },
19447 Lint {
19448 label: "clippy::double_parens",
19449 description: r##"Checks for unnecessary double parentheses."##,
19450 default_severity: Severity::Allow,
19451 warn_since: None,
19452 deny_since: None,
19453 },
19454 Lint {
19455 label: "clippy::drain_collect",
19456 description: r##"Checks for calls to `.drain()` that clear the collection, immediately followed by a call to `.collect()`.
19457
19458> Collection in this context refers to any type with a `drain` method:
19459> `Vec`, `VecDeque`, `BinaryHeap`, `HashSet`,`HashMap`, `String`"##,
19460 default_severity: Severity::Allow,
19461 warn_since: None,
19462 deny_since: None,
19463 },
19464 Lint {
19465 label: "clippy::drop_non_drop",
19466 description: r##"Checks for calls to `std::mem::drop` with a value that does not implement `Drop`."##,
19467 default_severity: Severity::Allow,
19468 warn_since: None,
19469 deny_since: None,
19470 },
19471 Lint {
19472 label: "clippy::duplicate_mod",
19473 description: r##"Checks for files that are included as modules multiple times."##,
19474 default_severity: Severity::Allow,
19475 warn_since: None,
19476 deny_since: None,
19477 },
19478 Lint {
19479 label: "clippy::duplicate_underscore_argument",
19480 description: r##"Checks for function arguments having the similar names
19481differing by an underscore."##,
19482 default_severity: Severity::Allow,
19483 warn_since: None,
19484 deny_since: None,
19485 },
19486 Lint {
19487 label: "clippy::duplicated_attributes",
19488 description: r##"Checks for attributes that appear two or more times."##,
19489 default_severity: Severity::Allow,
19490 warn_since: None,
19491 deny_since: None,
19492 },
19493 Lint {
19494 label: "clippy::duration_subsec",
19495 description: r##"Checks for calculation of subsecond microseconds or milliseconds
19496from other `Duration` methods."##,
19497 default_severity: Severity::Allow,
19498 warn_since: None,
19499 deny_since: None,
19500 },
19501 Lint {
19502 label: "clippy::eager_transmute",
19503 description: r##"Checks for integer validity checks, followed by a transmute that is (incorrectly) evaluated
19504eagerly (e.g. using `bool::then_some`)."##,
19505 default_severity: Severity::Allow,
19506 warn_since: None,
19507 deny_since: None,
19508 },
19509 Lint {
19510 label: "clippy::else_if_without_else",
19511 description: r##"Checks for usage of if expressions with an `else if` branch,
19512but without a final `else` branch."##,
19513 default_severity: Severity::Allow,
19514 warn_since: None,
19515 deny_since: None,
19516 },
19517 Lint {
19518 label: "clippy::empty_docs",
19519 description: r##"Detects documentation that is empty."##,
19520 default_severity: Severity::Allow,
19521 warn_since: None,
19522 deny_since: None,
19523 },
19524 Lint {
19525 label: "clippy::empty_drop",
19526 description: r##"Checks for empty `Drop` implementations."##,
19527 default_severity: Severity::Allow,
19528 warn_since: None,
19529 deny_since: None,
19530 },
19531 Lint {
19532 label: "clippy::empty_enum",
19533 description: r##"Checks for `enum`s with no variants, which therefore are uninhabited types
19534(cannot be instantiated).
19535
19536As of this writing, the `never_type` is still a nightly-only experimental API.
19537Therefore, this lint is only triggered if `#![feature(never_type)]` is enabled."##,
19538 default_severity: Severity::Allow,
19539 warn_since: None,
19540 deny_since: None,
19541 },
19542 Lint {
19543 label: "clippy::empty_enum_variants_with_brackets",
19544 description: r##"Finds enum variants without fields that are declared with empty brackets."##,
19545 default_severity: Severity::Allow,
19546 warn_since: None,
19547 deny_since: None,
19548 },
19549 Lint {
19550 label: "clippy::empty_line_after_doc_comments",
19551 description: r##"Checks for empty lines after doc comments."##,
19552 default_severity: Severity::Allow,
19553 warn_since: None,
19554 deny_since: None,
19555 },
19556 Lint {
19557 label: "clippy::empty_line_after_outer_attr",
19558 description: r##"Checks for empty lines after outer attributes"##,
19559 default_severity: Severity::Allow,
19560 warn_since: None,
19561 deny_since: None,
19562 },
19563 Lint {
19564 label: "clippy::empty_loop",
19565 description: r##"Checks for empty `loop` expressions."##,
19566 default_severity: Severity::Allow,
19567 warn_since: None,
19568 deny_since: None,
19569 },
19570 Lint {
19571 label: "clippy::empty_structs_with_brackets",
19572 description: r##"Finds structs without fields (a so-called empty struct) that are declared with brackets."##,
19573 default_severity: Severity::Allow,
19574 warn_since: None,
19575 deny_since: None,
19576 },
19577 Lint {
19578 label: "clippy::enum_clike_unportable_variant",
19579 description: r##"Checks for C-like enumerations that are
19580`repr(isize/usize)` and have values that don't fit into an `i32`."##,
19581 default_severity: Severity::Allow,
19582 warn_since: None,
19583 deny_since: None,
19584 },
19585 Lint {
19586 label: "clippy::enum_glob_use",
19587 description: r##"Checks for `use Enum::*`."##,
19588 default_severity: Severity::Allow,
19589 warn_since: None,
19590 deny_since: None,
19591 },
19592 Lint {
19593 label: "clippy::enum_variant_names",
19594 description: r##"Detects enumeration variants that are prefixed or suffixed
19595by the same characters."##,
19596 default_severity: Severity::Allow,
19597 warn_since: None,
19598 deny_since: None,
19599 },
19600 Lint {
19601 label: "clippy::eq_op",
19602 description: r##"Checks for equal operands to comparison, logical and
19603bitwise, difference and division binary operators (`==`, `>`, etc., `&&`,
19604`||`, `&`, `|`, `^`, `-` and `/`)."##,
19605 default_severity: Severity::Allow,
19606 warn_since: None,
19607 deny_since: None,
19608 },
19609 Lint {
19610 label: "clippy::equatable_if_let",
19611 description: r##"Checks for pattern matchings that can be expressed using equality."##,
19612 default_severity: Severity::Allow,
19613 warn_since: None,
19614 deny_since: None,
19615 },
19616 Lint {
19617 label: "clippy::erasing_op",
19618 description: r##"Checks for erasing operations, e.g., `x * 0`."##,
19619 default_severity: Severity::Allow,
19620 warn_since: None,
19621 deny_since: None,
19622 },
19623 Lint {
19624 label: "clippy::err_expect",
19625 description: r##"Checks for `.err().expect()` calls on the `Result` type."##,
19626 default_severity: Severity::Allow,
19627 warn_since: None,
19628 deny_since: None,
19629 },
19630 Lint {
19631 label: "clippy::error_impl_error",
19632 description: r##"Checks for types named `Error` that implement `Error`."##,
19633 default_severity: Severity::Allow,
19634 warn_since: None,
19635 deny_since: None,
19636 },
19637 Lint {
19638 label: "clippy::excessive_nesting",
19639 description: r##"Checks for blocks which are nested beyond a certain threshold.
19640
19641Note: Even though this lint is warn-by-default, it will only trigger if a maximum nesting level is defined in the clippy.toml file."##,
19642 default_severity: Severity::Allow,
19643 warn_since: None,
19644 deny_since: None,
19645 },
19646 Lint {
19647 label: "clippy::excessive_precision",
19648 description: r##"Checks for float literals with a precision greater
19649than that supported by the underlying type."##,
19650 default_severity: Severity::Allow,
19651 warn_since: None,
19652 deny_since: None,
19653 },
19654 Lint {
19655 label: "clippy::exhaustive_enums",
19656 description: r##"Warns on any exported `enum`s that are not tagged `#[non_exhaustive]`"##,
19657 default_severity: Severity::Allow,
19658 warn_since: None,
19659 deny_since: None,
19660 },
19661 Lint {
19662 label: "clippy::exhaustive_structs",
19663 description: r##"Warns on any exported `struct`s that are not tagged `#[non_exhaustive]`"##,
19664 default_severity: Severity::Allow,
19665 warn_since: None,
19666 deny_since: None,
19667 },
19668 Lint {
19669 label: "clippy::exit",
19670 description: r##"Detects calls to the `exit()` function which terminates the program."##,
19671 default_severity: Severity::Allow,
19672 warn_since: None,
19673 deny_since: None,
19674 },
19675 Lint {
19676 label: "clippy::expect_fun_call",
19677 description: r##"Checks for calls to `.expect(&format!(...))`, `.expect(foo(..))`,
19678etc., and suggests to use `unwrap_or_else` instead"##,
19679 default_severity: Severity::Allow,
19680 warn_since: None,
19681 deny_since: None,
19682 },
19683 Lint {
19684 label: "clippy::expect_used",
19685 description: r##"Checks for `.expect()` or `.expect_err()` calls on `Result`s and `.expect()` call on `Option`s."##,
19686 default_severity: Severity::Allow,
19687 warn_since: None,
19688 deny_since: None,
19689 },
19690 Lint {
19691 label: "clippy::expl_impl_clone_on_copy",
19692 description: r##"Checks for explicit `Clone` implementations for `Copy`
19693types."##,
19694 default_severity: Severity::Allow,
19695 warn_since: None,
19696 deny_since: None,
19697 },
19698 Lint {
19699 label: "clippy::explicit_auto_deref",
19700 description: r##"Checks for dereferencing expressions which would be covered by auto-deref."##,
19701 default_severity: Severity::Allow,
19702 warn_since: None,
19703 deny_since: None,
19704 },
19705 Lint {
19706 label: "clippy::explicit_counter_loop",
19707 description: r##"Checks `for` loops over slices with an explicit counter
19708and suggests the use of `.enumerate()`."##,
19709 default_severity: Severity::Allow,
19710 warn_since: None,
19711 deny_since: None,
19712 },
19713 Lint {
19714 label: "clippy::explicit_deref_methods",
19715 description: r##"Checks for explicit `deref()` or `deref_mut()` method calls."##,
19716 default_severity: Severity::Allow,
19717 warn_since: None,
19718 deny_since: None,
19719 },
19720 Lint {
19721 label: "clippy::explicit_into_iter_loop",
19722 description: r##"Checks for loops on `y.into_iter()` where `y` will do, and
19723suggests the latter."##,
19724 default_severity: Severity::Allow,
19725 warn_since: None,
19726 deny_since: None,
19727 },
19728 Lint {
19729 label: "clippy::explicit_iter_loop",
19730 description: r##"Checks for loops on `x.iter()` where `&x` will do, and
19731suggests the latter."##,
19732 default_severity: Severity::Allow,
19733 warn_since: None,
19734 deny_since: None,
19735 },
19736 Lint {
19737 label: "clippy::explicit_write",
19738 description: r##"Checks for usage of `write!()` / `writeln()!` which can be
19739replaced with `(e)print!()` / `(e)println!()`"##,
19740 default_severity: Severity::Allow,
19741 warn_since: None,
19742 deny_since: None,
19743 },
19744 Lint {
19745 label: "clippy::extend_from_slice",
19746 description: r##"Nothing. This lint has been deprecated"##,
19747 default_severity: Severity::Allow,
19748 warn_since: None,
19749 deny_since: None,
19750 },
19751 Lint {
19752 label: "clippy::extend_with_drain",
19753 description: r##"Checks for occurrences where one vector gets extended instead of append"##,
19754 default_severity: Severity::Allow,
19755 warn_since: None,
19756 deny_since: None,
19757 },
19758 Lint {
19759 label: "clippy::extra_unused_lifetimes",
19760 description: r##"Checks for lifetimes in generics that are never used
19761anywhere else."##,
19762 default_severity: Severity::Allow,
19763 warn_since: None,
19764 deny_since: None,
19765 },
19766 Lint {
19767 label: "clippy::extra_unused_type_parameters",
19768 description: r##"Checks for type parameters in generics that are never used anywhere else."##,
19769 default_severity: Severity::Allow,
19770 warn_since: None,
19771 deny_since: None,
19772 },
19773 Lint {
19774 label: "clippy::fallible_impl_from",
19775 description: r##"Checks for impls of `From<..>` that contain `panic!()` or `unwrap()`"##,
19776 default_severity: Severity::Allow,
19777 warn_since: None,
19778 deny_since: None,
19779 },
19780 Lint {
19781 label: "clippy::field_reassign_with_default",
19782 description: r##"Checks for immediate reassignment of fields initialized
19783with Default::default()."##,
19784 default_severity: Severity::Allow,
19785 warn_since: None,
19786 deny_since: None,
19787 },
19788 Lint {
19789 label: "clippy::field_scoped_visibility_modifiers",
19790 description: r##"Checks for usage of scoped visibility modifiers, like `pub(crate)`, on fields. These
19791make a field visible within a scope between public and private."##,
19792 default_severity: Severity::Allow,
19793 warn_since: None,
19794 deny_since: None,
19795 },
19796 Lint {
19797 label: "clippy::filetype_is_file",
19798 description: r##"Checks for `FileType::is_file()`."##,
19799 default_severity: Severity::Allow,
19800 warn_since: None,
19801 deny_since: None,
19802 },
19803 Lint {
19804 label: "clippy::filter_map_bool_then",
19805 description: r##"Checks for usage of `bool::then` in `Iterator::filter_map`."##,
19806 default_severity: Severity::Allow,
19807 warn_since: None,
19808 deny_since: None,
19809 },
19810 Lint {
19811 label: "clippy::filter_map_identity",
19812 description: r##"Checks for usage of `filter_map(|x| x)`."##,
19813 default_severity: Severity::Allow,
19814 warn_since: None,
19815 deny_since: None,
19816 },
19817 Lint {
19818 label: "clippy::filter_map_next",
19819 description: r##"Checks for usage of `_.filter_map(_).next()`."##,
19820 default_severity: Severity::Allow,
19821 warn_since: None,
19822 deny_since: None,
19823 },
19824 Lint {
19825 label: "clippy::filter_next",
19826 description: r##"Checks for usage of `_.filter(_).next()`."##,
19827 default_severity: Severity::Allow,
19828 warn_since: None,
19829 deny_since: None,
19830 },
19831 Lint {
19832 label: "clippy::flat_map_identity",
19833 description: r##"Checks for usage of `flat_map(|x| x)`."##,
19834 default_severity: Severity::Allow,
19835 warn_since: None,
19836 deny_since: None,
19837 },
19838 Lint {
19839 label: "clippy::flat_map_option",
19840 description: r##"Checks for usage of `Iterator::flat_map()` where `filter_map()` could be
19841used instead."##,
19842 default_severity: Severity::Allow,
19843 warn_since: None,
19844 deny_since: None,
19845 },
19846 Lint {
19847 label: "clippy::float_arithmetic",
19848 description: r##"Checks for float arithmetic."##,
19849 default_severity: Severity::Allow,
19850 warn_since: None,
19851 deny_since: None,
19852 },
19853 Lint {
19854 label: "clippy::float_cmp",
19855 description: r##"Checks for (in-)equality comparisons on floating-point
19856values (apart from zero), except in functions called `*eq*` (which probably
19857implement equality for a type involving floats)."##,
19858 default_severity: Severity::Allow,
19859 warn_since: None,
19860 deny_since: None,
19861 },
19862 Lint {
19863 label: "clippy::float_cmp_const",
19864 description: r##"Checks for (in-)equality comparisons on constant floating-point
19865values (apart from zero), except in functions called `*eq*` (which probably
19866implement equality for a type involving floats)."##,
19867 default_severity: Severity::Allow,
19868 warn_since: None,
19869 deny_since: None,
19870 },
19871 Lint {
19872 label: "clippy::float_equality_without_abs",
19873 description: r##"Checks for statements of the form `(a - b) < f32::EPSILON` or
19874`(a - b) < f64::EPSILON`. Notes the missing `.abs()`."##,
19875 default_severity: Severity::Allow,
19876 warn_since: None,
19877 deny_since: None,
19878 },
19879 Lint {
19880 label: "clippy::fn_address_comparisons",
19881 description: r##"Checks for comparisons with an address of a function item."##,
19882 default_severity: Severity::Allow,
19883 warn_since: None,
19884 deny_since: None,
19885 },
19886 Lint {
19887 label: "clippy::fn_params_excessive_bools",
19888 description: r##"Checks for excessive use of
19889bools in function definitions."##,
19890 default_severity: Severity::Allow,
19891 warn_since: None,
19892 deny_since: None,
19893 },
19894 Lint {
19895 label: "clippy::fn_to_numeric_cast",
19896 description: r##"Checks for casts of function pointers to something other than `usize`."##,
19897 default_severity: Severity::Allow,
19898 warn_since: None,
19899 deny_since: None,
19900 },
19901 Lint {
19902 label: "clippy::fn_to_numeric_cast_any",
19903 description: r##"Checks for casts of a function pointer to any integer type."##,
19904 default_severity: Severity::Allow,
19905 warn_since: None,
19906 deny_since: None,
19907 },
19908 Lint {
19909 label: "clippy::fn_to_numeric_cast_with_truncation",
19910 description: r##"Checks for casts of a function pointer to a numeric type not wide enough to
19911store an address."##,
19912 default_severity: Severity::Allow,
19913 warn_since: None,
19914 deny_since: None,
19915 },
19916 Lint {
19917 label: "clippy::for_kv_map",
19918 description: r##"Checks for iterating a map (`HashMap` or `BTreeMap`) and
19919ignoring either the keys or values."##,
19920 default_severity: Severity::Allow,
19921 warn_since: None,
19922 deny_since: None,
19923 },
19924 Lint {
19925 label: "clippy::forget_non_drop",
19926 description: r##"Checks for calls to `std::mem::forget` with a value that does not implement `Drop`."##,
19927 default_severity: Severity::Allow,
19928 warn_since: None,
19929 deny_since: None,
19930 },
19931 Lint {
19932 label: "clippy::format_collect",
19933 description: r##"Checks for usage of `.map(|_| format!(..)).collect::<String>()`."##,
19934 default_severity: Severity::Allow,
19935 warn_since: None,
19936 deny_since: None,
19937 },
19938 Lint {
19939 label: "clippy::format_in_format_args",
19940 description: r##"Detects `format!` within the arguments of another macro that does
19941formatting such as `format!` itself, `write!` or `println!`. Suggests
19942inlining the `format!` call."##,
19943 default_severity: Severity::Allow,
19944 warn_since: None,
19945 deny_since: None,
19946 },
19947 Lint {
19948 label: "clippy::format_push_string",
19949 description: r##"Detects cases where the result of a `format!` call is
19950appended to an existing `String`."##,
19951 default_severity: Severity::Allow,
19952 warn_since: None,
19953 deny_since: None,
19954 },
19955 Lint {
19956 label: "clippy::four_forward_slashes",
19957 description: r##"Checks for outer doc comments written with 4 forward slashes (`////`)."##,
19958 default_severity: Severity::Allow,
19959 warn_since: None,
19960 deny_since: None,
19961 },
19962 Lint {
19963 label: "clippy::from_iter_instead_of_collect",
19964 description: r##"Checks for `from_iter()` function calls on types that implement the `FromIterator`
19965trait."##,
19966 default_severity: Severity::Allow,
19967 warn_since: None,
19968 deny_since: None,
19969 },
19970 Lint {
19971 label: "clippy::from_over_into",
19972 description: r##"Searches for implementations of the `Into<..>` trait and suggests to implement `From<..>` instead."##,
19973 default_severity: Severity::Allow,
19974 warn_since: None,
19975 deny_since: None,
19976 },
19977 Lint {
19978 label: "clippy::from_raw_with_void_ptr",
19979 description: r##"Checks if we're passing a `c_void` raw pointer to `{Box,Rc,Arc,Weak}::from_raw(_)`"##,
19980 default_severity: Severity::Allow,
19981 warn_since: None,
19982 deny_since: None,
19983 },
19984 Lint {
19985 label: "clippy::from_str_radix_10",
19986 description: r##"Checks for function invocations of the form `primitive::from_str_radix(s, 10)`"##,
19987 default_severity: Severity::Allow,
19988 warn_since: None,
19989 deny_since: None,
19990 },
19991 Lint {
19992 label: "clippy::future_not_send",
19993 description: r##"This lint requires Future implementations returned from
19994functions and methods to implement the `Send` marker trait. It is mostly
19995used by library authors (public and internal) that target an audience where
19996multithreaded executors are likely to be used for running these Futures."##,
19997 default_severity: Severity::Allow,
19998 warn_since: None,
19999 deny_since: None,
20000 },
20001 Lint {
20002 label: "clippy::get_first",
20003 description: r##"Checks for usage of `x.get(0)` instead of
20004`x.first()` or `x.front()`."##,
20005 default_severity: Severity::Allow,
20006 warn_since: None,
20007 deny_since: None,
20008 },
20009 Lint {
20010 label: "clippy::get_last_with_len",
20011 description: r##"Checks for usage of `x.get(x.len() - 1)` instead of
20012`x.last()`."##,
20013 default_severity: Severity::Allow,
20014 warn_since: None,
20015 deny_since: None,
20016 },
20017 Lint {
20018 label: "clippy::get_unwrap",
20019 description: r##"Checks for usage of `.get().unwrap()` (or
20020`.get_mut().unwrap`) on a standard library type which implements `Index`"##,
20021 default_severity: Severity::Allow,
20022 warn_since: None,
20023 deny_since: None,
20024 },
20025 Lint {
20026 label: "clippy::host_endian_bytes",
20027 description: r##"Checks for the usage of the `to_ne_bytes` method and/or the function `from_ne_bytes`."##,
20028 default_severity: Severity::Allow,
20029 warn_since: None,
20030 deny_since: None,
20031 },
20032 Lint {
20033 label: "clippy::identity_op",
20034 description: r##"Checks for identity operations, e.g., `x + 0`."##,
20035 default_severity: Severity::Allow,
20036 warn_since: None,
20037 deny_since: None,
20038 },
20039 Lint {
20040 label: "clippy::if_let_mutex",
20041 description: r##"Checks for `Mutex::lock` calls in `if let` expression
20042with lock calls in any of the else blocks."##,
20043 default_severity: Severity::Allow,
20044 warn_since: None,
20045 deny_since: None,
20046 },
20047 Lint {
20048 label: "clippy::if_not_else",
20049 description: r##"Checks for usage of `!` or `!=` in an if condition with an
20050else branch."##,
20051 default_severity: Severity::Allow,
20052 warn_since: None,
20053 deny_since: None,
20054 },
20055 Lint {
20056 label: "clippy::if_same_then_else",
20057 description: r##"Checks for `if/else` with the same body as the *then* part
20058and the *else* part."##,
20059 default_severity: Severity::Allow,
20060 warn_since: None,
20061 deny_since: None,
20062 },
20063 Lint {
20064 label: "clippy::if_then_some_else_none",
20065 description: r##"Checks for if-else that could be written using either `bool::then` or `bool::then_some`."##,
20066 default_severity: Severity::Allow,
20067 warn_since: None,
20068 deny_since: None,
20069 },
20070 Lint {
20071 label: "clippy::ifs_same_cond",
20072 description: r##"Checks for consecutive `if`s with the same condition."##,
20073 default_severity: Severity::Allow,
20074 warn_since: None,
20075 deny_since: None,
20076 },
20077 Lint {
20078 label: "clippy::ignored_unit_patterns",
20079 description: r##"Checks for usage of `_` in patterns of type `()`."##,
20080 default_severity: Severity::Allow,
20081 warn_since: None,
20082 deny_since: None,
20083 },
20084 Lint {
20085 label: "clippy::impl_hash_borrow_with_str_and_bytes",
20086 description: r##"This lint is concerned with the semantics of `Borrow` and `Hash` for a
20087type that implements all three of `Hash`, `Borrow<str>` and `Borrow<[u8]>`
20088as it is impossible to satisfy the semantics of Borrow and `Hash` for
20089both `Borrow<str>` and `Borrow<[u8]>`."##,
20090 default_severity: Severity::Allow,
20091 warn_since: None,
20092 deny_since: None,
20093 },
20094 Lint {
20095 label: "clippy::impl_trait_in_params",
20096 description: r##"Lints when `impl Trait` is being used in a function's parameters."##,
20097 default_severity: Severity::Allow,
20098 warn_since: None,
20099 deny_since: None,
20100 },
20101 Lint {
20102 label: "clippy::implicit_clone",
20103 description: r##"Checks for the usage of `_.to_owned()`, `vec.to_vec()`, or similar when calling `_.clone()` would be clearer."##,
20104 default_severity: Severity::Allow,
20105 warn_since: None,
20106 deny_since: None,
20107 },
20108 Lint {
20109 label: "clippy::implicit_hasher",
20110 description: r##"Checks for public `impl` or `fn` missing generalization
20111over different hashers and implicitly defaulting to the default hashing
20112algorithm (`SipHash`)."##,
20113 default_severity: Severity::Allow,
20114 warn_since: None,
20115 deny_since: None,
20116 },
20117 Lint {
20118 label: "clippy::implicit_return",
20119 description: r##"Checks for missing return statements at the end of a block."##,
20120 default_severity: Severity::Allow,
20121 warn_since: None,
20122 deny_since: None,
20123 },
20124 Lint {
20125 label: "clippy::implicit_saturating_add",
20126 description: r##"Checks for implicit saturating addition."##,
20127 default_severity: Severity::Allow,
20128 warn_since: None,
20129 deny_since: None,
20130 },
20131 Lint {
20132 label: "clippy::implicit_saturating_sub",
20133 description: r##"Checks for implicit saturating subtraction."##,
20134 default_severity: Severity::Allow,
20135 warn_since: None,
20136 deny_since: None,
20137 },
20138 Lint {
20139 label: "clippy::implied_bounds_in_impls",
20140 description: r##"Looks for bounds in `impl Trait` in return position that are implied by other bounds.
20141This can happen when a trait is specified that another trait already has as a supertrait
20142(e.g. `fn() -> impl Deref + DerefMut<Target = i32>` has an unnecessary `Deref` bound,
20143because `Deref` is a supertrait of `DerefMut`)"##,
20144 default_severity: Severity::Allow,
20145 warn_since: None,
20146 deny_since: None,
20147 },
20148 Lint {
20149 label: "clippy::impossible_comparisons",
20150 description: r##"Checks for double comparisons that can never succeed"##,
20151 default_severity: Severity::Allow,
20152 warn_since: None,
20153 deny_since: None,
20154 },
20155 Lint {
20156 label: "clippy::imprecise_flops",
20157 description: r##"Looks for floating-point expressions that
20158can be expressed using built-in methods to improve accuracy
20159at the cost of performance."##,
20160 default_severity: Severity::Allow,
20161 warn_since: None,
20162 deny_since: None,
20163 },
20164 Lint {
20165 label: "clippy::incompatible_msrv",
20166 description: r##"This lint checks that no function newer than the defined MSRV (minimum
20167supported rust version) is used in the crate."##,
20168 default_severity: Severity::Allow,
20169 warn_since: None,
20170 deny_since: None,
20171 },
20172 Lint {
20173 label: "clippy::inconsistent_digit_grouping",
20174 description: r##"Warns if an integral or floating-point constant is
20175grouped inconsistently with underscores."##,
20176 default_severity: Severity::Allow,
20177 warn_since: None,
20178 deny_since: None,
20179 },
20180 Lint {
20181 label: "clippy::inconsistent_struct_constructor",
20182 description: r##"Checks for struct constructors where all fields are shorthand and
20183the order of the field init shorthand in the constructor is inconsistent
20184with the order in the struct definition."##,
20185 default_severity: Severity::Allow,
20186 warn_since: None,
20187 deny_since: None,
20188 },
20189 Lint {
20190 label: "clippy::index_refutable_slice",
20191 description: r##"The lint checks for slice bindings in patterns that are only used to
20192access individual slice values."##,
20193 default_severity: Severity::Allow,
20194 warn_since: None,
20195 deny_since: None,
20196 },
20197 Lint {
20198 label: "clippy::indexing_slicing",
20199 description: r##"Checks for usage of indexing or slicing. Arrays are special cases, this lint
20200does report on arrays if we can tell that slicing operations are in bounds and does not
20201lint on constant `usize` indexing on arrays because that is handled by rustc's `const_err` lint."##,
20202 default_severity: Severity::Allow,
20203 warn_since: None,
20204 deny_since: None,
20205 },
20206 Lint {
20207 label: "clippy::ineffective_bit_mask",
20208 description: r##"Checks for bit masks in comparisons which can be removed
20209without changing the outcome. The basic structure can be seen in the
20210following table:
20211
20212|Comparison| Bit Op |Example |equals |
20213|----------|----------|------------|-------|
20214|`>` / `<=`|`\\|` / `^`|`x \\| 2 > 3`|`x > 3`|
20215|`<` / `>=`|`\\|` / `^`|`x ^ 1 < 4` |`x < 4`|"##,
20216 default_severity: Severity::Allow,
20217 warn_since: None,
20218 deny_since: None,
20219 },
20220 Lint {
20221 label: "clippy::ineffective_open_options",
20222 description: r##"Checks if both `.write(true)` and `.append(true)` methods are called
20223on a same `OpenOptions`."##,
20224 default_severity: Severity::Allow,
20225 warn_since: None,
20226 deny_since: None,
20227 },
20228 Lint {
20229 label: "clippy::inefficient_to_string",
20230 description: r##"Checks for usage of `.to_string()` on an `&&T` where
20231`T` implements `ToString` directly (like `&&str` or `&&String`)."##,
20232 default_severity: Severity::Allow,
20233 warn_since: None,
20234 deny_since: None,
20235 },
20236 Lint {
20237 label: "clippy::infallible_destructuring_match",
20238 description: r##"Checks for matches being used to destructure a single-variant enum
20239or tuple struct where a `let` will suffice."##,
20240 default_severity: Severity::Allow,
20241 warn_since: None,
20242 deny_since: None,
20243 },
20244 Lint {
20245 label: "clippy::infinite_iter",
20246 description: r##"Checks for iteration that is guaranteed to be infinite."##,
20247 default_severity: Severity::Allow,
20248 warn_since: None,
20249 deny_since: None,
20250 },
20251 Lint {
20252 label: "clippy::infinite_loop",
20253 description: r##"Checks for infinite loops in a function where the return type is not `!`
20254and lint accordingly."##,
20255 default_severity: Severity::Allow,
20256 warn_since: None,
20257 deny_since: None,
20258 },
20259 Lint {
20260 label: "clippy::inherent_to_string",
20261 description: r##"Checks for the definition of inherent methods with a signature of `to_string(&self) -> String`."##,
20262 default_severity: Severity::Allow,
20263 warn_since: None,
20264 deny_since: None,
20265 },
20266 Lint {
20267 label: "clippy::inherent_to_string_shadow_display",
20268 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."##,
20269 default_severity: Severity::Allow,
20270 warn_since: None,
20271 deny_since: None,
20272 },
20273 Lint {
20274 label: "clippy::init_numbered_fields",
20275 description: r##"Checks for tuple structs initialized with field syntax.
20276It will however not lint if a base initializer is present.
20277The lint will also ignore code in macros."##,
20278 default_severity: Severity::Allow,
20279 warn_since: None,
20280 deny_since: None,
20281 },
20282 Lint {
20283 label: "clippy::inline_always",
20284 description: r##"Checks for items annotated with `#[inline(always)]`,
20285unless the annotated function is empty or simply panics."##,
20286 default_severity: Severity::Allow,
20287 warn_since: None,
20288 deny_since: None,
20289 },
20290 Lint {
20291 label: "clippy::inline_asm_x86_att_syntax",
20292 description: r##"Checks for usage of AT&T x86 assembly syntax."##,
20293 default_severity: Severity::Allow,
20294 warn_since: None,
20295 deny_since: None,
20296 },
20297 Lint {
20298 label: "clippy::inline_asm_x86_intel_syntax",
20299 description: r##"Checks for usage of Intel x86 assembly syntax."##,
20300 default_severity: Severity::Allow,
20301 warn_since: None,
20302 deny_since: None,
20303 },
20304 Lint {
20305 label: "clippy::inline_fn_without_body",
20306 description: r##"Checks for `#[inline]` on trait methods without bodies"##,
20307 default_severity: Severity::Allow,
20308 warn_since: None,
20309 deny_since: None,
20310 },
20311 Lint {
20312 label: "clippy::inspect_for_each",
20313 description: r##"Checks for usage of `inspect().for_each()`."##,
20314 default_severity: Severity::Allow,
20315 warn_since: None,
20316 deny_since: None,
20317 },
20318 Lint {
20319 label: "clippy::int_plus_one",
20320 description: r##"Checks for usage of `x >= y + 1` or `x - 1 >= y` (and `<=`) in a block"##,
20321 default_severity: Severity::Allow,
20322 warn_since: None,
20323 deny_since: None,
20324 },
20325 Lint {
20326 label: "clippy::integer_division",
20327 description: r##"Checks for division of integers"##,
20328 default_severity: Severity::Allow,
20329 warn_since: None,
20330 deny_since: None,
20331 },
20332 Lint {
20333 label: "clippy::integer_division_remainder_used",
20334 description: r##"Checks for the usage of division (`/`) and remainder (`%`) operations
20335when performed on any integer types using the default `Div` and `Rem` trait implementations."##,
20336 default_severity: Severity::Allow,
20337 warn_since: None,
20338 deny_since: None,
20339 },
20340 Lint {
20341 label: "clippy::into_iter_on_ref",
20342 description: r##"Checks for `into_iter` calls on references which should be replaced by `iter`
20343or `iter_mut`."##,
20344 default_severity: Severity::Allow,
20345 warn_since: None,
20346 deny_since: None,
20347 },
20348 Lint {
20349 label: "clippy::into_iter_without_iter",
20350 description: r##"This is the opposite of the `iter_without_into_iter` lint.
20351It looks for `IntoIterator for (&|&mut) Type` implementations without an inherent `iter` or `iter_mut` method
20352on the type or on any of the types in its `Deref` chain."##,
20353 default_severity: Severity::Allow,
20354 warn_since: None,
20355 deny_since: None,
20356 },
20357 Lint {
20358 label: "clippy::invalid_null_ptr_usage",
20359 description: r##"This lint checks for invalid usages of `ptr::null`."##,
20360 default_severity: Severity::Allow,
20361 warn_since: None,
20362 deny_since: None,
20363 },
20364 Lint {
20365 label: "clippy::invalid_regex",
20366 description: r##"Checks [regex](https://crates.io/crates/regex) creation
20367(with `Regex::new`, `RegexBuilder::new`, or `RegexSet::new`) for correct
20368regex syntax."##,
20369 default_severity: Severity::Allow,
20370 warn_since: None,
20371 deny_since: None,
20372 },
20373 Lint {
20374 label: "clippy::invalid_upcast_comparisons",
20375 description: r##"Checks for comparisons where the relation is always either
20376true or false, but where one side has been upcast so that the comparison is
20377necessary. Only integer types are checked."##,
20378 default_severity: Severity::Allow,
20379 warn_since: None,
20380 deny_since: None,
20381 },
20382 Lint {
20383 label: "clippy::inverted_saturating_sub",
20384 description: r##"Checks for comparisons between integers, followed by subtracting the greater value from the
20385lower one."##,
20386 default_severity: Severity::Allow,
20387 warn_since: None,
20388 deny_since: None,
20389 },
20390 Lint {
20391 label: "clippy::invisible_characters",
20392 description: r##"Checks for invisible Unicode characters in the code."##,
20393 default_severity: Severity::Allow,
20394 warn_since: None,
20395 deny_since: None,
20396 },
20397 Lint {
20398 label: "clippy::is_digit_ascii_radix",
20399 description: r##"Finds usages of [`char::is_digit`](https://doc.rust-lang.org/stable/std/primitive.char.html#method.is_digit) that
20400can be replaced with [`is_ascii_digit`](https://doc.rust-lang.org/stable/std/primitive.char.html#method.is_ascii_digit) or
20401[`is_ascii_hexdigit`](https://doc.rust-lang.org/stable/std/primitive.char.html#method.is_ascii_hexdigit)."##,
20402 default_severity: Severity::Allow,
20403 warn_since: None,
20404 deny_since: None,
20405 },
20406 Lint {
20407 label: "clippy::items_after_statements",
20408 description: r##"Checks for items declared after some statement in a block."##,
20409 default_severity: Severity::Allow,
20410 warn_since: None,
20411 deny_since: None,
20412 },
20413 Lint {
20414 label: "clippy::items_after_test_module",
20415 description: r##"Triggers if an item is declared after the testing module marked with `#[cfg(test)]`."##,
20416 default_severity: Severity::Allow,
20417 warn_since: None,
20418 deny_since: None,
20419 },
20420 Lint {
20421 label: "clippy::iter_cloned_collect",
20422 description: r##"Checks for the use of `.cloned().collect()` on slice to
20423create a `Vec`."##,
20424 default_severity: Severity::Allow,
20425 warn_since: None,
20426 deny_since: None,
20427 },
20428 Lint {
20429 label: "clippy::iter_count",
20430 description: r##"Checks for the use of `.iter().count()`."##,
20431 default_severity: Severity::Allow,
20432 warn_since: None,
20433 deny_since: None,
20434 },
20435 Lint {
20436 label: "clippy::iter_filter_is_ok",
20437 description: r##"Checks for usage of `.filter(Result::is_ok)` that may be replaced with a `.flatten()` call.
20438This lint will require additional changes to the follow-up calls as it affects the type."##,
20439 default_severity: Severity::Allow,
20440 warn_since: None,
20441 deny_since: None,
20442 },
20443 Lint {
20444 label: "clippy::iter_filter_is_some",
20445 description: r##"Checks for usage of `.filter(Option::is_some)` that may be replaced with a `.flatten()` call.
20446This lint will require additional changes to the follow-up calls as it affects the type."##,
20447 default_severity: Severity::Allow,
20448 warn_since: None,
20449 deny_since: None,
20450 },
20451 Lint {
20452 label: "clippy::iter_kv_map",
20453 description: r##"Checks for iterating a map (`HashMap` or `BTreeMap`) and
20454ignoring either the keys or values."##,
20455 default_severity: Severity::Allow,
20456 warn_since: None,
20457 deny_since: None,
20458 },
20459 Lint {
20460 label: "clippy::iter_next_loop",
20461 description: r##"Checks for loops on `x.next()`."##,
20462 default_severity: Severity::Allow,
20463 warn_since: None,
20464 deny_since: None,
20465 },
20466 Lint {
20467 label: "clippy::iter_next_slice",
20468 description: r##"Checks for usage of `iter().next()` on a Slice or an Array"##,
20469 default_severity: Severity::Allow,
20470 warn_since: None,
20471 deny_since: None,
20472 },
20473 Lint {
20474 label: "clippy::iter_not_returning_iterator",
20475 description: r##"Detects methods named `iter` or `iter_mut` that do not have a return type that implements `Iterator`."##,
20476 default_severity: Severity::Allow,
20477 warn_since: None,
20478 deny_since: None,
20479 },
20480 Lint {
20481 label: "clippy::iter_nth",
20482 description: r##"Checks for usage of `.iter().nth()`/`.iter_mut().nth()` on standard library types that have
20483equivalent `.get()`/`.get_mut()` methods."##,
20484 default_severity: Severity::Allow,
20485 warn_since: None,
20486 deny_since: None,
20487 },
20488 Lint {
20489 label: "clippy::iter_nth_zero",
20490 description: r##"Checks for the use of `iter.nth(0)`."##,
20491 default_severity: Severity::Allow,
20492 warn_since: None,
20493 deny_since: None,
20494 },
20495 Lint {
20496 label: "clippy::iter_on_empty_collections",
20497 description: r##"Checks for calls to `iter`, `iter_mut` or `into_iter` on empty collections"##,
20498 default_severity: Severity::Allow,
20499 warn_since: None,
20500 deny_since: None,
20501 },
20502 Lint {
20503 label: "clippy::iter_on_single_items",
20504 description: r##"Checks for calls to `iter`, `iter_mut` or `into_iter` on collections containing a single item"##,
20505 default_severity: Severity::Allow,
20506 warn_since: None,
20507 deny_since: None,
20508 },
20509 Lint {
20510 label: "clippy::iter_out_of_bounds",
20511 description: r##"Looks for iterator combinator calls such as `.take(x)` or `.skip(x)`
20512where `x` is greater than the amount of items that an iterator will produce."##,
20513 default_severity: Severity::Allow,
20514 warn_since: None,
20515 deny_since: None,
20516 },
20517 Lint {
20518 label: "clippy::iter_over_hash_type",
20519 description: r##"This is a restriction lint which prevents the use of hash types (i.e., `HashSet` and `HashMap`) in for loops."##,
20520 default_severity: Severity::Allow,
20521 warn_since: None,
20522 deny_since: None,
20523 },
20524 Lint {
20525 label: "clippy::iter_overeager_cloned",
20526 description: r##"Checks for usage of `_.cloned().<func>()` where call to `.cloned()` can be postponed."##,
20527 default_severity: Severity::Allow,
20528 warn_since: None,
20529 deny_since: None,
20530 },
20531 Lint {
20532 label: "clippy::iter_skip_next",
20533 description: r##"Checks for usage of `.skip(x).next()` on iterators."##,
20534 default_severity: Severity::Allow,
20535 warn_since: None,
20536 deny_since: None,
20537 },
20538 Lint {
20539 label: "clippy::iter_skip_zero",
20540 description: r##"Checks for usage of `.skip(0)` on iterators."##,
20541 default_severity: Severity::Allow,
20542 warn_since: None,
20543 deny_since: None,
20544 },
20545 Lint {
20546 label: "clippy::iter_with_drain",
20547 description: r##"Checks for usage of `.drain(..)` on `Vec` and `VecDeque` for iteration."##,
20548 default_severity: Severity::Allow,
20549 warn_since: None,
20550 deny_since: None,
20551 },
20552 Lint {
20553 label: "clippy::iter_without_into_iter",
20554 description: r##"Looks for `iter` and `iter_mut` methods without an associated `IntoIterator for (&|&mut) Type` implementation."##,
20555 default_severity: Severity::Allow,
20556 warn_since: None,
20557 deny_since: None,
20558 },
20559 Lint {
20560 label: "clippy::iterator_step_by_zero",
20561 description: r##"Checks for calling `.step_by(0)` on iterators which panics."##,
20562 default_severity: Severity::Allow,
20563 warn_since: None,
20564 deny_since: None,
20565 },
20566 Lint {
20567 label: "clippy::join_absolute_paths",
20568 description: r##"Checks for calls to `Path::join` that start with a path separator (`\\\\` or `/`)."##,
20569 default_severity: Severity::Allow,
20570 warn_since: None,
20571 deny_since: None,
20572 },
20573 Lint {
20574 label: "clippy::just_underscores_and_digits",
20575 description: r##"Checks if you have variables whose name consists of just
20576underscores and digits."##,
20577 default_severity: Severity::Allow,
20578 warn_since: None,
20579 deny_since: None,
20580 },
20581 Lint {
20582 label: "clippy::large_const_arrays",
20583 description: r##"Checks for large `const` arrays that should
20584be defined as `static` instead."##,
20585 default_severity: Severity::Allow,
20586 warn_since: None,
20587 deny_since: None,
20588 },
20589 Lint {
20590 label: "clippy::large_digit_groups",
20591 description: r##"Warns if the digits of an integral or floating-point
20592constant are grouped into groups that
20593are too large."##,
20594 default_severity: Severity::Allow,
20595 warn_since: None,
20596 deny_since: None,
20597 },
20598 Lint {
20599 label: "clippy::large_enum_variant",
20600 description: r##"Checks for large size differences between variants on
20601`enum`s."##,
20602 default_severity: Severity::Allow,
20603 warn_since: None,
20604 deny_since: None,
20605 },
20606 Lint {
20607 label: "clippy::large_futures",
20608 description: r##"It checks for the size of a `Future` created by `async fn` or `async {}`."##,
20609 default_severity: Severity::Allow,
20610 warn_since: None,
20611 deny_since: None,
20612 },
20613 Lint {
20614 label: "clippy::large_include_file",
20615 description: r##"Checks for the inclusion of large files via `include_bytes!()`
20616or `include_str!()`."##,
20617 default_severity: Severity::Allow,
20618 warn_since: None,
20619 deny_since: None,
20620 },
20621 Lint {
20622 label: "clippy::large_stack_arrays",
20623 description: r##"Checks for local arrays that may be too large."##,
20624 default_severity: Severity::Allow,
20625 warn_since: None,
20626 deny_since: None,
20627 },
20628 Lint {
20629 label: "clippy::large_stack_frames",
20630 description: r##"Checks for functions that use a lot of stack space.
20631
20632This often happens when constructing a large type, such as an array with a lot of elements,
20633or constructing *many* smaller-but-still-large structs, or copying around a lot of large types.
20634
20635This lint is a more general version of [`large_stack_arrays`](https://rust-lang.github.io/rust-clippy/master/#large_stack_arrays)
20636that is intended to look at functions as a whole instead of only individual array expressions inside of a function."##,
20637 default_severity: Severity::Allow,
20638 warn_since: None,
20639 deny_since: None,
20640 },
20641 Lint {
20642 label: "clippy::large_types_passed_by_value",
20643 description: r##"Checks for functions taking arguments by value, where
20644the argument type is `Copy` and large enough to be worth considering
20645passing by reference. Does not trigger if the function is being exported,
20646because that might induce API breakage, if the parameter is declared as mutable,
20647or if the argument is a `self`."##,
20648 default_severity: Severity::Allow,
20649 warn_since: None,
20650 deny_since: None,
20651 },
20652 Lint {
20653 label: "clippy::legacy_numeric_constants",
20654 description: r##"Checks for usage of `<integer>::max_value()`, `std::<integer>::MAX`,
20655`std::<float>::EPSILON`, etc."##,
20656 default_severity: Severity::Allow,
20657 warn_since: None,
20658 deny_since: None,
20659 },
20660 Lint {
20661 label: "clippy::len_without_is_empty",
20662 description: r##"Checks for items that implement `.len()` but not
20663`.is_empty()`."##,
20664 default_severity: Severity::Allow,
20665 warn_since: None,
20666 deny_since: None,
20667 },
20668 Lint {
20669 label: "clippy::len_zero",
20670 description: r##"Checks for getting the length of something via `.len()`
20671just to compare to zero, and suggests using `.is_empty()` where applicable."##,
20672 default_severity: Severity::Allow,
20673 warn_since: None,
20674 deny_since: None,
20675 },
20676 Lint {
20677 label: "clippy::let_and_return",
20678 description: r##"Checks for `let`-bindings, which are subsequently
20679returned."##,
20680 default_severity: Severity::Allow,
20681 warn_since: None,
20682 deny_since: None,
20683 },
20684 Lint {
20685 label: "clippy::let_underscore_future",
20686 description: r##"Checks for `let _ = <expr>` where the resulting type of expr implements `Future`"##,
20687 default_severity: Severity::Allow,
20688 warn_since: None,
20689 deny_since: None,
20690 },
20691 Lint {
20692 label: "clippy::let_underscore_lock",
20693 description: r##"Checks for `let _ = sync_lock`. This supports `mutex` and `rwlock` in
20694`parking_lot`. For `std` locks see the `rustc` lint
20695[`let_underscore_lock`](https://doc.rust-lang.org/nightly/rustc/lints/listing/deny-by-default.html#let-underscore-lock)"##,
20696 default_severity: Severity::Allow,
20697 warn_since: None,
20698 deny_since: None,
20699 },
20700 Lint {
20701 label: "clippy::let_underscore_must_use",
20702 description: r##"Checks for `let _ = <expr>` where expr is `#[must_use]`"##,
20703 default_severity: Severity::Allow,
20704 warn_since: None,
20705 deny_since: None,
20706 },
20707 Lint {
20708 label: "clippy::let_underscore_untyped",
20709 description: r##"Checks for `let _ = <expr>` without a type annotation, and suggests to either provide one,
20710or remove the `let` keyword altogether."##,
20711 default_severity: Severity::Allow,
20712 warn_since: None,
20713 deny_since: None,
20714 },
20715 Lint {
20716 label: "clippy::let_unit_value",
20717 description: r##"Checks for binding a unit value."##,
20718 default_severity: Severity::Allow,
20719 warn_since: None,
20720 deny_since: None,
20721 },
20722 Lint {
20723 label: "clippy::let_with_type_underscore",
20724 description: r##"Detects when a variable is declared with an explicit type of `_`."##,
20725 default_severity: Severity::Allow,
20726 warn_since: None,
20727 deny_since: None,
20728 },
20729 Lint {
20730 label: "clippy::lines_filter_map_ok",
20731 description: r##"Checks for usage of `lines.filter_map(Result::ok)` or `lines.flat_map(Result::ok)`
20732when `lines` has type `std::io::Lines`."##,
20733 default_severity: Severity::Allow,
20734 warn_since: None,
20735 deny_since: None,
20736 },
20737 Lint {
20738 label: "clippy::linkedlist",
20739 description: r##"Checks for usage of any `LinkedList`, suggesting to use a
20740`Vec` or a `VecDeque` (formerly called `RingBuf`)."##,
20741 default_severity: Severity::Allow,
20742 warn_since: None,
20743 deny_since: None,
20744 },
20745 Lint {
20746 label: "clippy::lint_groups_priority",
20747 description: r##"Checks for lint groups with the same priority as lints in the `Cargo.toml`
20748[`[lints]` table](https://doc.rust-lang.org/cargo/reference/manifest.html#the-lints-section).
20749
20750This lint will be removed once [cargo#12918](https://github.com/rust-lang/cargo/issues/12918)
20751is resolved."##,
20752 default_severity: Severity::Allow,
20753 warn_since: None,
20754 deny_since: None,
20755 },
20756 Lint {
20757 label: "clippy::little_endian_bytes",
20758 description: r##"Checks for the usage of the `to_le_bytes` method and/or the function `from_le_bytes`."##,
20759 default_severity: Severity::Allow,
20760 warn_since: None,
20761 deny_since: None,
20762 },
20763 Lint {
20764 label: "clippy::lossy_float_literal",
20765 description: r##"Checks for whole number float literals that
20766cannot be represented as the underlying type without loss."##,
20767 default_severity: Severity::Allow,
20768 warn_since: None,
20769 deny_since: None,
20770 },
20771 Lint {
20772 label: "clippy::macro_metavars_in_unsafe",
20773 description: r##"Looks for macros that expand metavariables in an unsafe block."##,
20774 default_severity: Severity::Allow,
20775 warn_since: None,
20776 deny_since: None,
20777 },
20778 Lint {
20779 label: "clippy::macro_use_imports",
20780 description: r##"Checks for `#[macro_use] use...`."##,
20781 default_severity: Severity::Allow,
20782 warn_since: None,
20783 deny_since: None,
20784 },
20785 Lint {
20786 label: "clippy::main_recursion",
20787 description: r##"Checks for recursion using the entrypoint."##,
20788 default_severity: Severity::Allow,
20789 warn_since: None,
20790 deny_since: None,
20791 },
20792 Lint {
20793 label: "clippy::manual_assert",
20794 description: r##"Detects `if`-then-`panic!` that can be replaced with `assert!`."##,
20795 default_severity: Severity::Allow,
20796 warn_since: None,
20797 deny_since: None,
20798 },
20799 Lint {
20800 label: "clippy::manual_async_fn",
20801 description: r##"It checks for manual implementations of `async` functions."##,
20802 default_severity: Severity::Allow,
20803 warn_since: None,
20804 deny_since: None,
20805 },
20806 Lint {
20807 label: "clippy::manual_bits",
20808 description: r##"Checks for usage of `std::mem::size_of::<T>() * 8` when
20809`T::BITS` is available."##,
20810 default_severity: Severity::Allow,
20811 warn_since: None,
20812 deny_since: None,
20813 },
20814 Lint {
20815 label: "clippy::manual_c_str_literals",
20816 description: r##"Checks for the manual creation of C strings (a string with a `NUL` byte at the end), either
20817through one of the `CStr` constructor functions, or more plainly by calling `.as_ptr()`
20818on a (byte) string literal with a hardcoded `\\0` byte at the end."##,
20819 default_severity: Severity::Allow,
20820 warn_since: None,
20821 deny_since: None,
20822 },
20823 Lint {
20824 label: "clippy::manual_clamp",
20825 description: r##"Identifies good opportunities for a clamp function from std or core, and suggests using it."##,
20826 default_severity: Severity::Allow,
20827 warn_since: None,
20828 deny_since: None,
20829 },
20830 Lint {
20831 label: "clippy::manual_div_ceil",
20832 description: r##"Checks for an expression like `(x + (y - 1)) / y` which is a common manual reimplementation
20833of `x.div_ceil(y)`."##,
20834 default_severity: Severity::Allow,
20835 warn_since: None,
20836 deny_since: None,
20837 },
20838 Lint {
20839 label: "clippy::manual_filter",
20840 description: r##"Checks for usage of `match` which could be implemented using `filter`"##,
20841 default_severity: Severity::Allow,
20842 warn_since: None,
20843 deny_since: None,
20844 },
20845 Lint {
20846 label: "clippy::manual_filter_map",
20847 description: r##"Checks for usage of `_.filter(_).map(_)` that can be written more simply
20848as `filter_map(_)`."##,
20849 default_severity: Severity::Allow,
20850 warn_since: None,
20851 deny_since: None,
20852 },
20853 Lint {
20854 label: "clippy::manual_find",
20855 description: r##"Checks for manual implementations of Iterator::find"##,
20856 default_severity: Severity::Allow,
20857 warn_since: None,
20858 deny_since: None,
20859 },
20860 Lint {
20861 label: "clippy::manual_find_map",
20862 description: r##"Checks for usage of `_.find(_).map(_)` that can be written more simply
20863as `find_map(_)`."##,
20864 default_severity: Severity::Allow,
20865 warn_since: None,
20866 deny_since: None,
20867 },
20868 Lint {
20869 label: "clippy::manual_flatten",
20870 description: r##"Checks for unnecessary `if let` usage in a for loop
20871where only the `Some` or `Ok` variant of the iterator element is used."##,
20872 default_severity: Severity::Allow,
20873 warn_since: None,
20874 deny_since: None,
20875 },
20876 Lint {
20877 label: "clippy::manual_hash_one",
20878 description: r##"Checks for cases where [`BuildHasher::hash_one`] can be used.
20879
20880[`BuildHasher::hash_one`]: https://doc.rust-lang.org/std/hash/trait.BuildHasher.html#method.hash_one"##,
20881 default_severity: Severity::Allow,
20882 warn_since: None,
20883 deny_since: None,
20884 },
20885 Lint {
20886 label: "clippy::manual_inspect",
20887 description: r##"Checks for uses of `map` which return the original item."##,
20888 default_severity: Severity::Allow,
20889 warn_since: None,
20890 deny_since: None,
20891 },
20892 Lint {
20893 label: "clippy::manual_instant_elapsed",
20894 description: r##"Lints subtraction between `Instant::now()` and another `Instant`."##,
20895 default_severity: Severity::Allow,
20896 warn_since: None,
20897 deny_since: None,
20898 },
20899 Lint {
20900 label: "clippy::manual_is_ascii_check",
20901 description: r##"Suggests to use dedicated built-in methods,
20902`is_ascii_(lowercase|uppercase|digit|hexdigit)` for checking on corresponding
20903ascii range"##,
20904 default_severity: Severity::Allow,
20905 warn_since: None,
20906 deny_since: None,
20907 },
20908 Lint {
20909 label: "clippy::manual_is_finite",
20910 description: r##"Checks for manual `is_finite` reimplementations
20911(i.e., `x != <float>::INFINITY && x != <float>::NEG_INFINITY`)."##,
20912 default_severity: Severity::Allow,
20913 warn_since: None,
20914 deny_since: None,
20915 },
20916 Lint {
20917 label: "clippy::manual_is_infinite",
20918 description: r##"Checks for manual `is_infinite` reimplementations
20919(i.e., `x == <float>::INFINITY || x == <float>::NEG_INFINITY`)."##,
20920 default_severity: Severity::Allow,
20921 warn_since: None,
20922 deny_since: None,
20923 },
20924 Lint {
20925 label: "clippy::manual_is_power_of_two",
20926 description: r##"Checks for expressions like `x.count_ones() == 1` or `x & (x - 1) == 0`, with x and unsigned integer, which are manual
20927reimplementations of `x.is_power_of_two()`."##,
20928 default_severity: Severity::Allow,
20929 warn_since: None,
20930 deny_since: None,
20931 },
20932 Lint {
20933 label: "clippy::manual_is_variant_and",
20934 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."##,
20935 default_severity: Severity::Allow,
20936 warn_since: None,
20937 deny_since: None,
20938 },
20939 Lint {
20940 label: "clippy::manual_let_else",
20941 description: r##"Warn of cases where `let...else` could be used"##,
20942 default_severity: Severity::Allow,
20943 warn_since: None,
20944 deny_since: None,
20945 },
20946 Lint {
20947 label: "clippy::manual_main_separator_str",
20948 description: r##"Checks for references on `std::path::MAIN_SEPARATOR.to_string()` used
20949to build a `&str`."##,
20950 default_severity: Severity::Allow,
20951 warn_since: None,
20952 deny_since: None,
20953 },
20954 Lint {
20955 label: "clippy::manual_map",
20956 description: r##"Checks for usage of `match` which could be implemented using `map`"##,
20957 default_severity: Severity::Allow,
20958 warn_since: None,
20959 deny_since: None,
20960 },
20961 Lint {
20962 label: "clippy::manual_memcpy",
20963 description: r##"Checks for for-loops that manually copy items between
20964slices that could be optimized by having a memcpy."##,
20965 default_severity: Severity::Allow,
20966 warn_since: None,
20967 deny_since: None,
20968 },
20969 Lint {
20970 label: "clippy::manual_next_back",
20971 description: r##"Checks for `.rev().next()` on a `DoubleEndedIterator`"##,
20972 default_severity: Severity::Allow,
20973 warn_since: None,
20974 deny_since: None,
20975 },
20976 Lint {
20977 label: "clippy::manual_non_exhaustive",
20978 description: r##"Checks for manual implementations of the non-exhaustive pattern."##,
20979 default_severity: Severity::Allow,
20980 warn_since: None,
20981 deny_since: None,
20982 },
20983 Lint {
20984 label: "clippy::manual_ok_or",
20985 description: r##"Finds patterns that reimplement `Option::ok_or`."##,
20986 default_severity: Severity::Allow,
20987 warn_since: None,
20988 deny_since: None,
20989 },
20990 Lint {
20991 label: "clippy::manual_pattern_char_comparison",
20992 description: r##"Checks for manual `char` comparison in string patterns"##,
20993 default_severity: Severity::Allow,
20994 warn_since: None,
20995 deny_since: None,
20996 },
20997 Lint {
20998 label: "clippy::manual_range_contains",
20999 description: r##"Checks for expressions like `x >= 3 && x < 8` that could
21000be more readably expressed as `(3..8).contains(x)`."##,
21001 default_severity: Severity::Allow,
21002 warn_since: None,
21003 deny_since: None,
21004 },
21005 Lint {
21006 label: "clippy::manual_range_patterns",
21007 description: r##"Looks for combined OR patterns that are all contained in a specific range,
21008e.g. `6 | 4 | 5 | 9 | 7 | 8` can be rewritten as `4..=9`."##,
21009 default_severity: Severity::Allow,
21010 warn_since: None,
21011 deny_since: None,
21012 },
21013 Lint {
21014 label: "clippy::manual_rem_euclid",
21015 description: r##"Checks for an expression like `((x % 4) + 4) % 4` which is a common manual reimplementation
21016of `x.rem_euclid(4)`."##,
21017 default_severity: Severity::Allow,
21018 warn_since: None,
21019 deny_since: None,
21020 },
21021 Lint {
21022 label: "clippy::manual_retain",
21023 description: r##"Checks for code to be replaced by `.retain()`."##,
21024 default_severity: Severity::Allow,
21025 warn_since: None,
21026 deny_since: None,
21027 },
21028 Lint {
21029 label: "clippy::manual_rotate",
21030 description: r##"It detects manual bit rotations that could be rewritten using standard
21031functions `rotate_left` or `rotate_right`."##,
21032 default_severity: Severity::Allow,
21033 warn_since: None,
21034 deny_since: None,
21035 },
21036 Lint {
21037 label: "clippy::manual_saturating_arithmetic",
21038 description: r##"Checks for `.checked_add/sub(x).unwrap_or(MAX/MIN)`."##,
21039 default_severity: Severity::Allow,
21040 warn_since: None,
21041 deny_since: None,
21042 },
21043 Lint {
21044 label: "clippy::manual_slice_size_calculation",
21045 description: r##"When `a` is `&[T]`, detect `a.len() * size_of::<T>()` and suggest `size_of_val(a)`
21046instead."##,
21047 default_severity: Severity::Allow,
21048 warn_since: None,
21049 deny_since: None,
21050 },
21051 Lint {
21052 label: "clippy::manual_split_once",
21053 description: r##"Checks for usage of `str::splitn(2, _)`"##,
21054 default_severity: Severity::Allow,
21055 warn_since: None,
21056 deny_since: None,
21057 },
21058 Lint {
21059 label: "clippy::manual_str_repeat",
21060 description: r##"Checks for manual implementations of `str::repeat`"##,
21061 default_severity: Severity::Allow,
21062 warn_since: None,
21063 deny_since: None,
21064 },
21065 Lint {
21066 label: "clippy::manual_string_new",
21067 description: r##"Checks for usage of `` to create a `String`, such as `.to_string()`, `.to_owned()`,
21068`String::from()` and others."##,
21069 default_severity: Severity::Allow,
21070 warn_since: None,
21071 deny_since: None,
21072 },
21073 Lint {
21074 label: "clippy::manual_strip",
21075 description: r##"Suggests using `strip_{prefix,suffix}` over `str::{starts,ends}_with` and slicing using
21076the pattern's length."##,
21077 default_severity: Severity::Allow,
21078 warn_since: None,
21079 deny_since: None,
21080 },
21081 Lint {
21082 label: "clippy::manual_swap",
21083 description: r##"Checks for manual swapping.
21084
21085Note that the lint will not be emitted in const blocks, as the suggestion would not be applicable."##,
21086 default_severity: Severity::Allow,
21087 warn_since: None,
21088 deny_since: None,
21089 },
21090 Lint {
21091 label: "clippy::manual_try_fold",
21092 description: r##"Checks for usage of `Iterator::fold` with a type that implements `Try`."##,
21093 default_severity: Severity::Allow,
21094 warn_since: None,
21095 deny_since: None,
21096 },
21097 Lint {
21098 label: "clippy::manual_unwrap_or",
21099 description: r##"Finds patterns that reimplement `Option::unwrap_or` or `Result::unwrap_or`."##,
21100 default_severity: Severity::Allow,
21101 warn_since: None,
21102 deny_since: None,
21103 },
21104 Lint {
21105 label: "clippy::manual_unwrap_or_default",
21106 description: r##"Checks if a `match` or `if let` expression can be simplified using
21107`.unwrap_or_default()`."##,
21108 default_severity: Severity::Allow,
21109 warn_since: None,
21110 deny_since: None,
21111 },
21112 Lint {
21113 label: "clippy::manual_while_let_some",
21114 description: r##"Looks for loops that check for emptiness of a `Vec` in the condition and pop an element
21115in the body as a separate operation."##,
21116 default_severity: Severity::Allow,
21117 warn_since: None,
21118 deny_since: None,
21119 },
21120 Lint {
21121 label: "clippy::many_single_char_names",
21122 description: r##"Checks for too many variables whose name consists of a
21123single character."##,
21124 default_severity: Severity::Allow,
21125 warn_since: None,
21126 deny_since: None,
21127 },
21128 Lint {
21129 label: "clippy::map_clone",
21130 description: r##"Checks for usage of `map(|x| x.clone())` or
21131dereferencing closures for `Copy` types, on `Iterator` or `Option`,
21132and suggests `cloned()` or `copied()` instead"##,
21133 default_severity: Severity::Allow,
21134 warn_since: None,
21135 deny_since: None,
21136 },
21137 Lint {
21138 label: "clippy::map_collect_result_unit",
21139 description: r##"Checks for usage of `_.map(_).collect::<Result<(), _>()`."##,
21140 default_severity: Severity::Allow,
21141 warn_since: None,
21142 deny_since: None,
21143 },
21144 Lint {
21145 label: "clippy::map_entry",
21146 description: r##"Checks for usage of `contains_key` + `insert` on `HashMap`
21147or `BTreeMap`."##,
21148 default_severity: Severity::Allow,
21149 warn_since: None,
21150 deny_since: None,
21151 },
21152 Lint {
21153 label: "clippy::map_err_ignore",
21154 description: r##"Checks for instances of `map_err(|_| Some::Enum)`"##,
21155 default_severity: Severity::Allow,
21156 warn_since: None,
21157 deny_since: None,
21158 },
21159 Lint {
21160 label: "clippy::map_flatten",
21161 description: r##"Checks for usage of `_.map(_).flatten(_)` on `Iterator` and `Option`"##,
21162 default_severity: Severity::Allow,
21163 warn_since: None,
21164 deny_since: None,
21165 },
21166 Lint {
21167 label: "clippy::map_identity",
21168 description: r##"Checks for instances of `map(f)` where `f` is the identity function."##,
21169 default_severity: Severity::Allow,
21170 warn_since: None,
21171 deny_since: None,
21172 },
21173 Lint {
21174 label: "clippy::map_unwrap_or",
21175 description: r##"Checks for usage of `option.map(_).unwrap_or(_)` or `option.map(_).unwrap_or_else(_)` or
21176`result.map(_).unwrap_or_else(_)`."##,
21177 default_severity: Severity::Allow,
21178 warn_since: None,
21179 deny_since: None,
21180 },
21181 Lint {
21182 label: "clippy::match_as_ref",
21183 description: r##"Checks for match which is used to add a reference to an
21184`Option` value."##,
21185 default_severity: Severity::Allow,
21186 warn_since: None,
21187 deny_since: None,
21188 },
21189 Lint {
21190 label: "clippy::match_bool",
21191 description: r##"Checks for matches where match expression is a `bool`. It
21192suggests to replace the expression with an `if...else` block."##,
21193 default_severity: Severity::Allow,
21194 warn_since: None,
21195 deny_since: None,
21196 },
21197 Lint {
21198 label: "clippy::match_like_matches_macro",
21199 description: r##"Checks for `match` or `if let` expressions producing a
21200`bool` that could be written using `matches!`"##,
21201 default_severity: Severity::Allow,
21202 warn_since: None,
21203 deny_since: None,
21204 },
21205 Lint {
21206 label: "clippy::match_on_vec_items",
21207 description: r##"Checks for `match vec[idx]` or `match vec[n..m]`."##,
21208 default_severity: Severity::Allow,
21209 warn_since: None,
21210 deny_since: None,
21211 },
21212 Lint {
21213 label: "clippy::match_overlapping_arm",
21214 description: r##"Checks for overlapping match arms."##,
21215 default_severity: Severity::Allow,
21216 warn_since: None,
21217 deny_since: None,
21218 },
21219 Lint {
21220 label: "clippy::match_ref_pats",
21221 description: r##"Checks for matches where all arms match a reference,
21222suggesting to remove the reference and deref the matched expression
21223instead. It also checks for `if let &foo = bar` blocks."##,
21224 default_severity: Severity::Allow,
21225 warn_since: None,
21226 deny_since: None,
21227 },
21228 Lint {
21229 label: "clippy::match_result_ok",
21230 description: r##"Checks for unnecessary `ok()` in `while let`."##,
21231 default_severity: Severity::Allow,
21232 warn_since: None,
21233 deny_since: None,
21234 },
21235 Lint {
21236 label: "clippy::match_same_arms",
21237 description: r##"Checks for `match` with identical arm bodies.
21238
21239Note: Does not lint on wildcards if the `non_exhaustive_omitted_patterns_lint` feature is
21240enabled and disallowed."##,
21241 default_severity: Severity::Allow,
21242 warn_since: None,
21243 deny_since: None,
21244 },
21245 Lint {
21246 label: "clippy::match_single_binding",
21247 description: r##"Checks for useless match that binds to only one value."##,
21248 default_severity: Severity::Allow,
21249 warn_since: None,
21250 deny_since: None,
21251 },
21252 Lint {
21253 label: "clippy::match_str_case_mismatch",
21254 description: r##"Checks for `match` expressions modifying the case of a string with non-compliant arms"##,
21255 default_severity: Severity::Allow,
21256 warn_since: None,
21257 deny_since: None,
21258 },
21259 Lint {
21260 label: "clippy::match_wild_err_arm",
21261 description: r##"Checks for arm which matches all errors with `Err(_)`
21262and take drastic actions like `panic!`."##,
21263 default_severity: Severity::Allow,
21264 warn_since: None,
21265 deny_since: None,
21266 },
21267 Lint {
21268 label: "clippy::match_wildcard_for_single_variants",
21269 description: r##"Checks for wildcard enum matches for a single variant."##,
21270 default_severity: Severity::Allow,
21271 warn_since: None,
21272 deny_since: None,
21273 },
21274 Lint {
21275 label: "clippy::maybe_infinite_iter",
21276 description: r##"Checks for iteration that may be infinite."##,
21277 default_severity: Severity::Allow,
21278 warn_since: None,
21279 deny_since: None,
21280 },
21281 Lint {
21282 label: "clippy::mem_forget",
21283 description: r##"Checks for usage of `std::mem::forget(t)` where `t` is
21284`Drop` or has a field that implements `Drop`."##,
21285 default_severity: Severity::Allow,
21286 warn_since: None,
21287 deny_since: None,
21288 },
21289 Lint {
21290 label: "clippy::mem_replace_option_with_none",
21291 description: r##"Checks for `mem::replace()` on an `Option` with
21292`None`."##,
21293 default_severity: Severity::Allow,
21294 warn_since: None,
21295 deny_since: None,
21296 },
21297 Lint {
21298 label: "clippy::mem_replace_with_default",
21299 description: r##"Checks for `std::mem::replace` on a value of type
21300`T` with `T::default()`."##,
21301 default_severity: Severity::Allow,
21302 warn_since: None,
21303 deny_since: None,
21304 },
21305 Lint {
21306 label: "clippy::mem_replace_with_uninit",
21307 description: r##"Checks for `mem::replace(&mut _, mem::uninitialized())`
21308and `mem::replace(&mut _, mem::zeroed())`."##,
21309 default_severity: Severity::Allow,
21310 warn_since: None,
21311 deny_since: None,
21312 },
21313 Lint {
21314 label: "clippy::min_ident_chars",
21315 description: r##"Checks for identifiers which consist of a single character (or fewer than the configured threshold).
21316
21317Note: This lint can be very noisy when enabled; it may be desirable to only enable it
21318temporarily."##,
21319 default_severity: Severity::Allow,
21320 warn_since: None,
21321 deny_since: None,
21322 },
21323 Lint {
21324 label: "clippy::min_max",
21325 description: r##"Checks for expressions where `std::cmp::min` and `max` are
21326used to clamp values, but switched so that the result is constant."##,
21327 default_severity: Severity::Allow,
21328 warn_since: None,
21329 deny_since: None,
21330 },
21331 Lint {
21332 label: "clippy::misaligned_transmute",
21333 description: r##"Nothing. This lint has been deprecated"##,
21334 default_severity: Severity::Allow,
21335 warn_since: None,
21336 deny_since: None,
21337 },
21338 Lint {
21339 label: "clippy::mismatching_type_param_order",
21340 description: r##"Checks for type parameters which are positioned inconsistently between
21341a type definition and impl block. Specifically, a parameter in an impl
21342block which has the same name as a parameter in the type def, but is in
21343a different place."##,
21344 default_severity: Severity::Allow,
21345 warn_since: None,
21346 deny_since: None,
21347 },
21348 Lint {
21349 label: "clippy::misnamed_getters",
21350 description: r##"Checks for getter methods that return a field that doesn't correspond
21351to the name of the method, when there is a field's whose name matches that of the method."##,
21352 default_severity: Severity::Allow,
21353 warn_since: None,
21354 deny_since: None,
21355 },
21356 Lint {
21357 label: "clippy::misrefactored_assign_op",
21358 description: r##"Checks for `a op= a op b` or `a op= b op a` patterns."##,
21359 default_severity: Severity::Allow,
21360 warn_since: None,
21361 deny_since: None,
21362 },
21363 Lint {
21364 label: "clippy::missing_assert_message",
21365 description: r##"Checks assertions without a custom panic message."##,
21366 default_severity: Severity::Allow,
21367 warn_since: None,
21368 deny_since: None,
21369 },
21370 Lint {
21371 label: "clippy::missing_asserts_for_indexing",
21372 description: r##"Checks for repeated slice indexing without asserting beforehand that the length
21373is greater than the largest index used to index into the slice."##,
21374 default_severity: Severity::Allow,
21375 warn_since: None,
21376 deny_since: None,
21377 },
21378 Lint {
21379 label: "clippy::missing_const_for_fn",
21380 description: r##"Suggests the use of `const` in functions and methods where possible."##,
21381 default_severity: Severity::Allow,
21382 warn_since: None,
21383 deny_since: None,
21384 },
21385 Lint {
21386 label: "clippy::missing_const_for_thread_local",
21387 description: r##"Suggests to use `const` in `thread_local!` macro if possible."##,
21388 default_severity: Severity::Allow,
21389 warn_since: None,
21390 deny_since: None,
21391 },
21392 Lint {
21393 label: "clippy::missing_docs_in_private_items",
21394 description: r##"Warns if there is missing documentation for any private documentable item."##,
21395 default_severity: Severity::Allow,
21396 warn_since: None,
21397 deny_since: None,
21398 },
21399 Lint {
21400 label: "clippy::missing_enforced_import_renames",
21401 description: r##"Checks for imports that do not rename the item as specified
21402in the `enforced-import-renames` config option.
21403
21404Note: Even though this lint is warn-by-default, it will only trigger if
21405import renames are defined in the `clippy.toml` file."##,
21406 default_severity: Severity::Allow,
21407 warn_since: None,
21408 deny_since: None,
21409 },
21410 Lint {
21411 label: "clippy::missing_errors_doc",
21412 description: r##"Checks the doc comments of publicly visible functions that
21413return a `Result` type and warns if there is no `# Errors` section."##,
21414 default_severity: Severity::Allow,
21415 warn_since: None,
21416 deny_since: None,
21417 },
21418 Lint {
21419 label: "clippy::missing_fields_in_debug",
21420 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."##,
21421 default_severity: Severity::Allow,
21422 warn_since: None,
21423 deny_since: None,
21424 },
21425 Lint {
21426 label: "clippy::missing_inline_in_public_items",
21427 description: r##"It lints if an exported function, method, trait method with default impl,
21428or trait method impl is not `#[inline]`."##,
21429 default_severity: Severity::Allow,
21430 warn_since: None,
21431 deny_since: None,
21432 },
21433 Lint {
21434 label: "clippy::missing_panics_doc",
21435 description: r##"Checks the doc comments of publicly visible functions that
21436may panic and warns if there is no `# Panics` section."##,
21437 default_severity: Severity::Allow,
21438 warn_since: None,
21439 deny_since: None,
21440 },
21441 Lint {
21442 label: "clippy::missing_safety_doc",
21443 description: r##"Checks for the doc comments of publicly visible
21444unsafe functions and warns if there is no `# Safety` section."##,
21445 default_severity: Severity::Allow,
21446 warn_since: None,
21447 deny_since: None,
21448 },
21449 Lint {
21450 label: "clippy::missing_spin_loop",
21451 description: r##"Checks for empty spin loops"##,
21452 default_severity: Severity::Allow,
21453 warn_since: None,
21454 deny_since: None,
21455 },
21456 Lint {
21457 label: "clippy::missing_trait_methods",
21458 description: r##"Checks if a provided method is used implicitly by a trait
21459implementation."##,
21460 default_severity: Severity::Allow,
21461 warn_since: None,
21462 deny_since: None,
21463 },
21464 Lint {
21465 label: "clippy::missing_transmute_annotations",
21466 description: r##"Checks if transmute calls have all generics specified."##,
21467 default_severity: Severity::Allow,
21468 warn_since: None,
21469 deny_since: None,
21470 },
21471 Lint {
21472 label: "clippy::mistyped_literal_suffixes",
21473 description: r##"Warns for mistyped suffix in literals"##,
21474 default_severity: Severity::Allow,
21475 warn_since: None,
21476 deny_since: None,
21477 },
21478 Lint {
21479 label: "clippy::mixed_attributes_style",
21480 description: r##"Checks for items that have the same kind of attributes with mixed styles (inner/outer)."##,
21481 default_severity: Severity::Allow,
21482 warn_since: None,
21483 deny_since: None,
21484 },
21485 Lint {
21486 label: "clippy::mixed_case_hex_literals",
21487 description: r##"Warns on hexadecimal literals with mixed-case letter
21488digits."##,
21489 default_severity: Severity::Allow,
21490 warn_since: None,
21491 deny_since: None,
21492 },
21493 Lint {
21494 label: "clippy::mixed_read_write_in_expression",
21495 description: r##"Checks for a read and a write to the same variable where
21496whether the read occurs before or after the write depends on the evaluation
21497order of sub-expressions."##,
21498 default_severity: Severity::Allow,
21499 warn_since: None,
21500 deny_since: None,
21501 },
21502 Lint {
21503 label: "clippy::mod_module_files",
21504 description: r##"Checks that module layout uses only self named module files; bans `mod.rs` files."##,
21505 default_severity: Severity::Allow,
21506 warn_since: None,
21507 deny_since: None,
21508 },
21509 Lint {
21510 label: "clippy::module_inception",
21511 description: r##"Checks for modules that have the same name as their
21512parent module"##,
21513 default_severity: Severity::Allow,
21514 warn_since: None,
21515 deny_since: None,
21516 },
21517 Lint {
21518 label: "clippy::module_name_repetitions",
21519 description: r##"Detects type names that are prefixed or suffixed by the
21520containing module's name."##,
21521 default_severity: Severity::Allow,
21522 warn_since: None,
21523 deny_since: None,
21524 },
21525 Lint {
21526 label: "clippy::modulo_arithmetic",
21527 description: r##"Checks for modulo arithmetic."##,
21528 default_severity: Severity::Allow,
21529 warn_since: None,
21530 deny_since: None,
21531 },
21532 Lint {
21533 label: "clippy::modulo_one",
21534 description: r##"Checks for getting the remainder of integer division by one or minus
21535one."##,
21536 default_severity: Severity::Allow,
21537 warn_since: None,
21538 deny_since: None,
21539 },
21540 Lint {
21541 label: "clippy::multi_assignments",
21542 description: r##"Checks for nested assignments."##,
21543 default_severity: Severity::Allow,
21544 warn_since: None,
21545 deny_since: None,
21546 },
21547 Lint {
21548 label: "clippy::multiple_bound_locations",
21549 description: r##"Check if a generic is defined both in the bound predicate and in the `where` clause."##,
21550 default_severity: Severity::Allow,
21551 warn_since: None,
21552 deny_since: None,
21553 },
21554 Lint {
21555 label: "clippy::multiple_crate_versions",
21556 description: r##"Checks to see if multiple versions of a crate are being
21557used."##,
21558 default_severity: Severity::Allow,
21559 warn_since: None,
21560 deny_since: None,
21561 },
21562 Lint {
21563 label: "clippy::multiple_inherent_impl",
21564 description: r##"Checks for multiple inherent implementations of a struct"##,
21565 default_severity: Severity::Allow,
21566 warn_since: None,
21567 deny_since: None,
21568 },
21569 Lint {
21570 label: "clippy::multiple_unsafe_ops_per_block",
21571 description: r##"Checks for `unsafe` blocks that contain more than one unsafe operation."##,
21572 default_severity: Severity::Allow,
21573 warn_since: None,
21574 deny_since: None,
21575 },
21576 Lint {
21577 label: "clippy::must_use_candidate",
21578 description: r##"Checks for public functions that have no
21579`#[must_use]` attribute, but return something not already marked
21580must-use, have no mutable arg and mutate no statics."##,
21581 default_severity: Severity::Allow,
21582 warn_since: None,
21583 deny_since: None,
21584 },
21585 Lint {
21586 label: "clippy::must_use_unit",
21587 description: r##"Checks for a `#[must_use]` attribute on
21588unit-returning functions and methods."##,
21589 default_severity: Severity::Allow,
21590 warn_since: None,
21591 deny_since: None,
21592 },
21593 Lint {
21594 label: "clippy::mut_from_ref",
21595 description: r##"This lint checks for functions that take immutable references and return
21596mutable ones. This will not trigger if no unsafe code exists as there
21597are multiple safe functions which will do this transformation
21598
21599To be on the conservative side, if there's at least one mutable
21600reference with the output lifetime, this lint will not trigger."##,
21601 default_severity: Severity::Allow,
21602 warn_since: None,
21603 deny_since: None,
21604 },
21605 Lint {
21606 label: "clippy::mut_mut",
21607 description: r##"Checks for instances of `mut mut` references."##,
21608 default_severity: Severity::Allow,
21609 warn_since: None,
21610 deny_since: None,
21611 },
21612 Lint {
21613 label: "clippy::mut_mutex_lock",
21614 description: r##"Checks for `&mut Mutex::lock` calls"##,
21615 default_severity: Severity::Allow,
21616 warn_since: None,
21617 deny_since: None,
21618 },
21619 Lint {
21620 label: "clippy::mut_range_bound",
21621 description: r##"Checks for loops with a range bound that is a mutable variable."##,
21622 default_severity: Severity::Allow,
21623 warn_since: None,
21624 deny_since: None,
21625 },
21626 Lint {
21627 label: "clippy::mutable_key_type",
21628 description: r##"Checks for sets/maps with mutable key types."##,
21629 default_severity: Severity::Allow,
21630 warn_since: None,
21631 deny_since: None,
21632 },
21633 Lint {
21634 label: "clippy::mutex_atomic",
21635 description: r##"Checks for usage of `Mutex<X>` where an atomic will do."##,
21636 default_severity: Severity::Allow,
21637 warn_since: None,
21638 deny_since: None,
21639 },
21640 Lint {
21641 label: "clippy::mutex_integer",
21642 description: r##"Checks for usage of `Mutex<X>` where `X` is an integral
21643type."##,
21644 default_severity: Severity::Allow,
21645 warn_since: None,
21646 deny_since: None,
21647 },
21648 Lint {
21649 label: "clippy::naive_bytecount",
21650 description: r##"Checks for naive byte counts"##,
21651 default_severity: Severity::Allow,
21652 warn_since: None,
21653 deny_since: None,
21654 },
21655 Lint {
21656 label: "clippy::needless_arbitrary_self_type",
21657 description: r##"The lint checks for `self` in fn parameters that
21658specify the `Self`-type explicitly"##,
21659 default_severity: Severity::Allow,
21660 warn_since: None,
21661 deny_since: None,
21662 },
21663 Lint {
21664 label: "clippy::needless_bitwise_bool",
21665 description: r##"Checks for usage of bitwise and/or operators between booleans, where performance may be improved by using
21666a lazy and."##,
21667 default_severity: Severity::Allow,
21668 warn_since: None,
21669 deny_since: None,
21670 },
21671 Lint {
21672 label: "clippy::needless_bool",
21673 description: r##"Checks for expressions of the form `if c { true } else {
21674false }` (or vice versa) and suggests using the condition directly."##,
21675 default_severity: Severity::Allow,
21676 warn_since: None,
21677 deny_since: None,
21678 },
21679 Lint {
21680 label: "clippy::needless_bool_assign",
21681 description: r##"Checks for expressions of the form `if c { x = true } else { x = false }`
21682(or vice versa) and suggest assigning the variable directly from the
21683condition."##,
21684 default_severity: Severity::Allow,
21685 warn_since: None,
21686 deny_since: None,
21687 },
21688 Lint {
21689 label: "clippy::needless_borrow",
21690 description: r##"Checks for address of operations (`&`) that are going to
21691be dereferenced immediately by the compiler."##,
21692 default_severity: Severity::Allow,
21693 warn_since: None,
21694 deny_since: None,
21695 },
21696 Lint {
21697 label: "clippy::needless_borrowed_reference",
21698 description: r##"Checks for bindings that needlessly destructure a reference and borrow the inner
21699value with `&ref`."##,
21700 default_severity: Severity::Allow,
21701 warn_since: None,
21702 deny_since: None,
21703 },
21704 Lint {
21705 label: "clippy::needless_borrows_for_generic_args",
21706 description: r##"Checks for borrow operations (`&`) that are used as a generic argument to a
21707function when the borrowed value could be used."##,
21708 default_severity: Severity::Allow,
21709 warn_since: None,
21710 deny_since: None,
21711 },
21712 Lint {
21713 label: "clippy::needless_character_iteration",
21714 description: r##"Checks if an iterator is used to check if a string is ascii."##,
21715 default_severity: Severity::Allow,
21716 warn_since: None,
21717 deny_since: None,
21718 },
21719 Lint {
21720 label: "clippy::needless_collect",
21721 description: r##"Checks for functions collecting an iterator when collect
21722is not needed."##,
21723 default_severity: Severity::Allow,
21724 warn_since: None,
21725 deny_since: None,
21726 },
21727 Lint {
21728 label: "clippy::needless_continue",
21729 description: r##"The lint checks for `if`-statements appearing in loops
21730that contain a `continue` statement in either their main blocks or their
21731`else`-blocks, when omitting the `else`-block possibly with some
21732rearrangement of code can make the code easier to understand."##,
21733 default_severity: Severity::Allow,
21734 warn_since: None,
21735 deny_since: None,
21736 },
21737 Lint {
21738 label: "clippy::needless_doctest_main",
21739 description: r##"Checks for `fn main() { .. }` in doctests"##,
21740 default_severity: Severity::Allow,
21741 warn_since: None,
21742 deny_since: None,
21743 },
21744 Lint {
21745 label: "clippy::needless_else",
21746 description: r##"Checks for empty `else` branches."##,
21747 default_severity: Severity::Allow,
21748 warn_since: None,
21749 deny_since: None,
21750 },
21751 Lint {
21752 label: "clippy::needless_for_each",
21753 description: r##"Checks for usage of `for_each` that would be more simply written as a
21754`for` loop."##,
21755 default_severity: Severity::Allow,
21756 warn_since: None,
21757 deny_since: None,
21758 },
21759 Lint {
21760 label: "clippy::needless_if",
21761 description: r##"Checks for empty `if` branches with no else branch."##,
21762 default_severity: Severity::Allow,
21763 warn_since: None,
21764 deny_since: None,
21765 },
21766 Lint {
21767 label: "clippy::needless_late_init",
21768 description: r##"Checks for late initializations that can be replaced by a `let` statement
21769with an initializer."##,
21770 default_severity: Severity::Allow,
21771 warn_since: None,
21772 deny_since: None,
21773 },
21774 Lint {
21775 label: "clippy::needless_lifetimes",
21776 description: r##"Checks for lifetime annotations which can be removed by
21777relying on lifetime elision."##,
21778 default_severity: Severity::Allow,
21779 warn_since: None,
21780 deny_since: None,
21781 },
21782 Lint {
21783 label: "clippy::needless_match",
21784 description: r##"Checks for unnecessary `match` or match-like `if let` returns for `Option` and `Result`
21785when function signatures are the same."##,
21786 default_severity: Severity::Allow,
21787 warn_since: None,
21788 deny_since: None,
21789 },
21790 Lint {
21791 label: "clippy::needless_maybe_sized",
21792 description: r##"Lints `?Sized` bounds applied to type parameters that cannot be unsized"##,
21793 default_severity: Severity::Allow,
21794 warn_since: None,
21795 deny_since: None,
21796 },
21797 Lint {
21798 label: "clippy::needless_option_as_deref",
21799 description: r##"Checks for no-op uses of `Option::{as_deref, as_deref_mut}`,
21800for example, `Option<&T>::as_deref()` returns the same type."##,
21801 default_severity: Severity::Allow,
21802 warn_since: None,
21803 deny_since: None,
21804 },
21805 Lint {
21806 label: "clippy::needless_option_take",
21807 description: r##"Checks for calling `take` function after `as_ref`."##,
21808 default_severity: Severity::Allow,
21809 warn_since: None,
21810 deny_since: None,
21811 },
21812 Lint {
21813 label: "clippy::needless_parens_on_range_literals",
21814 description: r##"The lint checks for parenthesis on literals in range statements that are
21815superfluous."##,
21816 default_severity: Severity::Allow,
21817 warn_since: None,
21818 deny_since: None,
21819 },
21820 Lint {
21821 label: "clippy::needless_pass_by_ref_mut",
21822 description: r##"Check if a `&mut` function argument is actually used mutably.
21823
21824Be careful if the function is publicly reexported as it would break compatibility with
21825users of this function, when the users pass this function as an argument."##,
21826 default_severity: Severity::Allow,
21827 warn_since: None,
21828 deny_since: None,
21829 },
21830 Lint {
21831 label: "clippy::needless_pass_by_value",
21832 description: r##"Checks for functions taking arguments by value, but not
21833consuming them in its
21834body."##,
21835 default_severity: Severity::Allow,
21836 warn_since: None,
21837 deny_since: None,
21838 },
21839 Lint {
21840 label: "clippy::needless_pub_self",
21841 description: r##"Checks for usage of `pub(self)` and `pub(in self)`."##,
21842 default_severity: Severity::Allow,
21843 warn_since: None,
21844 deny_since: None,
21845 },
21846 Lint {
21847 label: "clippy::needless_question_mark",
21848 description: r##"Suggests alternatives for useless applications of `?` in terminating expressions"##,
21849 default_severity: Severity::Allow,
21850 warn_since: None,
21851 deny_since: None,
21852 },
21853 Lint {
21854 label: "clippy::needless_range_loop",
21855 description: r##"Checks for looping over the range of `0..len` of some
21856collection just to get the values by index."##,
21857 default_severity: Severity::Allow,
21858 warn_since: None,
21859 deny_since: None,
21860 },
21861 Lint {
21862 label: "clippy::needless_raw_string_hashes",
21863 description: r##"Checks for raw string literals with an unnecessary amount of hashes around them."##,
21864 default_severity: Severity::Allow,
21865 warn_since: None,
21866 deny_since: None,
21867 },
21868 Lint {
21869 label: "clippy::needless_raw_strings",
21870 description: r##"Checks for raw string literals where a string literal can be used instead."##,
21871 default_severity: Severity::Allow,
21872 warn_since: None,
21873 deny_since: None,
21874 },
21875 Lint {
21876 label: "clippy::needless_return",
21877 description: r##"Checks for return statements at the end of a block."##,
21878 default_severity: Severity::Allow,
21879 warn_since: None,
21880 deny_since: None,
21881 },
21882 Lint {
21883 label: "clippy::needless_return_with_question_mark",
21884 description: r##"Checks for return statements on `Err` paired with the `?` operator."##,
21885 default_severity: Severity::Allow,
21886 warn_since: None,
21887 deny_since: None,
21888 },
21889 Lint {
21890 label: "clippy::needless_splitn",
21891 description: r##"Checks for usage of `str::splitn` (or `str::rsplitn`) where using `str::split` would be the same."##,
21892 default_severity: Severity::Allow,
21893 warn_since: None,
21894 deny_since: None,
21895 },
21896 Lint {
21897 label: "clippy::needless_update",
21898 description: r##"Checks for needlessly including a base struct on update
21899when all fields are changed anyway.
21900
21901This lint is not applied to structs marked with
21902[non_exhaustive](https://doc.rust-lang.org/reference/attributes/type_system.html)."##,
21903 default_severity: Severity::Allow,
21904 warn_since: None,
21905 deny_since: None,
21906 },
21907 Lint {
21908 label: "clippy::neg_cmp_op_on_partial_ord",
21909 description: r##"Checks for the usage of negated comparison operators on types which only implement
21910`PartialOrd` (e.g., `f64`)."##,
21911 default_severity: Severity::Allow,
21912 warn_since: None,
21913 deny_since: None,
21914 },
21915 Lint {
21916 label: "clippy::neg_multiply",
21917 description: r##"Checks for multiplication by -1 as a form of negation."##,
21918 default_severity: Severity::Allow,
21919 warn_since: None,
21920 deny_since: None,
21921 },
21922 Lint {
21923 label: "clippy::negative_feature_names",
21924 description: r##"Checks for negative feature names with prefix `no-` or `not-`"##,
21925 default_severity: Severity::Allow,
21926 warn_since: None,
21927 deny_since: None,
21928 },
21929 Lint {
21930 label: "clippy::never_loop",
21931 description: r##"Checks for loops that will always `break`, `return` or
21932`continue` an outer loop."##,
21933 default_severity: Severity::Allow,
21934 warn_since: None,
21935 deny_since: None,
21936 },
21937 Lint {
21938 label: "clippy::new_ret_no_self",
21939 description: r##"Checks for `new` not returning a type that contains `Self`."##,
21940 default_severity: Severity::Allow,
21941 warn_since: None,
21942 deny_since: None,
21943 },
21944 Lint {
21945 label: "clippy::new_without_default",
21946 description: r##"Checks for public types with a `pub fn new() -> Self` method and no
21947implementation of
21948[`Default`](https://doc.rust-lang.org/std/default/trait.Default.html)."##,
21949 default_severity: Severity::Allow,
21950 warn_since: None,
21951 deny_since: None,
21952 },
21953 Lint {
21954 label: "clippy::no_effect",
21955 description: r##"Checks for statements which have no effect."##,
21956 default_severity: Severity::Allow,
21957 warn_since: None,
21958 deny_since: None,
21959 },
21960 Lint {
21961 label: "clippy::no_effect_replace",
21962 description: r##"Checks for `replace` statements which have no effect."##,
21963 default_severity: Severity::Allow,
21964 warn_since: None,
21965 deny_since: None,
21966 },
21967 Lint {
21968 label: "clippy::no_effect_underscore_binding",
21969 description: r##"Checks for binding to underscore prefixed variable without side-effects."##,
21970 default_severity: Severity::Allow,
21971 warn_since: None,
21972 deny_since: None,
21973 },
21974 Lint {
21975 label: "clippy::no_mangle_with_rust_abi",
21976 description: r##"Checks for Rust ABI functions with the `#[no_mangle]` attribute."##,
21977 default_severity: Severity::Allow,
21978 warn_since: None,
21979 deny_since: None,
21980 },
21981 Lint {
21982 label: "clippy::non_ascii_literal",
21983 description: r##"Checks for non-ASCII characters in string and char literals."##,
21984 default_severity: Severity::Allow,
21985 warn_since: None,
21986 deny_since: None,
21987 },
21988 Lint {
21989 label: "clippy::non_canonical_clone_impl",
21990 description: r##"Checks for non-canonical implementations of `Clone` when `Copy` is already implemented."##,
21991 default_severity: Severity::Allow,
21992 warn_since: None,
21993 deny_since: None,
21994 },
21995 Lint {
21996 label: "clippy::non_canonical_partial_ord_impl",
21997 description: r##"Checks for non-canonical implementations of `PartialOrd` when `Ord` is already implemented."##,
21998 default_severity: Severity::Allow,
21999 warn_since: None,
22000 deny_since: None,
22001 },
22002 Lint {
22003 label: "clippy::non_minimal_cfg",
22004 description: r##"Checks for `any` and `all` combinators in `cfg` with only one condition."##,
22005 default_severity: Severity::Allow,
22006 warn_since: None,
22007 deny_since: None,
22008 },
22009 Lint {
22010 label: "clippy::non_octal_unix_permissions",
22011 description: r##"Checks for non-octal values used to set Unix file permissions."##,
22012 default_severity: Severity::Allow,
22013 warn_since: None,
22014 deny_since: None,
22015 },
22016 Lint {
22017 label: "clippy::non_send_fields_in_send_ty",
22018 description: r##"This lint warns about a `Send` implementation for a type that
22019contains fields that are not safe to be sent across threads.
22020It tries to detect fields that can cause a soundness issue
22021when sent to another thread (e.g., `Rc`) while allowing `!Send` fields
22022that are expected to exist in a `Send` type, such as raw pointers."##,
22023 default_severity: Severity::Allow,
22024 warn_since: None,
22025 deny_since: None,
22026 },
22027 Lint {
22028 label: "clippy::non_zero_suggestions",
22029 description: r##"Checks for conversions from `NonZero` types to regular integer types,
22030and suggests using `NonZero` types for the target as well."##,
22031 default_severity: Severity::Allow,
22032 warn_since: None,
22033 deny_since: None,
22034 },
22035 Lint {
22036 label: "clippy::nonminimal_bool",
22037 description: r##"Checks for boolean expressions that can be written more
22038concisely."##,
22039 default_severity: Severity::Allow,
22040 warn_since: None,
22041 deny_since: None,
22042 },
22043 Lint {
22044 label: "clippy::nonsensical_open_options",
22045 description: r##"Checks for duplicate open options as well as combinations
22046that make no sense."##,
22047 default_severity: Severity::Allow,
22048 warn_since: None,
22049 deny_since: None,
22050 },
22051 Lint {
22052 label: "clippy::nonstandard_macro_braces",
22053 description: r##"Checks that common macros are used with consistent bracing."##,
22054 default_severity: Severity::Allow,
22055 warn_since: None,
22056 deny_since: None,
22057 },
22058 Lint {
22059 label: "clippy::not_unsafe_ptr_arg_deref",
22060 description: r##"Checks for public functions that dereference raw pointer
22061arguments but are not marked `unsafe`."##,
22062 default_severity: Severity::Allow,
22063 warn_since: None,
22064 deny_since: None,
22065 },
22066 Lint {
22067 label: "clippy::obfuscated_if_else",
22068 description: r##"Checks for usage of `.then_some(..).unwrap_or(..)`"##,
22069 default_severity: Severity::Allow,
22070 warn_since: None,
22071 deny_since: None,
22072 },
22073 Lint {
22074 label: "clippy::octal_escapes",
22075 description: r##"Checks for `\\0` escapes in string and byte literals that look like octal
22076character escapes in C."##,
22077 default_severity: Severity::Allow,
22078 warn_since: None,
22079 deny_since: None,
22080 },
22081 Lint {
22082 label: "clippy::ok_expect",
22083 description: r##"Checks for usage of `ok().expect(..)`."##,
22084 default_severity: Severity::Allow,
22085 warn_since: None,
22086 deny_since: None,
22087 },
22088 Lint {
22089 label: "clippy::only_used_in_recursion",
22090 description: r##"Checks for arguments that are only used in recursion with no side-effects."##,
22091 default_severity: Severity::Allow,
22092 warn_since: None,
22093 deny_since: None,
22094 },
22095 Lint {
22096 label: "clippy::op_ref",
22097 description: r##"Checks for arguments to `==` which have their address
22098taken to satisfy a bound
22099and suggests to dereference the other argument instead"##,
22100 default_severity: Severity::Allow,
22101 warn_since: None,
22102 deny_since: None,
22103 },
22104 Lint {
22105 label: "clippy::option_as_ref_cloned",
22106 description: r##"Checks for usage of `.as_ref().cloned()` and `.as_mut().cloned()` on `Option`s"##,
22107 default_severity: Severity::Allow,
22108 warn_since: None,
22109 deny_since: None,
22110 },
22111 Lint {
22112 label: "clippy::option_as_ref_deref",
22113 description: r##"Checks for usage of `_.as_ref().map(Deref::deref)` or its aliases (such as String::as_str)."##,
22114 default_severity: Severity::Allow,
22115 warn_since: None,
22116 deny_since: None,
22117 },
22118 Lint {
22119 label: "clippy::option_env_unwrap",
22120 description: r##"Checks for usage of `option_env!(...).unwrap()` and
22121suggests usage of the `env!` macro."##,
22122 default_severity: Severity::Allow,
22123 warn_since: None,
22124 deny_since: None,
22125 },
22126 Lint {
22127 label: "clippy::option_filter_map",
22128 description: r##"Checks for iterators of `Option`s using `.filter(Option::is_some).map(Option::unwrap)` that may
22129be replaced with a `.flatten()` call."##,
22130 default_severity: Severity::Allow,
22131 warn_since: None,
22132 deny_since: None,
22133 },
22134 Lint {
22135 label: "clippy::option_if_let_else",
22136 description: r##"Lints usage of `if let Some(v) = ... { y } else { x }` and
22137`match .. { Some(v) => y, None/_ => x }` which are more
22138idiomatically done with `Option::map_or` (if the else bit is a pure
22139expression) or `Option::map_or_else` (if the else bit is an impure
22140expression)."##,
22141 default_severity: Severity::Allow,
22142 warn_since: None,
22143 deny_since: None,
22144 },
22145 Lint {
22146 label: "clippy::option_map_or_err_ok",
22147 description: r##"Checks for usage of `_.map_or(Err(_), Ok)`."##,
22148 default_severity: Severity::Allow,
22149 warn_since: None,
22150 deny_since: None,
22151 },
22152 Lint {
22153 label: "clippy::option_map_or_none",
22154 description: r##"Checks for usage of `_.map_or(None, _)`."##,
22155 default_severity: Severity::Allow,
22156 warn_since: None,
22157 deny_since: None,
22158 },
22159 Lint {
22160 label: "clippy::option_map_unit_fn",
22161 description: r##"Checks for usage of `option.map(f)` where f is a function
22162or closure that returns the unit type `()`."##,
22163 default_severity: Severity::Allow,
22164 warn_since: None,
22165 deny_since: None,
22166 },
22167 Lint {
22168 label: "clippy::option_option",
22169 description: r##"Checks for usage of `Option<Option<_>>` in function signatures and type
22170definitions"##,
22171 default_severity: Severity::Allow,
22172 warn_since: None,
22173 deny_since: None,
22174 },
22175 Lint {
22176 label: "clippy::or_fun_call",
22177 description: r##"Checks for calls to `.or(foo(..))`, `.unwrap_or(foo(..))`,
22178`.or_insert(foo(..))` etc., and suggests to use `.or_else(|| foo(..))`,
22179`.unwrap_or_else(|| foo(..))`, `.unwrap_or_default()` or `.or_default()`
22180etc. instead."##,
22181 default_severity: Severity::Allow,
22182 warn_since: None,
22183 deny_since: None,
22184 },
22185 Lint {
22186 label: "clippy::or_then_unwrap",
22187 description: r##"Checks for `.or(…).unwrap()` calls to Options and Results."##,
22188 default_severity: Severity::Allow,
22189 warn_since: None,
22190 deny_since: None,
22191 },
22192 Lint {
22193 label: "clippy::out_of_bounds_indexing",
22194 description: r##"Checks for out of bounds array indexing with a constant
22195index."##,
22196 default_severity: Severity::Allow,
22197 warn_since: None,
22198 deny_since: None,
22199 },
22200 Lint {
22201 label: "clippy::overly_complex_bool_expr",
22202 description: r##"Checks for boolean expressions that contain terminals that
22203can be eliminated."##,
22204 default_severity: Severity::Allow,
22205 warn_since: None,
22206 deny_since: None,
22207 },
22208 Lint {
22209 label: "clippy::panic",
22210 description: r##"Checks for usage of `panic!`."##,
22211 default_severity: Severity::Allow,
22212 warn_since: None,
22213 deny_since: None,
22214 },
22215 Lint {
22216 label: "clippy::panic_in_result_fn",
22217 description: r##"Checks for usage of `panic!` or assertions in a function whose return type is `Result`."##,
22218 default_severity: Severity::Allow,
22219 warn_since: None,
22220 deny_since: None,
22221 },
22222 Lint {
22223 label: "clippy::panicking_overflow_checks",
22224 description: r##"Detects C-style underflow/overflow checks."##,
22225 default_severity: Severity::Allow,
22226 warn_since: None,
22227 deny_since: None,
22228 },
22229 Lint {
22230 label: "clippy::panicking_unwrap",
22231 description: r##"Checks for calls of `unwrap[_err]()` that will always fail."##,
22232 default_severity: Severity::Allow,
22233 warn_since: None,
22234 deny_since: None,
22235 },
22236 Lint {
22237 label: "clippy::partial_pub_fields",
22238 description: r##"Checks whether some but not all fields of a `struct` are public.
22239
22240Either make all fields of a type public, or make none of them public"##,
22241 default_severity: Severity::Allow,
22242 warn_since: None,
22243 deny_since: None,
22244 },
22245 Lint {
22246 label: "clippy::partialeq_ne_impl",
22247 description: r##"Checks for manual re-implementations of `PartialEq::ne`."##,
22248 default_severity: Severity::Allow,
22249 warn_since: None,
22250 deny_since: None,
22251 },
22252 Lint {
22253 label: "clippy::partialeq_to_none",
22254 description: r##"Checks for binary comparisons to a literal `Option::None`."##,
22255 default_severity: Severity::Allow,
22256 warn_since: None,
22257 deny_since: None,
22258 },
22259 Lint {
22260 label: "clippy::path_buf_push_overwrite",
22261 description: r##"* Checks for [push](https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.push)
22262calls on `PathBuf` that can cause overwrites."##,
22263 default_severity: Severity::Allow,
22264 warn_since: None,
22265 deny_since: None,
22266 },
22267 Lint {
22268 label: "clippy::path_ends_with_ext",
22269 description: r##"Looks for calls to `Path::ends_with` calls where the argument looks like a file extension.
22270
22271By default, Clippy has a short list of known filenames that start with a dot
22272but aren't necessarily file extensions (e.g. the `.git` folder), which are allowed by default.
22273The `allowed-dotfiles` configuration can be used to allow additional
22274file extensions that Clippy should not lint."##,
22275 default_severity: Severity::Allow,
22276 warn_since: None,
22277 deny_since: None,
22278 },
22279 Lint {
22280 label: "clippy::pathbuf_init_then_push",
22281 description: r##"Checks for calls to `push` immediately after creating a new `PathBuf`."##,
22282 default_severity: Severity::Allow,
22283 warn_since: None,
22284 deny_since: None,
22285 },
22286 Lint {
22287 label: "clippy::pattern_type_mismatch",
22288 description: r##"Checks for patterns that aren't exact representations of the types
22289they are applied to.
22290
22291To satisfy this lint, you will have to adjust either the expression that is matched
22292against or the pattern itself, as well as the bindings that are introduced by the
22293adjusted patterns. For matching you will have to either dereference the expression
22294with the `*` operator, or amend the patterns to explicitly match against `&<pattern>`
22295or `&mut <pattern>` depending on the reference mutability. For the bindings you need
22296to use the inverse. You can leave them as plain bindings if you wish for the value
22297to be copied, but you must use `ref mut <variable>` or `ref <variable>` to construct
22298a reference into the matched structure.
22299
22300If you are looking for a way to learn about ownership semantics in more detail, it
22301is recommended to look at IDE options available to you to highlight types, lifetimes
22302and reference semantics in your code. The available tooling would expose these things
22303in a general way even outside of the various pattern matching mechanics. Of course
22304this lint can still be used to highlight areas of interest and ensure a good understanding
22305of ownership semantics."##,
22306 default_severity: Severity::Allow,
22307 warn_since: None,
22308 deny_since: None,
22309 },
22310 Lint {
22311 label: "clippy::permissions_set_readonly_false",
22312 description: r##"Checks for calls to `std::fs::Permissions.set_readonly` with argument `false`."##,
22313 default_severity: Severity::Allow,
22314 warn_since: None,
22315 deny_since: None,
22316 },
22317 Lint {
22318 label: "clippy::pointers_in_nomem_asm_block",
22319 description: r##"Checks if any pointer is being passed to an asm! block with `nomem` option."##,
22320 default_severity: Severity::Allow,
22321 warn_since: None,
22322 deny_since: None,
22323 },
22324 Lint {
22325 label: "clippy::possible_missing_comma",
22326 description: r##"Checks for possible missing comma in an array. It lints if
22327an array element is a binary operator expression and it lies on two lines."##,
22328 default_severity: Severity::Allow,
22329 warn_since: None,
22330 deny_since: None,
22331 },
22332 Lint {
22333 label: "clippy::precedence",
22334 description: r##"Checks for operations where precedence may be unclear
22335and suggests to add parentheses. Currently it catches the following:
22336* mixed usage of arithmetic and bit shifting/combining operators without
22337parentheses"##,
22338 default_severity: Severity::Allow,
22339 warn_since: None,
22340 deny_since: None,
22341 },
22342 Lint {
22343 label: "clippy::print_in_format_impl",
22344 description: r##"Checks for usage of `println`, `print`, `eprintln` or `eprint` in an
22345implementation of a formatting trait."##,
22346 default_severity: Severity::Allow,
22347 warn_since: None,
22348 deny_since: None,
22349 },
22350 Lint {
22351 label: "clippy::print_literal",
22352 description: r##"This lint warns about the use of literals as `print!`/`println!` args."##,
22353 default_severity: Severity::Allow,
22354 warn_since: None,
22355 deny_since: None,
22356 },
22357 Lint {
22358 label: "clippy::print_stderr",
22359 description: r##"Checks for printing on *stderr*. The purpose of this lint
22360is to catch debugging remnants."##,
22361 default_severity: Severity::Allow,
22362 warn_since: None,
22363 deny_since: None,
22364 },
22365 Lint {
22366 label: "clippy::print_stdout",
22367 description: r##"Checks for printing on *stdout*. The purpose of this lint
22368is to catch debugging remnants."##,
22369 default_severity: Severity::Allow,
22370 warn_since: None,
22371 deny_since: None,
22372 },
22373 Lint {
22374 label: "clippy::print_with_newline",
22375 description: r##"This lint warns when you use `print!()` with a format
22376string that ends in a newline."##,
22377 default_severity: Severity::Allow,
22378 warn_since: None,
22379 deny_since: None,
22380 },
22381 Lint {
22382 label: "clippy::println_empty_string",
22383 description: r##"This lint warns when you use `println!()` to
22384print a newline."##,
22385 default_severity: Severity::Allow,
22386 warn_since: None,
22387 deny_since: None,
22388 },
22389 Lint {
22390 label: "clippy::ptr_arg",
22391 description: r##"This lint checks for function arguments of type `&String`, `&Vec`,
22392`&PathBuf`, and `Cow<_>`. It will also suggest you replace `.clone()` calls
22393with the appropriate `.to_owned()`/`to_string()` calls."##,
22394 default_severity: Severity::Allow,
22395 warn_since: None,
22396 deny_since: None,
22397 },
22398 Lint {
22399 label: "clippy::ptr_as_ptr",
22400 description: r##"Checks for `as` casts between raw pointers that don't change their
22401constness, namely `*const T` to `*const U` and `*mut T` to `*mut U`."##,
22402 default_severity: Severity::Allow,
22403 warn_since: None,
22404 deny_since: None,
22405 },
22406 Lint {
22407 label: "clippy::ptr_cast_constness",
22408 description: r##"Checks for `as` casts between raw pointers that change their constness, namely `*const T` to
22409`*mut T` and `*mut T` to `*const T`."##,
22410 default_severity: Severity::Allow,
22411 warn_since: None,
22412 deny_since: None,
22413 },
22414 Lint {
22415 label: "clippy::ptr_eq",
22416 description: r##"Use `std::ptr::eq` when applicable"##,
22417 default_severity: Severity::Allow,
22418 warn_since: None,
22419 deny_since: None,
22420 },
22421 Lint {
22422 label: "clippy::ptr_offset_with_cast",
22423 description: r##"Checks for usage of the `offset` pointer method with a `usize` casted to an
22424`isize`."##,
22425 default_severity: Severity::Allow,
22426 warn_since: None,
22427 deny_since: None,
22428 },
22429 Lint {
22430 label: "clippy::pub_enum_variant_names",
22431 description: r##"Nothing. This lint has been deprecated"##,
22432 default_severity: Severity::Allow,
22433 warn_since: None,
22434 deny_since: None,
22435 },
22436 Lint {
22437 label: "clippy::pub_underscore_fields",
22438 description: r##"Checks whether any field of the struct is prefixed with an `_` (underscore) and also marked
22439`pub` (public)"##,
22440 default_severity: Severity::Allow,
22441 warn_since: None,
22442 deny_since: None,
22443 },
22444 Lint {
22445 label: "clippy::pub_use",
22446 description: r##"Restricts the usage of `pub use ...`"##,
22447 default_severity: Severity::Allow,
22448 warn_since: None,
22449 deny_since: None,
22450 },
22451 Lint {
22452 label: "clippy::pub_with_shorthand",
22453 description: r##"Checks for usage of `pub(<loc>)` with `in`."##,
22454 default_severity: Severity::Allow,
22455 warn_since: None,
22456 deny_since: None,
22457 },
22458 Lint {
22459 label: "clippy::pub_without_shorthand",
22460 description: r##"Checks for usage of `pub(<loc>)` without `in`.
22461
22462Note: As you cannot write a module's path in `pub(<loc>)`, this will only trigger on
22463`pub(super)` and the like."##,
22464 default_severity: Severity::Allow,
22465 warn_since: None,
22466 deny_since: None,
22467 },
22468 Lint {
22469 label: "clippy::question_mark",
22470 description: r##"Checks for expressions that could be replaced by the question mark operator."##,
22471 default_severity: Severity::Allow,
22472 warn_since: None,
22473 deny_since: None,
22474 },
22475 Lint {
22476 label: "clippy::question_mark_used",
22477 description: r##"Checks for expressions that use the question mark operator and rejects them."##,
22478 default_severity: Severity::Allow,
22479 warn_since: None,
22480 deny_since: None,
22481 },
22482 Lint {
22483 label: "clippy::range_minus_one",
22484 description: r##"Checks for inclusive ranges where 1 is subtracted from
22485the upper bound, e.g., `x..=(y-1)`."##,
22486 default_severity: Severity::Allow,
22487 warn_since: None,
22488 deny_since: None,
22489 },
22490 Lint {
22491 label: "clippy::range_plus_one",
22492 description: r##"Checks for exclusive ranges where 1 is added to the
22493upper bound, e.g., `x..(y+1)`."##,
22494 default_severity: Severity::Allow,
22495 warn_since: None,
22496 deny_since: None,
22497 },
22498 Lint {
22499 label: "clippy::range_step_by_zero",
22500 description: r##"Nothing. This lint has been deprecated"##,
22501 default_severity: Severity::Allow,
22502 warn_since: None,
22503 deny_since: None,
22504 },
22505 Lint {
22506 label: "clippy::range_zip_with_len",
22507 description: r##"Checks for zipping a collection with the range of
22508`0.._.len()`."##,
22509 default_severity: Severity::Allow,
22510 warn_since: None,
22511 deny_since: None,
22512 },
22513 Lint {
22514 label: "clippy::rc_buffer",
22515 description: r##"Checks for `Rc<T>` and `Arc<T>` when `T` is a mutable buffer type such as `String` or `Vec`."##,
22516 default_severity: Severity::Allow,
22517 warn_since: None,
22518 deny_since: None,
22519 },
22520 Lint {
22521 label: "clippy::rc_clone_in_vec_init",
22522 description: r##"Checks for reference-counted pointers (`Arc`, `Rc`, `rc::Weak`, and `sync::Weak`)
22523in `vec![elem; len]`"##,
22524 default_severity: Severity::Allow,
22525 warn_since: None,
22526 deny_since: None,
22527 },
22528 Lint {
22529 label: "clippy::rc_mutex",
22530 description: r##"Checks for `Rc<Mutex<T>>`."##,
22531 default_severity: Severity::Allow,
22532 warn_since: None,
22533 deny_since: None,
22534 },
22535 Lint {
22536 label: "clippy::read_line_without_trim",
22537 description: r##"Looks for calls to [`Stdin::read_line`] to read a line from the standard input
22538into a string, then later attempting to use that string for an operation that will never
22539work for strings with a trailing newline character in it (e.g. parsing into a `i32`)."##,
22540 default_severity: Severity::Allow,
22541 warn_since: None,
22542 deny_since: None,
22543 },
22544 Lint {
22545 label: "clippy::read_zero_byte_vec",
22546 description: r##"This lint catches reads into a zero-length `Vec`.
22547Especially in the case of a call to `with_capacity`, this lint warns that read
22548gets the number of bytes from the `Vec`'s length, not its capacity."##,
22549 default_severity: Severity::Allow,
22550 warn_since: None,
22551 deny_since: None,
22552 },
22553 Lint {
22554 label: "clippy::readonly_write_lock",
22555 description: r##"Looks for calls to `RwLock::write` where the lock is only used for reading."##,
22556 default_severity: Severity::Allow,
22557 warn_since: None,
22558 deny_since: None,
22559 },
22560 Lint {
22561 label: "clippy::recursive_format_impl",
22562 description: r##"Checks for format trait implementations (e.g. `Display`) with a recursive call to itself
22563which uses `self` as a parameter.
22564This is typically done indirectly with the `write!` macro or with `to_string()`."##,
22565 default_severity: Severity::Allow,
22566 warn_since: None,
22567 deny_since: None,
22568 },
22569 Lint {
22570 label: "clippy::redundant_allocation",
22571 description: r##"Checks for usage of redundant allocations anywhere in the code."##,
22572 default_severity: Severity::Allow,
22573 warn_since: None,
22574 deny_since: None,
22575 },
22576 Lint {
22577 label: "clippy::redundant_as_str",
22578 description: r##"Checks for usage of `as_str()` on a `String` chained with a method available on the `String` itself."##,
22579 default_severity: Severity::Allow,
22580 warn_since: None,
22581 deny_since: None,
22582 },
22583 Lint {
22584 label: "clippy::redundant_async_block",
22585 description: r##"Checks for `async` block that only returns `await` on a future."##,
22586 default_severity: Severity::Allow,
22587 warn_since: None,
22588 deny_since: None,
22589 },
22590 Lint {
22591 label: "clippy::redundant_at_rest_pattern",
22592 description: r##"Checks for `[all @ ..]` patterns."##,
22593 default_severity: Severity::Allow,
22594 warn_since: None,
22595 deny_since: None,
22596 },
22597 Lint {
22598 label: "clippy::redundant_clone",
22599 description: r##"Checks for a redundant `clone()` (and its relatives) which clones an owned
22600value that is going to be dropped without further use."##,
22601 default_severity: Severity::Allow,
22602 warn_since: None,
22603 deny_since: None,
22604 },
22605 Lint {
22606 label: "clippy::redundant_closure",
22607 description: r##"Checks for closures which just call another function where
22608the function can be called directly. `unsafe` functions, calls where types
22609get adjusted or where the callee is marked `#[track_caller]` are ignored."##,
22610 default_severity: Severity::Allow,
22611 warn_since: None,
22612 deny_since: None,
22613 },
22614 Lint {
22615 label: "clippy::redundant_closure_call",
22616 description: r##"Detects closures called in the same expression where they
22617are defined."##,
22618 default_severity: Severity::Allow,
22619 warn_since: None,
22620 deny_since: None,
22621 },
22622 Lint {
22623 label: "clippy::redundant_closure_for_method_calls",
22624 description: r##"Checks for closures which only invoke a method on the closure
22625argument and can be replaced by referencing the method directly."##,
22626 default_severity: Severity::Allow,
22627 warn_since: None,
22628 deny_since: None,
22629 },
22630 Lint {
22631 label: "clippy::redundant_comparisons",
22632 description: r##"Checks for ineffective double comparisons against constants."##,
22633 default_severity: Severity::Allow,
22634 warn_since: None,
22635 deny_since: None,
22636 },
22637 Lint {
22638 label: "clippy::redundant_else",
22639 description: r##"Checks for `else` blocks that can be removed without changing semantics."##,
22640 default_severity: Severity::Allow,
22641 warn_since: None,
22642 deny_since: None,
22643 },
22644 Lint {
22645 label: "clippy::redundant_feature_names",
22646 description: r##"Checks for feature names with prefix `use-`, `with-` or suffix `-support`"##,
22647 default_severity: Severity::Allow,
22648 warn_since: None,
22649 deny_since: None,
22650 },
22651 Lint {
22652 label: "clippy::redundant_field_names",
22653 description: r##"Checks for fields in struct literals where shorthands
22654could be used."##,
22655 default_severity: Severity::Allow,
22656 warn_since: None,
22657 deny_since: None,
22658 },
22659 Lint {
22660 label: "clippy::redundant_guards",
22661 description: r##"Checks for unnecessary guards in match expressions."##,
22662 default_severity: Severity::Allow,
22663 warn_since: None,
22664 deny_since: None,
22665 },
22666 Lint {
22667 label: "clippy::redundant_locals",
22668 description: r##"Checks for redundant redefinitions of local bindings."##,
22669 default_severity: Severity::Allow,
22670 warn_since: None,
22671 deny_since: None,
22672 },
22673 Lint {
22674 label: "clippy::redundant_pattern",
22675 description: r##"Checks for patterns in the form `name @ _`."##,
22676 default_severity: Severity::Allow,
22677 warn_since: None,
22678 deny_since: None,
22679 },
22680 Lint {
22681 label: "clippy::redundant_pattern_matching",
22682 description: r##"Lint for redundant pattern matching over `Result`, `Option`,
22683`std::task::Poll`, `std::net::IpAddr` or `bool`s"##,
22684 default_severity: Severity::Allow,
22685 warn_since: None,
22686 deny_since: None,
22687 },
22688 Lint {
22689 label: "clippy::redundant_pub_crate",
22690 description: r##"Checks for items declared `pub(crate)` that are not crate visible because they
22691are inside a private module."##,
22692 default_severity: Severity::Allow,
22693 warn_since: None,
22694 deny_since: None,
22695 },
22696 Lint {
22697 label: "clippy::redundant_slicing",
22698 description: r##"Checks for redundant slicing expressions which use the full range, and
22699do not change the type."##,
22700 default_severity: Severity::Allow,
22701 warn_since: None,
22702 deny_since: None,
22703 },
22704 Lint {
22705 label: "clippy::redundant_static_lifetimes",
22706 description: r##"Checks for constants and statics with an explicit `'static` lifetime."##,
22707 default_severity: Severity::Allow,
22708 warn_since: None,
22709 deny_since: None,
22710 },
22711 Lint {
22712 label: "clippy::redundant_type_annotations",
22713 description: r##"Warns about needless / redundant type annotations."##,
22714 default_severity: Severity::Allow,
22715 warn_since: None,
22716 deny_since: None,
22717 },
22718 Lint {
22719 label: "clippy::ref_as_ptr",
22720 description: r##"Checks for casts of references to pointer using `as`
22721and suggests `std::ptr::from_ref` and `std::ptr::from_mut` instead."##,
22722 default_severity: Severity::Allow,
22723 warn_since: None,
22724 deny_since: None,
22725 },
22726 Lint {
22727 label: "clippy::ref_binding_to_reference",
22728 description: r##"Checks for `ref` bindings which create a reference to a reference."##,
22729 default_severity: Severity::Allow,
22730 warn_since: None,
22731 deny_since: None,
22732 },
22733 Lint {
22734 label: "clippy::ref_option",
22735 description: r##"Warns when a function signature uses `&Option<T>` instead of `Option<&T>`."##,
22736 default_severity: Severity::Allow,
22737 warn_since: None,
22738 deny_since: None,
22739 },
22740 Lint {
22741 label: "clippy::ref_option_ref",
22742 description: r##"Checks for usage of `&Option<&T>`."##,
22743 default_severity: Severity::Allow,
22744 warn_since: None,
22745 deny_since: None,
22746 },
22747 Lint {
22748 label: "clippy::ref_patterns",
22749 description: r##"Checks for usages of the `ref` keyword."##,
22750 default_severity: Severity::Allow,
22751 warn_since: None,
22752 deny_since: None,
22753 },
22754 Lint {
22755 label: "clippy::regex_macro",
22756 description: r##"Nothing. This lint has been deprecated"##,
22757 default_severity: Severity::Allow,
22758 warn_since: None,
22759 deny_since: None,
22760 },
22761 Lint {
22762 label: "clippy::renamed_function_params",
22763 description: r##"Lints when the name of function parameters from trait impl is
22764different than its default implementation."##,
22765 default_severity: Severity::Allow,
22766 warn_since: None,
22767 deny_since: None,
22768 },
22769 Lint {
22770 label: "clippy::repeat_once",
22771 description: r##"Checks for usage of `.repeat(1)` and suggest the following method for each types.
22772- `.to_string()` for `str`
22773- `.clone()` for `String`
22774- `.to_vec()` for `slice`
22775
22776The lint will evaluate constant expressions and values as arguments of `.repeat(..)` and emit a message if
22777they are equivalent to `1`. (Related discussion in [rust-clippy#7306](https://github.com/rust-lang/rust-clippy/issues/7306))"##,
22778 default_severity: Severity::Allow,
22779 warn_since: None,
22780 deny_since: None,
22781 },
22782 Lint {
22783 label: "clippy::repeat_vec_with_capacity",
22784 description: r##"Looks for patterns such as `vec![Vec::with_capacity(x); n]` or `iter::repeat(Vec::with_capacity(x))`."##,
22785 default_severity: Severity::Allow,
22786 warn_since: None,
22787 deny_since: None,
22788 },
22789 Lint {
22790 label: "clippy::replace_consts",
22791 description: r##"Nothing. This lint has been deprecated"##,
22792 default_severity: Severity::Allow,
22793 warn_since: None,
22794 deny_since: None,
22795 },
22796 Lint {
22797 label: "clippy::reserve_after_initialization",
22798 description: r##"Informs the user about a more concise way to create a vector with a known capacity."##,
22799 default_severity: Severity::Allow,
22800 warn_since: None,
22801 deny_since: None,
22802 },
22803 Lint {
22804 label: "clippy::rest_pat_in_fully_bound_structs",
22805 description: r##"Checks for unnecessary '..' pattern binding on struct when all fields are explicitly matched."##,
22806 default_severity: Severity::Allow,
22807 warn_since: None,
22808 deny_since: None,
22809 },
22810 Lint {
22811 label: "clippy::result_filter_map",
22812 description: r##"Checks for iterators of `Result`s using `.filter(Result::is_ok).map(Result::unwrap)` that may
22813be replaced with a `.flatten()` call."##,
22814 default_severity: Severity::Allow,
22815 warn_since: None,
22816 deny_since: None,
22817 },
22818 Lint {
22819 label: "clippy::result_large_err",
22820 description: r##"Checks for functions that return `Result` with an unusually large
22821`Err`-variant."##,
22822 default_severity: Severity::Allow,
22823 warn_since: None,
22824 deny_since: None,
22825 },
22826 Lint {
22827 label: "clippy::result_map_or_into_option",
22828 description: r##"Checks for usage of `_.map_or(None, Some)`."##,
22829 default_severity: Severity::Allow,
22830 warn_since: None,
22831 deny_since: None,
22832 },
22833 Lint {
22834 label: "clippy::result_map_unit_fn",
22835 description: r##"Checks for usage of `result.map(f)` where f is a function
22836or closure that returns the unit type `()`."##,
22837 default_severity: Severity::Allow,
22838 warn_since: None,
22839 deny_since: None,
22840 },
22841 Lint {
22842 label: "clippy::result_unit_err",
22843 description: r##"Checks for public functions that return a `Result`
22844with an `Err` type of `()`. It suggests using a custom type that
22845implements `std::error::Error`."##,
22846 default_severity: Severity::Allow,
22847 warn_since: None,
22848 deny_since: None,
22849 },
22850 Lint {
22851 label: "clippy::return_self_not_must_use",
22852 description: r##"This lint warns when a method returning `Self` doesn't have the `#[must_use]` attribute."##,
22853 default_severity: Severity::Allow,
22854 warn_since: None,
22855 deny_since: None,
22856 },
22857 Lint {
22858 label: "clippy::reversed_empty_ranges",
22859 description: r##"Checks for range expressions `x..y` where both `x` and `y`
22860are constant and `x` is greater to `y`. Also triggers if `x` is equal to `y` when they are conditions to a `for` loop."##,
22861 default_severity: Severity::Allow,
22862 warn_since: None,
22863 deny_since: None,
22864 },
22865 Lint {
22866 label: "clippy::same_functions_in_if_condition",
22867 description: r##"Checks for consecutive `if`s with the same function call."##,
22868 default_severity: Severity::Allow,
22869 warn_since: None,
22870 deny_since: None,
22871 },
22872 Lint {
22873 label: "clippy::same_item_push",
22874 description: r##"Checks whether a for loop is being used to push a constant
22875value into a Vec."##,
22876 default_severity: Severity::Allow,
22877 warn_since: None,
22878 deny_since: None,
22879 },
22880 Lint {
22881 label: "clippy::same_name_method",
22882 description: r##"It lints if a struct has two methods with the same name:
22883one from a trait, another not from a trait."##,
22884 default_severity: Severity::Allow,
22885 warn_since: None,
22886 deny_since: None,
22887 },
22888 Lint {
22889 label: "clippy::search_is_some",
22890 description: r##"Checks for an iterator or string search (such as `find()`,
22891`position()`, or `rposition()`) followed by a call to `is_some()` or `is_none()`."##,
22892 default_severity: Severity::Allow,
22893 warn_since: None,
22894 deny_since: None,
22895 },
22896 Lint {
22897 label: "clippy::seek_from_current",
22898 description: r##"Checks if the `seek` method of the `Seek` trait is called with `SeekFrom::Current(0)`,
22899and if it is, suggests using `stream_position` instead."##,
22900 default_severity: Severity::Allow,
22901 warn_since: None,
22902 deny_since: None,
22903 },
22904 Lint {
22905 label: "clippy::seek_to_start_instead_of_rewind",
22906 description: r##"Checks for jumps to the start of a stream that implements `Seek`
22907and uses the `seek` method providing `Start` as parameter."##,
22908 default_severity: Severity::Allow,
22909 warn_since: None,
22910 deny_since: None,
22911 },
22912 Lint {
22913 label: "clippy::self_assignment",
22914 description: r##"Checks for explicit self-assignments."##,
22915 default_severity: Severity::Allow,
22916 warn_since: None,
22917 deny_since: None,
22918 },
22919 Lint {
22920 label: "clippy::self_named_constructors",
22921 description: r##"Warns when constructors have the same name as their types."##,
22922 default_severity: Severity::Allow,
22923 warn_since: None,
22924 deny_since: None,
22925 },
22926 Lint {
22927 label: "clippy::self_named_module_files",
22928 description: r##"Checks that module layout uses only `mod.rs` files."##,
22929 default_severity: Severity::Allow,
22930 warn_since: None,
22931 deny_since: None,
22932 },
22933 Lint {
22934 label: "clippy::semicolon_if_nothing_returned",
22935 description: r##"Looks for blocks of expressions and fires if the last expression returns
22936`()` but is not followed by a semicolon."##,
22937 default_severity: Severity::Allow,
22938 warn_since: None,
22939 deny_since: None,
22940 },
22941 Lint {
22942 label: "clippy::semicolon_inside_block",
22943 description: r##"Suggests moving the semicolon after a block to the inside of the block, after its last
22944expression."##,
22945 default_severity: Severity::Allow,
22946 warn_since: None,
22947 deny_since: None,
22948 },
22949 Lint {
22950 label: "clippy::semicolon_outside_block",
22951 description: r##"Suggests moving the semicolon from a block's final expression outside of the block."##,
22952 default_severity: Severity::Allow,
22953 warn_since: None,
22954 deny_since: None,
22955 },
22956 Lint {
22957 label: "clippy::separated_literal_suffix",
22958 description: r##"Warns if literal suffixes are separated by an underscore.
22959To enforce separated literal suffix style,
22960see the `unseparated_literal_suffix` lint."##,
22961 default_severity: Severity::Allow,
22962 warn_since: None,
22963 deny_since: None,
22964 },
22965 Lint {
22966 label: "clippy::serde_api_misuse",
22967 description: r##"Checks for misuses of the serde API."##,
22968 default_severity: Severity::Allow,
22969 warn_since: None,
22970 deny_since: None,
22971 },
22972 Lint {
22973 label: "clippy::set_contains_or_insert",
22974 description: r##"Checks for usage of `contains` to see if a value is not present
22975in a set like `HashSet` or `BTreeSet`, followed by an `insert`."##,
22976 default_severity: Severity::Allow,
22977 warn_since: None,
22978 deny_since: None,
22979 },
22980 Lint {
22981 label: "clippy::shadow_reuse",
22982 description: r##"Checks for bindings that shadow other bindings already in
22983scope, while reusing the original value."##,
22984 default_severity: Severity::Allow,
22985 warn_since: None,
22986 deny_since: None,
22987 },
22988 Lint {
22989 label: "clippy::shadow_same",
22990 description: r##"Checks for bindings that shadow other bindings already in
22991scope, while just changing reference level or mutability."##,
22992 default_severity: Severity::Allow,
22993 warn_since: None,
22994 deny_since: None,
22995 },
22996 Lint {
22997 label: "clippy::shadow_unrelated",
22998 description: r##"Checks for bindings that shadow other bindings already in
22999scope, either without an initialization or with one that does not even use
23000the original value."##,
23001 default_severity: Severity::Allow,
23002 warn_since: None,
23003 deny_since: None,
23004 },
23005 Lint {
23006 label: "clippy::short_circuit_statement",
23007 description: r##"Checks for the use of short circuit boolean conditions as
23008a
23009statement."##,
23010 default_severity: Severity::Allow,
23011 warn_since: None,
23012 deny_since: None,
23013 },
23014 Lint {
23015 label: "clippy::should_assert_eq",
23016 description: r##"Nothing. This lint has been deprecated"##,
23017 default_severity: Severity::Allow,
23018 warn_since: None,
23019 deny_since: None,
23020 },
23021 Lint {
23022 label: "clippy::should_implement_trait",
23023 description: r##"Checks for methods that should live in a trait
23024implementation of a `std` trait (see [llogiq's blog
23025post](http://llogiq.github.io/2015/07/30/traits.html) for further
23026information) instead of an inherent implementation."##,
23027 default_severity: Severity::Allow,
23028 warn_since: None,
23029 deny_since: None,
23030 },
23031 Lint {
23032 label: "clippy::should_panic_without_expect",
23033 description: r##"Checks for `#[should_panic]` attributes without specifying the expected panic message."##,
23034 default_severity: Severity::Allow,
23035 warn_since: None,
23036 deny_since: None,
23037 },
23038 Lint {
23039 label: "clippy::significant_drop_in_scrutinee",
23040 description: r##"Checks for temporaries returned from function calls in a match scrutinee that have the
23041`clippy::has_significant_drop` attribute."##,
23042 default_severity: Severity::Allow,
23043 warn_since: None,
23044 deny_since: None,
23045 },
23046 Lint {
23047 label: "clippy::significant_drop_tightening",
23048 description: r##"Searches for elements marked with `#[clippy::has_significant_drop]` that could be early
23049dropped but are in fact dropped at the end of their scopes. In other words, enforces the
23050tightening of their possible lifetimes."##,
23051 default_severity: Severity::Allow,
23052 warn_since: None,
23053 deny_since: None,
23054 },
23055 Lint {
23056 label: "clippy::similar_names",
23057 description: r##"Checks for names that are very similar and thus confusing.
23058
23059Note: this lint looks for similar names throughout each
23060scope. To allow it, you need to allow it on the scope
23061level, not on the name that is reported."##,
23062 default_severity: Severity::Allow,
23063 warn_since: None,
23064 deny_since: None,
23065 },
23066 Lint {
23067 label: "clippy::single_call_fn",
23068 description: r##"Checks for functions that are only used once. Does not lint tests."##,
23069 default_severity: Severity::Allow,
23070 warn_since: None,
23071 deny_since: None,
23072 },
23073 Lint {
23074 label: "clippy::single_char_add_str",
23075 description: r##"Warns when using `push_str`/`insert_str` with a single-character string literal
23076where `push`/`insert` with a `char` would work fine."##,
23077 default_severity: Severity::Allow,
23078 warn_since: None,
23079 deny_since: None,
23080 },
23081 Lint {
23082 label: "clippy::single_char_lifetime_names",
23083 description: r##"Checks for lifetimes with names which are one character
23084long."##,
23085 default_severity: Severity::Allow,
23086 warn_since: None,
23087 deny_since: None,
23088 },
23089 Lint {
23090 label: "clippy::single_char_pattern",
23091 description: r##"Checks for string methods that receive a single-character
23092`str` as an argument, e.g., `_.split(x)`."##,
23093 default_severity: Severity::Allow,
23094 warn_since: None,
23095 deny_since: None,
23096 },
23097 Lint {
23098 label: "clippy::single_component_path_imports",
23099 description: r##"Checking for imports with single component use path."##,
23100 default_severity: Severity::Allow,
23101 warn_since: None,
23102 deny_since: None,
23103 },
23104 Lint {
23105 label: "clippy::single_element_loop",
23106 description: r##"Checks whether a for loop has a single element."##,
23107 default_severity: Severity::Allow,
23108 warn_since: None,
23109 deny_since: None,
23110 },
23111 Lint {
23112 label: "clippy::single_match",
23113 description: r##"Checks for matches with a single arm where an `if let`
23114will usually suffice.
23115
23116This intentionally does not lint if there are comments
23117inside of the other arm, so as to allow the user to document
23118why having another explicit pattern with an empty body is necessary,
23119or because the comments need to be preserved for other reasons."##,
23120 default_severity: Severity::Allow,
23121 warn_since: None,
23122 deny_since: None,
23123 },
23124 Lint {
23125 label: "clippy::single_match_else",
23126 description: r##"Checks for matches with two arms where an `if let else` will
23127usually suffice."##,
23128 default_severity: Severity::Allow,
23129 warn_since: None,
23130 deny_since: None,
23131 },
23132 Lint {
23133 label: "clippy::single_range_in_vec_init",
23134 description: r##"Checks for `Vec` or array initializations that contain only one range."##,
23135 default_severity: Severity::Allow,
23136 warn_since: None,
23137 deny_since: None,
23138 },
23139 Lint {
23140 label: "clippy::size_of_in_element_count",
23141 description: r##"Detects expressions where
23142`size_of::<T>` or `size_of_val::<T>` is used as a
23143count of elements of type `T`"##,
23144 default_severity: Severity::Allow,
23145 warn_since: None,
23146 deny_since: None,
23147 },
23148 Lint {
23149 label: "clippy::size_of_ref",
23150 description: r##"Checks for calls to `std::mem::size_of_val()` where the argument is
23151a reference to a reference."##,
23152 default_severity: Severity::Allow,
23153 warn_since: None,
23154 deny_since: None,
23155 },
23156 Lint {
23157 label: "clippy::skip_while_next",
23158 description: r##"Checks for usage of `_.skip_while(condition).next()`."##,
23159 default_severity: Severity::Allow,
23160 warn_since: None,
23161 deny_since: None,
23162 },
23163 Lint {
23164 label: "clippy::slow_vector_initialization",
23165 description: r##"Checks slow zero-filled vector initialization"##,
23166 default_severity: Severity::Allow,
23167 warn_since: None,
23168 deny_since: None,
23169 },
23170 Lint {
23171 label: "clippy::stable_sort_primitive",
23172 description: r##"When sorting primitive values (integers, bools, chars, as well
23173as arrays, slices, and tuples of such items), it is typically better to
23174use an unstable sort than a stable sort."##,
23175 default_severity: Severity::Allow,
23176 warn_since: None,
23177 deny_since: None,
23178 },
23179 Lint {
23180 label: "clippy::std_instead_of_alloc",
23181 description: r##"Finds items imported through `std` when available through `alloc`."##,
23182 default_severity: Severity::Allow,
23183 warn_since: None,
23184 deny_since: None,
23185 },
23186 Lint {
23187 label: "clippy::std_instead_of_core",
23188 description: r##"Finds items imported through `std` when available through `core`."##,
23189 default_severity: Severity::Allow,
23190 warn_since: None,
23191 deny_since: None,
23192 },
23193 Lint {
23194 label: "clippy::str_split_at_newline",
23195 description: r##"Checks for usages of `str.trim().split(\
23196)` and `str.trim().split(\\
23197)`."##,
23198 default_severity: Severity::Allow,
23199 warn_since: None,
23200 deny_since: None,
23201 },
23202 Lint {
23203 label: "clippy::str_to_string",
23204 description: r##"This lint checks for `.to_string()` method calls on values of type `&str`."##,
23205 default_severity: Severity::Allow,
23206 warn_since: None,
23207 deny_since: None,
23208 },
23209 Lint {
23210 label: "clippy::string_add",
23211 description: r##"Checks for all instances of `x + _` where `x` is of type
23212`String`, but only if [`string_add_assign`](#string_add_assign) does *not*
23213match."##,
23214 default_severity: Severity::Allow,
23215 warn_since: None,
23216 deny_since: None,
23217 },
23218 Lint {
23219 label: "clippy::string_add_assign",
23220 description: r##"Checks for string appends of the form `x = x + y` (without
23221`let`!)."##,
23222 default_severity: Severity::Allow,
23223 warn_since: None,
23224 deny_since: None,
23225 },
23226 Lint {
23227 label: "clippy::string_extend_chars",
23228 description: r##"Checks for the use of `.extend(s.chars())` where s is a
23229`&str` or `String`."##,
23230 default_severity: Severity::Allow,
23231 warn_since: None,
23232 deny_since: None,
23233 },
23234 Lint {
23235 label: "clippy::string_from_utf8_as_bytes",
23236 description: r##"Check if the string is transformed to byte array and casted back to string."##,
23237 default_severity: Severity::Allow,
23238 warn_since: None,
23239 deny_since: None,
23240 },
23241 Lint {
23242 label: "clippy::string_lit_as_bytes",
23243 description: r##"Checks for the `as_bytes` method called on string literals
23244that contain only ASCII characters."##,
23245 default_severity: Severity::Allow,
23246 warn_since: None,
23247 deny_since: None,
23248 },
23249 Lint {
23250 label: "clippy::string_lit_chars_any",
23251 description: r##"Checks for `<string_lit>.chars().any(|i| i == c)`."##,
23252 default_severity: Severity::Allow,
23253 warn_since: None,
23254 deny_since: None,
23255 },
23256 Lint {
23257 label: "clippy::string_slice",
23258 description: r##"Checks for slice operations on strings"##,
23259 default_severity: Severity::Allow,
23260 warn_since: None,
23261 deny_since: None,
23262 },
23263 Lint {
23264 label: "clippy::string_to_string",
23265 description: r##"This lint checks for `.to_string()` method calls on values of type `String`."##,
23266 default_severity: Severity::Allow,
23267 warn_since: None,
23268 deny_since: None,
23269 },
23270 Lint {
23271 label: "clippy::strlen_on_c_strings",
23272 description: r##"Checks for usage of `libc::strlen` on a `CString` or `CStr` value,
23273and suggest calling `as_bytes().len()` or `to_bytes().len()` respectively instead."##,
23274 default_severity: Severity::Allow,
23275 warn_since: None,
23276 deny_since: None,
23277 },
23278 Lint {
23279 label: "clippy::struct_excessive_bools",
23280 description: r##"Checks for excessive
23281use of bools in structs."##,
23282 default_severity: Severity::Allow,
23283 warn_since: None,
23284 deny_since: None,
23285 },
23286 Lint {
23287 label: "clippy::struct_field_names",
23288 description: r##"Detects struct fields that are prefixed or suffixed
23289by the same characters or the name of the struct itself."##,
23290 default_severity: Severity::Allow,
23291 warn_since: None,
23292 deny_since: None,
23293 },
23294 Lint {
23295 label: "clippy::suboptimal_flops",
23296 description: r##"Looks for floating-point expressions that
23297can be expressed using built-in methods to improve both
23298accuracy and performance."##,
23299 default_severity: Severity::Allow,
23300 warn_since: None,
23301 deny_since: None,
23302 },
23303 Lint {
23304 label: "clippy::suspicious_arithmetic_impl",
23305 description: r##"Lints for suspicious operations in impls of arithmetic operators, e.g.
23306subtracting elements in an Add impl."##,
23307 default_severity: Severity::Allow,
23308 warn_since: None,
23309 deny_since: None,
23310 },
23311 Lint {
23312 label: "clippy::suspicious_assignment_formatting",
23313 description: r##"Checks for usage of the non-existent `=*`, `=!` and `=-`
23314operators."##,
23315 default_severity: Severity::Allow,
23316 warn_since: None,
23317 deny_since: None,
23318 },
23319 Lint {
23320 label: "clippy::suspicious_command_arg_space",
23321 description: r##"Checks for `Command::arg()` invocations that look like they
23322should be multiple arguments instead, such as `arg(-t ext2)`."##,
23323 default_severity: Severity::Allow,
23324 warn_since: None,
23325 deny_since: None,
23326 },
23327 Lint {
23328 label: "clippy::suspicious_doc_comments",
23329 description: r##"Detects the use of outer doc comments (`///`, `/**`) followed by a bang (`!`): `///!`"##,
23330 default_severity: Severity::Allow,
23331 warn_since: None,
23332 deny_since: None,
23333 },
23334 Lint {
23335 label: "clippy::suspicious_else_formatting",
23336 description: r##"Checks for formatting of `else`. It lints if the `else`
23337is followed immediately by a newline or the `else` seems to be missing."##,
23338 default_severity: Severity::Allow,
23339 warn_since: None,
23340 deny_since: None,
23341 },
23342 Lint {
23343 label: "clippy::suspicious_map",
23344 description: r##"Checks for calls to `map` followed by a `count`."##,
23345 default_severity: Severity::Allow,
23346 warn_since: None,
23347 deny_since: None,
23348 },
23349 Lint {
23350 label: "clippy::suspicious_op_assign_impl",
23351 description: r##"Lints for suspicious operations in impls of OpAssign, e.g.
23352subtracting elements in an AddAssign impl."##,
23353 default_severity: Severity::Allow,
23354 warn_since: None,
23355 deny_since: None,
23356 },
23357 Lint {
23358 label: "clippy::suspicious_open_options",
23359 description: r##"Checks for the suspicious use of `OpenOptions::create()`
23360without an explicit `OpenOptions::truncate()`."##,
23361 default_severity: Severity::Allow,
23362 warn_since: None,
23363 deny_since: None,
23364 },
23365 Lint {
23366 label: "clippy::suspicious_operation_groupings",
23367 description: r##"Checks for unlikely usages of binary operators that are almost
23368certainly typos and/or copy/paste errors, given the other usages
23369of binary operators nearby."##,
23370 default_severity: Severity::Allow,
23371 warn_since: None,
23372 deny_since: None,
23373 },
23374 Lint {
23375 label: "clippy::suspicious_splitn",
23376 description: r##"Checks for calls to [`splitn`]
23377(https://doc.rust-lang.org/std/primitive.str.html#method.splitn) and
23378related functions with either zero or one splits."##,
23379 default_severity: Severity::Allow,
23380 warn_since: None,
23381 deny_since: None,
23382 },
23383 Lint {
23384 label: "clippy::suspicious_to_owned",
23385 description: r##"Checks for the usage of `_.to_owned()`, on a `Cow<'_, _>`."##,
23386 default_severity: Severity::Allow,
23387 warn_since: None,
23388 deny_since: None,
23389 },
23390 Lint {
23391 label: "clippy::suspicious_unary_op_formatting",
23392 description: r##"Checks the formatting of a unary operator on the right hand side
23393of a binary operator. It lints if there is no space between the binary and unary operators,
23394but there is a space between the unary and its operand."##,
23395 default_severity: Severity::Allow,
23396 warn_since: None,
23397 deny_since: None,
23398 },
23399 Lint {
23400 label: "clippy::suspicious_xor_used_as_pow",
23401 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."##,
23402 default_severity: Severity::Allow,
23403 warn_since: None,
23404 deny_since: None,
23405 },
23406 Lint {
23407 label: "clippy::swap_ptr_to_ref",
23408 description: r##"Checks for calls to `core::mem::swap` where either parameter is derived from a pointer"##,
23409 default_severity: Severity::Allow,
23410 warn_since: None,
23411 deny_since: None,
23412 },
23413 Lint {
23414 label: "clippy::tabs_in_doc_comments",
23415 description: r##"Checks doc comments for usage of tab characters."##,
23416 default_severity: Severity::Allow,
23417 warn_since: None,
23418 deny_since: None,
23419 },
23420 Lint {
23421 label: "clippy::temporary_assignment",
23422 description: r##"Checks for construction of a structure or tuple just to
23423assign a value in it."##,
23424 default_severity: Severity::Allow,
23425 warn_since: None,
23426 deny_since: None,
23427 },
23428 Lint {
23429 label: "clippy::test_attr_in_doctest",
23430 description: r##"Checks for `#[test]` in doctests unless they are marked with
23431either `ignore`, `no_run` or `compile_fail`."##,
23432 default_severity: Severity::Allow,
23433 warn_since: None,
23434 deny_since: None,
23435 },
23436 Lint {
23437 label: "clippy::tests_outside_test_module",
23438 description: r##"Triggers when a testing function (marked with the `#[test]` attribute) isn't inside a testing module
23439(marked with `#[cfg(test)]`)."##,
23440 default_severity: Severity::Allow,
23441 warn_since: None,
23442 deny_since: None,
23443 },
23444 Lint {
23445 label: "clippy::to_digit_is_some",
23446 description: r##"Checks for `.to_digit(..).is_some()` on `char`s."##,
23447 default_severity: Severity::Allow,
23448 warn_since: None,
23449 deny_since: None,
23450 },
23451 Lint {
23452 label: "clippy::to_string_in_format_args",
23453 description: r##"Checks for [`ToString::to_string`](https://doc.rust-lang.org/std/string/trait.ToString.html#tymethod.to_string)
23454applied to a type that implements [`Display`](https://doc.rust-lang.org/std/fmt/trait.Display.html)
23455in a macro that does formatting."##,
23456 default_severity: Severity::Allow,
23457 warn_since: None,
23458 deny_since: None,
23459 },
23460 Lint {
23461 label: "clippy::to_string_trait_impl",
23462 description: r##"Checks for direct implementations of `ToString`."##,
23463 default_severity: Severity::Allow,
23464 warn_since: None,
23465 deny_since: None,
23466 },
23467 Lint {
23468 label: "clippy::todo",
23469 description: r##"Checks for usage of `todo!`."##,
23470 default_severity: Severity::Allow,
23471 warn_since: None,
23472 deny_since: None,
23473 },
23474 Lint {
23475 label: "clippy::too_long_first_doc_paragraph",
23476 description: r##"Checks if the first line in the documentation of items listed in module page is too long."##,
23477 default_severity: Severity::Allow,
23478 warn_since: None,
23479 deny_since: None,
23480 },
23481 Lint {
23482 label: "clippy::too_many_arguments",
23483 description: r##"Checks for functions with too many parameters."##,
23484 default_severity: Severity::Allow,
23485 warn_since: None,
23486 deny_since: None,
23487 },
23488 Lint {
23489 label: "clippy::too_many_lines",
23490 description: r##"Checks for functions with a large amount of lines."##,
23491 default_severity: Severity::Allow,
23492 warn_since: None,
23493 deny_since: None,
23494 },
23495 Lint {
23496 label: "clippy::toplevel_ref_arg",
23497 description: r##"Checks for function arguments and let bindings denoted as
23498`ref`."##,
23499 default_severity: Severity::Allow,
23500 warn_since: None,
23501 deny_since: None,
23502 },
23503 Lint {
23504 label: "clippy::trailing_empty_array",
23505 description: r##"Displays a warning when a struct with a trailing zero-sized array is declared without a `repr` attribute."##,
23506 default_severity: Severity::Allow,
23507 warn_since: None,
23508 deny_since: None,
23509 },
23510 Lint {
23511 label: "clippy::trait_duplication_in_bounds",
23512 description: r##"Checks for cases where generics or trait objects are being used and multiple
23513syntax specifications for trait bounds are used simultaneously."##,
23514 default_severity: Severity::Allow,
23515 warn_since: None,
23516 deny_since: None,
23517 },
23518 Lint {
23519 label: "clippy::transmute_bytes_to_str",
23520 description: r##"Checks for transmutes from a `&[u8]` to a `&str`."##,
23521 default_severity: Severity::Allow,
23522 warn_since: None,
23523 deny_since: None,
23524 },
23525 Lint {
23526 label: "clippy::transmute_float_to_int",
23527 description: r##"Checks for transmutes from a float to an integer."##,
23528 default_severity: Severity::Allow,
23529 warn_since: None,
23530 deny_since: None,
23531 },
23532 Lint {
23533 label: "clippy::transmute_int_to_bool",
23534 description: r##"Checks for transmutes from an integer to a `bool`."##,
23535 default_severity: Severity::Allow,
23536 warn_since: None,
23537 deny_since: None,
23538 },
23539 Lint {
23540 label: "clippy::transmute_int_to_char",
23541 description: r##"Checks for transmutes from an integer to a `char`."##,
23542 default_severity: Severity::Allow,
23543 warn_since: None,
23544 deny_since: None,
23545 },
23546 Lint {
23547 label: "clippy::transmute_int_to_float",
23548 description: r##"Checks for transmutes from an integer to a float."##,
23549 default_severity: Severity::Allow,
23550 warn_since: None,
23551 deny_since: None,
23552 },
23553 Lint {
23554 label: "clippy::transmute_int_to_non_zero",
23555 description: r##"Checks for transmutes from `T` to `NonZero<T>`, and suggests the `new_unchecked`
23556method instead."##,
23557 default_severity: Severity::Allow,
23558 warn_since: None,
23559 deny_since: None,
23560 },
23561 Lint {
23562 label: "clippy::transmute_null_to_fn",
23563 description: r##"Checks for null function pointer creation through transmute."##,
23564 default_severity: Severity::Allow,
23565 warn_since: None,
23566 deny_since: None,
23567 },
23568 Lint {
23569 label: "clippy::transmute_num_to_bytes",
23570 description: r##"Checks for transmutes from a number to an array of `u8`"##,
23571 default_severity: Severity::Allow,
23572 warn_since: None,
23573 deny_since: None,
23574 },
23575 Lint {
23576 label: "clippy::transmute_ptr_to_ptr",
23577 description: r##"Checks for transmutes from a pointer to a pointer, or
23578from a reference to a reference."##,
23579 default_severity: Severity::Allow,
23580 warn_since: None,
23581 deny_since: None,
23582 },
23583 Lint {
23584 label: "clippy::transmute_ptr_to_ref",
23585 description: r##"Checks for transmutes from a pointer to a reference."##,
23586 default_severity: Severity::Allow,
23587 warn_since: None,
23588 deny_since: None,
23589 },
23590 Lint {
23591 label: "clippy::transmute_undefined_repr",
23592 description: r##"Checks for transmutes between types which do not have a representation defined relative to
23593each other."##,
23594 default_severity: Severity::Allow,
23595 warn_since: None,
23596 deny_since: None,
23597 },
23598 Lint {
23599 label: "clippy::transmutes_expressible_as_ptr_casts",
23600 description: r##"Checks for transmutes that could be a pointer cast."##,
23601 default_severity: Severity::Allow,
23602 warn_since: None,
23603 deny_since: None,
23604 },
23605 Lint {
23606 label: "clippy::transmuting_null",
23607 description: r##"Checks for transmute calls which would receive a null pointer."##,
23608 default_severity: Severity::Allow,
23609 warn_since: None,
23610 deny_since: None,
23611 },
23612 Lint {
23613 label: "clippy::trim_split_whitespace",
23614 description: r##"Warns about calling `str::trim` (or variants) before `str::split_whitespace`."##,
23615 default_severity: Severity::Allow,
23616 warn_since: None,
23617 deny_since: None,
23618 },
23619 Lint {
23620 label: "clippy::trivial_regex",
23621 description: r##"Checks for trivial [regex](https://crates.io/crates/regex)
23622creation (with `Regex::new`, `RegexBuilder::new`, or `RegexSet::new`)."##,
23623 default_severity: Severity::Allow,
23624 warn_since: None,
23625 deny_since: None,
23626 },
23627 Lint {
23628 label: "clippy::trivially_copy_pass_by_ref",
23629 description: r##"Checks for functions taking arguments by reference, where
23630the argument type is `Copy` and small enough to be more efficient to always
23631pass by value."##,
23632 default_severity: Severity::Allow,
23633 warn_since: None,
23634 deny_since: None,
23635 },
23636 Lint {
23637 label: "clippy::try_err",
23638 description: r##"Checks for usage of `Err(x)?`."##,
23639 default_severity: Severity::Allow,
23640 warn_since: None,
23641 deny_since: None,
23642 },
23643 Lint {
23644 label: "clippy::tuple_array_conversions",
23645 description: r##"Checks for tuple<=>array conversions that are not done with `.into()`."##,
23646 default_severity: Severity::Allow,
23647 warn_since: None,
23648 deny_since: None,
23649 },
23650 Lint {
23651 label: "clippy::type_complexity",
23652 description: r##"Checks for types used in structs, parameters and `let`
23653declarations above a certain complexity threshold."##,
23654 default_severity: Severity::Allow,
23655 warn_since: None,
23656 deny_since: None,
23657 },
23658 Lint {
23659 label: "clippy::type_id_on_box",
23660 description: r##"Looks for calls to `.type_id()` on a `Box<dyn _>`."##,
23661 default_severity: Severity::Allow,
23662 warn_since: None,
23663 deny_since: None,
23664 },
23665 Lint {
23666 label: "clippy::type_repetition_in_bounds",
23667 description: r##"This lint warns about unnecessary type repetitions in trait bounds"##,
23668 default_severity: Severity::Allow,
23669 warn_since: None,
23670 deny_since: None,
23671 },
23672 Lint {
23673 label: "clippy::unchecked_duration_subtraction",
23674 description: r##"Lints subtraction between an `Instant` and a `Duration`."##,
23675 default_severity: Severity::Allow,
23676 warn_since: None,
23677 deny_since: None,
23678 },
23679 Lint {
23680 label: "clippy::unconditional_recursion",
23681 description: r##"Checks that there isn't an infinite recursion in trait
23682implementations."##,
23683 default_severity: Severity::Allow,
23684 warn_since: None,
23685 deny_since: None,
23686 },
23687 Lint {
23688 label: "clippy::undocumented_unsafe_blocks",
23689 description: r##"Checks for `unsafe` blocks and impls without a `// SAFETY: ` comment
23690explaining why the unsafe operations performed inside
23691the block are safe.
23692
23693Note the comment must appear on the line(s) preceding the unsafe block
23694with nothing appearing in between. The following is ok:
23695```rust
23696foo(
23697 // SAFETY:
23698 // This is a valid safety comment
23699 unsafe { *x }
23700)
23701```
23702But neither of these are:
23703```rust
23704// SAFETY:
23705// This is not a valid safety comment
23706foo(
23707 /* SAFETY: Neither is this */ unsafe { *x },
23708);
23709```"##,
23710 default_severity: Severity::Allow,
23711 warn_since: None,
23712 deny_since: None,
23713 },
23714 Lint {
23715 label: "clippy::unicode_not_nfc",
23716 description: r##"Checks for string literals that contain Unicode in a form
23717that is not equal to its
23718[NFC-recomposition](http://www.unicode.org/reports/tr15/#Norm_Forms)."##,
23719 default_severity: Severity::Allow,
23720 warn_since: None,
23721 deny_since: None,
23722 },
23723 Lint {
23724 label: "clippy::unimplemented",
23725 description: r##"Checks for usage of `unimplemented!`."##,
23726 default_severity: Severity::Allow,
23727 warn_since: None,
23728 deny_since: None,
23729 },
23730 Lint {
23731 label: "clippy::uninhabited_references",
23732 description: r##"It detects references to uninhabited types, such as `!` and
23733warns when those are either dereferenced or returned from a function."##,
23734 default_severity: Severity::Allow,
23735 warn_since: None,
23736 deny_since: None,
23737 },
23738 Lint {
23739 label: "clippy::uninit_assumed_init",
23740 description: r##"Checks for `MaybeUninit::uninit().assume_init()`."##,
23741 default_severity: Severity::Allow,
23742 warn_since: None,
23743 deny_since: None,
23744 },
23745 Lint {
23746 label: "clippy::uninit_vec",
23747 description: r##"Checks for `set_len()` call that creates `Vec` with uninitialized elements.
23748This is commonly caused by calling `set_len()` right after allocating or
23749reserving a buffer with `new()`, `default()`, `with_capacity()`, or `reserve()`."##,
23750 default_severity: Severity::Allow,
23751 warn_since: None,
23752 deny_since: None,
23753 },
23754 Lint {
23755 label: "clippy::uninlined_format_args",
23756 description: r##"Detect when a variable is not inlined in a format string,
23757and suggests to inline it."##,
23758 default_severity: Severity::Allow,
23759 warn_since: None,
23760 deny_since: None,
23761 },
23762 Lint {
23763 label: "clippy::unit_arg",
23764 description: r##"Checks for passing a unit value as an argument to a function without using a
23765unit literal (`()`)."##,
23766 default_severity: Severity::Allow,
23767 warn_since: None,
23768 deny_since: None,
23769 },
23770 Lint {
23771 label: "clippy::unit_cmp",
23772 description: r##"Checks for comparisons to unit. This includes all binary
23773comparisons (like `==` and `<`) and asserts."##,
23774 default_severity: Severity::Allow,
23775 warn_since: None,
23776 deny_since: None,
23777 },
23778 Lint {
23779 label: "clippy::unit_hash",
23780 description: r##"Detects `().hash(_)`."##,
23781 default_severity: Severity::Allow,
23782 warn_since: None,
23783 deny_since: None,
23784 },
23785 Lint {
23786 label: "clippy::unit_return_expecting_ord",
23787 description: r##"Checks for functions that expect closures of type
23788Fn(...) -> Ord where the implemented closure returns the unit type.
23789The lint also suggests to remove the semi-colon at the end of the statement if present."##,
23790 default_severity: Severity::Allow,
23791 warn_since: None,
23792 deny_since: None,
23793 },
23794 Lint {
23795 label: "clippy::unnecessary_box_returns",
23796 description: r##"Checks for a return type containing a `Box<T>` where `T` implements `Sized`
23797
23798The lint ignores `Box<T>` where `T` is larger than `unnecessary_box_size`,
23799as returning a large `T` directly may be detrimental to performance."##,
23800 default_severity: Severity::Allow,
23801 warn_since: None,
23802 deny_since: None,
23803 },
23804 Lint {
23805 label: "clippy::unnecessary_cast",
23806 description: r##"Checks for casts to the same type, casts of int literals to integer
23807types, casts of float literals to float types, and casts between raw
23808pointers that don't change type or constness."##,
23809 default_severity: Severity::Allow,
23810 warn_since: None,
23811 deny_since: None,
23812 },
23813 Lint {
23814 label: "clippy::unnecessary_clippy_cfg",
23815 description: r##"Checks for `#[cfg_attr(clippy, allow(clippy::lint))]`
23816and suggests to replace it with `#[allow(clippy::lint)]`."##,
23817 default_severity: Severity::Allow,
23818 warn_since: None,
23819 deny_since: None,
23820 },
23821 Lint {
23822 label: "clippy::unnecessary_fallible_conversions",
23823 description: r##"Checks for calls to `TryInto::try_into` and `TryFrom::try_from` when their infallible counterparts
23824could be used."##,
23825 default_severity: Severity::Allow,
23826 warn_since: None,
23827 deny_since: None,
23828 },
23829 Lint {
23830 label: "clippy::unnecessary_filter_map",
23831 description: r##"Checks for `filter_map` calls that could be replaced by `filter` or `map`.
23832More specifically it checks if the closure provided is only performing one of the
23833filter or map operations and suggests the appropriate option."##,
23834 default_severity: Severity::Allow,
23835 warn_since: None,
23836 deny_since: None,
23837 },
23838 Lint {
23839 label: "clippy::unnecessary_find_map",
23840 description: r##"Checks for `find_map` calls that could be replaced by `find` or `map`. More
23841specifically it checks if the closure provided is only performing one of the
23842find or map operations and suggests the appropriate option."##,
23843 default_severity: Severity::Allow,
23844 warn_since: None,
23845 deny_since: None,
23846 },
23847 Lint {
23848 label: "clippy::unnecessary_first_then_check",
23849 description: r##"Checks the usage of `.first().is_some()` or `.first().is_none()` to check if a slice is
23850empty."##,
23851 default_severity: Severity::Allow,
23852 warn_since: None,
23853 deny_since: None,
23854 },
23855 Lint {
23856 label: "clippy::unnecessary_fold",
23857 description: r##"Checks for usage of `fold` when a more succinct alternative exists.
23858Specifically, this checks for `fold`s which could be replaced by `any`, `all`,
23859`sum` or `product`."##,
23860 default_severity: Severity::Allow,
23861 warn_since: None,
23862 deny_since: None,
23863 },
23864 Lint {
23865 label: "clippy::unnecessary_get_then_check",
23866 description: r##"Checks the usage of `.get().is_some()` or `.get().is_none()` on std map types."##,
23867 default_severity: Severity::Allow,
23868 warn_since: None,
23869 deny_since: None,
23870 },
23871 Lint {
23872 label: "clippy::unnecessary_join",
23873 description: r##"Checks for usage of `.collect::<Vec<String>>().join()` on iterators."##,
23874 default_severity: Severity::Allow,
23875 warn_since: None,
23876 deny_since: None,
23877 },
23878 Lint {
23879 label: "clippy::unnecessary_lazy_evaluations",
23880 description: r##"As the counterpart to `or_fun_call`, this lint looks for unnecessary
23881lazily evaluated closures on `Option` and `Result`.
23882
23883This lint suggests changing the following functions, when eager evaluation results in
23884simpler code:
23885 - `unwrap_or_else` to `unwrap_or`
23886 - `and_then` to `and`
23887 - `or_else` to `or`
23888 - `get_or_insert_with` to `get_or_insert`
23889 - `ok_or_else` to `ok_or`
23890 - `then` to `then_some` (for msrv >= 1.62.0)"##,
23891 default_severity: Severity::Allow,
23892 warn_since: None,
23893 deny_since: None,
23894 },
23895 Lint {
23896 label: "clippy::unnecessary_literal_unwrap",
23897 description: r##"Checks for `.unwrap()` related calls on `Result`s and `Option`s that are constructed."##,
23898 default_severity: Severity::Allow,
23899 warn_since: None,
23900 deny_since: None,
23901 },
23902 Lint {
23903 label: "clippy::unnecessary_map_on_constructor",
23904 description: r##"Suggests removing the use of a `map()` (or `map_err()`) method when an `Option` or `Result`
23905is being constructed."##,
23906 default_severity: Severity::Allow,
23907 warn_since: None,
23908 deny_since: None,
23909 },
23910 Lint {
23911 label: "clippy::unnecessary_min_or_max",
23912 description: r##"Checks for unnecessary calls to `min()` or `max()` in the following cases
23913- Either both side is constant
23914- One side is clearly larger than the other, like i32::MIN and an i32 variable"##,
23915 default_severity: Severity::Allow,
23916 warn_since: None,
23917 deny_since: None,
23918 },
23919 Lint {
23920 label: "clippy::unnecessary_mut_passed",
23921 description: r##"Detects passing a mutable reference to a function that only
23922requires an immutable reference."##,
23923 default_severity: Severity::Allow,
23924 warn_since: None,
23925 deny_since: None,
23926 },
23927 Lint {
23928 label: "clippy::unnecessary_operation",
23929 description: r##"Checks for expression statements that can be reduced to a
23930sub-expression."##,
23931 default_severity: Severity::Allow,
23932 warn_since: None,
23933 deny_since: None,
23934 },
23935 Lint {
23936 label: "clippy::unnecessary_owned_empty_strings",
23937 description: r##"Detects cases of owned empty strings being passed as an argument to a function expecting `&str`"##,
23938 default_severity: Severity::Allow,
23939 warn_since: None,
23940 deny_since: None,
23941 },
23942 Lint {
23943 label: "clippy::unnecessary_result_map_or_else",
23944 description: r##"Checks for usage of `.map_or_else()` map closure for `Result` type."##,
23945 default_severity: Severity::Allow,
23946 warn_since: None,
23947 deny_since: None,
23948 },
23949 Lint {
23950 label: "clippy::unnecessary_safety_comment",
23951 description: r##"Checks for `// SAFETY: ` comments on safe code."##,
23952 default_severity: Severity::Allow,
23953 warn_since: None,
23954 deny_since: None,
23955 },
23956 Lint {
23957 label: "clippy::unnecessary_safety_doc",
23958 description: r##"Checks for the doc comments of publicly visible
23959safe functions and traits and warns if there is a `# Safety` section."##,
23960 default_severity: Severity::Allow,
23961 warn_since: None,
23962 deny_since: None,
23963 },
23964 Lint {
23965 label: "clippy::unnecessary_self_imports",
23966 description: r##"Checks for imports ending in `::{self}`."##,
23967 default_severity: Severity::Allow,
23968 warn_since: None,
23969 deny_since: None,
23970 },
23971 Lint {
23972 label: "clippy::unnecessary_sort_by",
23973 description: r##"Checks for usage of `Vec::sort_by` passing in a closure
23974which compares the two arguments, either directly or indirectly."##,
23975 default_severity: Severity::Allow,
23976 warn_since: None,
23977 deny_since: None,
23978 },
23979 Lint {
23980 label: "clippy::unnecessary_struct_initialization",
23981 description: r##"Checks for initialization of an identical `struct` from another instance
23982of the type, either by copying a base without setting any field or by
23983moving all fields individually."##,
23984 default_severity: Severity::Allow,
23985 warn_since: None,
23986 deny_since: None,
23987 },
23988 Lint {
23989 label: "clippy::unnecessary_to_owned",
23990 description: r##"Checks for unnecessary calls to [`ToOwned::to_owned`](https://doc.rust-lang.org/std/borrow/trait.ToOwned.html#tymethod.to_owned)
23991and other `to_owned`-like functions."##,
23992 default_severity: Severity::Allow,
23993 warn_since: None,
23994 deny_since: None,
23995 },
23996 Lint {
23997 label: "clippy::unnecessary_unwrap",
23998 description: r##"Checks for calls of `unwrap[_err]()` that cannot fail."##,
23999 default_severity: Severity::Allow,
24000 warn_since: None,
24001 deny_since: None,
24002 },
24003 Lint {
24004 label: "clippy::unnecessary_wraps",
24005 description: r##"Checks for private functions that only return `Ok` or `Some`."##,
24006 default_severity: Severity::Allow,
24007 warn_since: None,
24008 deny_since: None,
24009 },
24010 Lint {
24011 label: "clippy::unneeded_field_pattern",
24012 description: r##"Checks for structure field patterns bound to wildcards."##,
24013 default_severity: Severity::Allow,
24014 warn_since: None,
24015 deny_since: None,
24016 },
24017 Lint {
24018 label: "clippy::unneeded_wildcard_pattern",
24019 description: r##"Checks for tuple patterns with a wildcard
24020pattern (`_`) is next to a rest pattern (`..`).
24021
24022_NOTE_: While `_, ..` means there is at least one element left, `..`
24023means there are 0 or more elements left. This can make a difference
24024when refactoring, but shouldn't result in errors in the refactored code,
24025since the wildcard pattern isn't used anyway."##,
24026 default_severity: Severity::Allow,
24027 warn_since: None,
24028 deny_since: None,
24029 },
24030 Lint {
24031 label: "clippy::unnested_or_patterns",
24032 description: r##"Checks for unnested or-patterns, e.g., `Some(0) | Some(2)` and
24033suggests replacing the pattern with a nested one, `Some(0 | 2)`.
24034
24035Another way to think of this is that it rewrites patterns in
24036*disjunctive normal form (DNF)* into *conjunctive normal form (CNF)*."##,
24037 default_severity: Severity::Allow,
24038 warn_since: None,
24039 deny_since: None,
24040 },
24041 Lint {
24042 label: "clippy::unreachable",
24043 description: r##"Checks for usage of `unreachable!`."##,
24044 default_severity: Severity::Allow,
24045 warn_since: None,
24046 deny_since: None,
24047 },
24048 Lint {
24049 label: "clippy::unreadable_literal",
24050 description: r##"Warns if a long integral or floating-point constant does
24051not contain underscores."##,
24052 default_severity: Severity::Allow,
24053 warn_since: None,
24054 deny_since: None,
24055 },
24056 Lint {
24057 label: "clippy::unsafe_derive_deserialize",
24058 description: r##"Checks for deriving `serde::Deserialize` on a type that
24059has methods using `unsafe`."##,
24060 default_severity: Severity::Allow,
24061 warn_since: None,
24062 deny_since: None,
24063 },
24064 Lint {
24065 label: "clippy::unsafe_removed_from_name",
24066 description: r##"Checks for imports that remove unsafe from an item's
24067name."##,
24068 default_severity: Severity::Allow,
24069 warn_since: None,
24070 deny_since: None,
24071 },
24072 Lint {
24073 label: "clippy::unsafe_vector_initialization",
24074 description: r##"Nothing. This lint has been deprecated"##,
24075 default_severity: Severity::Allow,
24076 warn_since: None,
24077 deny_since: None,
24078 },
24079 Lint {
24080 label: "clippy::unseparated_literal_suffix",
24081 description: r##"Warns if literal suffixes are not separated by an
24082underscore.
24083To enforce unseparated literal suffix style,
24084see the `separated_literal_suffix` lint."##,
24085 default_severity: Severity::Allow,
24086 warn_since: None,
24087 deny_since: None,
24088 },
24089 Lint {
24090 label: "clippy::unsound_collection_transmute",
24091 description: r##"Checks for transmutes between collections whose
24092types have different ABI, size or alignment."##,
24093 default_severity: Severity::Allow,
24094 warn_since: None,
24095 deny_since: None,
24096 },
24097 Lint {
24098 label: "clippy::unstable_as_mut_slice",
24099 description: r##"Nothing. This lint has been deprecated"##,
24100 default_severity: Severity::Allow,
24101 warn_since: None,
24102 deny_since: None,
24103 },
24104 Lint {
24105 label: "clippy::unstable_as_slice",
24106 description: r##"Nothing. This lint has been deprecated"##,
24107 default_severity: Severity::Allow,
24108 warn_since: None,
24109 deny_since: None,
24110 },
24111 Lint {
24112 label: "clippy::unused_async",
24113 description: r##"Checks for functions that are declared `async` but have no `.await`s inside of them."##,
24114 default_severity: Severity::Allow,
24115 warn_since: None,
24116 deny_since: None,
24117 },
24118 Lint {
24119 label: "clippy::unused_collect",
24120 description: r##"Nothing. This lint has been deprecated"##,
24121 default_severity: Severity::Allow,
24122 warn_since: None,
24123 deny_since: None,
24124 },
24125 Lint {
24126 label: "clippy::unused_enumerate_index",
24127 description: r##"Checks for uses of the `enumerate` method where the index is unused (`_`)"##,
24128 default_severity: Severity::Allow,
24129 warn_since: None,
24130 deny_since: None,
24131 },
24132 Lint {
24133 label: "clippy::unused_format_specs",
24134 description: r##"Detects [formatting parameters] that have no effect on the output of
24135`format!()`, `println!()` or similar macros."##,
24136 default_severity: Severity::Allow,
24137 warn_since: None,
24138 deny_since: None,
24139 },
24140 Lint {
24141 label: "clippy::unused_io_amount",
24142 description: r##"Checks for unused written/read amount."##,
24143 default_severity: Severity::Allow,
24144 warn_since: None,
24145 deny_since: None,
24146 },
24147 Lint {
24148 label: "clippy::unused_peekable",
24149 description: r##"Checks for the creation of a `peekable` iterator that is never `.peek()`ed"##,
24150 default_severity: Severity::Allow,
24151 warn_since: None,
24152 deny_since: None,
24153 },
24154 Lint {
24155 label: "clippy::unused_result_ok",
24156 description: r##"Checks for calls to `Result::ok()` without using the returned `Option`."##,
24157 default_severity: Severity::Allow,
24158 warn_since: None,
24159 deny_since: None,
24160 },
24161 Lint {
24162 label: "clippy::unused_rounding",
24163 description: r##"Detects cases where a whole-number literal float is being rounded, using
24164the `floor`, `ceil`, or `round` methods."##,
24165 default_severity: Severity::Allow,
24166 warn_since: None,
24167 deny_since: None,
24168 },
24169 Lint {
24170 label: "clippy::unused_self",
24171 description: r##"Checks methods that contain a `self` argument but don't use it"##,
24172 default_severity: Severity::Allow,
24173 warn_since: None,
24174 deny_since: None,
24175 },
24176 Lint {
24177 label: "clippy::unused_trait_names",
24178 description: r##"Checks for `use Trait` where the Trait is only used for its methods and not referenced by a path directly."##,
24179 default_severity: Severity::Allow,
24180 warn_since: None,
24181 deny_since: None,
24182 },
24183 Lint {
24184 label: "clippy::unused_unit",
24185 description: r##"Checks for unit (`()`) expressions that can be removed."##,
24186 default_severity: Severity::Allow,
24187 warn_since: None,
24188 deny_since: None,
24189 },
24190 Lint {
24191 label: "clippy::unusual_byte_groupings",
24192 description: r##"Warns if hexadecimal or binary literals are not grouped
24193by nibble or byte."##,
24194 default_severity: Severity::Allow,
24195 warn_since: None,
24196 deny_since: None,
24197 },
24198 Lint {
24199 label: "clippy::unwrap_in_result",
24200 description: r##"Checks for functions of type `Result` that contain `expect()` or `unwrap()`"##,
24201 default_severity: Severity::Allow,
24202 warn_since: None,
24203 deny_since: None,
24204 },
24205 Lint {
24206 label: "clippy::unwrap_or_default",
24207 description: r##"Checks for usages of the following functions with an argument that constructs a default value
24208(e.g., `Default::default` or `String::new`):
24209- `unwrap_or`
24210- `unwrap_or_else`
24211- `or_insert`
24212- `or_insert_with`"##,
24213 default_severity: Severity::Allow,
24214 warn_since: None,
24215 deny_since: None,
24216 },
24217 Lint {
24218 label: "clippy::unwrap_used",
24219 description: r##"Checks for `.unwrap()` or `.unwrap_err()` calls on `Result`s and `.unwrap()` call on `Option`s."##,
24220 default_severity: Severity::Allow,
24221 warn_since: None,
24222 deny_since: None,
24223 },
24224 Lint {
24225 label: "clippy::upper_case_acronyms",
24226 description: r##"Checks for fully capitalized names and optionally names containing a capitalized acronym."##,
24227 default_severity: Severity::Allow,
24228 warn_since: None,
24229 deny_since: None,
24230 },
24231 Lint {
24232 label: "clippy::use_debug",
24233 description: r##"Checks for usage of `Debug` formatting. The purpose of this
24234lint is to catch debugging remnants."##,
24235 default_severity: Severity::Allow,
24236 warn_since: None,
24237 deny_since: None,
24238 },
24239 Lint {
24240 label: "clippy::use_self",
24241 description: r##"Checks for unnecessary repetition of structure name when a
24242replacement with `Self` is applicable."##,
24243 default_severity: Severity::Allow,
24244 warn_since: None,
24245 deny_since: None,
24246 },
24247 Lint {
24248 label: "clippy::used_underscore_binding",
24249 description: r##"Checks for the use of bindings with a single leading
24250underscore."##,
24251 default_severity: Severity::Allow,
24252 warn_since: None,
24253 deny_since: None,
24254 },
24255 Lint {
24256 label: "clippy::used_underscore_items",
24257 description: r##"Checks for the use of item with a single leading
24258underscore."##,
24259 default_severity: Severity::Allow,
24260 warn_since: None,
24261 deny_since: None,
24262 },
24263 Lint {
24264 label: "clippy::useless_asref",
24265 description: r##"Checks for usage of `.as_ref()` or `.as_mut()` where the
24266types before and after the call are the same."##,
24267 default_severity: Severity::Allow,
24268 warn_since: None,
24269 deny_since: None,
24270 },
24271 Lint {
24272 label: "clippy::useless_attribute",
24273 description: r##"Checks for `extern crate` and `use` items annotated with
24274lint attributes.
24275
24276This lint permits lint attributes for lints emitted on the items themself.
24277For `use` items these lints are:
24278* ambiguous_glob_reexports
24279* dead_code
24280* deprecated
24281* hidden_glob_reexports
24282* unreachable_pub
24283* unused
24284* unused_braces
24285* unused_import_braces
24286* clippy::disallowed_types
24287* clippy::enum_glob_use
24288* clippy::macro_use_imports
24289* clippy::module_name_repetitions
24290* clippy::redundant_pub_crate
24291* clippy::single_component_path_imports
24292* clippy::unsafe_removed_from_name
24293* clippy::wildcard_imports
24294
24295For `extern crate` items these lints are:
24296* `unused_imports` on items with `#[macro_use]`"##,
24297 default_severity: Severity::Allow,
24298 warn_since: None,
24299 deny_since: None,
24300 },
24301 Lint {
24302 label: "clippy::useless_conversion",
24303 description: r##"Checks for `Into`, `TryInto`, `From`, `TryFrom`, or `IntoIter` calls
24304which uselessly convert to the same type."##,
24305 default_severity: Severity::Allow,
24306 warn_since: None,
24307 deny_since: None,
24308 },
24309 Lint {
24310 label: "clippy::useless_format",
24311 description: r##"Checks for the use of `format!(string literal with no
24312argument)` and `format!({}, foo)` where `foo` is a string."##,
24313 default_severity: Severity::Allow,
24314 warn_since: None,
24315 deny_since: None,
24316 },
24317 Lint {
24318 label: "clippy::useless_let_if_seq",
24319 description: r##"Checks for variable declarations immediately followed by a
24320conditional affectation."##,
24321 default_severity: Severity::Allow,
24322 warn_since: None,
24323 deny_since: None,
24324 },
24325 Lint {
24326 label: "clippy::useless_transmute",
24327 description: r##"Checks for transmutes to the original type of the object
24328and transmutes that could be a cast."##,
24329 default_severity: Severity::Allow,
24330 warn_since: None,
24331 deny_since: None,
24332 },
24333 Lint {
24334 label: "clippy::useless_vec",
24335 description: r##"Checks for usage of `vec![..]` when using `[..]` would
24336be possible."##,
24337 default_severity: Severity::Allow,
24338 warn_since: None,
24339 deny_since: None,
24340 },
24341 Lint {
24342 label: "clippy::vec_box",
24343 description: r##"Checks for usage of `Vec<Box<T>>` where T: Sized anywhere in the code.
24344Check the [Box documentation](https://doc.rust-lang.org/std/boxed/index.html) for more information."##,
24345 default_severity: Severity::Allow,
24346 warn_since: None,
24347 deny_since: None,
24348 },
24349 Lint {
24350 label: "clippy::vec_init_then_push",
24351 description: r##"Checks for calls to `push` immediately after creating a new `Vec`.
24352
24353If the `Vec` is created using `with_capacity` this will only lint if the capacity is a
24354constant and the number of pushes is greater than or equal to the initial capacity.
24355
24356If the `Vec` is extended after the initial sequence of pushes and it was default initialized
24357then this will only lint after there were at least four pushes. This number may change in
24358the future."##,
24359 default_severity: Severity::Allow,
24360 warn_since: None,
24361 deny_since: None,
24362 },
24363 Lint {
24364 label: "clippy::vec_resize_to_zero",
24365 description: r##"Finds occurrences of `Vec::resize(0, an_int)`"##,
24366 default_severity: Severity::Allow,
24367 warn_since: None,
24368 deny_since: None,
24369 },
24370 Lint {
24371 label: "clippy::verbose_bit_mask",
24372 description: r##"Checks for bit masks that can be replaced by a call
24373to `trailing_zeros`"##,
24374 default_severity: Severity::Allow,
24375 warn_since: None,
24376 deny_since: None,
24377 },
24378 Lint {
24379 label: "clippy::verbose_file_reads",
24380 description: r##"Checks for usage of File::read_to_end and File::read_to_string."##,
24381 default_severity: Severity::Allow,
24382 warn_since: None,
24383 deny_since: None,
24384 },
24385 Lint {
24386 label: "clippy::waker_clone_wake",
24387 description: r##"Checks for usage of `waker.clone().wake()`"##,
24388 default_severity: Severity::Allow,
24389 warn_since: None,
24390 deny_since: None,
24391 },
24392 Lint {
24393 label: "clippy::while_float",
24394 description: r##"Checks for while loops comparing floating point values."##,
24395 default_severity: Severity::Allow,
24396 warn_since: None,
24397 deny_since: None,
24398 },
24399 Lint {
24400 label: "clippy::while_immutable_condition",
24401 description: r##"Checks whether variables used within while loop condition
24402can be (and are) mutated in the body."##,
24403 default_severity: Severity::Allow,
24404 warn_since: None,
24405 deny_since: None,
24406 },
24407 Lint {
24408 label: "clippy::while_let_loop",
24409 description: r##"Detects `loop + match` combinations that are easier
24410written as a `while let` loop."##,
24411 default_severity: Severity::Allow,
24412 warn_since: None,
24413 deny_since: None,
24414 },
24415 Lint {
24416 label: "clippy::while_let_on_iterator",
24417 description: r##"Checks for `while let` expressions on iterators."##,
24418 default_severity: Severity::Allow,
24419 warn_since: None,
24420 deny_since: None,
24421 },
24422 Lint {
24423 label: "clippy::wildcard_dependencies",
24424 description: r##"Checks for wildcard dependencies in the `Cargo.toml`."##,
24425 default_severity: Severity::Allow,
24426 warn_since: None,
24427 deny_since: None,
24428 },
24429 Lint {
24430 label: "clippy::wildcard_enum_match_arm",
24431 description: r##"Checks for wildcard enum matches using `_`."##,
24432 default_severity: Severity::Allow,
24433 warn_since: None,
24434 deny_since: None,
24435 },
24436 Lint {
24437 label: "clippy::wildcard_imports",
24438 description: r##"Checks for wildcard imports `use _::*`."##,
24439 default_severity: Severity::Allow,
24440 warn_since: None,
24441 deny_since: None,
24442 },
24443 Lint {
24444 label: "clippy::wildcard_in_or_patterns",
24445 description: r##"Checks for wildcard pattern used with others patterns in same match arm."##,
24446 default_severity: Severity::Allow,
24447 warn_since: None,
24448 deny_since: None,
24449 },
24450 Lint {
24451 label: "clippy::write_literal",
24452 description: r##"This lint warns about the use of literals as `write!`/`writeln!` args."##,
24453 default_severity: Severity::Allow,
24454 warn_since: None,
24455 deny_since: None,
24456 },
24457 Lint {
24458 label: "clippy::write_with_newline",
24459 description: r##"This lint warns when you use `write!()` with a format
24460string that
24461ends in a newline."##,
24462 default_severity: Severity::Allow,
24463 warn_since: None,
24464 deny_since: None,
24465 },
24466 Lint {
24467 label: "clippy::writeln_empty_string",
24468 description: r##"This lint warns when you use `writeln!(buf, )` to
24469print a newline."##,
24470 default_severity: Severity::Allow,
24471 warn_since: None,
24472 deny_since: None,
24473 },
24474 Lint {
24475 label: "clippy::wrong_pub_self_convention",
24476 description: r##"Nothing. This lint has been deprecated"##,
24477 default_severity: Severity::Allow,
24478 warn_since: None,
24479 deny_since: None,
24480 },
24481 Lint {
24482 label: "clippy::wrong_self_convention",
24483 description: r##"Checks for methods with certain name prefixes or suffixes, and which
24484do not adhere to standard conventions regarding how `self` is taken.
24485The actual rules are:
24486
24487|Prefix |Postfix |`self` taken | `self` type |
24488|-------|------------|-------------------------------|--------------|
24489|`as_` | none |`&self` or `&mut self` | any |
24490|`from_`| none | none | any |
24491|`into_`| none |`self` | any |
24492|`is_` | none |`&mut self` or `&self` or none | any |
24493|`to_` | `_mut` |`&mut self` | any |
24494|`to_` | not `_mut` |`self` | `Copy` |
24495|`to_` | not `_mut` |`&self` | not `Copy` |
24496
24497Note: Clippy doesn't trigger methods with `to_` prefix in:
24498- Traits definition.
24499Clippy can not tell if a type that implements a trait is `Copy` or not.
24500- Traits implementation, when `&self` is taken.
24501The method signature is controlled by the trait and often `&self` is required for all types that implement the trait
24502(see e.g. the `std::string::ToString` trait).
24503
24504Clippy allows `Pin<&Self>` and `Pin<&mut Self>` if `&self` and `&mut self` is required.
24505
24506Please find more info here:
24507https://rust-lang.github.io/api-guidelines/naming.html#ad-hoc-conversions-follow-as_-to_-into_-conventions-c-conv"##,
24508 default_severity: Severity::Allow,
24509 warn_since: None,
24510 deny_since: None,
24511 },
24512 Lint {
24513 label: "clippy::wrong_transmute",
24514 description: r##"Checks for transmutes that can't ever be correct on any
24515architecture."##,
24516 default_severity: Severity::Allow,
24517 warn_since: None,
24518 deny_since: None,
24519 },
24520 Lint {
24521 label: "clippy::zero_divided_by_zero",
24522 description: r##"Checks for `0.0 / 0.0`."##,
24523 default_severity: Severity::Allow,
24524 warn_since: None,
24525 deny_since: None,
24526 },
24527 Lint {
24528 label: "clippy::zero_prefixed_literal",
24529 description: r##"Warns if an integral constant literal starts with `0`."##,
24530 default_severity: Severity::Allow,
24531 warn_since: None,
24532 deny_since: None,
24533 },
24534 Lint {
24535 label: "clippy::zero_ptr",
24536 description: r##"Catch casts from `0` to some pointer type"##,
24537 default_severity: Severity::Allow,
24538 warn_since: None,
24539 deny_since: None,
24540 },
24541 Lint {
24542 label: "clippy::zero_repeat_side_effects",
24543 description: r##"Checks for array or vec initializations which call a function or method,
24544but which have a repeat count of zero."##,
24545 default_severity: Severity::Allow,
24546 warn_since: None,
24547 deny_since: None,
24548 },
24549 Lint {
24550 label: "clippy::zero_sized_map_values",
24551 description: r##"Checks for maps with zero-sized value types anywhere in the code."##,
24552 default_severity: Severity::Allow,
24553 warn_since: None,
24554 deny_since: None,
24555 },
24556 Lint {
24557 label: "clippy::zombie_processes",
24558 description: r##"Looks for code that spawns a process but never calls `wait()` on the child."##,
24559 default_severity: Severity::Allow,
24560 warn_since: None,
24561 deny_since: None,
24562 },
24563 Lint {
24564 label: "clippy::zst_offset",
24565 description: r##"Checks for `offset(_)`, `wrapping_`{`add`, `sub`}, etc. on raw pointers to
24566zero-sized types"##,
24567 default_severity: Severity::Allow,
24568 warn_since: None,
24569 deny_since: None,
24570 },
24571];
24572pub const CLIPPY_LINT_GROUPS: &[LintGroup] = &[
24573 LintGroup {
24574 lint: Lint {
24575 label: "clippy::cargo",
24576 description: r##"lint group for: clippy::cargo_common_metadata, clippy::multiple_crate_versions, clippy::negative_feature_names, clippy::redundant_feature_names, clippy::wildcard_dependencies"##,
24577 default_severity: Severity::Allow,
24578 warn_since: None,
24579 deny_since: None,
24580 },
24581 children: &[
24582 "clippy::cargo_common_metadata",
24583 "clippy::multiple_crate_versions",
24584 "clippy::negative_feature_names",
24585 "clippy::redundant_feature_names",
24586 "clippy::wildcard_dependencies",
24587 ],
24588 },
24589 LintGroup {
24590 lint: Lint {
24591 label: "clippy::complexity",
24592 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"##,
24593 default_severity: Severity::Allow,
24594 warn_since: None,
24595 deny_since: None,
24596 },
24597 children: &[
24598 "clippy::bind_instead_of_map",
24599 "clippy::bool_comparison",
24600 "clippy::borrow_deref_ref",
24601 "clippy::borrowed_box",
24602 "clippy::bytes_count_to_len",
24603 "clippy::char_lit_as_u8",
24604 "clippy::clone_on_copy",
24605 "clippy::crosspointer_transmute",
24606 "clippy::default_constructed_unit_structs",
24607 "clippy::deprecated_cfg_attr",
24608 "clippy::deref_addrof",
24609 "clippy::derivable_impls",
24610 "clippy::diverging_sub_expression",
24611 "clippy::double_comparisons",
24612 "clippy::double_parens",
24613 "clippy::duration_subsec",
24614 "clippy::excessive_nesting",
24615 "clippy::explicit_auto_deref",
24616 "clippy::explicit_counter_loop",
24617 "clippy::explicit_write",
24618 "clippy::extra_unused_lifetimes",
24619 "clippy::extra_unused_type_parameters",
24620 "clippy::filter_map_identity",
24621 "clippy::filter_next",
24622 "clippy::flat_map_identity",
24623 "clippy::get_last_with_len",
24624 "clippy::identity_op",
24625 "clippy::implied_bounds_in_impls",
24626 "clippy::inspect_for_each",
24627 "clippy::int_plus_one",
24628 "clippy::iter_count",
24629 "clippy::iter_kv_map",
24630 "clippy::let_with_type_underscore",
24631 "clippy::manual_c_str_literals",
24632 "clippy::manual_clamp",
24633 "clippy::manual_div_ceil",
24634 "clippy::manual_filter",
24635 "clippy::manual_filter_map",
24636 "clippy::manual_find",
24637 "clippy::manual_find_map",
24638 "clippy::manual_flatten",
24639 "clippy::manual_hash_one",
24640 "clippy::manual_inspect",
24641 "clippy::manual_is_power_of_two",
24642 "clippy::manual_main_separator_str",
24643 "clippy::manual_range_patterns",
24644 "clippy::manual_rem_euclid",
24645 "clippy::manual_slice_size_calculation",
24646 "clippy::manual_split_once",
24647 "clippy::manual_strip",
24648 "clippy::manual_swap",
24649 "clippy::manual_unwrap_or",
24650 "clippy::map_flatten",
24651 "clippy::map_identity",
24652 "clippy::match_as_ref",
24653 "clippy::match_single_binding",
24654 "clippy::needless_arbitrary_self_type",
24655 "clippy::needless_bool",
24656 "clippy::needless_bool_assign",
24657 "clippy::needless_borrowed_reference",
24658 "clippy::needless_if",
24659 "clippy::needless_lifetimes",
24660 "clippy::needless_match",
24661 "clippy::needless_option_as_deref",
24662 "clippy::needless_option_take",
24663 "clippy::needless_question_mark",
24664 "clippy::needless_splitn",
24665 "clippy::needless_update",
24666 "clippy::neg_cmp_op_on_partial_ord",
24667 "clippy::no_effect",
24668 "clippy::nonminimal_bool",
24669 "clippy::only_used_in_recursion",
24670 "clippy::option_as_ref_deref",
24671 "clippy::option_filter_map",
24672 "clippy::option_map_unit_fn",
24673 "clippy::or_then_unwrap",
24674 "clippy::partialeq_ne_impl",
24675 "clippy::precedence",
24676 "clippy::ptr_offset_with_cast",
24677 "clippy::range_zip_with_len",
24678 "clippy::redundant_as_str",
24679 "clippy::redundant_async_block",
24680 "clippy::redundant_at_rest_pattern",
24681 "clippy::redundant_closure_call",
24682 "clippy::redundant_guards",
24683 "clippy::redundant_slicing",
24684 "clippy::repeat_once",
24685 "clippy::reserve_after_initialization",
24686 "clippy::result_filter_map",
24687 "clippy::result_map_unit_fn",
24688 "clippy::search_is_some",
24689 "clippy::seek_from_current",
24690 "clippy::seek_to_start_instead_of_rewind",
24691 "clippy::short_circuit_statement",
24692 "clippy::single_element_loop",
24693 "clippy::skip_while_next",
24694 "clippy::string_from_utf8_as_bytes",
24695 "clippy::strlen_on_c_strings",
24696 "clippy::temporary_assignment",
24697 "clippy::too_many_arguments",
24698 "clippy::transmute_bytes_to_str",
24699 "clippy::transmute_float_to_int",
24700 "clippy::transmute_int_to_bool",
24701 "clippy::transmute_int_to_char",
24702 "clippy::transmute_int_to_float",
24703 "clippy::transmute_int_to_non_zero",
24704 "clippy::transmute_num_to_bytes",
24705 "clippy::transmute_ptr_to_ref",
24706 "clippy::transmutes_expressible_as_ptr_casts",
24707 "clippy::type_complexity",
24708 "clippy::unit_arg",
24709 "clippy::unnecessary_cast",
24710 "clippy::unnecessary_filter_map",
24711 "clippy::unnecessary_find_map",
24712 "clippy::unnecessary_first_then_check",
24713 "clippy::unnecessary_literal_unwrap",
24714 "clippy::unnecessary_map_on_constructor",
24715 "clippy::unnecessary_min_or_max",
24716 "clippy::unnecessary_operation",
24717 "clippy::unnecessary_sort_by",
24718 "clippy::unnecessary_unwrap",
24719 "clippy::unneeded_wildcard_pattern",
24720 "clippy::unused_format_specs",
24721 "clippy::useless_asref",
24722 "clippy::useless_conversion",
24723 "clippy::useless_format",
24724 "clippy::useless_transmute",
24725 "clippy::vec_box",
24726 "clippy::while_let_loop",
24727 "clippy::wildcard_in_or_patterns",
24728 "clippy::zero_divided_by_zero",
24729 "clippy::zero_prefixed_literal",
24730 ],
24731 },
24732 LintGroup {
24733 lint: Lint {
24734 label: "clippy::correctness",
24735 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"##,
24736 default_severity: Severity::Allow,
24737 warn_since: None,
24738 deny_since: None,
24739 },
24740 children: &[
24741 "clippy::absurd_extreme_comparisons",
24742 "clippy::almost_swapped",
24743 "clippy::approx_constant",
24744 "clippy::async_yields_async",
24745 "clippy::bad_bit_mask",
24746 "clippy::cast_slice_different_sizes",
24747 "clippy::deprecated_semver",
24748 "clippy::derive_ord_xor_partial_ord",
24749 "clippy::derived_hash_with_manual_eq",
24750 "clippy::eager_transmute",
24751 "clippy::enum_clike_unportable_variant",
24752 "clippy::eq_op",
24753 "clippy::erasing_op",
24754 "clippy::fn_address_comparisons",
24755 "clippy::if_let_mutex",
24756 "clippy::ifs_same_cond",
24757 "clippy::impl_hash_borrow_with_str_and_bytes",
24758 "clippy::impossible_comparisons",
24759 "clippy::ineffective_bit_mask",
24760 "clippy::infinite_iter",
24761 "clippy::inherent_to_string_shadow_display",
24762 "clippy::inline_fn_without_body",
24763 "clippy::invalid_null_ptr_usage",
24764 "clippy::invalid_regex",
24765 "clippy::inverted_saturating_sub",
24766 "clippy::invisible_characters",
24767 "clippy::iter_next_loop",
24768 "clippy::iter_skip_zero",
24769 "clippy::iterator_step_by_zero",
24770 "clippy::let_underscore_lock",
24771 "clippy::lint_groups_priority",
24772 "clippy::match_str_case_mismatch",
24773 "clippy::mem_replace_with_uninit",
24774 "clippy::min_max",
24775 "clippy::mistyped_literal_suffixes",
24776 "clippy::modulo_one",
24777 "clippy::mut_from_ref",
24778 "clippy::never_loop",
24779 "clippy::non_octal_unix_permissions",
24780 "clippy::nonsensical_open_options",
24781 "clippy::not_unsafe_ptr_arg_deref",
24782 "clippy::option_env_unwrap",
24783 "clippy::out_of_bounds_indexing",
24784 "clippy::overly_complex_bool_expr",
24785 "clippy::panicking_overflow_checks",
24786 "clippy::panicking_unwrap",
24787 "clippy::possible_missing_comma",
24788 "clippy::read_line_without_trim",
24789 "clippy::recursive_format_impl",
24790 "clippy::redundant_comparisons",
24791 "clippy::redundant_locals",
24792 "clippy::reversed_empty_ranges",
24793 "clippy::self_assignment",
24794 "clippy::serde_api_misuse",
24795 "clippy::size_of_in_element_count",
24796 "clippy::suspicious_splitn",
24797 "clippy::transmute_null_to_fn",
24798 "clippy::transmuting_null",
24799 "clippy::uninit_assumed_init",
24800 "clippy::uninit_vec",
24801 "clippy::unit_cmp",
24802 "clippy::unit_hash",
24803 "clippy::unit_return_expecting_ord",
24804 "clippy::unsound_collection_transmute",
24805 "clippy::unused_io_amount",
24806 "clippy::useless_attribute",
24807 "clippy::vec_resize_to_zero",
24808 "clippy::while_immutable_condition",
24809 "clippy::wrong_transmute",
24810 "clippy::zst_offset",
24811 ],
24812 },
24813 LintGroup {
24814 lint: Lint {
24815 label: "clippy::deprecated",
24816 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"##,
24817 default_severity: Severity::Allow,
24818 warn_since: None,
24819 deny_since: None,
24820 },
24821 children: &[
24822 "clippy::assign_ops",
24823 "clippy::extend_from_slice",
24824 "clippy::misaligned_transmute",
24825 "clippy::pub_enum_variant_names",
24826 "clippy::range_step_by_zero",
24827 "clippy::regex_macro",
24828 "clippy::replace_consts",
24829 "clippy::should_assert_eq",
24830 "clippy::unsafe_vector_initialization",
24831 "clippy::unstable_as_mut_slice",
24832 "clippy::unstable_as_slice",
24833 "clippy::unused_collect",
24834 "clippy::wrong_pub_self_convention",
24835 ],
24836 },
24837 LintGroup {
24838 lint: Lint {
24839 label: "clippy::nursery",
24840 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"##,
24841 default_severity: Severity::Allow,
24842 warn_since: None,
24843 deny_since: None,
24844 },
24845 children: &[
24846 "clippy::as_ptr_cast_mut",
24847 "clippy::branches_sharing_code",
24848 "clippy::clear_with_drain",
24849 "clippy::cognitive_complexity",
24850 "clippy::collection_is_never_read",
24851 "clippy::debug_assert_with_mut_call",
24852 "clippy::derive_partial_eq_without_eq",
24853 "clippy::equatable_if_let",
24854 "clippy::fallible_impl_from",
24855 "clippy::future_not_send",
24856 "clippy::imprecise_flops",
24857 "clippy::iter_on_empty_collections",
24858 "clippy::iter_on_single_items",
24859 "clippy::iter_with_drain",
24860 "clippy::large_stack_frames",
24861 "clippy::missing_const_for_fn",
24862 "clippy::mutex_integer",
24863 "clippy::needless_collect",
24864 "clippy::needless_pass_by_ref_mut",
24865 "clippy::non_send_fields_in_send_ty",
24866 "clippy::nonstandard_macro_braces",
24867 "clippy::option_if_let_else",
24868 "clippy::or_fun_call",
24869 "clippy::path_buf_push_overwrite",
24870 "clippy::read_zero_byte_vec",
24871 "clippy::redundant_clone",
24872 "clippy::redundant_pub_crate",
24873 "clippy::set_contains_or_insert",
24874 "clippy::significant_drop_in_scrutinee",
24875 "clippy::significant_drop_tightening",
24876 "clippy::string_lit_as_bytes",
24877 "clippy::suboptimal_flops",
24878 "clippy::suspicious_operation_groupings",
24879 "clippy::trailing_empty_array",
24880 "clippy::trait_duplication_in_bounds",
24881 "clippy::transmute_undefined_repr",
24882 "clippy::trivial_regex",
24883 "clippy::tuple_array_conversions",
24884 "clippy::type_repetition_in_bounds",
24885 "clippy::uninhabited_references",
24886 "clippy::unnecessary_struct_initialization",
24887 "clippy::unused_peekable",
24888 "clippy::unused_rounding",
24889 "clippy::use_self",
24890 "clippy::useless_let_if_seq",
24891 "clippy::while_float",
24892 ],
24893 },
24894 LintGroup {
24895 lint: Lint {
24896 label: "clippy::pedantic",
24897 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"##,
24898 default_severity: Severity::Allow,
24899 warn_since: None,
24900 deny_since: None,
24901 },
24902 children: &[
24903 "clippy::assigning_clones",
24904 "clippy::bool_to_int_with_if",
24905 "clippy::borrow_as_ptr",
24906 "clippy::case_sensitive_file_extension_comparisons",
24907 "clippy::cast_lossless",
24908 "clippy::cast_possible_truncation",
24909 "clippy::cast_possible_wrap",
24910 "clippy::cast_precision_loss",
24911 "clippy::cast_ptr_alignment",
24912 "clippy::cast_sign_loss",
24913 "clippy::checked_conversions",
24914 "clippy::cloned_instead_of_copied",
24915 "clippy::copy_iterator",
24916 "clippy::default_trait_access",
24917 "clippy::doc_link_with_quotes",
24918 "clippy::doc_markdown",
24919 "clippy::empty_enum",
24920 "clippy::enum_glob_use",
24921 "clippy::expl_impl_clone_on_copy",
24922 "clippy::explicit_deref_methods",
24923 "clippy::explicit_into_iter_loop",
24924 "clippy::explicit_iter_loop",
24925 "clippy::filter_map_next",
24926 "clippy::flat_map_option",
24927 "clippy::float_cmp",
24928 "clippy::fn_params_excessive_bools",
24929 "clippy::from_iter_instead_of_collect",
24930 "clippy::if_not_else",
24931 "clippy::ignored_unit_patterns",
24932 "clippy::implicit_clone",
24933 "clippy::implicit_hasher",
24934 "clippy::inconsistent_struct_constructor",
24935 "clippy::index_refutable_slice",
24936 "clippy::inefficient_to_string",
24937 "clippy::inline_always",
24938 "clippy::into_iter_without_iter",
24939 "clippy::invalid_upcast_comparisons",
24940 "clippy::items_after_statements",
24941 "clippy::iter_filter_is_ok",
24942 "clippy::iter_filter_is_some",
24943 "clippy::iter_not_returning_iterator",
24944 "clippy::iter_without_into_iter",
24945 "clippy::large_digit_groups",
24946 "clippy::large_futures",
24947 "clippy::large_stack_arrays",
24948 "clippy::large_types_passed_by_value",
24949 "clippy::linkedlist",
24950 "clippy::macro_use_imports",
24951 "clippy::manual_assert",
24952 "clippy::manual_instant_elapsed",
24953 "clippy::manual_is_variant_and",
24954 "clippy::manual_let_else",
24955 "clippy::manual_ok_or",
24956 "clippy::manual_string_new",
24957 "clippy::many_single_char_names",
24958 "clippy::map_unwrap_or",
24959 "clippy::match_bool",
24960 "clippy::match_on_vec_items",
24961 "clippy::match_same_arms",
24962 "clippy::match_wild_err_arm",
24963 "clippy::match_wildcard_for_single_variants",
24964 "clippy::maybe_infinite_iter",
24965 "clippy::mismatching_type_param_order",
24966 "clippy::missing_errors_doc",
24967 "clippy::missing_fields_in_debug",
24968 "clippy::missing_panics_doc",
24969 "clippy::module_name_repetitions",
24970 "clippy::must_use_candidate",
24971 "clippy::mut_mut",
24972 "clippy::naive_bytecount",
24973 "clippy::needless_bitwise_bool",
24974 "clippy::needless_continue",
24975 "clippy::needless_for_each",
24976 "clippy::needless_pass_by_value",
24977 "clippy::needless_raw_string_hashes",
24978 "clippy::no_effect_underscore_binding",
24979 "clippy::no_mangle_with_rust_abi",
24980 "clippy::option_as_ref_cloned",
24981 "clippy::option_option",
24982 "clippy::ptr_as_ptr",
24983 "clippy::ptr_cast_constness",
24984 "clippy::pub_underscore_fields",
24985 "clippy::range_minus_one",
24986 "clippy::range_plus_one",
24987 "clippy::redundant_closure_for_method_calls",
24988 "clippy::redundant_else",
24989 "clippy::ref_as_ptr",
24990 "clippy::ref_binding_to_reference",
24991 "clippy::ref_option",
24992 "clippy::ref_option_ref",
24993 "clippy::return_self_not_must_use",
24994 "clippy::same_functions_in_if_condition",
24995 "clippy::semicolon_if_nothing_returned",
24996 "clippy::should_panic_without_expect",
24997 "clippy::similar_names",
24998 "clippy::single_char_pattern",
24999 "clippy::single_match_else",
25000 "clippy::stable_sort_primitive",
25001 "clippy::str_split_at_newline",
25002 "clippy::string_add_assign",
25003 "clippy::struct_excessive_bools",
25004 "clippy::struct_field_names",
25005 "clippy::too_many_lines",
25006 "clippy::transmute_ptr_to_ptr",
25007 "clippy::trivially_copy_pass_by_ref",
25008 "clippy::unchecked_duration_subtraction",
25009 "clippy::unicode_not_nfc",
25010 "clippy::uninlined_format_args",
25011 "clippy::unnecessary_box_returns",
25012 "clippy::unnecessary_join",
25013 "clippy::unnecessary_wraps",
25014 "clippy::unnested_or_patterns",
25015 "clippy::unreadable_literal",
25016 "clippy::unsafe_derive_deserialize",
25017 "clippy::unused_async",
25018 "clippy::unused_self",
25019 "clippy::used_underscore_binding",
25020 "clippy::used_underscore_items",
25021 "clippy::verbose_bit_mask",
25022 "clippy::wildcard_imports",
25023 "clippy::zero_sized_map_values",
25024 ],
25025 },
25026 LintGroup {
25027 lint: Lint {
25028 label: "clippy::perf",
25029 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"##,
25030 default_severity: Severity::Allow,
25031 warn_since: None,
25032 deny_since: None,
25033 },
25034 children: &[
25035 "clippy::box_collection",
25036 "clippy::boxed_local",
25037 "clippy::cmp_owned",
25038 "clippy::collapsible_str_replace",
25039 "clippy::drain_collect",
25040 "clippy::expect_fun_call",
25041 "clippy::extend_with_drain",
25042 "clippy::format_collect",
25043 "clippy::format_in_format_args",
25044 "clippy::iter_overeager_cloned",
25045 "clippy::large_const_arrays",
25046 "clippy::large_enum_variant",
25047 "clippy::manual_memcpy",
25048 "clippy::manual_retain",
25049 "clippy::manual_str_repeat",
25050 "clippy::manual_try_fold",
25051 "clippy::map_entry",
25052 "clippy::missing_const_for_thread_local",
25053 "clippy::missing_spin_loop",
25054 "clippy::readonly_write_lock",
25055 "clippy::redundant_allocation",
25056 "clippy::result_large_err",
25057 "clippy::slow_vector_initialization",
25058 "clippy::to_string_in_format_args",
25059 "clippy::unnecessary_to_owned",
25060 "clippy::useless_vec",
25061 "clippy::vec_init_then_push",
25062 "clippy::waker_clone_wake",
25063 ],
25064 },
25065 LintGroup {
25066 lint: Lint {
25067 label: "clippy::restriction",
25068 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"##,
25069 default_severity: Severity::Allow,
25070 warn_since: None,
25071 deny_since: None,
25072 },
25073 children: &[
25074 "clippy::absolute_paths",
25075 "clippy::alloc_instead_of_core",
25076 "clippy::allow_attributes",
25077 "clippy::allow_attributes_without_reason",
25078 "clippy::arithmetic_side_effects",
25079 "clippy::as_conversions",
25080 "clippy::as_underscore",
25081 "clippy::assertions_on_result_states",
25082 "clippy::big_endian_bytes",
25083 "clippy::cfg_not_test",
25084 "clippy::clone_on_ref_ptr",
25085 "clippy::create_dir",
25086 "clippy::dbg_macro",
25087 "clippy::decimal_literal_representation",
25088 "clippy::default_numeric_fallback",
25089 "clippy::default_union_representation",
25090 "clippy::deref_by_slicing",
25091 "clippy::disallowed_script_idents",
25092 "clippy::else_if_without_else",
25093 "clippy::empty_drop",
25094 "clippy::empty_enum_variants_with_brackets",
25095 "clippy::empty_structs_with_brackets",
25096 "clippy::error_impl_error",
25097 "clippy::exhaustive_enums",
25098 "clippy::exhaustive_structs",
25099 "clippy::exit",
25100 "clippy::expect_used",
25101 "clippy::field_scoped_visibility_modifiers",
25102 "clippy::filetype_is_file",
25103 "clippy::float_arithmetic",
25104 "clippy::float_cmp_const",
25105 "clippy::fn_to_numeric_cast_any",
25106 "clippy::format_push_string",
25107 "clippy::get_unwrap",
25108 "clippy::host_endian_bytes",
25109 "clippy::if_then_some_else_none",
25110 "clippy::impl_trait_in_params",
25111 "clippy::implicit_return",
25112 "clippy::indexing_slicing",
25113 "clippy::infinite_loop",
25114 "clippy::inline_asm_x86_att_syntax",
25115 "clippy::inline_asm_x86_intel_syntax",
25116 "clippy::integer_division",
25117 "clippy::integer_division_remainder_used",
25118 "clippy::iter_over_hash_type",
25119 "clippy::large_include_file",
25120 "clippy::let_underscore_must_use",
25121 "clippy::let_underscore_untyped",
25122 "clippy::little_endian_bytes",
25123 "clippy::lossy_float_literal",
25124 "clippy::map_err_ignore",
25125 "clippy::mem_forget",
25126 "clippy::min_ident_chars",
25127 "clippy::missing_assert_message",
25128 "clippy::missing_asserts_for_indexing",
25129 "clippy::missing_docs_in_private_items",
25130 "clippy::missing_inline_in_public_items",
25131 "clippy::missing_trait_methods",
25132 "clippy::mixed_read_write_in_expression",
25133 "clippy::mod_module_files",
25134 "clippy::modulo_arithmetic",
25135 "clippy::multiple_inherent_impl",
25136 "clippy::multiple_unsafe_ops_per_block",
25137 "clippy::mutex_atomic",
25138 "clippy::needless_raw_strings",
25139 "clippy::non_ascii_literal",
25140 "clippy::non_zero_suggestions",
25141 "clippy::panic",
25142 "clippy::panic_in_result_fn",
25143 "clippy::partial_pub_fields",
25144 "clippy::pathbuf_init_then_push",
25145 "clippy::pattern_type_mismatch",
25146 "clippy::print_stderr",
25147 "clippy::print_stdout",
25148 "clippy::pub_use",
25149 "clippy::pub_with_shorthand",
25150 "clippy::pub_without_shorthand",
25151 "clippy::question_mark_used",
25152 "clippy::rc_buffer",
25153 "clippy::rc_mutex",
25154 "clippy::redundant_type_annotations",
25155 "clippy::ref_patterns",
25156 "clippy::renamed_function_params",
25157 "clippy::rest_pat_in_fully_bound_structs",
25158 "clippy::same_name_method",
25159 "clippy::self_named_module_files",
25160 "clippy::semicolon_inside_block",
25161 "clippy::semicolon_outside_block",
25162 "clippy::separated_literal_suffix",
25163 "clippy::shadow_reuse",
25164 "clippy::shadow_same",
25165 "clippy::shadow_unrelated",
25166 "clippy::single_call_fn",
25167 "clippy::single_char_lifetime_names",
25168 "clippy::std_instead_of_alloc",
25169 "clippy::std_instead_of_core",
25170 "clippy::str_to_string",
25171 "clippy::string_add",
25172 "clippy::string_lit_chars_any",
25173 "clippy::string_slice",
25174 "clippy::string_to_string",
25175 "clippy::suspicious_xor_used_as_pow",
25176 "clippy::tests_outside_test_module",
25177 "clippy::todo",
25178 "clippy::try_err",
25179 "clippy::undocumented_unsafe_blocks",
25180 "clippy::unimplemented",
25181 "clippy::unnecessary_safety_comment",
25182 "clippy::unnecessary_safety_doc",
25183 "clippy::unnecessary_self_imports",
25184 "clippy::unneeded_field_pattern",
25185 "clippy::unreachable",
25186 "clippy::unseparated_literal_suffix",
25187 "clippy::unused_result_ok",
25188 "clippy::unused_trait_names",
25189 "clippy::unwrap_in_result",
25190 "clippy::unwrap_used",
25191 "clippy::use_debug",
25192 "clippy::verbose_file_reads",
25193 "clippy::wildcard_enum_match_arm",
25194 ],
25195 },
25196 LintGroup {
25197 lint: Lint {
25198 label: "clippy::style",
25199 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"##,
25200 default_severity: Severity::Allow,
25201 warn_since: None,
25202 deny_since: None,
25203 },
25204 children: &[
25205 "clippy::assertions_on_constants",
25206 "clippy::assign_op_pattern",
25207 "clippy::blocks_in_conditions",
25208 "clippy::bool_assert_comparison",
25209 "clippy::borrow_interior_mutable_const",
25210 "clippy::box_default",
25211 "clippy::builtin_type_shadow",
25212 "clippy::byte_char_slices",
25213 "clippy::bytes_nth",
25214 "clippy::chars_last_cmp",
25215 "clippy::chars_next_cmp",
25216 "clippy::cmp_null",
25217 "clippy::collapsible_else_if",
25218 "clippy::collapsible_if",
25219 "clippy::collapsible_match",
25220 "clippy::comparison_chain",
25221 "clippy::comparison_to_empty",
25222 "clippy::declare_interior_mutable_const",
25223 "clippy::default_instead_of_iter_empty",
25224 "clippy::disallowed_macros",
25225 "clippy::disallowed_methods",
25226 "clippy::disallowed_names",
25227 "clippy::disallowed_types",
25228 "clippy::doc_lazy_continuation",
25229 "clippy::double_must_use",
25230 "clippy::double_neg",
25231 "clippy::duplicate_underscore_argument",
25232 "clippy::enum_variant_names",
25233 "clippy::err_expect",
25234 "clippy::excessive_precision",
25235 "clippy::field_reassign_with_default",
25236 "clippy::filter_map_bool_then",
25237 "clippy::fn_to_numeric_cast",
25238 "clippy::fn_to_numeric_cast_with_truncation",
25239 "clippy::for_kv_map",
25240 "clippy::from_over_into",
25241 "clippy::from_str_radix_10",
25242 "clippy::get_first",
25243 "clippy::if_same_then_else",
25244 "clippy::implicit_saturating_add",
25245 "clippy::implicit_saturating_sub",
25246 "clippy::inconsistent_digit_grouping",
25247 "clippy::infallible_destructuring_match",
25248 "clippy::inherent_to_string",
25249 "clippy::init_numbered_fields",
25250 "clippy::into_iter_on_ref",
25251 "clippy::is_digit_ascii_radix",
25252 "clippy::items_after_test_module",
25253 "clippy::iter_cloned_collect",
25254 "clippy::iter_next_slice",
25255 "clippy::iter_nth",
25256 "clippy::iter_nth_zero",
25257 "clippy::iter_skip_next",
25258 "clippy::just_underscores_and_digits",
25259 "clippy::legacy_numeric_constants",
25260 "clippy::len_without_is_empty",
25261 "clippy::len_zero",
25262 "clippy::let_and_return",
25263 "clippy::let_unit_value",
25264 "clippy::main_recursion",
25265 "clippy::manual_async_fn",
25266 "clippy::manual_bits",
25267 "clippy::manual_is_ascii_check",
25268 "clippy::manual_is_finite",
25269 "clippy::manual_is_infinite",
25270 "clippy::manual_map",
25271 "clippy::manual_next_back",
25272 "clippy::manual_non_exhaustive",
25273 "clippy::manual_pattern_char_comparison",
25274 "clippy::manual_range_contains",
25275 "clippy::manual_rotate",
25276 "clippy::manual_saturating_arithmetic",
25277 "clippy::manual_while_let_some",
25278 "clippy::map_clone",
25279 "clippy::map_collect_result_unit",
25280 "clippy::match_like_matches_macro",
25281 "clippy::match_overlapping_arm",
25282 "clippy::match_ref_pats",
25283 "clippy::match_result_ok",
25284 "clippy::mem_replace_option_with_none",
25285 "clippy::mem_replace_with_default",
25286 "clippy::missing_enforced_import_renames",
25287 "clippy::missing_safety_doc",
25288 "clippy::mixed_attributes_style",
25289 "clippy::mixed_case_hex_literals",
25290 "clippy::module_inception",
25291 "clippy::must_use_unit",
25292 "clippy::mut_mutex_lock",
25293 "clippy::needless_borrow",
25294 "clippy::needless_borrows_for_generic_args",
25295 "clippy::needless_doctest_main",
25296 "clippy::needless_else",
25297 "clippy::needless_late_init",
25298 "clippy::needless_parens_on_range_literals",
25299 "clippy::needless_pub_self",
25300 "clippy::needless_range_loop",
25301 "clippy::needless_return",
25302 "clippy::needless_return_with_question_mark",
25303 "clippy::neg_multiply",
25304 "clippy::new_ret_no_self",
25305 "clippy::new_without_default",
25306 "clippy::non_minimal_cfg",
25307 "clippy::obfuscated_if_else",
25308 "clippy::ok_expect",
25309 "clippy::op_ref",
25310 "clippy::option_map_or_err_ok",
25311 "clippy::option_map_or_none",
25312 "clippy::partialeq_to_none",
25313 "clippy::print_literal",
25314 "clippy::print_with_newline",
25315 "clippy::println_empty_string",
25316 "clippy::ptr_arg",
25317 "clippy::ptr_eq",
25318 "clippy::question_mark",
25319 "clippy::redundant_closure",
25320 "clippy::redundant_field_names",
25321 "clippy::redundant_pattern",
25322 "clippy::redundant_pattern_matching",
25323 "clippy::redundant_static_lifetimes",
25324 "clippy::result_map_or_into_option",
25325 "clippy::result_unit_err",
25326 "clippy::same_item_push",
25327 "clippy::self_named_constructors",
25328 "clippy::should_implement_trait",
25329 "clippy::single_char_add_str",
25330 "clippy::single_component_path_imports",
25331 "clippy::single_match",
25332 "clippy::string_extend_chars",
25333 "clippy::tabs_in_doc_comments",
25334 "clippy::to_digit_is_some",
25335 "clippy::to_string_trait_impl",
25336 "clippy::too_long_first_doc_paragraph",
25337 "clippy::toplevel_ref_arg",
25338 "clippy::trim_split_whitespace",
25339 "clippy::unnecessary_fallible_conversions",
25340 "clippy::unnecessary_fold",
25341 "clippy::unnecessary_lazy_evaluations",
25342 "clippy::unnecessary_mut_passed",
25343 "clippy::unnecessary_owned_empty_strings",
25344 "clippy::unsafe_removed_from_name",
25345 "clippy::unused_enumerate_index",
25346 "clippy::unused_unit",
25347 "clippy::unusual_byte_groupings",
25348 "clippy::unwrap_or_default",
25349 "clippy::upper_case_acronyms",
25350 "clippy::while_let_on_iterator",
25351 "clippy::write_literal",
25352 "clippy::write_with_newline",
25353 "clippy::writeln_empty_string",
25354 "clippy::wrong_self_convention",
25355 "clippy::zero_ptr",
25356 ],
25357 },
25358 LintGroup {
25359 lint: Lint {
25360 label: "clippy::suspicious",
25361 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"##,
25362 default_severity: Severity::Allow,
25363 warn_since: None,
25364 deny_since: None,
25365 },
25366 children: &[
25367 "clippy::almost_complete_range",
25368 "clippy::arc_with_non_send_sync",
25369 "clippy::await_holding_invalid_type",
25370 "clippy::await_holding_lock",
25371 "clippy::await_holding_refcell_ref",
25372 "clippy::blanket_clippy_restriction_lints",
25373 "clippy::cast_abs_to_unsigned",
25374 "clippy::cast_enum_constructor",
25375 "clippy::cast_enum_truncation",
25376 "clippy::cast_nan_to_int",
25377 "clippy::cast_slice_from_raw_parts",
25378 "clippy::const_is_empty",
25379 "clippy::crate_in_macro_def",
25380 "clippy::deprecated_clippy_cfg_attr",
25381 "clippy::drop_non_drop",
25382 "clippy::duplicate_mod",
25383 "clippy::duplicated_attributes",
25384 "clippy::empty_docs",
25385 "clippy::empty_line_after_doc_comments",
25386 "clippy::empty_line_after_outer_attr",
25387 "clippy::empty_loop",
25388 "clippy::float_equality_without_abs",
25389 "clippy::forget_non_drop",
25390 "clippy::four_forward_slashes",
25391 "clippy::from_raw_with_void_ptr",
25392 "clippy::incompatible_msrv",
25393 "clippy::ineffective_open_options",
25394 "clippy::iter_out_of_bounds",
25395 "clippy::join_absolute_paths",
25396 "clippy::let_underscore_future",
25397 "clippy::lines_filter_map_ok",
25398 "clippy::macro_metavars_in_unsafe",
25399 "clippy::manual_unwrap_or_default",
25400 "clippy::misnamed_getters",
25401 "clippy::misrefactored_assign_op",
25402 "clippy::missing_transmute_annotations",
25403 "clippy::multi_assignments",
25404 "clippy::multiple_bound_locations",
25405 "clippy::mut_range_bound",
25406 "clippy::mutable_key_type",
25407 "clippy::needless_character_iteration",
25408 "clippy::needless_maybe_sized",
25409 "clippy::no_effect_replace",
25410 "clippy::non_canonical_clone_impl",
25411 "clippy::non_canonical_partial_ord_impl",
25412 "clippy::octal_escapes",
25413 "clippy::path_ends_with_ext",
25414 "clippy::permissions_set_readonly_false",
25415 "clippy::pointers_in_nomem_asm_block",
25416 "clippy::print_in_format_impl",
25417 "clippy::rc_clone_in_vec_init",
25418 "clippy::repeat_vec_with_capacity",
25419 "clippy::single_range_in_vec_init",
25420 "clippy::size_of_ref",
25421 "clippy::suspicious_arithmetic_impl",
25422 "clippy::suspicious_assignment_formatting",
25423 "clippy::suspicious_command_arg_space",
25424 "clippy::suspicious_doc_comments",
25425 "clippy::suspicious_else_formatting",
25426 "clippy::suspicious_map",
25427 "clippy::suspicious_op_assign_impl",
25428 "clippy::suspicious_open_options",
25429 "clippy::suspicious_to_owned",
25430 "clippy::suspicious_unary_op_formatting",
25431 "clippy::swap_ptr_to_ref",
25432 "clippy::test_attr_in_doctest",
25433 "clippy::type_id_on_box",
25434 "clippy::unconditional_recursion",
25435 "clippy::unnecessary_clippy_cfg",
25436 "clippy::unnecessary_get_then_check",
25437 "clippy::unnecessary_result_map_or_else",
25438 "clippy::zero_repeat_side_effects",
25439 "clippy::zombie_processes",
25440 ],
25441 },
25442];