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