]> git.lizzy.rs Git - rust.git/blob - src/lintlist/mod.rs
Auto merge of #5293 - matthiaskrgr:macro_skip_lifetime, r=phansch
[rust.git] / src / lintlist / mod.rs
1 //! This file is managed by `cargo dev update_lints`. Do not edit.
2
3 pub mod lint;
4 pub use lint::Level;
5 pub use lint::Lint;
6 pub use lint::LINT_LEVELS;
7
8 // begin lint list, do not remove this comment, it’s used in `update_lints`
9 pub const ALL_LINTS: [Lint; 363] = [
10     Lint {
11         name: "absurd_extreme_comparisons",
12         group: "correctness",
13         desc: "a comparison with a maximum or minimum value that is always true or false",
14         deprecation: None,
15         module: "types",
16     },
17     Lint {
18         name: "almost_swapped",
19         group: "correctness",
20         desc: "`foo = bar; bar = foo` sequence",
21         deprecation: None,
22         module: "swap",
23     },
24     Lint {
25         name: "approx_constant",
26         group: "correctness",
27         desc: "the approximate of a known float constant (in `std::fXX::consts`)",
28         deprecation: None,
29         module: "approx_const",
30     },
31     Lint {
32         name: "as_conversions",
33         group: "restriction",
34         desc: "using a potentially dangerous silent `as` conversion",
35         deprecation: None,
36         module: "as_conversions",
37     },
38     Lint {
39         name: "assertions_on_constants",
40         group: "style",
41         desc: "`assert!(true)` / `assert!(false)` will be optimized out by the compiler, and should probably be replaced by a `panic!()` or `unreachable!()`",
42         deprecation: None,
43         module: "assertions_on_constants",
44     },
45     Lint {
46         name: "assign_op_pattern",
47         group: "style",
48         desc: "assigning the result of an operation on a variable to that same variable",
49         deprecation: None,
50         module: "assign_ops",
51     },
52     Lint {
53         name: "bad_bit_mask",
54         group: "correctness",
55         desc: "expressions of the form `_ & mask == select` that will only ever return `true` or `false`",
56         deprecation: None,
57         module: "bit_mask",
58     },
59     Lint {
60         name: "blacklisted_name",
61         group: "style",
62         desc: "usage of a blacklisted/placeholder name",
63         deprecation: None,
64         module: "blacklisted_name",
65     },
66     Lint {
67         name: "block_in_if_condition_expr",
68         group: "style",
69         desc: "braces that can be eliminated in conditions, e.g., `if { true } ...`",
70         deprecation: None,
71         module: "block_in_if_condition",
72     },
73     Lint {
74         name: "block_in_if_condition_stmt",
75         group: "style",
76         desc: "complex blocks in conditions, e.g., `if { let x = true; x } ...`",
77         deprecation: None,
78         module: "block_in_if_condition",
79     },
80     Lint {
81         name: "bool_comparison",
82         group: "complexity",
83         desc: "comparing a variable to a boolean, e.g., `if x == true` or `if x != true`",
84         deprecation: None,
85         module: "needless_bool",
86     },
87     Lint {
88         name: "borrow_interior_mutable_const",
89         group: "correctness",
90         desc: "referencing `const` with interior mutability",
91         deprecation: None,
92         module: "non_copy_const",
93     },
94     Lint {
95         name: "borrowed_box",
96         group: "complexity",
97         desc: "a borrow of a boxed type",
98         deprecation: None,
99         module: "types",
100     },
101     Lint {
102         name: "box_vec",
103         group: "perf",
104         desc: "usage of `Box<Vec<T>>`, vector elements are already on the heap",
105         deprecation: None,
106         module: "types",
107     },
108     Lint {
109         name: "boxed_local",
110         group: "perf",
111         desc: "using `Box<T>` where unnecessary",
112         deprecation: None,
113         module: "escape",
114     },
115     Lint {
116         name: "builtin_type_shadow",
117         group: "style",
118         desc: "shadowing a builtin type",
119         deprecation: None,
120         module: "misc_early",
121     },
122     Lint {
123         name: "cargo_common_metadata",
124         group: "cargo",
125         desc: "common metadata is defined in `Cargo.toml`",
126         deprecation: None,
127         module: "cargo_common_metadata",
128     },
129     Lint {
130         name: "cast_lossless",
131         group: "pedantic",
132         desc: "casts using `as` that are known to be lossless, e.g., `x as u64` where `x: u8`",
133         deprecation: None,
134         module: "types",
135     },
136     Lint {
137         name: "cast_possible_truncation",
138         group: "pedantic",
139         desc: "casts that may cause truncation of the value, e.g., `x as u8` where `x: u32`, or `x as i32` where `x: f32`",
140         deprecation: None,
141         module: "types",
142     },
143     Lint {
144         name: "cast_possible_wrap",
145         group: "pedantic",
146         desc: "casts that may cause wrapping around the value, e.g., `x as i32` where `x: u32` and `x > i32::MAX`",
147         deprecation: None,
148         module: "types",
149     },
150     Lint {
151         name: "cast_precision_loss",
152         group: "pedantic",
153         desc: "casts that cause loss of precision, e.g., `x as f32` where `x: u64`",
154         deprecation: None,
155         module: "types",
156     },
157     Lint {
158         name: "cast_ptr_alignment",
159         group: "correctness",
160         desc: "cast from a pointer to a more-strictly-aligned pointer",
161         deprecation: None,
162         module: "types",
163     },
164     Lint {
165         name: "cast_ref_to_mut",
166         group: "correctness",
167         desc: "a cast of reference to a mutable pointer",
168         deprecation: None,
169         module: "types",
170     },
171     Lint {
172         name: "cast_sign_loss",
173         group: "pedantic",
174         desc: "casts from signed types to unsigned types, e.g., `x as u32` where `x: i32`",
175         deprecation: None,
176         module: "types",
177     },
178     Lint {
179         name: "char_lit_as_u8",
180         group: "complexity",
181         desc: "casting a character literal to `u8` truncates",
182         deprecation: None,
183         module: "types",
184     },
185     Lint {
186         name: "chars_last_cmp",
187         group: "style",
188         desc: "using `.chars().last()` or `.chars().next_back()` to check if a string ends with a char",
189         deprecation: None,
190         module: "methods",
191     },
192     Lint {
193         name: "chars_next_cmp",
194         group: "style",
195         desc: "using `.chars().next()` to check if a string starts with a char",
196         deprecation: None,
197         module: "methods",
198     },
199     Lint {
200         name: "checked_conversions",
201         group: "pedantic",
202         desc: "`try_from` could replace manual bounds checking when casting",
203         deprecation: None,
204         module: "checked_conversions",
205     },
206     Lint {
207         name: "clone_double_ref",
208         group: "correctness",
209         desc: "using `clone` on `&&T`",
210         deprecation: None,
211         module: "methods",
212     },
213     Lint {
214         name: "clone_on_copy",
215         group: "complexity",
216         desc: "using `clone` on a `Copy` type",
217         deprecation: None,
218         module: "methods",
219     },
220     Lint {
221         name: "clone_on_ref_ptr",
222         group: "restriction",
223         desc: "using \'clone\' on a ref-counted pointer",
224         deprecation: None,
225         module: "methods",
226     },
227     Lint {
228         name: "cmp_nan",
229         group: "correctness",
230         desc: "comparisons to `NAN`, which will always return false, probably not intended",
231         deprecation: None,
232         module: "misc",
233     },
234     Lint {
235         name: "cmp_null",
236         group: "style",
237         desc: "comparing a pointer to a null pointer, suggesting to use `.is_null()` instead.",
238         deprecation: None,
239         module: "ptr",
240     },
241     Lint {
242         name: "cmp_owned",
243         group: "perf",
244         desc: "creating owned instances for comparing with others, e.g., `x == \"foo\".to_string()`",
245         deprecation: None,
246         module: "misc",
247     },
248     Lint {
249         name: "cognitive_complexity",
250         group: "complexity",
251         desc: "functions that should be split up into multiple functions",
252         deprecation: None,
253         module: "cognitive_complexity",
254     },
255     Lint {
256         name: "collapsible_if",
257         group: "style",
258         desc: "`if`s that can be collapsed (e.g., `if x { if y { ... } }` and `else { if x { ... } }`)",
259         deprecation: None,
260         module: "collapsible_if",
261     },
262     Lint {
263         name: "comparison_chain",
264         group: "style",
265         desc: "`if`s that can be rewritten with `match` and `cmp`",
266         deprecation: None,
267         module: "comparison_chain",
268     },
269     Lint {
270         name: "copy_iterator",
271         group: "pedantic",
272         desc: "implementing `Iterator` on a `Copy` type",
273         deprecation: None,
274         module: "copy_iterator",
275     },
276     Lint {
277         name: "crosspointer_transmute",
278         group: "complexity",
279         desc: "transmutes that have to or from types that are a pointer to the other",
280         deprecation: None,
281         module: "transmute",
282     },
283     Lint {
284         name: "dbg_macro",
285         group: "restriction",
286         desc: "`dbg!` macro is intended as a debugging tool",
287         deprecation: None,
288         module: "dbg_macro",
289     },
290     Lint {
291         name: "debug_assert_with_mut_call",
292         group: "nursery",
293         desc: "mutable arguments in `debug_assert{,_ne,_eq}!`",
294         deprecation: None,
295         module: "mutable_debug_assertion",
296     },
297     Lint {
298         name: "decimal_literal_representation",
299         group: "restriction",
300         desc: "using decimal representation when hexadecimal would be better",
301         deprecation: None,
302         module: "literal_representation",
303     },
304     Lint {
305         name: "declare_interior_mutable_const",
306         group: "correctness",
307         desc: "declaring `const` with interior mutability",
308         deprecation: None,
309         module: "non_copy_const",
310     },
311     Lint {
312         name: "default_trait_access",
313         group: "pedantic",
314         desc: "checks for literal calls to `Default::default()`",
315         deprecation: None,
316         module: "default_trait_access",
317     },
318     Lint {
319         name: "deprecated_cfg_attr",
320         group: "complexity",
321         desc: "usage of `cfg_attr(rustfmt)` instead of tool attributes",
322         deprecation: None,
323         module: "attrs",
324     },
325     Lint {
326         name: "deprecated_semver",
327         group: "correctness",
328         desc: "use of `#[deprecated(since = \"x\")]` where x is not semver",
329         deprecation: None,
330         module: "attrs",
331     },
332     Lint {
333         name: "deref_addrof",
334         group: "complexity",
335         desc: "use of `*&` or `*&mut` in an expression",
336         deprecation: None,
337         module: "reference",
338     },
339     Lint {
340         name: "derive_hash_xor_eq",
341         group: "correctness",
342         desc: "deriving `Hash` but implementing `PartialEq` explicitly",
343         deprecation: None,
344         module: "derive",
345     },
346     Lint {
347         name: "diverging_sub_expression",
348         group: "complexity",
349         desc: "whether an expression contains a diverging sub expression",
350         deprecation: None,
351         module: "eval_order_dependence",
352     },
353     Lint {
354         name: "doc_markdown",
355         group: "pedantic",
356         desc: "presence of `_`, `::` or camel-case outside backticks in documentation",
357         deprecation: None,
358         module: "doc",
359     },
360     Lint {
361         name: "double_comparisons",
362         group: "complexity",
363         desc: "unnecessary double comparisons that can be simplified",
364         deprecation: None,
365         module: "double_comparison",
366     },
367     Lint {
368         name: "double_must_use",
369         group: "style",
370         desc: "`#[must_use]` attribute on a `#[must_use]`-returning function / method",
371         deprecation: None,
372         module: "functions",
373     },
374     Lint {
375         name: "double_neg",
376         group: "style",
377         desc: "`--x`, which is a double negation of `x` and not a pre-decrement as in C/C++",
378         deprecation: None,
379         module: "misc_early",
380     },
381     Lint {
382         name: "double_parens",
383         group: "complexity",
384         desc: "Warn on unnecessary double parentheses",
385         deprecation: None,
386         module: "double_parens",
387     },
388     Lint {
389         name: "drop_bounds",
390         group: "correctness",
391         desc: "Bounds of the form `T: Drop` are useless",
392         deprecation: None,
393         module: "drop_bounds",
394     },
395     Lint {
396         name: "drop_copy",
397         group: "correctness",
398         desc: "calls to `std::mem::drop` with a value that implements Copy",
399         deprecation: None,
400         module: "drop_forget_ref",
401     },
402     Lint {
403         name: "drop_ref",
404         group: "correctness",
405         desc: "calls to `std::mem::drop` with a reference instead of an owned value",
406         deprecation: None,
407         module: "drop_forget_ref",
408     },
409     Lint {
410         name: "duplicate_underscore_argument",
411         group: "style",
412         desc: "function arguments having names which only differ by an underscore",
413         deprecation: None,
414         module: "misc_early",
415     },
416     Lint {
417         name: "duration_subsec",
418         group: "complexity",
419         desc: "checks for calculation of subsecond microseconds or milliseconds",
420         deprecation: None,
421         module: "duration_subsec",
422     },
423     Lint {
424         name: "else_if_without_else",
425         group: "restriction",
426         desc: "`if` expression with an `else if`, but without a final `else` branch",
427         deprecation: None,
428         module: "else_if_without_else",
429     },
430     Lint {
431         name: "empty_enum",
432         group: "pedantic",
433         desc: "enum with no variants",
434         deprecation: None,
435         module: "empty_enum",
436     },
437     Lint {
438         name: "empty_line_after_outer_attr",
439         group: "nursery",
440         desc: "empty line after outer attribute",
441         deprecation: None,
442         module: "attrs",
443     },
444     Lint {
445         name: "empty_loop",
446         group: "style",
447         desc: "empty `loop {}`, which should block or sleep",
448         deprecation: None,
449         module: "loops",
450     },
451     Lint {
452         name: "enum_clike_unportable_variant",
453         group: "correctness",
454         desc: "C-like enums that are `repr(isize/usize)` and have values that don\'t fit into an `i32`",
455         deprecation: None,
456         module: "enum_clike",
457     },
458     Lint {
459         name: "enum_glob_use",
460         group: "pedantic",
461         desc: "use items that import all variants of an enum",
462         deprecation: None,
463         module: "wildcard_imports",
464     },
465     Lint {
466         name: "enum_variant_names",
467         group: "style",
468         desc: "enums where all variants share a prefix/postfix",
469         deprecation: None,
470         module: "enum_variants",
471     },
472     Lint {
473         name: "eq_op",
474         group: "correctness",
475         desc: "equal operands on both sides of a comparison or bitwise combination (e.g., `x == x`)",
476         deprecation: None,
477         module: "eq_op",
478     },
479     Lint {
480         name: "erasing_op",
481         group: "correctness",
482         desc: "using erasing operations, e.g., `x * 0` or `y & 0`",
483         deprecation: None,
484         module: "erasing_op",
485     },
486     Lint {
487         name: "eval_order_dependence",
488         group: "complexity",
489         desc: "whether a variable read occurs before a write depends on sub-expression evaluation order",
490         deprecation: None,
491         module: "eval_order_dependence",
492     },
493     Lint {
494         name: "excessive_precision",
495         group: "style",
496         desc: "excessive precision for float literal",
497         deprecation: None,
498         module: "float_literal",
499     },
500     Lint {
501         name: "exit",
502         group: "restriction",
503         desc: "`std::process::exit` is called, terminating the program",
504         deprecation: None,
505         module: "exit",
506     },
507     Lint {
508         name: "expect_fun_call",
509         group: "perf",
510         desc: "using any `expect` method with a function call",
511         deprecation: None,
512         module: "methods",
513     },
514     Lint {
515         name: "expl_impl_clone_on_copy",
516         group: "pedantic",
517         desc: "implementing `Clone` explicitly on `Copy` types",
518         deprecation: None,
519         module: "derive",
520     },
521     Lint {
522         name: "explicit_counter_loop",
523         group: "complexity",
524         desc: "for-looping with an explicit counter when `_.enumerate()` would do",
525         deprecation: None,
526         module: "loops",
527     },
528     Lint {
529         name: "explicit_into_iter_loop",
530         group: "pedantic",
531         desc: "for-looping over `_.into_iter()` when `_` would do",
532         deprecation: None,
533         module: "loops",
534     },
535     Lint {
536         name: "explicit_iter_loop",
537         group: "pedantic",
538         desc: "for-looping over `_.iter()` or `_.iter_mut()` when `&_` or `&mut _` would do",
539         deprecation: None,
540         module: "loops",
541     },
542     Lint {
543         name: "explicit_write",
544         group: "complexity",
545         desc: "using the `write!()` family of functions instead of the `print!()` family of functions, when using the latter would work",
546         deprecation: None,
547         module: "explicit_write",
548     },
549     Lint {
550         name: "extra_unused_lifetimes",
551         group: "complexity",
552         desc: "unused lifetimes in function definitions",
553         deprecation: None,
554         module: "lifetimes",
555     },
556     Lint {
557         name: "fallible_impl_from",
558         group: "nursery",
559         desc: "Warn on impls of `From<..>` that contain `panic!()` or `unwrap()`",
560         deprecation: None,
561         module: "fallible_impl_from",
562     },
563     Lint {
564         name: "filetype_is_file",
565         group: "restriction",
566         desc: "`FileType::is_file` is not recommended to test for readable file type",
567         deprecation: None,
568         module: "methods",
569     },
570     Lint {
571         name: "filter_map",
572         group: "pedantic",
573         desc: "using combinations of `filter`, `map`, `filter_map` and `flat_map` which can usually be written as a single method call",
574         deprecation: None,
575         module: "methods",
576     },
577     Lint {
578         name: "filter_map_next",
579         group: "pedantic",
580         desc: "using combination of `filter_map` and `next` which can usually be written as a single method call",
581         deprecation: None,
582         module: "methods",
583     },
584     Lint {
585         name: "filter_next",
586         group: "complexity",
587         desc: "using `filter(p).next()`, which is more succinctly expressed as `.find(p)`",
588         deprecation: None,
589         module: "methods",
590     },
591     Lint {
592         name: "find_map",
593         group: "pedantic",
594         desc: "using a combination of `find` and `map` can usually be written as a single method call",
595         deprecation: None,
596         module: "methods",
597     },
598     Lint {
599         name: "flat_map_identity",
600         group: "complexity",
601         desc: "call to `flat_map` where `flatten` is sufficient",
602         deprecation: None,
603         module: "methods",
604     },
605     Lint {
606         name: "float_arithmetic",
607         group: "restriction",
608         desc: "any floating-point arithmetic statement",
609         deprecation: None,
610         module: "arithmetic",
611     },
612     Lint {
613         name: "float_cmp",
614         group: "correctness",
615         desc: "using `==` or `!=` on float values instead of comparing difference with an epsilon",
616         deprecation: None,
617         module: "misc",
618     },
619     Lint {
620         name: "float_cmp_const",
621         group: "restriction",
622         desc: "using `==` or `!=` on float constants instead of comparing difference with an epsilon",
623         deprecation: None,
624         module: "misc",
625     },
626     Lint {
627         name: "fn_address_comparisons",
628         group: "correctness",
629         desc: "comparison with an address of a function item",
630         deprecation: None,
631         module: "unnamed_address",
632     },
633     Lint {
634         name: "fn_params_excessive_bools",
635         group: "pedantic",
636         desc: "using too many bools in function parameters",
637         deprecation: None,
638         module: "excessive_bools",
639     },
640     Lint {
641         name: "fn_to_numeric_cast",
642         group: "style",
643         desc: "casting a function pointer to a numeric type other than usize",
644         deprecation: None,
645         module: "types",
646     },
647     Lint {
648         name: "fn_to_numeric_cast_with_truncation",
649         group: "style",
650         desc: "casting a function pointer to a numeric type not wide enough to store the address",
651         deprecation: None,
652         module: "types",
653     },
654     Lint {
655         name: "for_kv_map",
656         group: "style",
657         desc: "looping on a map using `iter` when `keys` or `values` would do",
658         deprecation: None,
659         module: "loops",
660     },
661     Lint {
662         name: "for_loop_over_option",
663         group: "correctness",
664         desc: "for-looping over an `Option`, which is more clearly expressed as an `if let`",
665         deprecation: None,
666         module: "loops",
667     },
668     Lint {
669         name: "for_loop_over_result",
670         group: "correctness",
671         desc: "for-looping over a `Result`, which is more clearly expressed as an `if let`",
672         deprecation: None,
673         module: "loops",
674     },
675     Lint {
676         name: "forget_copy",
677         group: "correctness",
678         desc: "calls to `std::mem::forget` with a value that implements Copy",
679         deprecation: None,
680         module: "drop_forget_ref",
681     },
682     Lint {
683         name: "forget_ref",
684         group: "correctness",
685         desc: "calls to `std::mem::forget` with a reference instead of an owned value",
686         deprecation: None,
687         module: "drop_forget_ref",
688     },
689     Lint {
690         name: "get_last_with_len",
691         group: "complexity",
692         desc: "Using `x.get(x.len() - 1)` when `x.last()` is correct and simpler",
693         deprecation: None,
694         module: "get_last_with_len",
695     },
696     Lint {
697         name: "get_unwrap",
698         group: "restriction",
699         desc: "using `.get().unwrap()` or `.get_mut().unwrap()` when using `[]` would work instead",
700         deprecation: None,
701         module: "methods",
702     },
703     Lint {
704         name: "identity_conversion",
705         group: "complexity",
706         desc: "using always-identical `Into`/`From`/`IntoIter` conversions",
707         deprecation: None,
708         module: "identity_conversion",
709     },
710     Lint {
711         name: "identity_op",
712         group: "complexity",
713         desc: "using identity operations, e.g., `x + 0` or `y / 1`",
714         deprecation: None,
715         module: "identity_op",
716     },
717     Lint {
718         name: "if_let_some_result",
719         group: "style",
720         desc: "usage of `ok()` in `if let Some(pat)` statements is unnecessary, match on `Ok(pat)` instead",
721         deprecation: None,
722         module: "if_let_some_result",
723     },
724     Lint {
725         name: "if_not_else",
726         group: "pedantic",
727         desc: "`if` branches that could be swapped so no negation operation is necessary on the condition",
728         deprecation: None,
729         module: "if_not_else",
730     },
731     Lint {
732         name: "if_same_then_else",
733         group: "correctness",
734         desc: "`if` with the same `then` and `else` blocks",
735         deprecation: None,
736         module: "copies",
737     },
738     Lint {
739         name: "ifs_same_cond",
740         group: "correctness",
741         desc: "consecutive `if`s with the same condition",
742         deprecation: None,
743         module: "copies",
744     },
745     Lint {
746         name: "implicit_hasher",
747         group: "style",
748         desc: "missing generalization over different hashers",
749         deprecation: None,
750         module: "types",
751     },
752     Lint {
753         name: "implicit_return",
754         group: "restriction",
755         desc: "use a return statement like `return expr` instead of an expression",
756         deprecation: None,
757         module: "implicit_return",
758     },
759     Lint {
760         name: "imprecise_flops",
761         group: "nursery",
762         desc: "usage of imprecise floating point operations",
763         deprecation: None,
764         module: "floating_point_arithmetic",
765     },
766     Lint {
767         name: "inconsistent_digit_grouping",
768         group: "style",
769         desc: "integer literals with digits grouped inconsistently",
770         deprecation: None,
771         module: "literal_representation",
772     },
773     Lint {
774         name: "indexing_slicing",
775         group: "restriction",
776         desc: "indexing/slicing usage",
777         deprecation: None,
778         module: "indexing_slicing",
779     },
780     Lint {
781         name: "ineffective_bit_mask",
782         group: "correctness",
783         desc: "expressions where a bit mask will be rendered useless by a comparison, e.g., `(x | 1) > 2`",
784         deprecation: None,
785         module: "bit_mask",
786     },
787     Lint {
788         name: "inefficient_to_string",
789         group: "perf",
790         desc: "using `to_string` on `&&T` where `T: ToString`",
791         deprecation: None,
792         module: "methods",
793     },
794     Lint {
795         name: "infallible_destructuring_match",
796         group: "style",
797         desc: "a `match` statement with a single infallible arm instead of a `let`",
798         deprecation: None,
799         module: "matches",
800     },
801     Lint {
802         name: "infinite_iter",
803         group: "correctness",
804         desc: "infinite iteration",
805         deprecation: None,
806         module: "infinite_iter",
807     },
808     Lint {
809         name: "inherent_to_string",
810         group: "style",
811         desc: "type implements inherent method `to_string()`, but should instead implement the `Display` trait",
812         deprecation: None,
813         module: "inherent_to_string",
814     },
815     Lint {
816         name: "inherent_to_string_shadow_display",
817         group: "correctness",
818         desc: "type implements inherent method `to_string()`, which gets shadowed by the implementation of the `Display` trait",
819         deprecation: None,
820         module: "inherent_to_string",
821     },
822     Lint {
823         name: "inline_always",
824         group: "pedantic",
825         desc: "use of `#[inline(always)]`",
826         deprecation: None,
827         module: "attrs",
828     },
829     Lint {
830         name: "inline_fn_without_body",
831         group: "correctness",
832         desc: "use of `#[inline]` on trait methods without bodies",
833         deprecation: None,
834         module: "inline_fn_without_body",
835     },
836     Lint {
837         name: "int_plus_one",
838         group: "complexity",
839         desc: "instead of using `x >= y + 1`, use `x > y`",
840         deprecation: None,
841         module: "int_plus_one",
842     },
843     Lint {
844         name: "integer_arithmetic",
845         group: "restriction",
846         desc: "any integer arithmetic statement",
847         deprecation: None,
848         module: "arithmetic",
849     },
850     Lint {
851         name: "integer_division",
852         group: "restriction",
853         desc: "integer division may cause loss of precision",
854         deprecation: None,
855         module: "integer_division",
856     },
857     Lint {
858         name: "into_iter_on_ref",
859         group: "style",
860         desc: "using `.into_iter()` on a reference",
861         deprecation: None,
862         module: "methods",
863     },
864     Lint {
865         name: "invalid_atomic_ordering",
866         group: "correctness",
867         desc: "usage of invalid atomic ordering in atomic loads/stores and memory fences",
868         deprecation: None,
869         module: "atomic_ordering",
870     },
871     Lint {
872         name: "invalid_regex",
873         group: "correctness",
874         desc: "invalid regular expressions",
875         deprecation: None,
876         module: "regex",
877     },
878     Lint {
879         name: "invalid_upcast_comparisons",
880         group: "pedantic",
881         desc: "a comparison involving an upcast which is always true or false",
882         deprecation: None,
883         module: "types",
884     },
885     Lint {
886         name: "items_after_statements",
887         group: "pedantic",
888         desc: "blocks where an item comes after a statement",
889         deprecation: None,
890         module: "items_after_statements",
891     },
892     Lint {
893         name: "iter_cloned_collect",
894         group: "style",
895         desc: "using `.cloned().collect()` on slice to create a `Vec`",
896         deprecation: None,
897         module: "methods",
898     },
899     Lint {
900         name: "iter_next_loop",
901         group: "correctness",
902         desc: "for-looping over `_.next()` which is probably not intended",
903         deprecation: None,
904         module: "loops",
905     },
906     Lint {
907         name: "iter_nth",
908         group: "perf",
909         desc: "using `.iter().nth()` on a standard library type with O(1) element access",
910         deprecation: None,
911         module: "methods",
912     },
913     Lint {
914         name: "iter_nth_zero",
915         group: "style",
916         desc: "replace `iter.nth(0)` with `iter.next()`",
917         deprecation: None,
918         module: "methods",
919     },
920     Lint {
921         name: "iter_skip_next",
922         group: "style",
923         desc: "using `.skip(x).next()` on an iterator",
924         deprecation: None,
925         module: "methods",
926     },
927     Lint {
928         name: "iterator_step_by_zero",
929         group: "correctness",
930         desc: "using `Iterator::step_by(0)`, which will panic at runtime",
931         deprecation: None,
932         module: "methods",
933     },
934     Lint {
935         name: "just_underscores_and_digits",
936         group: "style",
937         desc: "unclear name",
938         deprecation: None,
939         module: "non_expressive_names",
940     },
941     Lint {
942         name: "large_digit_groups",
943         group: "pedantic",
944         desc: "grouping digits into groups that are too large",
945         deprecation: None,
946         module: "literal_representation",
947     },
948     Lint {
949         name: "large_enum_variant",
950         group: "perf",
951         desc: "large size difference between variants on an enum",
952         deprecation: None,
953         module: "large_enum_variant",
954     },
955     Lint {
956         name: "large_stack_arrays",
957         group: "pedantic",
958         desc: "allocating large arrays on stack may cause stack overflow",
959         deprecation: None,
960         module: "large_stack_arrays",
961     },
962     Lint {
963         name: "len_without_is_empty",
964         group: "style",
965         desc: "traits or impls with a public `len` method but no corresponding `is_empty` method",
966         deprecation: None,
967         module: "len_zero",
968     },
969     Lint {
970         name: "len_zero",
971         group: "style",
972         desc: "checking `.len() == 0` or `.len() > 0` (or similar) when `.is_empty()` could be used instead",
973         deprecation: None,
974         module: "len_zero",
975     },
976     Lint {
977         name: "let_and_return",
978         group: "style",
979         desc: "creating a let-binding and then immediately returning it like `let x = expr; x` at the end of a block",
980         deprecation: None,
981         module: "returns",
982     },
983     Lint {
984         name: "let_underscore_lock",
985         group: "correctness",
986         desc: "non-binding let on a synchronization lock",
987         deprecation: None,
988         module: "let_underscore",
989     },
990     Lint {
991         name: "let_underscore_must_use",
992         group: "restriction",
993         desc: "non-binding let on a `#[must_use]` expression",
994         deprecation: None,
995         module: "let_underscore",
996     },
997     Lint {
998         name: "let_unit_value",
999         group: "style",
1000         desc: "creating a `let` binding to a value of unit type, which usually can\'t be used afterwards",
1001         deprecation: None,
1002         module: "types",
1003     },
1004     Lint {
1005         name: "linkedlist",
1006         group: "pedantic",
1007         desc: "usage of LinkedList, usually a vector is faster, or a more specialized data structure like a `VecDeque`",
1008         deprecation: None,
1009         module: "types",
1010     },
1011     Lint {
1012         name: "logic_bug",
1013         group: "correctness",
1014         desc: "boolean expressions that contain terminals which can be eliminated",
1015         deprecation: None,
1016         module: "booleans",
1017     },
1018     Lint {
1019         name: "lossy_float_literal",
1020         group: "restriction",
1021         desc: "lossy whole number float literals",
1022         deprecation: None,
1023         module: "float_literal",
1024     },
1025     Lint {
1026         name: "macro_use_imports",
1027         group: "pedantic",
1028         desc: "#[macro_use] is no longer needed",
1029         deprecation: None,
1030         module: "macro_use",
1031     },
1032     Lint {
1033         name: "main_recursion",
1034         group: "style",
1035         desc: "recursion using the entrypoint",
1036         deprecation: None,
1037         module: "main_recursion",
1038     },
1039     Lint {
1040         name: "manual_memcpy",
1041         group: "perf",
1042         desc: "manually copying items between slices",
1043         deprecation: None,
1044         module: "loops",
1045     },
1046     Lint {
1047         name: "manual_saturating_arithmetic",
1048         group: "style",
1049         desc: "`.chcked_add/sub(x).unwrap_or(MAX/MIN)`",
1050         deprecation: None,
1051         module: "methods",
1052     },
1053     Lint {
1054         name: "manual_swap",
1055         group: "complexity",
1056         desc: "manual swap of two variables",
1057         deprecation: None,
1058         module: "swap",
1059     },
1060     Lint {
1061         name: "many_single_char_names",
1062         group: "style",
1063         desc: "too many single character bindings",
1064         deprecation: None,
1065         module: "non_expressive_names",
1066     },
1067     Lint {
1068         name: "map_clone",
1069         group: "style",
1070         desc: "using `iterator.map(|x| x.clone())`, or dereferencing closures for `Copy` types",
1071         deprecation: None,
1072         module: "map_clone",
1073     },
1074     Lint {
1075         name: "map_entry",
1076         group: "perf",
1077         desc: "use of `contains_key` followed by `insert` on a `HashMap` or `BTreeMap`",
1078         deprecation: None,
1079         module: "entry",
1080     },
1081     Lint {
1082         name: "map_flatten",
1083         group: "pedantic",
1084         desc: "using combinations of `flatten` and `map` which can usually be written as a single method call",
1085         deprecation: None,
1086         module: "methods",
1087     },
1088     Lint {
1089         name: "match_as_ref",
1090         group: "complexity",
1091         desc: "a `match` on an Option value instead of using `as_ref()` or `as_mut`",
1092         deprecation: None,
1093         module: "matches",
1094     },
1095     Lint {
1096         name: "match_bool",
1097         group: "style",
1098         desc: "a `match` on a boolean expression instead of an `if..else` block",
1099         deprecation: None,
1100         module: "matches",
1101     },
1102     Lint {
1103         name: "match_overlapping_arm",
1104         group: "style",
1105         desc: "a `match` with overlapping arms",
1106         deprecation: None,
1107         module: "matches",
1108     },
1109     Lint {
1110         name: "match_ref_pats",
1111         group: "style",
1112         desc: "a `match` or `if let` with all arms prefixed with `&` instead of deref-ing the match expression",
1113         deprecation: None,
1114         module: "matches",
1115     },
1116     Lint {
1117         name: "match_same_arms",
1118         group: "pedantic",
1119         desc: "`match` with identical arm bodies",
1120         deprecation: None,
1121         module: "copies",
1122     },
1123     Lint {
1124         name: "match_single_binding",
1125         group: "complexity",
1126         desc: "a match with a single binding instead of using `let` statement",
1127         deprecation: None,
1128         module: "matches",
1129     },
1130     Lint {
1131         name: "match_wild_err_arm",
1132         group: "style",
1133         desc: "a `match` with `Err(_)` arm and take drastic actions",
1134         deprecation: None,
1135         module: "matches",
1136     },
1137     Lint {
1138         name: "maybe_infinite_iter",
1139         group: "pedantic",
1140         desc: "possible infinite iteration",
1141         deprecation: None,
1142         module: "infinite_iter",
1143     },
1144     Lint {
1145         name: "mem_discriminant_non_enum",
1146         group: "correctness",
1147         desc: "calling `mem::descriminant` on non-enum type",
1148         deprecation: None,
1149         module: "mem_discriminant",
1150     },
1151     Lint {
1152         name: "mem_forget",
1153         group: "restriction",
1154         desc: "`mem::forget` usage on `Drop` types, likely to cause memory leaks",
1155         deprecation: None,
1156         module: "mem_forget",
1157     },
1158     Lint {
1159         name: "mem_replace_option_with_none",
1160         group: "style",
1161         desc: "replacing an `Option` with `None` instead of `take()`",
1162         deprecation: None,
1163         module: "mem_replace",
1164     },
1165     Lint {
1166         name: "mem_replace_with_default",
1167         group: "style",
1168         desc: "replacing a value of type `T` with `T::default()` instead of using `std::mem::take`",
1169         deprecation: None,
1170         module: "mem_replace",
1171     },
1172     Lint {
1173         name: "mem_replace_with_uninit",
1174         group: "correctness",
1175         desc: "`mem::replace(&mut _, mem::uninitialized())` or `mem::replace(&mut _, mem::zeroed())`",
1176         deprecation: None,
1177         module: "mem_replace",
1178     },
1179     Lint {
1180         name: "min_max",
1181         group: "correctness",
1182         desc: "`min(_, max(_, _))` (or vice versa) with bounds clamping the result to a constant",
1183         deprecation: None,
1184         module: "minmax",
1185     },
1186     Lint {
1187         name: "misrefactored_assign_op",
1188         group: "complexity",
1189         desc: "having a variable on both sides of an assign op",
1190         deprecation: None,
1191         module: "assign_ops",
1192     },
1193     Lint {
1194         name: "missing_const_for_fn",
1195         group: "nursery",
1196         desc: "Lint functions definitions that could be made `const fn`",
1197         deprecation: None,
1198         module: "missing_const_for_fn",
1199     },
1200     Lint {
1201         name: "missing_docs_in_private_items",
1202         group: "restriction",
1203         desc: "detects missing documentation for public and private members",
1204         deprecation: None,
1205         module: "missing_doc",
1206     },
1207     Lint {
1208         name: "missing_errors_doc",
1209         group: "pedantic",
1210         desc: "`pub fn` returns `Result` without `# Errors` in doc comment",
1211         deprecation: None,
1212         module: "doc",
1213     },
1214     Lint {
1215         name: "missing_inline_in_public_items",
1216         group: "restriction",
1217         desc: "detects missing `#[inline]` attribute for public callables (functions, trait methods, methods...)",
1218         deprecation: None,
1219         module: "missing_inline",
1220     },
1221     Lint {
1222         name: "missing_safety_doc",
1223         group: "style",
1224         desc: "`pub unsafe fn` without `# Safety` docs",
1225         deprecation: None,
1226         module: "doc",
1227     },
1228     Lint {
1229         name: "mistyped_literal_suffixes",
1230         group: "correctness",
1231         desc: "mistyped literal suffix",
1232         deprecation: None,
1233         module: "literal_representation",
1234     },
1235     Lint {
1236         name: "mixed_case_hex_literals",
1237         group: "style",
1238         desc: "hex literals whose letter digits are not consistently upper- or lowercased",
1239         deprecation: None,
1240         module: "misc_early",
1241     },
1242     Lint {
1243         name: "module_inception",
1244         group: "style",
1245         desc: "modules that have the same name as their parent module",
1246         deprecation: None,
1247         module: "enum_variants",
1248     },
1249     Lint {
1250         name: "module_name_repetitions",
1251         group: "pedantic",
1252         desc: "type names prefixed/postfixed with their containing module\'s name",
1253         deprecation: None,
1254         module: "enum_variants",
1255     },
1256     Lint {
1257         name: "modulo_arithmetic",
1258         group: "restriction",
1259         desc: "any modulo arithmetic statement",
1260         deprecation: None,
1261         module: "modulo_arithmetic",
1262     },
1263     Lint {
1264         name: "modulo_one",
1265         group: "correctness",
1266         desc: "taking a number modulo 1, which always returns 0",
1267         deprecation: None,
1268         module: "misc",
1269     },
1270     Lint {
1271         name: "multiple_crate_versions",
1272         group: "cargo",
1273         desc: "multiple versions of the same crate being used",
1274         deprecation: None,
1275         module: "multiple_crate_versions",
1276     },
1277     Lint {
1278         name: "multiple_inherent_impl",
1279         group: "restriction",
1280         desc: "Multiple inherent impl that could be grouped",
1281         deprecation: None,
1282         module: "inherent_impl",
1283     },
1284     Lint {
1285         name: "must_use_candidate",
1286         group: "pedantic",
1287         desc: "function or method that could take a `#[must_use]` attribute",
1288         deprecation: None,
1289         module: "functions",
1290     },
1291     Lint {
1292         name: "must_use_unit",
1293         group: "style",
1294         desc: "`#[must_use]` attribute on a unit-returning function / method",
1295         deprecation: None,
1296         module: "functions",
1297     },
1298     Lint {
1299         name: "mut_from_ref",
1300         group: "correctness",
1301         desc: "fns that create mutable refs from immutable ref args",
1302         deprecation: None,
1303         module: "ptr",
1304     },
1305     Lint {
1306         name: "mut_mut",
1307         group: "pedantic",
1308         desc: "usage of double-mut refs, e.g., `&mut &mut ...`",
1309         deprecation: None,
1310         module: "mut_mut",
1311     },
1312     Lint {
1313         name: "mut_range_bound",
1314         group: "complexity",
1315         desc: "for loop over a range where one of the bounds is a mutable variable",
1316         deprecation: None,
1317         module: "loops",
1318     },
1319     Lint {
1320         name: "mutable_key_type",
1321         group: "correctness",
1322         desc: "Check for mutable `Map`/`Set` key type",
1323         deprecation: None,
1324         module: "mut_key",
1325     },
1326     Lint {
1327         name: "mutex_atomic",
1328         group: "perf",
1329         desc: "using a mutex where an atomic value could be used instead",
1330         deprecation: None,
1331         module: "mutex_atomic",
1332     },
1333     Lint {
1334         name: "mutex_integer",
1335         group: "nursery",
1336         desc: "using a mutex for an integer type",
1337         deprecation: None,
1338         module: "mutex_atomic",
1339     },
1340     Lint {
1341         name: "naive_bytecount",
1342         group: "perf",
1343         desc: "use of naive `<slice>.filter(|&x| x == y).count()` to count byte values",
1344         deprecation: None,
1345         module: "bytecount",
1346     },
1347     Lint {
1348         name: "needless_bool",
1349         group: "complexity",
1350         desc: "if-statements with plain booleans in the then- and else-clause, e.g., `if p { true } else { false }`",
1351         deprecation: None,
1352         module: "needless_bool",
1353     },
1354     Lint {
1355         name: "needless_borrow",
1356         group: "nursery",
1357         desc: "taking a reference that is going to be automatically dereferenced",
1358         deprecation: None,
1359         module: "needless_borrow",
1360     },
1361     Lint {
1362         name: "needless_borrowed_reference",
1363         group: "complexity",
1364         desc: "taking a needless borrowed reference",
1365         deprecation: None,
1366         module: "needless_borrowed_ref",
1367     },
1368     Lint {
1369         name: "needless_collect",
1370         group: "perf",
1371         desc: "collecting an iterator when collect is not needed",
1372         deprecation: None,
1373         module: "loops",
1374     },
1375     Lint {
1376         name: "needless_continue",
1377         group: "pedantic",
1378         desc: "`continue` statements that can be replaced by a rearrangement of code",
1379         deprecation: None,
1380         module: "needless_continue",
1381     },
1382     Lint {
1383         name: "needless_doctest_main",
1384         group: "style",
1385         desc: "presence of `fn main() {` in code examples",
1386         deprecation: None,
1387         module: "doc",
1388     },
1389     Lint {
1390         name: "needless_lifetimes",
1391         group: "complexity",
1392         desc: "using explicit lifetimes for references in function arguments when elision rules would allow omitting them",
1393         deprecation: None,
1394         module: "lifetimes",
1395     },
1396     Lint {
1397         name: "needless_pass_by_value",
1398         group: "pedantic",
1399         desc: "functions taking arguments by value, but not consuming them in its body",
1400         deprecation: None,
1401         module: "needless_pass_by_value",
1402     },
1403     Lint {
1404         name: "needless_range_loop",
1405         group: "style",
1406         desc: "for-looping over a range of indices where an iterator over items would do",
1407         deprecation: None,
1408         module: "loops",
1409     },
1410     Lint {
1411         name: "needless_return",
1412         group: "style",
1413         desc: "using a return statement like `return expr;` where an expression would suffice",
1414         deprecation: None,
1415         module: "returns",
1416     },
1417     Lint {
1418         name: "needless_update",
1419         group: "complexity",
1420         desc: "using `Foo { ..base }` when there are no missing fields",
1421         deprecation: None,
1422         module: "needless_update",
1423     },
1424     Lint {
1425         name: "neg_cmp_op_on_partial_ord",
1426         group: "complexity",
1427         desc: "The use of negated comparison operators on partially ordered types may produce confusing code.",
1428         deprecation: None,
1429         module: "neg_cmp_op_on_partial_ord",
1430     },
1431     Lint {
1432         name: "neg_multiply",
1433         group: "style",
1434         desc: "multiplying integers with `-1`",
1435         deprecation: None,
1436         module: "neg_multiply",
1437     },
1438     Lint {
1439         name: "never_loop",
1440         group: "correctness",
1441         desc: "any loop that will always `break` or `return`",
1442         deprecation: None,
1443         module: "loops",
1444     },
1445     Lint {
1446         name: "new_ret_no_self",
1447         group: "style",
1448         desc: "not returning `Self` in a `new` method",
1449         deprecation: None,
1450         module: "methods",
1451     },
1452     Lint {
1453         name: "new_without_default",
1454         group: "style",
1455         desc: "`fn new() -> Self` method without `Default` implementation",
1456         deprecation: None,
1457         module: "new_without_default",
1458     },
1459     Lint {
1460         name: "no_effect",
1461         group: "complexity",
1462         desc: "statements with no effect",
1463         deprecation: None,
1464         module: "no_effect",
1465     },
1466     Lint {
1467         name: "non_ascii_literal",
1468         group: "pedantic",
1469         desc: "using any literal non-ASCII chars in a string literal instead of using the `\\\\u` escape",
1470         deprecation: None,
1471         module: "unicode",
1472     },
1473     Lint {
1474         name: "nonminimal_bool",
1475         group: "complexity",
1476         desc: "boolean expressions that can be written more concisely",
1477         deprecation: None,
1478         module: "booleans",
1479     },
1480     Lint {
1481         name: "nonsensical_open_options",
1482         group: "correctness",
1483         desc: "nonsensical combination of options for opening a file",
1484         deprecation: None,
1485         module: "open_options",
1486     },
1487     Lint {
1488         name: "not_unsafe_ptr_arg_deref",
1489         group: "correctness",
1490         desc: "public functions dereferencing raw pointer arguments but not marked `unsafe`",
1491         deprecation: None,
1492         module: "functions",
1493     },
1494     Lint {
1495         name: "ok_expect",
1496         group: "style",
1497         desc: "using `ok().expect()`, which gives worse error messages than calling `expect` directly on the Result",
1498         deprecation: None,
1499         module: "methods",
1500     },
1501     Lint {
1502         name: "op_ref",
1503         group: "style",
1504         desc: "taking a reference to satisfy the type constraints on `==`",
1505         deprecation: None,
1506         module: "eq_op",
1507     },
1508     Lint {
1509         name: "option_and_then_some",
1510         group: "complexity",
1511         desc: "using `Option.and_then(|x| Some(y))`, which is more succinctly expressed as `map(|x| y)`",
1512         deprecation: None,
1513         module: "methods",
1514     },
1515     Lint {
1516         name: "option_as_ref_deref",
1517         group: "complexity",
1518         desc: "using `as_ref().map(Deref::deref)`, which is more succinctly expressed as `as_deref()`",
1519         deprecation: None,
1520         module: "methods",
1521     },
1522     Lint {
1523         name: "option_env_unwrap",
1524         group: "correctness",
1525         desc: "using `option_env!(...).unwrap()` to get environment variable",
1526         deprecation: None,
1527         module: "option_env_unwrap",
1528     },
1529     Lint {
1530         name: "option_expect_used",
1531         group: "restriction",
1532         desc: "using `Option.expect()`, which might be better handled",
1533         deprecation: None,
1534         module: "methods",
1535     },
1536     Lint {
1537         name: "option_map_or_none",
1538         group: "style",
1539         desc: "using `Option.map_or(None, f)`, which is more succinctly expressed as `and_then(f)`",
1540         deprecation: None,
1541         module: "methods",
1542     },
1543     Lint {
1544         name: "option_map_unit_fn",
1545         group: "complexity",
1546         desc: "using `option.map(f)`, where `f` is a function or closure that returns `()`",
1547         deprecation: None,
1548         module: "map_unit_fn",
1549     },
1550     Lint {
1551         name: "option_map_unwrap_or",
1552         group: "pedantic",
1553         desc: "using `Option.map(f).unwrap_or(a)`, which is more succinctly expressed as `map_or(a, f)`",
1554         deprecation: None,
1555         module: "methods",
1556     },
1557     Lint {
1558         name: "option_map_unwrap_or_else",
1559         group: "pedantic",
1560         desc: "using `Option.map(f).unwrap_or_else(g)`, which is more succinctly expressed as `map_or_else(g, f)`",
1561         deprecation: None,
1562         module: "methods",
1563     },
1564     Lint {
1565         name: "option_option",
1566         group: "complexity",
1567         desc: "usage of `Option<Option<T>>`",
1568         deprecation: None,
1569         module: "types",
1570     },
1571     Lint {
1572         name: "option_unwrap_used",
1573         group: "restriction",
1574         desc: "using `Option.unwrap()`, which should at least get a better message using `expect()`",
1575         deprecation: None,
1576         module: "methods",
1577     },
1578     Lint {
1579         name: "or_fun_call",
1580         group: "perf",
1581         desc: "using any `*or` method with a function call, which suggests `*or_else`",
1582         deprecation: None,
1583         module: "methods",
1584     },
1585     Lint {
1586         name: "out_of_bounds_indexing",
1587         group: "correctness",
1588         desc: "out of bounds constant indexing",
1589         deprecation: None,
1590         module: "indexing_slicing",
1591     },
1592     Lint {
1593         name: "overflow_check_conditional",
1594         group: "complexity",
1595         desc: "overflow checks inspired by C which are likely to panic",
1596         deprecation: None,
1597         module: "overflow_check_conditional",
1598     },
1599     Lint {
1600         name: "panic",
1601         group: "restriction",
1602         desc: "usage of the `panic!` macro",
1603         deprecation: None,
1604         module: "panic_unimplemented",
1605     },
1606     Lint {
1607         name: "panic_params",
1608         group: "style",
1609         desc: "missing parameters in `panic!` calls",
1610         deprecation: None,
1611         module: "panic_unimplemented",
1612     },
1613     Lint {
1614         name: "panicking_unwrap",
1615         group: "correctness",
1616         desc: "checks for calls of `unwrap[_err]()` that will always fail",
1617         deprecation: None,
1618         module: "unwrap",
1619     },
1620     Lint {
1621         name: "partialeq_ne_impl",
1622         group: "complexity",
1623         desc: "re-implementing `PartialEq::ne`",
1624         deprecation: None,
1625         module: "partialeq_ne_impl",
1626     },
1627     Lint {
1628         name: "path_buf_push_overwrite",
1629         group: "nursery",
1630         desc: "calling `push` with file system root on `PathBuf` can overwrite it",
1631         deprecation: None,
1632         module: "path_buf_push_overwrite",
1633     },
1634     Lint {
1635         name: "possible_missing_comma",
1636         group: "correctness",
1637         desc: "possible missing comma in array",
1638         deprecation: None,
1639         module: "formatting",
1640     },
1641     Lint {
1642         name: "precedence",
1643         group: "complexity",
1644         desc: "operations where precedence may be unclear",
1645         deprecation: None,
1646         module: "precedence",
1647     },
1648     Lint {
1649         name: "print_literal",
1650         group: "style",
1651         desc: "printing a literal with a format string",
1652         deprecation: None,
1653         module: "write",
1654     },
1655     Lint {
1656         name: "print_stdout",
1657         group: "restriction",
1658         desc: "printing on stdout",
1659         deprecation: None,
1660         module: "write",
1661     },
1662     Lint {
1663         name: "print_with_newline",
1664         group: "style",
1665         desc: "using `print!()` with a format string that ends in a single newline",
1666         deprecation: None,
1667         module: "write",
1668     },
1669     Lint {
1670         name: "println_empty_string",
1671         group: "style",
1672         desc: "using `println!(\"\")` with an empty string",
1673         deprecation: None,
1674         module: "write",
1675     },
1676     Lint {
1677         name: "ptr_arg",
1678         group: "style",
1679         desc: "fn arguments of the type `&Vec<...>` or `&String`, suggesting to use `&[...]` or `&str` instead, respectively",
1680         deprecation: None,
1681         module: "ptr",
1682     },
1683     Lint {
1684         name: "ptr_offset_with_cast",
1685         group: "complexity",
1686         desc: "unneeded pointer offset cast",
1687         deprecation: None,
1688         module: "ptr_offset_with_cast",
1689     },
1690     Lint {
1691         name: "pub_enum_variant_names",
1692         group: "pedantic",
1693         desc: "enums where all variants share a prefix/postfix",
1694         deprecation: None,
1695         module: "enum_variants",
1696     },
1697     Lint {
1698         name: "question_mark",
1699         group: "style",
1700         desc: "checks for expressions that could be replaced by the question mark operator",
1701         deprecation: None,
1702         module: "question_mark",
1703     },
1704     Lint {
1705         name: "range_minus_one",
1706         group: "complexity",
1707         desc: "`x..=(y-1)` reads better as `x..y`",
1708         deprecation: None,
1709         module: "ranges",
1710     },
1711     Lint {
1712         name: "range_plus_one",
1713         group: "pedantic",
1714         desc: "`x..(y+1)` reads better as `x..=y`",
1715         deprecation: None,
1716         module: "ranges",
1717     },
1718     Lint {
1719         name: "range_zip_with_len",
1720         group: "complexity",
1721         desc: "zipping iterator with a range when `enumerate()` would do",
1722         deprecation: None,
1723         module: "ranges",
1724     },
1725     Lint {
1726         name: "redundant_clone",
1727         group: "perf",
1728         desc: "`clone()` of an owned value that is going to be dropped immediately",
1729         deprecation: None,
1730         module: "redundant_clone",
1731     },
1732     Lint {
1733         name: "redundant_closure",
1734         group: "style",
1735         desc: "redundant closures, i.e., `|a| foo(a)` (which can be written as just `foo`)",
1736         deprecation: None,
1737         module: "eta_reduction",
1738     },
1739     Lint {
1740         name: "redundant_closure_call",
1741         group: "complexity",
1742         desc: "throwaway closures called in the expression they are defined",
1743         deprecation: None,
1744         module: "misc_early",
1745     },
1746     Lint {
1747         name: "redundant_closure_for_method_calls",
1748         group: "pedantic",
1749         desc: "redundant closures for method calls",
1750         deprecation: None,
1751         module: "eta_reduction",
1752     },
1753     Lint {
1754         name: "redundant_field_names",
1755         group: "style",
1756         desc: "checks for fields in struct literals where shorthands could be used",
1757         deprecation: None,
1758         module: "redundant_field_names",
1759     },
1760     Lint {
1761         name: "redundant_pattern",
1762         group: "style",
1763         desc: "using `name @ _` in a pattern",
1764         deprecation: None,
1765         module: "misc_early",
1766     },
1767     Lint {
1768         name: "redundant_pattern_matching",
1769         group: "style",
1770         desc: "use the proper utility function avoiding an `if let`",
1771         deprecation: None,
1772         module: "redundant_pattern_matching",
1773     },
1774     Lint {
1775         name: "redundant_pub_crate",
1776         group: "nursery",
1777         desc: "Using `pub(crate)` visibility on items that are not crate visible due to the visibility of the module that contains them.",
1778         deprecation: None,
1779         module: "redundant_pub_crate",
1780     },
1781     Lint {
1782         name: "redundant_static_lifetimes",
1783         group: "style",
1784         desc: "Using explicit `\'static` lifetime for constants or statics when elision rules would allow omitting them.",
1785         deprecation: None,
1786         module: "redundant_static_lifetimes",
1787     },
1788     Lint {
1789         name: "ref_in_deref",
1790         group: "complexity",
1791         desc: "Use of reference in auto dereference expression.",
1792         deprecation: None,
1793         module: "reference",
1794     },
1795     Lint {
1796         name: "regex_macro",
1797         group: "style",
1798         desc: "use of `regex!(_)` instead of `Regex::new(_)`",
1799         deprecation: None,
1800         module: "regex",
1801     },
1802     Lint {
1803         name: "rest_pat_in_fully_bound_structs",
1804         group: "restriction",
1805         desc: "a match on a struct that binds all fields but still uses the wildcard pattern",
1806         deprecation: None,
1807         module: "matches",
1808     },
1809     Lint {
1810         name: "result_expect_used",
1811         group: "restriction",
1812         desc: "using `Result.expect()`, which might be better handled",
1813         deprecation: None,
1814         module: "methods",
1815     },
1816     Lint {
1817         name: "result_map_unit_fn",
1818         group: "complexity",
1819         desc: "using `result.map(f)`, where `f` is a function or closure that returns `()`",
1820         deprecation: None,
1821         module: "map_unit_fn",
1822     },
1823     Lint {
1824         name: "result_map_unwrap_or_else",
1825         group: "pedantic",
1826         desc: "using `Result.map(f).unwrap_or_else(g)`, which is more succinctly expressed as `.map_or_else(g, f)`",
1827         deprecation: None,
1828         module: "methods",
1829     },
1830     Lint {
1831         name: "result_unwrap_used",
1832         group: "restriction",
1833         desc: "using `Result.unwrap()`, which might be better handled",
1834         deprecation: None,
1835         module: "methods",
1836     },
1837     Lint {
1838         name: "reverse_range_loop",
1839         group: "correctness",
1840         desc: "iteration over an empty range, such as `10..0` or `5..5`",
1841         deprecation: None,
1842         module: "loops",
1843     },
1844     Lint {
1845         name: "same_functions_in_if_condition",
1846         group: "pedantic",
1847         desc: "consecutive `if`s with the same function call",
1848         deprecation: None,
1849         module: "copies",
1850     },
1851     Lint {
1852         name: "search_is_some",
1853         group: "complexity",
1854         desc: "using an iterator search followed by `is_some()`, which is more succinctly expressed as a call to `any()`",
1855         deprecation: None,
1856         module: "methods",
1857     },
1858     Lint {
1859         name: "serde_api_misuse",
1860         group: "correctness",
1861         desc: "various things that will negatively affect your serde experience",
1862         deprecation: None,
1863         module: "serde_api",
1864     },
1865     Lint {
1866         name: "shadow_reuse",
1867         group: "restriction",
1868         desc: "rebinding a name to an expression that re-uses the original value, e.g., `let x = x + 1`",
1869         deprecation: None,
1870         module: "shadow",
1871     },
1872     Lint {
1873         name: "shadow_same",
1874         group: "restriction",
1875         desc: "rebinding a name to itself, e.g., `let mut x = &mut x`",
1876         deprecation: None,
1877         module: "shadow",
1878     },
1879     Lint {
1880         name: "shadow_unrelated",
1881         group: "pedantic",
1882         desc: "rebinding a name without even using the original value",
1883         deprecation: None,
1884         module: "shadow",
1885     },
1886     Lint {
1887         name: "short_circuit_statement",
1888         group: "complexity",
1889         desc: "using a short circuit boolean condition as a statement",
1890         deprecation: None,
1891         module: "misc",
1892     },
1893     Lint {
1894         name: "should_implement_trait",
1895         group: "style",
1896         desc: "defining a method that should be implementing a std trait",
1897         deprecation: None,
1898         module: "methods",
1899     },
1900     Lint {
1901         name: "similar_names",
1902         group: "pedantic",
1903         desc: "similarly named items and bindings",
1904         deprecation: None,
1905         module: "non_expressive_names",
1906     },
1907     Lint {
1908         name: "single_char_pattern",
1909         group: "perf",
1910         desc: "using a single-character str where a char could be used, e.g., `_.split(\"x\")`",
1911         deprecation: None,
1912         module: "methods",
1913     },
1914     Lint {
1915         name: "single_component_path_imports",
1916         group: "style",
1917         desc: "imports with single component path are redundant",
1918         deprecation: None,
1919         module: "single_component_path_imports",
1920     },
1921     Lint {
1922         name: "single_match",
1923         group: "style",
1924         desc: "a `match` statement with a single nontrivial arm (i.e., where the other arm is `_ => {}`) instead of `if let`",
1925         deprecation: None,
1926         module: "matches",
1927     },
1928     Lint {
1929         name: "single_match_else",
1930         group: "pedantic",
1931         desc: "a `match` statement with two arms where the second arm\'s pattern is a placeholder instead of a specific match pattern",
1932         deprecation: None,
1933         module: "matches",
1934     },
1935     Lint {
1936         name: "skip_while_next",
1937         group: "complexity",
1938         desc: "using `skip_while(p).next()`, which is more succinctly expressed as `.find(!p)`",
1939         deprecation: None,
1940         module: "methods",
1941     },
1942     Lint {
1943         name: "slow_vector_initialization",
1944         group: "perf",
1945         desc: "slow vector initialization",
1946         deprecation: None,
1947         module: "slow_vector_initialization",
1948     },
1949     Lint {
1950         name: "string_add",
1951         group: "restriction",
1952         desc: "using `x + ..` where x is a `String` instead of `push_str()`",
1953         deprecation: None,
1954         module: "strings",
1955     },
1956     Lint {
1957         name: "string_add_assign",
1958         group: "pedantic",
1959         desc: "using `x = x + ..` where x is a `String` instead of `push_str()`",
1960         deprecation: None,
1961         module: "strings",
1962     },
1963     Lint {
1964         name: "string_extend_chars",
1965         group: "style",
1966         desc: "using `x.extend(s.chars())` where s is a `&str` or `String`",
1967         deprecation: None,
1968         module: "methods",
1969     },
1970     Lint {
1971         name: "string_lit_as_bytes",
1972         group: "style",
1973         desc: "calling `as_bytes` on a string literal instead of using a byte string literal",
1974         deprecation: None,
1975         module: "strings",
1976     },
1977     Lint {
1978         name: "struct_excessive_bools",
1979         group: "pedantic",
1980         desc: "using too many bools in a struct",
1981         deprecation: None,
1982         module: "excessive_bools",
1983     },
1984     Lint {
1985         name: "suboptimal_flops",
1986         group: "nursery",
1987         desc: "usage of sub-optimal floating point operations",
1988         deprecation: None,
1989         module: "floating_point_arithmetic",
1990     },
1991     Lint {
1992         name: "suspicious_arithmetic_impl",
1993         group: "correctness",
1994         desc: "suspicious use of operators in impl of arithmetic trait",
1995         deprecation: None,
1996         module: "suspicious_trait_impl",
1997     },
1998     Lint {
1999         name: "suspicious_assignment_formatting",
2000         group: "style",
2001         desc: "suspicious formatting of `*=`, `-=` or `!=`",
2002         deprecation: None,
2003         module: "formatting",
2004     },
2005     Lint {
2006         name: "suspicious_else_formatting",
2007         group: "style",
2008         desc: "suspicious formatting of `else`",
2009         deprecation: None,
2010         module: "formatting",
2011     },
2012     Lint {
2013         name: "suspicious_map",
2014         group: "complexity",
2015         desc: "suspicious usage of map",
2016         deprecation: None,
2017         module: "methods",
2018     },
2019     Lint {
2020         name: "suspicious_op_assign_impl",
2021         group: "correctness",
2022         desc: "suspicious use of operators in impl of OpAssign trait",
2023         deprecation: None,
2024         module: "suspicious_trait_impl",
2025     },
2026     Lint {
2027         name: "suspicious_unary_op_formatting",
2028         group: "style",
2029         desc: "suspicious formatting of unary `-` or `!` on the RHS of a BinOp",
2030         deprecation: None,
2031         module: "formatting",
2032     },
2033     Lint {
2034         name: "tabs_in_doc_comments",
2035         group: "style",
2036         desc: "using tabs in doc comments is not recommended",
2037         deprecation: None,
2038         module: "tabs_in_doc_comments",
2039     },
2040     Lint {
2041         name: "temporary_assignment",
2042         group: "complexity",
2043         desc: "assignments to temporaries",
2044         deprecation: None,
2045         module: "temporary_assignment",
2046     },
2047     Lint {
2048         name: "temporary_cstring_as_ptr",
2049         group: "correctness",
2050         desc: "getting the inner pointer of a temporary `CString`",
2051         deprecation: None,
2052         module: "methods",
2053     },
2054     Lint {
2055         name: "to_digit_is_some",
2056         group: "style",
2057         desc: "`char.is_digit()` is clearer",
2058         deprecation: None,
2059         module: "to_digit_is_some",
2060     },
2061     Lint {
2062         name: "todo",
2063         group: "restriction",
2064         desc: "`todo!` should not be present in production code",
2065         deprecation: None,
2066         module: "panic_unimplemented",
2067     },
2068     Lint {
2069         name: "too_many_arguments",
2070         group: "complexity",
2071         desc: "functions with too many arguments",
2072         deprecation: None,
2073         module: "functions",
2074     },
2075     Lint {
2076         name: "too_many_lines",
2077         group: "pedantic",
2078         desc: "functions with too many lines",
2079         deprecation: None,
2080         module: "functions",
2081     },
2082     Lint {
2083         name: "toplevel_ref_arg",
2084         group: "style",
2085         desc: "an entire binding declared as `ref`, in a function argument or a `let` statement",
2086         deprecation: None,
2087         module: "misc",
2088     },
2089     Lint {
2090         name: "transmute_bytes_to_str",
2091         group: "complexity",
2092         desc: "transmutes from a `&[u8]` to a `&str`",
2093         deprecation: None,
2094         module: "transmute",
2095     },
2096     Lint {
2097         name: "transmute_float_to_int",
2098         group: "complexity",
2099         desc: "transmutes from a float to an integer",
2100         deprecation: None,
2101         module: "transmute",
2102     },
2103     Lint {
2104         name: "transmute_int_to_bool",
2105         group: "complexity",
2106         desc: "transmutes from an integer to a `bool`",
2107         deprecation: None,
2108         module: "transmute",
2109     },
2110     Lint {
2111         name: "transmute_int_to_char",
2112         group: "complexity",
2113         desc: "transmutes from an integer to a `char`",
2114         deprecation: None,
2115         module: "transmute",
2116     },
2117     Lint {
2118         name: "transmute_int_to_float",
2119         group: "complexity",
2120         desc: "transmutes from an integer to a float",
2121         deprecation: None,
2122         module: "transmute",
2123     },
2124     Lint {
2125         name: "transmute_ptr_to_ptr",
2126         group: "complexity",
2127         desc: "transmutes from a pointer to a pointer / a reference to a reference",
2128         deprecation: None,
2129         module: "transmute",
2130     },
2131     Lint {
2132         name: "transmute_ptr_to_ref",
2133         group: "complexity",
2134         desc: "transmutes from a pointer to a reference type",
2135         deprecation: None,
2136         module: "transmute",
2137     },
2138     Lint {
2139         name: "transmuting_null",
2140         group: "correctness",
2141         desc: "transmutes from a null pointer to a reference, which is undefined behavior",
2142         deprecation: None,
2143         module: "transmuting_null",
2144     },
2145     Lint {
2146         name: "trivial_regex",
2147         group: "style",
2148         desc: "trivial regular expressions",
2149         deprecation: None,
2150         module: "regex",
2151     },
2152     Lint {
2153         name: "trivially_copy_pass_by_ref",
2154         group: "perf",
2155         desc: "functions taking small copyable arguments by reference",
2156         deprecation: None,
2157         module: "trivially_copy_pass_by_ref",
2158     },
2159     Lint {
2160         name: "try_err",
2161         group: "style",
2162         desc: "return errors explicitly rather than hiding them behind a `?`",
2163         deprecation: None,
2164         module: "try_err",
2165     },
2166     Lint {
2167         name: "type_complexity",
2168         group: "complexity",
2169         desc: "usage of very complex types that might be better factored into `type` definitions",
2170         deprecation: None,
2171         module: "types",
2172     },
2173     Lint {
2174         name: "type_repetition_in_bounds",
2175         group: "pedantic",
2176         desc: "Types are repeated unnecessary in trait bounds use `+` instead of using `T: _, T: _`",
2177         deprecation: None,
2178         module: "trait_bounds",
2179     },
2180     Lint {
2181         name: "unicode_not_nfc",
2182         group: "pedantic",
2183         desc: "using a Unicode literal not in NFC normal form (see [Unicode tr15](http://www.unicode.org/reports/tr15/) for further information)",
2184         deprecation: None,
2185         module: "unicode",
2186     },
2187     Lint {
2188         name: "unimplemented",
2189         group: "restriction",
2190         desc: "`unimplemented!` should not be present in production code",
2191         deprecation: None,
2192         module: "panic_unimplemented",
2193     },
2194     Lint {
2195         name: "uninit_assumed_init",
2196         group: "correctness",
2197         desc: "`MaybeUninit::uninit().assume_init()`",
2198         deprecation: None,
2199         module: "methods",
2200     },
2201     Lint {
2202         name: "unit_arg",
2203         group: "complexity",
2204         desc: "passing unit to a function",
2205         deprecation: None,
2206         module: "types",
2207     },
2208     Lint {
2209         name: "unit_cmp",
2210         group: "correctness",
2211         desc: "comparing unit values",
2212         deprecation: None,
2213         module: "types",
2214     },
2215     Lint {
2216         name: "unknown_clippy_lints",
2217         group: "style",
2218         desc: "unknown_lints for scoped Clippy lints",
2219         deprecation: None,
2220         module: "attrs",
2221     },
2222     Lint {
2223         name: "unnecessary_cast",
2224         group: "complexity",
2225         desc: "cast to the same type, e.g., `x as i32` where `x: i32`",
2226         deprecation: None,
2227         module: "types",
2228     },
2229     Lint {
2230         name: "unnecessary_filter_map",
2231         group: "complexity",
2232         desc: "using `filter_map` when a more succinct alternative exists",
2233         deprecation: None,
2234         module: "methods",
2235     },
2236     Lint {
2237         name: "unnecessary_fold",
2238         group: "style",
2239         desc: "using `fold` when a more succinct alternative exists",
2240         deprecation: None,
2241         module: "methods",
2242     },
2243     Lint {
2244         name: "unnecessary_mut_passed",
2245         group: "style",
2246         desc: "an argument passed as a mutable reference although the callee only demands an immutable reference",
2247         deprecation: None,
2248         module: "mut_reference",
2249     },
2250     Lint {
2251         name: "unnecessary_operation",
2252         group: "complexity",
2253         desc: "outer expressions with no effect",
2254         deprecation: None,
2255         module: "no_effect",
2256     },
2257     Lint {
2258         name: "unnecessary_unwrap",
2259         group: "complexity",
2260         desc: "checks for calls of `unwrap[_err]()` that cannot fail",
2261         deprecation: None,
2262         module: "unwrap",
2263     },
2264     Lint {
2265         name: "unneeded_field_pattern",
2266         group: "restriction",
2267         desc: "struct fields bound to a wildcard instead of using `..`",
2268         deprecation: None,
2269         module: "misc_early",
2270     },
2271     Lint {
2272         name: "unneeded_wildcard_pattern",
2273         group: "complexity",
2274         desc: "tuple patterns with a wildcard pattern (`_`) is next to a rest pattern (`..`)",
2275         deprecation: None,
2276         module: "misc_early",
2277     },
2278     Lint {
2279         name: "unreachable",
2280         group: "restriction",
2281         desc: "`unreachable!` should not be present in production code",
2282         deprecation: None,
2283         module: "panic_unimplemented",
2284     },
2285     Lint {
2286         name: "unreadable_literal",
2287         group: "style",
2288         desc: "long integer literal without underscores",
2289         deprecation: None,
2290         module: "literal_representation",
2291     },
2292     Lint {
2293         name: "unsafe_removed_from_name",
2294         group: "style",
2295         desc: "`unsafe` removed from API names on import",
2296         deprecation: None,
2297         module: "unsafe_removed_from_name",
2298     },
2299     Lint {
2300         name: "unseparated_literal_suffix",
2301         group: "pedantic",
2302         desc: "literals whose suffix is not separated by an underscore",
2303         deprecation: None,
2304         module: "misc_early",
2305     },
2306     Lint {
2307         name: "unsound_collection_transmute",
2308         group: "correctness",
2309         desc: "transmute between collections of layout-incompatible types",
2310         deprecation: None,
2311         module: "transmute",
2312     },
2313     Lint {
2314         name: "unused_io_amount",
2315         group: "correctness",
2316         desc: "unused written/read amount",
2317         deprecation: None,
2318         module: "unused_io_amount",
2319     },
2320     Lint {
2321         name: "unused_self",
2322         group: "pedantic",
2323         desc: "methods that contain a `self` argument but don\'t use it",
2324         deprecation: None,
2325         module: "unused_self",
2326     },
2327     Lint {
2328         name: "unused_unit",
2329         group: "style",
2330         desc: "needless unit expression",
2331         deprecation: None,
2332         module: "returns",
2333     },
2334     Lint {
2335         name: "use_debug",
2336         group: "restriction",
2337         desc: "use of `Debug`-based formatting",
2338         deprecation: None,
2339         module: "write",
2340     },
2341     Lint {
2342         name: "use_self",
2343         group: "nursery",
2344         desc: "Unnecessary structure name repetition whereas `Self` is applicable",
2345         deprecation: None,
2346         module: "use_self",
2347     },
2348     Lint {
2349         name: "used_underscore_binding",
2350         group: "pedantic",
2351         desc: "using a binding which is prefixed with an underscore",
2352         deprecation: None,
2353         module: "misc",
2354     },
2355     Lint {
2356         name: "useless_asref",
2357         group: "complexity",
2358         desc: "using `as_ref` where the types before and after the call are the same",
2359         deprecation: None,
2360         module: "methods",
2361     },
2362     Lint {
2363         name: "useless_attribute",
2364         group: "correctness",
2365         desc: "use of lint attributes on `extern crate` items",
2366         deprecation: None,
2367         module: "attrs",
2368     },
2369     Lint {
2370         name: "useless_format",
2371         group: "complexity",
2372         desc: "useless use of `format!`",
2373         deprecation: None,
2374         module: "format",
2375     },
2376     Lint {
2377         name: "useless_let_if_seq",
2378         group: "style",
2379         desc: "unidiomatic `let mut` declaration followed by initialization in `if`",
2380         deprecation: None,
2381         module: "let_if_seq",
2382     },
2383     Lint {
2384         name: "useless_transmute",
2385         group: "nursery",
2386         desc: "transmutes that have the same to and from types or could be a cast/coercion",
2387         deprecation: None,
2388         module: "transmute",
2389     },
2390     Lint {
2391         name: "useless_vec",
2392         group: "perf",
2393         desc: "useless `vec!`",
2394         deprecation: None,
2395         module: "vec",
2396     },
2397     Lint {
2398         name: "vec_box",
2399         group: "complexity",
2400         desc: "usage of `Vec<Box<T>>` where T: Sized, vector elements are already on the heap",
2401         deprecation: None,
2402         module: "types",
2403     },
2404     Lint {
2405         name: "verbose_bit_mask",
2406         group: "style",
2407         desc: "expressions where a bit mask is less readable than the corresponding method call",
2408         deprecation: None,
2409         module: "bit_mask",
2410     },
2411     Lint {
2412         name: "verbose_file_reads",
2413         group: "restriction",
2414         desc: "use of `File::read_to_end` or `File::read_to_string`",
2415         deprecation: None,
2416         module: "verbose_file_reads",
2417     },
2418     Lint {
2419         name: "vtable_address_comparisons",
2420         group: "correctness",
2421         desc: "comparison with an address of a trait vtable",
2422         deprecation: None,
2423         module: "unnamed_address",
2424     },
2425     Lint {
2426         name: "while_immutable_condition",
2427         group: "correctness",
2428         desc: "variables used within while expression are not mutated in the body",
2429         deprecation: None,
2430         module: "loops",
2431     },
2432     Lint {
2433         name: "while_let_loop",
2434         group: "complexity",
2435         desc: "`loop { if let { ... } else break }`, which can be written as a `while let` loop",
2436         deprecation: None,
2437         module: "loops",
2438     },
2439     Lint {
2440         name: "while_let_on_iterator",
2441         group: "style",
2442         desc: "using a while-let loop instead of a for loop on an iterator",
2443         deprecation: None,
2444         module: "loops",
2445     },
2446     Lint {
2447         name: "wildcard_dependencies",
2448         group: "cargo",
2449         desc: "wildcard dependencies being used",
2450         deprecation: None,
2451         module: "wildcard_dependencies",
2452     },
2453     Lint {
2454         name: "wildcard_enum_match_arm",
2455         group: "restriction",
2456         desc: "a wildcard enum match arm using `_`",
2457         deprecation: None,
2458         module: "matches",
2459     },
2460     Lint {
2461         name: "wildcard_imports",
2462         group: "pedantic",
2463         desc: "lint `use _::*` statements",
2464         deprecation: None,
2465         module: "wildcard_imports",
2466     },
2467     Lint {
2468         name: "wildcard_in_or_patterns",
2469         group: "complexity",
2470         desc: "a wildcard pattern used with others patterns in same match arm",
2471         deprecation: None,
2472         module: "matches",
2473     },
2474     Lint {
2475         name: "write_literal",
2476         group: "style",
2477         desc: "writing a literal with a format string",
2478         deprecation: None,
2479         module: "write",
2480     },
2481     Lint {
2482         name: "write_with_newline",
2483         group: "style",
2484         desc: "using `write!()` with a format string that ends in a single newline",
2485         deprecation: None,
2486         module: "write",
2487     },
2488     Lint {
2489         name: "writeln_empty_string",
2490         group: "style",
2491         desc: "using `writeln!(buf, \"\")` with an empty string",
2492         deprecation: None,
2493         module: "write",
2494     },
2495     Lint {
2496         name: "wrong_pub_self_convention",
2497         group: "restriction",
2498         desc: "defining a public method named with an established prefix (like \"into_\") that takes `self` with the wrong convention",
2499         deprecation: None,
2500         module: "methods",
2501     },
2502     Lint {
2503         name: "wrong_self_convention",
2504         group: "style",
2505         desc: "defining a method named with an established prefix (like \"into_\") that takes `self` with the wrong convention",
2506         deprecation: None,
2507         module: "methods",
2508     },
2509     Lint {
2510         name: "wrong_transmute",
2511         group: "correctness",
2512         desc: "transmutes that are confusing at best, undefined behaviour at worst and always useless",
2513         deprecation: None,
2514         module: "transmute",
2515     },
2516     Lint {
2517         name: "zero_divided_by_zero",
2518         group: "complexity",
2519         desc: "usage of `0.0 / 0.0` to obtain NaN instead of `std::f32::NAN` or `std::f64::NAN`",
2520         deprecation: None,
2521         module: "zero_div_zero",
2522     },
2523     Lint {
2524         name: "zero_prefixed_literal",
2525         group: "complexity",
2526         desc: "integer literals starting with `0`",
2527         deprecation: None,
2528         module: "misc_early",
2529     },
2530     Lint {
2531         name: "zero_ptr",
2532         group: "style",
2533         desc: "using `0 as *{const, mut} T`",
2534         deprecation: None,
2535         module: "misc",
2536     },
2537     Lint {
2538         name: "zero_width_space",
2539         group: "correctness",
2540         desc: "using a zero-width space in a string literal, which is confusing",
2541         deprecation: None,
2542         module: "unicode",
2543     },
2544     Lint {
2545         name: "zst_offset",
2546         group: "correctness",
2547         desc: "Check for offset calculations on raw pointers to zero-sized types",
2548         deprecation: None,
2549         module: "methods",
2550     },
2551 ];
2552 // end lint list, do not remove this comment, it’s used in `update_lints`