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