allow_prefixed/
lib.rs

1//! Alias/label lints (to disable) with your intentions.
2//!
3//! Implementation of 'allow' crate, exported with no prefix (for prefixless lints), and with
4//! `clippy_` and `rustdoc_` prefixes.
5// We can't have `#![forbid(unknown_lints)]` here, because it gets passed to `#[allow(...)]` in
6// `standard_lint!(...)` as a part of `standard_lint!`'s internal check. That would then fail (under
7// outer `#![forbid(unknown_lints)]`). We used to support that by having a special branch in
8// `standard_lint!` macro for `unknown_lints` itself, but that could introduce a human mistake.
9//
10// Also, it would break consumer crates when some lints wouldn't exist anymore, or if there were a
11// mistake in specifying Rust version ranges for specific lint macros in `allow_prefixed`.
12//
13// Instead of `#[forbid(unknown_lints)]` here, we have it in tests.
14#![deny(unknown_lints)]
15#![cfg_attr(has_rustdoc_lints, deny(missing_docs))]
16#![cfg_attr(can_check_doc_attributes, deny(invalid_doc_attributes))]
17#![deny(unused_doc_comments)]
18#![cfg_attr(
19    unstable_feature, // "unstable_feature" comes from ../build.rs
20    feature(
21        c_unwind, // https://github.com/rust-lang/rust/issues/74990
22        lint_reasons, // https://github.com/rust-lang/rust/issues/54503
23        multiple_supertrait_upcastable, // https://doc.rust-lang.org/beta/unstable-book/language-features/multiple-supertrait-upcastable.html
24        must_not_suspend, // https://github.com/rust-lang/rust/issues/83310
25        non_exhaustive_omitted_patterns_lint, // https://github.com/rust-lang/rust/issues/89554
26        rustdoc_missing_doc_code_examples, // https://github.com/rust-lang/rust/issues/101730
27        strict_provenance, // https://github.com/rust-lang/rust/issues/95228
28        test_unstable_lint // https://doc.rust-lang.org/nightly/unstable-book/language-features/test-unstable-lint.html
29    )
30)]
31
32#[macro_use]
33mod wrapper_macros;
34
35mod auxiliary;
36
37mod proc_builder;
38
39/* // @TODO
40// When panic_old_on_floating_toolchain` feature is turned on, then our proc macros generate
41// `#[deprecated = panic!("...")]` - NOT in the definition of the proc macro (before its `fn`), but
42// in the code generated.
43mod restrict_floating_toolchain_pof {
44    macro_rules! generate_code_as_if_from_proc_macro {
45        () => {
46            //#[forbid(deprecated)] // This `forbid` has no effect on the consumer!
47            //#[deprecated(note = "Deprecated or removed, AND on a floating toolchain, AND restrict_floating_toolchain.")]
48            #[deprecated = panic!("PANI")]
49            #[allow(dead_code)]
50            fn f() {}
51        };
52    }
53}*/
54
55/// NOT for public use. See [generate_allow_attribute_macro_definition_internal].
56///
57/// $doc is used for rustdoc of the generated proc macro; it must be an `&str`-like literal or
58/// expression - for example, a result of `stringify!`
59#[allow(unused_macros)]
60macro_rules! generate_allow_attribute_macro_definition_internal_without_docs {
61    ( $lint_path:path, $new_macro_name:ident, $doc:expr ) => {
62        #[doc = $doc]
63        //#[doc = "Buf buf."]
64        #[proc_macro_attribute]
65        pub fn $new_macro_name(
66            given_attrs: ::proc_macro::TokenStream,
67            item: ::proc_macro::TokenStream,
68        ) -> ::proc_macro::TokenStream {
69            // Clippy lints that have configuration (few of them) don't accept the config values as
70            // any attribute parameters. See
71            // https://doc.rust-lang.org/nightly/clippy/configuration.html.
72            assert!(
73                given_attrs.is_empty(),
74                "Do not pass any attribute parameters."
75            );
76            // TODO replace with the below if we upgrade Rust min. version, or edition to 2021
77            let tokens = [
78                $crate::proc_builder::get_hash(),
79                $crate::proc_builder::brackets_allow_lint(::allow_internal::path_to_str_literal!(
80                    $lint_path
81                )),
82                item,
83            ];
84            auxiliary::token_streams_to_stream(&tokens)
85            /*::proc_macro::TokenStream::from_iter([
86                $crate::proc_builder::get_hash(),
87                $crate::proc_builder::brackets_allow_lint(::allow_internal::path_to_str_literal!($lint_path)),
88                item,
89            ])*/
90        }
91    };
92}
93
94/// NOT for public use. "Used" only by
95/// [`allow_internal::generate_allow_attribute_macro_definition_standard`] and
96/// [`allow_internal::generate_allow_attribute_macro_definition_prefixed`] macros. Those macros
97/// don't invoke this, but instead they generate code that invokes it.
98///
99/// This generates a definition of a `proc` attribute macro to allow (suppress a warning for) the
100/// given lint. The proc macro will have the same name as the given `lint_path`, except that any
101/// package-like separators (pairs of colons) :: are replaced with an underscore _.
102///
103/// Param `lint_path` must NOT contain any whitespace, and it can contain max. one pair of colons
104/// `::` (for `clippy::` or `rustdoc::` lints).
105#[cfg(attributes_can_invoke_macros)]
106macro_rules! generate_allow_attribute_macro_definition_internal {
107    ( $lint_path:path, $new_macro_name:ident ) => {
108        generate_allow_attribute_macro_definition_internal_without_docs!($lint_path, $new_macro_name, stringify!(Alias to #allow($lint_path).));
109    };
110}
111#[cfg(not(attributes_can_invoke_macros))]
112macro_rules! generate_allow_attribute_macro_definition_internal {
113    ( $lint_path:path, $new_macro_name:ident ) => {
114        generate_allow_attribute_macro_definition_internal_without_docs!(
115            $lint_path,
116            $new_macro_name,
117            // If you change the following doc, update the copy in ../../README.md.
118            "Alias to `#[allow(...)]` a lint with a similar name as imported from allow or allow_prefixed."
119        );
120    };
121}
122
123// @TODO test that e.g. non_existing_std_lint fails TODO compile test that the following fails
124// standard_lint!(wrong_lint);
125
126// MAINTENANCE NOTES
127//
128// 1. When you edit/add comments below, if you have two (or more) successive comments about
129//    different lints, either insert a blank line between those comments, or a line with an empty
130//    `//` comment. That allows us to reformat all comments in VS Code withCtrl+A Alt+Q using
131//    https://marketplace.visualstudio.com/items?itemName=stkb.rewrap.
132
133// 1. Based on https://doc.rust-lang.org/nightly/rustc/lints/listing/allowed-by-default.html
134
135// absolute_paths_not_starting_with_crate was in edition 2015 only (and we require 2018+).
136//#[rustversion::since(1.45.0)] standard_lint!(box_pointers);
137standard_lint!(box_pointers);
138// elided_lifetimes_in_paths - at crate level only
139standard_lint!(explicit_outlives_requirements);
140standard_lint_nightly!(ffi_unwind_calls);
141standard_lint_nightly!(fuzzy_provenance_casts);
142standard_lint!(keyword_idents);
143standard_lint!(let_underscore_drop);
144standard_lint_nightly!(lossy_provenance_casts);
145standard_lint!(macro_use_extern_crate);
146standard_lint!(meta_variable_misuse);
147standard_lint!(missing_abi);
148standard_lint!(missing_copy_implementations);
149standard_lint!(missing_debug_implementations);
150standard_lint!(missing_docs);
151standard_lint_nightly!(multiple_supertrait_upcastable);
152standard_lint_nightly!(must_not_suspend);
153// non_ascii_idents - at crate level only
154standard_lint_nightly!(non_exhaustive_omitted_patterns);
155standard_lint!(noop_method_call);
156standard_lint!(pointer_structural_match);
157standard_lint!(rust_2021_incompatible_closure_captures);
158standard_lint!(rust_2021_incompatible_or_patterns);
159// rust_2021_prefixes_incompatible_syntax - at crate level only
160standard_lint!(rust_2021_prelude_collisions);
161standard_lint!(single_use_lifetimes);
162standard_lint!(trivial_casts);
163standard_lint!(trivial_numeric_casts);
164standard_lint!(unreachable_pub);
165standard_lint!(unsafe_code);
166
167standard_lint_versioned!(1.52, unsafe_op_in_unsafe_fn); // According to https://github.com/rust-lang/rust/pull/79208 it was stabilized in 1.52.0
168
169// unstable_features - deprecated
170//
171// unused_crate_dependencies - at crate level only
172standard_lint!(unused_extern_crates);
173standard_lint!(unused_import_braces);
174standard_lint!(unused_lifetimes);
175standard_lint!(unused_macro_rules);
176standard_lint!(unused_qualifications);
177standard_lint!(unused_results);
178standard_lint!(unused_tuple_struct_fields);
179standard_lint!(variant_size_differences);
180
181// 2. Based on https://doc.rust-lang.org/nightly/rustc/lints/listing/warn-by-default.html
182standard_lint_nightly!(ambiguous_glob_reexports);
183standard_lint!(anonymous_parameters);
184standard_lint!(array_into_iter);
185standard_lint!(asm_sub_register);
186standard_lint!(bad_asm_style);
187standard_lint!(bare_trait_objects);
188standard_lint!(break_with_label_and_loop);
189standard_lint!(byte_slice_in_packed_struct_with_derive);
190standard_lint!(clashing_extern_declarations);
191standard_lint!(coherence_leak_check);
192// confusable_idents - at crate level only
193standard_lint!(const_evaluatable_unchecked);
194standard_lint!(const_item_mutation);
195standard_lint!(dead_code);
196standard_lint!(deprecated);
197standard_lint!(deprecated_where_clause_location);
198standard_lint!(deref_into_dyn_supertrait);
199standard_lint!(deref_nullptr);
200standard_lint!(drop_bounds);
201standard_lint!(duplicate_macro_attributes);
202standard_lint!(dyn_drop);
203standard_lint!(ellipsis_inclusive_range_patterns);
204standard_lint!(exported_private_dependencies);
205standard_lint!(for_loops_over_fallibles);
206standard_lint!(forbidden_lint_groups);
207standard_lint!(function_item_references);
208standard_lint!(illegal_floating_point_literal_pattern);
209standard_lint!(improper_ctypes);
210standard_lint!(improper_ctypes_definitions);
211standard_lint!(incomplete_features);
212standard_lint!(indirect_structural_match);
213standard_lint!(inline_no_sanitize);
214standard_lint!(invalid_doc_attributes);
215standard_lint_nightly!(invalid_macro_export_arguments);
216standard_lint!(invalid_value);
217standard_lint!(irrefutable_let_patterns);
218standard_lint!(large_assignments);
219standard_lint!(late_bound_lifetime_arguments);
220standard_lint!(legacy_derive_helpers);
221standard_lint!(map_unit_fn);
222// mixed_script_confusables - at crate level only
223standard_lint!(named_arguments_used_positionally);
224standard_lint!(no_mangle_generic_items);
225standard_lint!(non_camel_case_types);
226standard_lint!(non_fmt_panics);
227standard_lint!(non_shorthand_field_patterns);
228standard_lint!(non_snake_case);
229standard_lint!(non_upper_case_globals);
230standard_lint!(nontrivial_structural_match);
231standard_lint!(opaque_hidden_inferred_bound);
232standard_lint!(overlapping_range_endpoints);
233standard_lint!(path_statements);
234standard_lint!(private_in_public);
235standard_lint!(redundant_semicolons);
236standard_lint!(renamed_and_removed_lints);
237standard_lint!(repr_transparent_external_private_fields);
238standard_lint!(semicolon_in_expressions_from_macros);
239standard_lint!(special_module_name);
240standard_lint!(stable_features);
241standard_lint!(suspicious_auto_trait_impls);
242standard_lint!(temporary_cstring_as_ptr);
243standard_lint!(trivial_bounds);
244standard_lint!(type_alias_bounds);
245standard_lint!(tyvar_behind_raw_pointer);
246// uncommon_codepoints - at crate level only
247standard_lint!(unconditional_recursion);
248standard_lint_nightly!(undefined_naked_function_abi);
249standard_lint_nightly!(unexpected_cfgs);
250standard_lint_nightly!(unfulfilled_lint_expectations);
251standard_lint!(ungated_async_fn_track_caller);
252standard_lint!(uninhabited_static);
253standard_lint!(unknown_lints);
254standard_lint!(unnameable_test_items);
255standard_lint!(unreachable_code);
256standard_lint!(unreachable_patterns);
257standard_lint!(unstable_name_collisions);
258standard_lint!(unstable_syntax_pre_expansion);
259standard_lint!(unsupported_calling_conventions);
260standard_lint!(unused_allocation);
261standard_lint!(unused_assignments);
262standard_lint!(unused_attributes);
263standard_lint!(unused_braces);
264standard_lint!(unused_comparisons);
265standard_lint!(unused_doc_comments);
266standard_lint!(unused_features);
267standard_lint!(unused_imports);
268standard_lint!(unused_labels);
269standard_lint!(unused_macros);
270standard_lint!(unused_must_use);
271standard_lint!(unused_mut);
272standard_lint!(unused_parens);
273standard_lint!(unused_unsafe);
274standard_lint!(unused_variables);
275// warnings is a group
276standard_lint!(where_clauses_object_safety);
277standard_lint!(while_true);
278
279// 3. Based on https://doc.rust-lang.org/nightly/rustc/lints/listing/deny-by-default.html - in the
280// same order:
281standard_lint!(ambiguous_associated_items);
282standard_lint!(arithmetic_overflow);
283standard_lint!(bindings_with_variant_name);
284standard_lint!(cenum_impl_drop_cast);
285standard_lint!(conflicting_repr_hints);
286standard_lint!(deprecated_cfg_attr_crate_type_name);
287standard_lint!(enum_intrinsics_non_enums);
288// ill_formed_attribute_input - at crate level only
289standard_lint!(implied_bounds_entailment);
290standard_lint!(incomplete_include);
291standard_lint!(ineffective_unstable_trait_impl);
292standard_lint_nightly!(invalid_alignment);
293standard_lint!(invalid_atomic_ordering);
294standard_lint!(invalid_type_param_default);
295standard_lint!(let_underscore_lock);
296// macro_expanded_macro_exports_accessed_by_absolute_paths - at crate level only
297standard_lint!(missing_fragment_specifier);
298standard_lint!(mutable_transmutes);
299standard_lint!(named_asm_labels);
300standard_lint!(no_mangle_const_items);
301standard_lint!(order_dependent_trait_objects);
302standard_lint!(overflowing_literals);
303standard_lint!(patterns_in_fns_without_body);
304standard_lint!(proc_macro_back_compat);
305standard_lint!(proc_macro_derive_resolution_fallback);
306standard_lint!(pub_use_of_private_extern_crate);
307standard_lint!(soft_unstable);
308standard_lint_nightly!(test_unstable_lint);
309standard_lint!(text_direction_codepoint_in_comment);
310standard_lint!(text_direction_codepoint_in_literal);
311standard_lint!(unconditional_panic);
312// unknown_crate_types - at crate level only
313standard_lint!(useless_deprecated);
314
315// Based on https://doc.rust-lang.org/nightly/rustdoc/lints.html - in the same order:
316
317// According to https://releases.rs/docs/1.52.0/#rustdoc rustdoc:: lints exist since 1.52:
318prefixed_lint_versioned!(1.52, rustdoc::broken_intra_doc_links);
319prefixed_lint_versioned!(1.52, rustdoc::private_intra_doc_links);
320prefixed_lint_versioned!(1.52, rustdoc::missing_crate_level_docs);
321prefixed_lint_versioned!(1.52, rustdoc::missing_doc_code_examples);
322prefixed_lint_versioned!(1.52, rustdoc::private_doc_tests);
323prefixed_lint_versioned!(1.52, rustdoc::invalid_codeblock_attributes);
324prefixed_lint_versioned!(1.52, rustdoc::invalid_html_tags);
325prefixed_lint_versioned!(1.52, rustdoc::invalid_rust_codeblocks);
326prefixed_lint_versioned!(1.52, rustdoc::bare_urls);
327prefixed_lint_versioned!(1.52, rustdoc::unescaped_backticks);
328
329// Based on https://rust-lang.github.io/rust-clippy/index.html for 1.45 to master for nightly 1.71:
330prefixed_lint!(clippy::absurd_extreme_comparisons);
331
332prefixed_lint_versioned!(1.64, clippy::alloc_instead_of_core);
333prefixed_lint_versioned!(1.69, clippy::allow_attributes);
334prefixed_lint_versioned!(1.61, clippy::allow_attributes_without_reason);
335prefixed_lint_versioned!(1.68, clippy::almost_complete_range);
336prefixed_lint!(clippy::almost_swapped);
337prefixed_lint!(clippy::approx_constant);
338prefixed_lint_versioned!(1.64, clippy::arithmetic_side_effects);
339prefixed_lint!(clippy::as_conversions);
340prefixed_lint_versioned!(1.66, clippy::as_ptr_cast_mut);
341prefixed_lint_versioned!(1.63, clippy::as_underscore);
342prefixed_lint!(clippy::assertions_on_constants);
343prefixed_lint_versioned!(1.64, clippy::assertions_on_result_states);
344prefixed_lint!(clippy::assign_op_pattern);
345// clippy::assign_ops is deprecated since at least 1.45
346prefixed_lint_versioned!(1.48, clippy::async_yields_async);
347prefixed_lint_versioned!(1.62, clippy::await_holding_invalid_type);
348prefixed_lint!(clippy::await_holding_lock);
349prefixed_lint_versioned!(1.49, clippy::await_holding_refcell_ref);
350prefixed_lint!(clippy::bad_bit_mask);
351prefixed_lint!(clippy::bind_instead_of_map);
352// clippy::blacklisted_name has been renamed to `clippy::disallowed_names`
353prefixed_lint_versioned!(1.47, clippy::blanket_clippy_restriction_lints);
354prefixed_lint!(clippy::blocks_in_if_conditions);
355prefixed_lint_versioned!(1.53, clippy::bool_assert_comparison);
356prefixed_lint!(clippy::bool_comparison);
357prefixed_lint_versioned!(1.65, clippy::bool_to_int_with_if);
358prefixed_lint_versioned!(1.60, clippy::borrow_as_ptr);
359prefixed_lint_versioned!(1.63, clippy::borrow_deref_ref);
360prefixed_lint!(clippy::borrow_interior_mutable_const);
361prefixed_lint!(clippy::borrowed_box);
362prefixed_lint_versioned!(1.57, clippy::box_collection);
363prefixed_lint_versioned!(1.66, clippy::box_default);
364// clippy::box_vec has been renamed to `clippy::box_collection`
365prefixed_lint!(clippy::boxed_local);
366prefixed_lint_versioned!(1.53, clippy::branches_sharing_code);
367prefixed_lint!(clippy::builtin_type_shadow);
368prefixed_lint_versioned!(1.62, clippy::bytes_count_to_len);
369prefixed_lint_versioned!(1.52, clippy::bytes_nth);
370prefixed_lint!(clippy::cargo_common_metadata);
371prefixed_lint_versioned!(1.51, clippy::case_sensitive_file_extension_comparisons);
372prefixed_lint_versioned!(1.62, clippy::cast_abs_to_unsigned);
373prefixed_lint_versioned!(1.61, clippy::cast_enum_constructor);
374prefixed_lint_versioned!(1.61, clippy::cast_enum_truncation);
375prefixed_lint!(clippy::cast_lossless);
376prefixed_lint_versioned!(1.66, clippy::cast_nan_to_int);
377prefixed_lint!(clippy::cast_possible_truncation);
378prefixed_lint!(clippy::cast_possible_wrap);
379prefixed_lint!(clippy::cast_precision_loss);
380prefixed_lint!(clippy::cast_ptr_alignment);
381prefixed_lint!(clippy::cast_ref_to_mut);
382prefixed_lint!(clippy::cast_sign_loss);
383prefixed_lint_versioned!(1.61, clippy::cast_slice_different_sizes);
384prefixed_lint_versioned!(1.65, clippy::cast_slice_from_raw_parts);
385prefixed_lint!(clippy::char_lit_as_u8);
386prefixed_lint!(clippy::chars_last_cmp);
387prefixed_lint!(clippy::chars_next_cmp);
388prefixed_lint!(clippy::checked_conversions);
389prefixed_lint_versioned!(1.69, clippy::clear_with_drain);
390prefixed_lint!(clippy::clone_double_ref);
391prefixed_lint!(clippy::clone_on_copy);
392prefixed_lint!(clippy::clone_on_ref_ptr);
393prefixed_lint!(clippy::cloned_instead_of_copied);
394prefixed_lint!(clippy::cmp_nan);
395prefixed_lint!(clippy::cmp_null);
396prefixed_lint!(clippy::cmp_owned);
397prefixed_lint!(clippy::cognitive_complexity);
398prefixed_lint_versioned!(1.51, clippy::collapsible_else_if);
399prefixed_lint!(clippy::collapsible_if);
400prefixed_lint_versioned!(1.50, clippy::collapsible_match);
401prefixed_lint_versioned!(1.65, clippy::collapsible_str_replace);
402prefixed_lint_versioned!(1.69, clippy::collection_is_never_read);
403prefixed_lint!(clippy::comparison_chain);
404prefixed_lint_versioned!(1.49, clippy::comparison_to_empty);
405prefixed_lint!(clippy::copy_iterator);
406prefixed_lint_versioned!(1.62, clippy::crate_in_macro_def);
407prefixed_lint_versioned!(1.48, clippy::create_dir);
408prefixed_lint!(clippy::crosspointer_transmute);
409prefixed_lint!(clippy::dbg_macro);
410prefixed_lint!(clippy::debug_assert_with_mut_call);
411prefixed_lint!(clippy::decimal_literal_representation);
412prefixed_lint!(clippy::declare_interior_mutable_const);
413prefixed_lint_versioned!(1.64, clippy::default_instead_of_iter_empty);
414prefixed_lint_versioned!(1.52, clippy::default_numeric_fallback);
415prefixed_lint!(clippy::default_trait_access);
416prefixed_lint_versioned!(1.60, clippy::default_union_representation);
417prefixed_lint!(clippy::deprecated_cfg_attr);
418prefixed_lint!(clippy::deprecated_semver);
419prefixed_lint!(clippy::deref_addrof);
420prefixed_lint_versioned!(1.61, clippy::deref_by_slicing);
421prefixed_lint_versioned!(1.57, clippy::derivable_impls);
422// clippy::derive_hash_xor_eq has been renamed to `clippy::derived_hash_with_manual_eq`
423prefixed_lint_versioned!(1.47, clippy::derive_ord_xor_partial_ord);
424prefixed_lint_versioned!(1.63, clippy::derive_partial_eq_without_eq);
425prefixed_lint!(clippy::derived_hash_with_manual_eq);
426prefixed_lint_versioned!(1.66, clippy::disallowed_macros);
427prefixed_lint_versioned!(1.49, clippy::disallowed_methods);
428prefixed_lint!(clippy::disallowed_names);
429prefixed_lint_versioned!(1.55, clippy::disallowed_script_idents);
430prefixed_lint_versioned!(1.55, clippy::disallowed_types);
431prefixed_lint!(clippy::diverging_sub_expression);
432prefixed_lint_versioned!(1.63, clippy::doc_link_with_quotes);
433prefixed_lint!(clippy::doc_markdown);
434prefixed_lint!(clippy::double_comparisons);
435prefixed_lint!(clippy::double_must_use);
436prefixed_lint!(clippy::double_neg);
437prefixed_lint!(clippy::double_parens);
438// clippy::drop_bounds has been renamed to (prefixless) `drop_bounds`
439prefixed_lint!(clippy::drop_copy);
440prefixed_lint_versioned!(1.62, clippy::drop_non_drop);
441prefixed_lint!(clippy::drop_ref);
442prefixed_lint_versioned!(1.63, clippy::duplicate_mod);
443prefixed_lint!(clippy::duplicate_underscore_argument);
444prefixed_lint!(clippy::duration_subsec);
445prefixed_lint!(clippy::else_if_without_else);
446prefixed_lint_versioned!(1.62, clippy::empty_drop);
447prefixed_lint!(clippy::empty_enum);
448prefixed_lint!(clippy::empty_line_after_outer_attr);
449prefixed_lint!(clippy::empty_loop);
450prefixed_lint_versioned!(1.62, clippy::empty_structs_with_brackets);
451prefixed_lint!(clippy::enum_clike_unportable_variant);
452prefixed_lint!(clippy::enum_glob_use);
453prefixed_lint!(clippy::enum_variant_names);
454prefixed_lint!(clippy::eq_op);
455prefixed_lint_versioned!(1.57, clippy::equatable_if_let);
456prefixed_lint!(clippy::erasing_op);
457prefixed_lint_versioned!(1.62, clippy::err_expect);
458// clippy::eval_order_dependence has been renamed to `clippy::mixed_read_write_in_expression`
459prefixed_lint!(clippy::excessive_precision);
460prefixed_lint_versioned!(1.51, clippy::exhaustive_enums);
461prefixed_lint_versioned!(1.51, clippy::exhaustive_structs);
462prefixed_lint!(clippy::exit);
463prefixed_lint!(clippy::expect_fun_call);
464prefixed_lint!(clippy::expect_used);
465prefixed_lint!(clippy::expl_impl_clone_on_copy);
466prefixed_lint_versioned!(1.64, clippy::explicit_auto_deref);
467prefixed_lint!(clippy::explicit_counter_loop);
468prefixed_lint!(clippy::explicit_deref_methods);
469prefixed_lint!(clippy::explicit_into_iter_loop);
470prefixed_lint!(clippy::explicit_iter_loop);
471prefixed_lint!(clippy::explicit_write);
472// clippy::extend_from_slice is deprecated since at least 1.44.1
473prefixed_lint_versioned!(1.55, clippy::extend_with_drain);
474prefixed_lint!(clippy::extra_unused_lifetimes);
475prefixed_lint_versioned!(1.69, clippy::extra_unused_type_parameters);
476prefixed_lint!(clippy::fallible_impl_from);
477prefixed_lint_versioned!(1.49, clippy::field_reassign_with_default);
478prefixed_lint!(clippy::filetype_is_file);
479// clippy::filter_map has been removed: this lint has been replaced by `manual_filter_map`, a more
480// specific (and prefixless) lint.
481prefixed_lint_versioned!(1.52, clippy::filter_map_identity);
482prefixed_lint!(clippy::filter_map_next);
483prefixed_lint!(clippy::filter_next);
484// clippy::find_map has been removed: this lint has been replaced by `manual_find_map`, a more
485// specific (and prefixless) lint.
486prefixed_lint!(clippy::flat_map_identity);
487prefixed_lint_versioned!(1.53, clippy::flat_map_option);
488prefixed_lint!(clippy::float_arithmetic);
489prefixed_lint!(clippy::float_cmp);
490prefixed_lint!(clippy::float_cmp_const);
491prefixed_lint_versioned!(1.48, clippy::float_equality_without_abs);
492prefixed_lint!(clippy::fn_address_comparisons);
493prefixed_lint_versioned!(1.68, clippy::fn_null_check);
494prefixed_lint!(clippy::fn_params_excessive_bools);
495prefixed_lint!(clippy::fn_to_numeric_cast);
496prefixed_lint_versioned!(1.58, clippy::fn_to_numeric_cast_any);
497prefixed_lint!(clippy::fn_to_numeric_cast_with_truncation);
498prefixed_lint!(clippy::for_kv_map);
499// for_loop_over_option is removed since 1.45
500//
501// for_loop_over_result is removed since 1.45
502//
503// clippy::for_loops_over_fallibles has been renamed to (prefixless) `for_loops_over_fallibles`
504prefixed_lint!(clippy::forget_copy);
505prefixed_lint_versioned!(1.62, clippy::forget_non_drop);
506prefixed_lint!(clippy::forget_ref);
507prefixed_lint_versioned!(1.58, clippy::format_in_format_args);
508prefixed_lint_versioned!(1.62, clippy::format_push_string);
509prefixed_lint_versioned!(1.49, clippy::from_iter_instead_of_collect);
510prefixed_lint_versioned!(1.51, clippy::from_over_into);
511prefixed_lint_versioned!(1.67, clippy::from_raw_with_void_ptr);
512prefixed_lint_versioned!(1.52, clippy::from_str_radix_10);
513prefixed_lint!(clippy::future_not_send);
514prefixed_lint_versioned!(1.63, clippy::get_first);
515prefixed_lint!(clippy::get_last_with_len);
516prefixed_lint!(clippy::get_unwrap);
517// identity_conversion is removed since 1.45
518prefixed_lint!(clippy::identity_op);
519prefixed_lint!(clippy::if_let_mutex);
520// clippy::if_let_redundant_pattern_matching is deprecated since at least 1.45
521//
522// clippy::if_let_some_result has been renamed to `clippy::match_result_ok`
523prefixed_lint!(clippy::if_not_else);
524prefixed_lint!(clippy::if_same_then_else);
525prefixed_lint_versioned!(1.53, clippy::if_then_some_else_none);
526prefixed_lint!(clippy::ifs_same_cond);
527prefixed_lint_versioned!(1.69, clippy::impl_trait_in_params);
528prefixed_lint_versioned!(1.52, clippy::implicit_clone);
529prefixed_lint!(clippy::implicit_hasher);
530prefixed_lint!(clippy::implicit_return);
531prefixed_lint_versioned!(1.66, clippy::implicit_saturating_add);
532prefixed_lint!(clippy::implicit_saturating_sub);
533prefixed_lint!(clippy::imprecise_flops);
534prefixed_lint!(clippy::inconsistent_digit_grouping);
535prefixed_lint_versioned!(1.52, clippy::inconsistent_struct_constructor);
536prefixed_lint_versioned!(1.59, clippy::index_refutable_slice);
537prefixed_lint!(clippy::indexing_slicing);
538prefixed_lint!(clippy::ineffective_bit_mask);
539prefixed_lint!(clippy::inefficient_to_string);
540prefixed_lint!(clippy::infallible_destructuring_match);
541prefixed_lint!(clippy::infinite_iter);
542prefixed_lint!(clippy::inherent_to_string);
543prefixed_lint!(clippy::inherent_to_string_shadow_display);
544prefixed_lint_versioned!(1.59, clippy::init_numbered_fields);
545prefixed_lint!(clippy::inline_always);
546prefixed_lint_versioned!(1.49, clippy::inline_asm_x86_att_syntax);
547prefixed_lint_versioned!(1.49, clippy::inline_asm_x86_intel_syntax);
548prefixed_lint!(clippy::inline_fn_without_body);
549prefixed_lint_versioned!(1.51, clippy::inspect_for_each);
550prefixed_lint!(clippy::int_plus_one);
551prefixed_lint!(clippy::integer_arithmetic);
552prefixed_lint!(clippy::integer_division);
553// clippy::into_iter_on_array is deprecated since at least 1.45
554prefixed_lint!(clippy::into_iter_on_ref);
555// clippy::invalid_atomic_ordering has been renamed to (prefixless) `invalid_atomic_ordering`
556prefixed_lint_versioned!(1.53, clippy::invalid_null_ptr_usage);
557// clippy::invalid_ref is deprecated since at least 1.44.1
558prefixed_lint!(clippy::invalid_regex);
559prefixed_lint!(clippy::invalid_upcast_comparisons);
560prefixed_lint_versioned!(1.64, clippy::invalid_utf8_in_unchecked);
561prefixed_lint_versioned!(1.49, clippy::invisible_characters);
562prefixed_lint_versioned!(1.62, clippy::is_digit_ascii_radix);
563prefixed_lint!(clippy::items_after_statements);
564prefixed_lint_versioned!(1.70, clippy::items_after_test_module);
565prefixed_lint!(clippy::iter_cloned_collect);
566prefixed_lint_versioned!(1.52, clippy::iter_count);
567prefixed_lint_versioned!(1.66, clippy::iter_kv_map);
568prefixed_lint!(clippy::iter_next_loop);
569prefixed_lint_versioned!(1.46, clippy::iter_next_slice);
570prefixed_lint_versioned!(1.57, clippy::iter_not_returning_iterator);
571prefixed_lint!(clippy::iter_nth);
572prefixed_lint!(clippy::iter_nth_zero);
573prefixed_lint_versioned!(1.65, clippy::iter_on_empty_collections);
574prefixed_lint_versioned!(1.65, clippy::iter_on_single_items);
575prefixed_lint_versioned!(1.60, clippy::iter_overeager_cloned);
576prefixed_lint!(clippy::iter_skip_next);
577prefixed_lint_versioned!(1.61, clippy::iter_with_drain);
578prefixed_lint!(clippy::iterator_step_by_zero);
579prefixed_lint!(clippy::just_underscores_and_digits);
580prefixed_lint!(clippy::large_const_arrays);
581prefixed_lint!(clippy::large_digit_groups);
582prefixed_lint!(clippy::large_enum_variant);
583prefixed_lint_versioned!(1.68, clippy::large_futures);
584prefixed_lint_versioned!(1.62, clippy::large_include_file);
585prefixed_lint!(clippy::large_stack_arrays);
586prefixed_lint_versioned!(1.49, clippy::large_types_passed_by_value);
587prefixed_lint!(clippy::len_without_is_empty);
588prefixed_lint!(clippy::len_zero);
589prefixed_lint!(clippy::let_and_return);
590prefixed_lint_versioned!(1.67, clippy::let_underscore_future);
591prefixed_lint!(clippy::let_underscore_lock);
592prefixed_lint!(clippy::let_underscore_must_use);
593prefixed_lint_versioned!(1.69, clippy::let_underscore_untyped);
594prefixed_lint!(clippy::let_unit_value);
595prefixed_lint_versioned!(1.69, clippy::let_with_type_underscore);
596prefixed_lint_versioned!(1.70, clippy::lines_filter_map_ok);
597prefixed_lint!(clippy::linkedlist);
598// clippy::logic_bug has been renamed to `clippy::overly_complex_bool_expr`
599prefixed_lint!(clippy::lossy_float_literal);
600prefixed_lint!(clippy::macro_use_imports);
601prefixed_lint!(clippy::main_recursion);
602prefixed_lint_versioned!(1.57, clippy::manual_assert);
603prefixed_lint!(clippy::manual_async_fn);
604prefixed_lint_versioned!(1.60, clippy::manual_bits);
605prefixed_lint_versioned!(1.66, clippy::manual_clamp);
606prefixed_lint_versioned!(1.66, clippy::manual_filter);
607prefixed_lint_versioned!(1.51, clippy::manual_filter_map);
608prefixed_lint_versioned!(1.64, clippy::manual_find);
609prefixed_lint_versioned!(1.51, clippy::manual_find_map);
610prefixed_lint_versioned!(1.52, clippy::manual_flatten);
611prefixed_lint_versioned!(1.65, clippy::manual_instant_elapsed);
612prefixed_lint_versioned!(1.67, clippy::manual_is_ascii_check);
613prefixed_lint_versioned!(1.67, clippy::manual_let_else);
614prefixed_lint_versioned!(1.70, clippy::manual_main_separator_str);
615prefixed_lint_versioned!(1.52, clippy::manual_map);
616prefixed_lint!(clippy::manual_memcpy);
617prefixed_lint!(clippy::manual_non_exhaustive);
618prefixed_lint_versioned!(1.49, clippy::manual_ok_or);
619prefixed_lint_versioned!(1.49, clippy::manual_range_contains);
620prefixed_lint_versioned!(1.64, clippy::manual_rem_euclid);
621prefixed_lint_versioned!(1.64, clippy::manual_retain);
622prefixed_lint!(clippy::manual_saturating_arithmetic);
623prefixed_lint_versioned!(1.70, clippy::manual_slice_size_calculation);
624prefixed_lint_versioned!(1.57, clippy::manual_split_once);
625prefixed_lint_versioned!(1.54, clippy::manual_str_repeat);
626prefixed_lint_versioned!(1.65, clippy::manual_string_new);
627prefixed_lint_versioned!(1.48, clippy::manual_strip);
628prefixed_lint!(clippy::manual_swap);
629prefixed_lint_versioned!(1.49, clippy::manual_unwrap_or);
630prefixed_lint_versioned!(1.70, clippy::manual_while_let_some);
631prefixed_lint!(clippy::many_single_char_names);
632prefixed_lint!(clippy::map_clone);
633prefixed_lint_versioned!(1.49, clippy::map_collect_result_unit);
634prefixed_lint!(clippy::map_entry);
635prefixed_lint_versioned!(1.48, clippy::map_err_ignore);
636prefixed_lint!(clippy::map_flatten);
637prefixed_lint_versioned!(1.47, clippy::map_identity);
638prefixed_lint!(clippy::map_unwrap_or);
639prefixed_lint!(clippy::match_as_ref);
640prefixed_lint!(clippy::match_bool);
641prefixed_lint_versioned!(1.47, clippy::match_like_matches_macro);
642prefixed_lint!(clippy::match_on_vec_items);
643prefixed_lint!(clippy::match_overlapping_arm);
644prefixed_lint!(clippy::match_ref_pats);
645prefixed_lint_versioned!(1.57, clippy::match_result_ok);
646prefixed_lint!(clippy::match_same_arms);
647prefixed_lint!(clippy::match_single_binding);
648prefixed_lint_versioned!(1.58, clippy::match_str_case_mismatch);
649prefixed_lint!(clippy::match_wild_err_arm);
650prefixed_lint!(clippy::match_wildcard_for_single_variants);
651prefixed_lint!(clippy::maybe_infinite_iter);
652// clippy::mem_discriminant_non_enum has been renamed to (prefixless) `enum_intrinsics_non_enums`
653prefixed_lint!(clippy::mem_forget);
654prefixed_lint!(clippy::mem_replace_option_with_none);
655prefixed_lint!(clippy::mem_replace_with_default);
656prefixed_lint!(clippy::mem_replace_with_uninit);
657prefixed_lint!(clippy::min_max);
658// clippy::misaligned_transmute is deprecated since at least 1.44.1
659prefixed_lint!(clippy::mismatched_target_os);
660prefixed_lint_versioned!(1.63, clippy::mismatching_type_param_order);
661prefixed_lint_versioned!(1.67, clippy::misnamed_getters);
662prefixed_lint!(clippy::misrefactored_assign_op);
663prefixed_lint_versioned!(1.69, clippy::missing_assert_message);
664prefixed_lint!(clippy::missing_const_for_fn);
665prefixed_lint!(clippy::missing_docs_in_private_items);
666prefixed_lint_versioned!(1.55, clippy::missing_enforced_import_renames);
667prefixed_lint!(clippy::missing_errors_doc);
668prefixed_lint!(clippy::missing_inline_in_public_items);
669prefixed_lint_versioned!(1.51, clippy::missing_panics_doc);
670prefixed_lint!(clippy::missing_safety_doc);
671prefixed_lint_versioned!(1.61, clippy::missing_spin_loop);
672prefixed_lint_versioned!(1.66, clippy::missing_trait_methods);
673prefixed_lint!(clippy::mistyped_literal_suffixes);
674prefixed_lint!(clippy::mixed_case_hex_literals);
675prefixed_lint!(clippy::mixed_read_write_in_expression);
676prefixed_lint_versioned!(1.57, clippy::mod_module_files);
677prefixed_lint!(clippy::module_inception);
678prefixed_lint!(clippy::module_name_repetitions);
679prefixed_lint!(clippy::modulo_arithmetic);
680prefixed_lint!(clippy::modulo_one);
681prefixed_lint_versioned!(1.65, clippy::multi_assignments);
682prefixed_lint!(clippy::multiple_crate_versions);
683prefixed_lint!(clippy::multiple_inherent_impl);
684prefixed_lint_versioned!(1.69, clippy::multiple_unsafe_ops_per_block);
685prefixed_lint!(clippy::must_use_candidate);
686prefixed_lint!(clippy::must_use_unit);
687prefixed_lint!(clippy::mut_from_ref);
688prefixed_lint!(clippy::mut_mut);
689prefixed_lint_versioned!(1.49, clippy::mut_mutex_lock);
690prefixed_lint!(clippy::mut_range_bound);
691prefixed_lint!(clippy::mutable_key_type);
692prefixed_lint!(clippy::mutex_atomic);
693prefixed_lint!(clippy::mutex_integer);
694prefixed_lint!(clippy::naive_bytecount);
695prefixed_lint_versioned!(1.47, clippy::needless_arbitrary_self_type);
696prefixed_lint_versioned!(1.54, clippy::needless_bitwise_bool);
697prefixed_lint!(clippy::needless_bool);
698prefixed_lint_versioned!(1.69, clippy::needless__bool_assign);
699prefixed_lint!(clippy::needless_borrow);
700prefixed_lint!(clippy::needless_borrowed_reference);
701prefixed_lint!(clippy::needless_collect);
702prefixed_lint!(clippy::needless_continue);
703prefixed_lint!(clippy::needless_doctest_main);
704prefixed_lint_versioned!(1.53, clippy::needless_for_each);
705prefixed_lint_versioned!(1.59, clippy::needless_late_init);
706prefixed_lint!(clippy::needless_lifetimes);
707prefixed_lint_versioned!(1.61, clippy::needless_match);
708prefixed_lint_versioned!(1.57, clippy::needless_option_as_deref);
709prefixed_lint_versioned!(1.62, clippy::needless_option_take);
710prefixed_lint_versioned!(1.63, clippy::needless_parens_on_range_literals);
711prefixed_lint!(clippy::needless_pass_by_value);
712prefixed_lint_versioned!(1.51, clippy::needless_question_mark);
713prefixed_lint!(clippy::needless_range_loop);
714prefixed_lint!(clippy::needless_return);
715prefixed_lint_versioned!(1.59, clippy::needless_splitn);
716prefixed_lint!(clippy::needless_update);
717prefixed_lint!(clippy::neg_cmp_op_on_partial_ord);
718prefixed_lint!(clippy::neg_multiply);
719prefixed_lint_versioned!(1.57, clippy::negative_feature_names);
720prefixed_lint!(clippy::never_loop);
721prefixed_lint!(clippy::new_ret_no_self);
722prefixed_lint!(clippy::new_without_default);
723prefixed_lint!(clippy::no_effect);
724prefixed_lint_versioned!(1.63, clippy::no_effect_replace);
725prefixed_lint_versioned!(1.58, clippy::no_effect_underscore_binding);
726prefixed_lint_versioned!(1.69, clippy::no_mangle_with_rust_abi);
727prefixed_lint!(clippy::non_ascii_literal);
728prefixed_lint_versioned!(1.53, clippy::non_octal_unix_permissions);
729prefixed_lint_versioned!(1.57, clippy::non_send_fields_in_send_ty);
730prefixed_lint!(clippy::nonminimal_bool);
731prefixed_lint!(clippy::nonsensical_open_options);
732prefixed_lint_versioned!(1.55, clippy::nonstandard_macro_braces);
733prefixed_lint!(clippy::not_unsafe_ptr_arg_deref);
734prefixed_lint_versioned!(1.64, clippy::obfuscated_if_else);
735prefixed_lint_versioned!(1.59, clippy::octal_escapes);
736prefixed_lint!(clippy::ok_expect);
737prefixed_lint_versioned!(1.61, clippy::only_used_in_recursion);
738prefixed_lint!(clippy::op_ref);
739// option_and_then_some is renamed to `bind_instead_of_map`
740prefixed_lint!(clippy::option_as_ref_deref);
741prefixed_lint!(clippy::option_env_unwrap);
742// option_expect_used is removed (renamed to `expect_used`)
743prefixed_lint_versioned!(1.53, clippy::option_filter_map);
744prefixed_lint_versioned!(1.47, clippy::option_if_let_else);
745prefixed_lint!(clippy::option_map_or_none);
746prefixed_lint!(clippy::option_map_unit_fn);
747// option_map_unwrap_or is renamed to `map_unwrap_or`
748//
749// option_mapw_unwrap_or_else is removed (since 1.45.0?)
750prefixed_lint!(clippy::option_option);
751// option_unwrap_used is renamed to `unwrap_used`
752prefixed_lint!(clippy::or_fun_call);
753prefixed_lint_versioned!(1.61, clippy::or_then_unwrap);
754prefixed_lint!(clippy::out_of_bounds_indexing);
755prefixed_lint!(clippy::overflow_check_conditional);
756prefixed_lint!(clippy::overly_complex_bool_expr);
757prefixed_lint!(clippy::panic);
758prefixed_lint_versioned!(1.48, clippy::panic_in_result_fn);
759// clippy::panic_params has been renamed to (prefixless)
760prefixed_lint!(clippy::panicking_unwrap);
761prefixed_lint_versioned!(1.66, clippy::partial_pub_fields);
762prefixed_lint!(clippy::partialeq_ne_impl);
763prefixed_lint_versioned!(1.65, clippy::partialeq_to_none);
764prefixed_lint!(clippy::path_buf_push_overwrite);
765
766prefixed_lint_versioned!(1.47, clippy::pattern_type_mismatch);
767prefixed_lint_versioned!(1.68, clippy::permissions_set_readonly_false);
768prefixed_lint!(clippy::possible_missing_comma);
769prefixed_lint!(clippy::precedence);
770prefixed_lint_versioned!(1.61, clippy::print_in_format_impl);
771prefixed_lint!(clippy::print_literal);
772prefixed_lint_versioned!(1.50, clippy::print_stderr);
773prefixed_lint!(clippy::print_stdout);
774prefixed_lint!(clippy::print_with_newline);
775prefixed_lint!(clippy::println_empty_string);
776prefixed_lint!(clippy::ptr_arg);
777prefixed_lint_versioned!(1.51, clippy::ptr_as_ptr);
778prefixed_lint_versioned!(1.49, clippy::ptr_eq);
779prefixed_lint!(clippy::ptr_offset_with_cast);
780// clippy::pub_enum_variant_names has been removed. set the `avoid-breaking-exported-api` config
781// option to `false` to enable the `enum_variant_names` lint for public items. (Probably a
782// prefixless lint; `allow_prefixed` and `allow` crates don't support attribute parameters.)
783prefixed_lint_versioned!(1.62, clippy::pub_use);
784prefixed_lint!(clippy::question_mark);
785prefixed_lint_versioned!(1.69, clippy::question_mark_used);
786prefixed_lint!(clippy::range_minus_one);
787prefixed_lint!(clippy::range_plus_one);
788// clippy::range_step_by_zero is deprecated since at least 1.44.1
789prefixed_lint!(clippy::range_zip_with_len);
790prefixed_lint_versioned!(1.48, clippy::rc_buffer);
791prefixed_lint_versioned!(1.63, clippy::rc_clone_in_vec_init);
792prefixed_lint_versioned!(1.55, clippy::rc_mutex);
793prefixed_lint_versioned!(1.63, clippy::read_zero_byte_vec);
794prefixed_lint_versioned!(1.48, clippy::recursive_format_impl);
795prefixed_lint!(clippy::redundant_allocation);
796prefixed_lint_versioned!(1.69, clippy::redundant_async_block);
797prefixed_lint!(clippy::redundant_clone);
798prefixed_lint!(clippy::redundant_closure);
799prefixed_lint!(clippy::redundant_closure_call);
800prefixed_lint!(clippy::redundant_closure_for_method_calls);
801prefixed_lint_versioned!(1.50, clippy::redundant_else);
802prefixed_lint_versioned!(1.57, clippy::redundant_feature_names);
803prefixed_lint!(clippy::redundant_field_names);
804prefixed_lint!(clippy::redundant_pattern);
805prefixed_lint!(clippy::redundant_pattern_matching);
806prefixed_lint!(clippy::redundant_pub_crate);
807prefixed_lint_versioned!(1.51, clippy::redundant_slicing);
808prefixed_lint!(clippy::redundant_static_lifetimes);
809prefixed_lint_versioned!(1.54, clippy::ref_binding_to_reference);
810// clippy::ref_in_deref has been renamed to clippy::needless_borrow
811prefixed_lint_versioned!(1.49, clippy::ref_option_ref);
812// clippy::regex_macro has been removed
813prefixed_lint_versioned!(1.47, clippy::repeat_once);
814// clippy::replace_consts is deprecated since 1.45
815prefixed_lint!(clippy::rest_pat_in_fully_bound_structs);
816// result_expect_used has been renamed to `expect_used`
817prefixed_lint_versioned!(1.65, clippy::result_large_err);
818prefixed_lint!(clippy::result_map_or_into_option);
819prefixed_lint!(clippy::result_map_unit_fn);
820// result_map_unwrap_or_else is renamed to `map_unwrap_or`
821prefixed_lint_versioned!(1.49, clippy::result_unit_err);
822// result_unwrap_used is renamed to `unwrap_used`
823prefixed_lint_versioned!(1.59, clippy::return_self_not_must_use);
824// reverse_range_loop is removed (since 1.45?)
825prefixed_lint!(clippy::reversed_empty_ranges);
826prefixed_lint!(clippy::same_functions_in_if_condition);
827prefixed_lint_versioned!(1.47, clippy::same_item_push);
828prefixed_lint_versioned!(1.57, clippy::same_name_method);
829prefixed_lint!(clippy::search_is_some);
830prefixed_lint_versioned!(1.67, clippy::seek_from_current);
831prefixed_lint_versioned!(1.67, clippy::seek_to_start_instead_of_rewind);
832prefixed_lint_versioned!(1.48, clippy::self_assignment);
833prefixed_lint_versioned!(1.55, clippy::self_named_constructors);
834prefixed_lint_versioned!(1.57, clippy::self_named_module_files);
835prefixed_lint_versioned!(1.52, clippy::semicolon_if_nothing_returned);
836prefixed_lint_versioned!(1.68, clippy::semicolon_inside_block);
837prefixed_lint_versioned!(1.68, clippy::semicolon_outside_block);
838prefixed_lint_versioned!(1.58, clippy::separated_literal_suffix);
839prefixed_lint!(clippy::serde_api_misuse);
840prefixed_lint!(clippy::shadow_reuse);
841prefixed_lint!(clippy::shadow_same);
842prefixed_lint!(clippy::shadow_unrelated);
843prefixed_lint!(clippy::short_circuit_statement);
844// clippy::should_assert_eq is deprecated since at least 1.44.1
845prefixed_lint!(clippy::should_implement_trait);
846prefixed_lint_versioned!(1.60, clippy::significant_drop_in_scrutinee);
847prefixed_lint_versioned!(1.69, clippy::significant_drop_tightening);
848prefixed_lint!(clippy::similar_names);
849prefixed_lint_versioned!(1.49, clippy::single_char_add_str);
850prefixed_lint_versioned!(1.60, clippy::single_char_lifetime_names);
851prefixed_lint!(clippy::single_char_pattern);
852prefixed_lint!(clippy::single_component_path_imports);
853prefixed_lint_versioned!(1.49, clippy::single_element_loop);
854prefixed_lint!(clippy::single_match);
855prefixed_lint!(clippy::single_match_else);
856prefixed_lint_versioned!(1.50, clippy::size_of_in_element_count);
857prefixed_lint_versioned!(1.68, clippy::size_of_ref);
858prefixed_lint!(clippy::skip_while_next);
859prefixed_lint!(clippy::slow_vector_initialization);
860prefixed_lint_versioned!(1.47, clippy::stable_sort_primitive);
861prefixed_lint_versioned!(1.64, clippy::std_instead_of_alloc);
862prefixed_lint_versioned!(1.64, clippy::std_instead_of_core);
863prefixed_lint!(clippy::str_to_string);
864prefixed_lint!(clippy::string_add);
865prefixed_lint!(clippy::string_add_assign);
866prefixed_lint!(clippy::string_extend_chars);
867prefixed_lint_versioned!(1.50, clippy::string_from_utf8_as_bytes);
868prefixed_lint!(clippy::string_lit_as_bytes);
869prefixed_lint_versioned!(1.58, clippy::string_slice);
870prefixed_lint!(clippy::string_to_string);
871prefixed_lint_versioned!(1.55, clippy::strlen_on_c_strings);
872prefixed_lint!(clippy::struct_excessive_bools);
873prefixed_lint!(clippy::suboptimal_flops);
874prefixed_lint!(clippy::suspicious_arithmetic_impl);
875prefixed_lint!(clippy::suspicious_assignment_formatting);
876prefixed_lint_versioned!(1.69, clippy::suspicious_command_arg_space);
877prefixed_lint_versioned!(1.70, clippy::suspicious_doc_comments);
878prefixed_lint!(clippy::suspicious_else_formatting);
879prefixed_lint!(clippy::suspicious_map);
880prefixed_lint!(clippy::suspicious_op_assign_impl);
881prefixed_lint_versioned!(1.50, clippy::suspicious_operation_groupings);
882prefixed_lint_versioned!(1.54, clippy::suspicious_splitn);
883prefixed_lint_versioned!(1.65, clippy::suspicious_to_owned);
884prefixed_lint!(clippy::suspicious_unary_op_formatting);
885prefixed_lint_versioned!(1.67, clippy::suspicious_xor_used_as_pow);
886prefixed_lint_versioned!(1.63, clippy::swap_ptr_to_ref);
887prefixed_lint!(clippy::tabs_in_doc_comments);
888prefixed_lint!(clippy::temporary_assignment);
889// clippy::temporary_cstring_as_ptr is renamed to (prefixless) temporary_cstring_as_ptr
890prefixed_lint_versioned!(1.70, clippy::tests_outside_test_module);
891prefixed_lint!(clippy::to_digit_is_some);
892prefixed_lint_versioned!(1.58, clippy::to_string_in_format_args);
893prefixed_lint!(clippy::todo);
894prefixed_lint!(clippy::too_many_arguments);
895prefixed_lint!(clippy::too_many_lines);
896prefixed_lint!(clippy::toplevel_ref_arg);
897prefixed_lint_versioned!(1.58, clippy::trailing_empty_array);
898prefixed_lint_versioned!(1.47, clippy::trait_duplication_in_bounds);
899prefixed_lint!(clippy::transmute_bytes_to_str);
900prefixed_lint!(clippy::transmute_float_to_int);
901prefixed_lint!(clippy::transmute_int_to_bool);
902prefixed_lint!(clippy::transmute_int_to_char);
903prefixed_lint!(clippy::transmute_int_to_float);
904prefixed_lint_versioned!(1.69, clippy::transmute_int_to_non_zero);
905prefixed_lint_versioned!(1.68, clippy::transmute_null_to_fn);
906prefixed_lint_versioned!(1.58, clippy::transmute_num_to_bytes);
907prefixed_lint!(clippy::transmute_ptr_to_ptr);
908prefixed_lint!(clippy::transmute_ptr_to_ref);
909prefixed_lint_versioned!(1.60, clippy::transmute_undefined_repr);
910prefixed_lint_versioned!(1.47, clippy::transmutes_expressible_as_ptr_casts);
911prefixed_lint!(clippy::transmuting_null);
912prefixed_lint_versioned!(1.62, clippy::trim_split_whitespace);
913prefixed_lint!(clippy::trivial_regex);
914prefixed_lint!(clippy::trivially_copy_pass_by_ref);
915prefixed_lint!(clippy::try_err);
916prefixed_lint!(clippy::type_complexity);
917prefixed_lint!(clippy::type_repetition_in_bounds);
918prefixed_lint_versioned!(1.67, clippy::unchecked_duration_subtraction);
919prefixed_lint_versioned!(1.58, clippy::undocumented_unsafe_blocks);
920prefixed_lint_versioned!(1.49, clippy::undropped_manually_drops);
921prefixed_lint!(clippy::unicode_not_nfc);
922prefixed_lint!(clippy::unimplemented);
923prefixed_lint!(clippy::uninit_assumed_init);
924prefixed_lint_versioned!(1.58, clippy::uninit_vec);
925prefixed_lint_versioned!(1.66, clippy::uninlined_format_args);
926prefixed_lint!(clippy::unit_arg);
927prefixed_lint!(clippy::unit_cmp);
928prefixed_lint_versioned!(1.58, clippy::unit_hash);
929prefixed_lint_versioned!(1.47, clippy::unit_return_expecting_ord);
930prefixed_lint_versioned!(1.70, clippy::unnecessary_box_returns);
931// clippy::unknown_clippy_lints is renamed to (prefixless rustc lint) unknown_lints
932prefixed_lint!(clippy::unnecessary_cast);
933prefixed_lint!(clippy::unnecessary_filter_map);
934prefixed_lint_versioned!(1.61, clippy::unnecessary_find_map);
935prefixed_lint!(clippy::unnecessary_fold);
936prefixed_lint_versioned!(1.61, clippy::unnecessary_join);
937prefixed_lint_versioned!(1.48, clippy::unnecessary_lazy_evaluations);
938prefixed_lint!(clippy::unnecessary_mut_passed);
939prefixed_lint!(clippy::unnecessary_operation);
940prefixed_lint_versioned!(1.62, clippy::unnecessary_owned_empty_stringss);
941prefixed_lint_versioned!(1.67, clippy::unnecessary_safety_comment);
942prefixed_lint_versioned!(1.67, clippy::unnecessary_safety_doc);
943prefixed_lint_versioned!(1.53, clippy::unnecessary_self_imports);
944prefixed_lint_versioned!(1.46, clippy::unnecessary_sort_by);
945prefixed_lint_versioned!(1.70, clippy::unnecessary_struct_initialization);
946prefixed_lint_versioned!(1.59, clippy::unnecessary_to_owned);
947prefixed_lint!(clippy::unnecessary_unwrap);
948prefixed_lint_versioned!(1.50, clippy::unnecessary_wraps);
949prefixed_lint!(clippy::unneeded_field_pattern);
950prefixed_lint!(clippy::unneeded_wildcard_pattern);
951prefixed_lint_versioned!(1.46, clippy::unnested_or_patterns);
952prefixed_lint!(clippy::unreachable);
953prefixed_lint!(clippy::unreadable_literal);
954prefixed_lint!(clippy::unsafe_derive_deserialize);
955prefixed_lint!(clippy::unsafe_removed_from_name);
956// clippy::unsafe_vector_initialization is deprecated since at least 1.44.1
957prefixed_lint!(clippy::unseparated_literal_suffix);
958prefixed_lint!(clippy::unsound_collection_transmute);
959// clippy::unstable_as_mut_slice is deprecated since at least 1.44.1
960//
961// clippy::unstable_as_slice is deprecated since at least 1.44.1
962prefixed_lint_versioned!(1.54, clippy::unused_async);
963// clippy::unused_collect is deprecated since at least 1.44.1
964prefixed_lint_versioned!(1.66, clippy::unused_format_specs);
965prefixed_lint!(clippy::unused_io_amount);
966// clippy::unused_label is deprecated since at least 1.44.1
967prefixed_lint_versioned!(1.65, clippy::unused_peekable);
968prefixed_lint_versioned!(1.63, clippy::unused_rounding);
969prefixed_lint!(clippy::unused_self);
970prefixed_lint!(clippy::unused_unit);
971prefixed_lint_versioned!(1.49, clippy::unusual_byte_groupings);
972prefixed_lint_versioned!(1.48, clippy::unwrap_in_result);
973prefixed_lint_versioned!(1.56, clippy::unwrap_or_else_default);
974prefixed_lint!(clippy::unwrap_used);
975prefixed_lint_versioned!(1.51, clippy::upper_case_acronyms);
976prefixed_lint!(clippy::use_debug);
977prefixed_lint!(clippy::use_self);
978prefixed_lint!(clippy::used_underscore_binding);
979prefixed_lint!(clippy::useless_asref);
980prefixed_lint!(clippy::useless_attribute);
981prefixed_lint!(clippy::useless_conversion);
982prefixed_lint!(clippy::useless_format);
983prefixed_lint!(clippy::useless_let_if_seq);
984prefixed_lint!(clippy::useless_transmute);
985prefixed_lint!(clippy::useless_vec);
986prefixed_lint!(clippy::vec_box);
987prefixed_lint_versioned!(1.51, clippy::vec_init_then_push);
988prefixed_lint_versioned!(1.46, clippy::vec_resize_to_zero);
989prefixed_lint!(clippy::verbose_bit_mask);
990prefixed_lint!(clippy::verbose_file_reads);
991prefixed_lint!(clippy::vtable_address_comparisons);
992prefixed_lint!(clippy::while_immutable_condition);
993prefixed_lint!(clippy::while_let_loop);
994prefixed_lint!(clippy::while_let_on_iterator);
995prefixed_lint!(clippy::wildcard_dependencies);
996prefixed_lint!(clippy::wildcard_enum_match_arm);
997prefixed_lint!(clippy::wildcard_imports);
998prefixed_lint!(clippy::wildcard_in_or_patterns);
999prefixed_lint!(clippy::write_literal);
1000prefixed_lint!(clippy::write_with_newline);
1001prefixed_lint!(clippy::writeln_empty_string);
1002// clippy::wrong_pub_self_convention has been removed: set the `avoid-breaking-exported-api` config
1003// option to `false` to enable the `wrong_self_convention` lint for public items. (Probably a
1004// prefixless lint; `allow_prefixed` and `allow` crates don't support attribute parameters.)
1005prefixed_lint!(clippy::wrong_self_convention);
1006prefixed_lint!(clippy::wrong_transmute);
1007prefixed_lint!(clippy::zero_divided_by_zero);
1008prefixed_lint!(clippy::zero_prefixed_literal);
1009prefixed_lint!(clippy::zero_ptr);
1010prefixed_lint_versioned!(1.50, clippy::zero_sized_map_values);
1011// clippy::zero_width_space renamed in 1.49 to clippy::invisible_characters
1012prefixed_lint!(clippy::zst_offset);
1013
1014// TODO compile test that the following fails - BUT ONLY with `cargo clippy`
1015// prefixed_lint!(clippy::WRONG_LINT);