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