From 5745868e5fd77d88d68cae95526dc266a1ae019b Mon Sep 17 00:00:00 2001 From: Jason Newcomb Date: Wed, 23 Apr 2025 20:04:35 -0400 Subject: [PATCH 1/3] Prepare `update_lints` to work with multiple crates. --- Cargo.toml | 1 + clippy_dev/src/update_lints.rs | 306 +++++++++++------- clippy_dev/src/utils.rs | 15 - clippy_lints/Cargo.toml | 1 + clippy_lints/src/absolute_paths.rs | 1 + clippy_lints/src/almost_complete_range.rs | 1 + clippy_lints/src/approx_const.rs | 1 + .../src/arbitrary_source_item_ordering.rs | 1 + clippy_lints/src/arc_with_non_send_sync.rs | 1 + clippy_lints/src/as_conversions.rs | 1 + clippy_lints/src/asm_syntax.rs | 1 + clippy_lints/src/assertions_on_constants.rs | 1 + .../src/assertions_on_result_states.rs | 1 + clippy_lints/src/assigning_clones.rs | 1 + clippy_lints/src/async_yields_async.rs | 1 + clippy_lints/src/attrs/mod.rs | 1 + clippy_lints/src/await_holding_invalid.rs | 1 + clippy_lints/src/blocks_in_conditions.rs | 1 + clippy_lints/src/bool_assert_comparison.rs | 1 + clippy_lints/src/bool_to_int_with_if.rs | 1 + clippy_lints/src/booleans.rs | 1 + clippy_lints/src/borrow_deref_ref.rs | 1 + clippy_lints/src/box_default.rs | 1 + clippy_lints/src/byte_char_slices.rs | 1 + clippy_lints/src/cargo/mod.rs | 1 + clippy_lints/src/casts/mod.rs | 1 + clippy_lints/src/cfg_not_test.rs | 1 + clippy_lints/src/checked_conversions.rs | 1 + clippy_lints/src/cloned_ref_to_slice_refs.rs | 1 + clippy_lints/src/cognitive_complexity.rs | 1 + clippy_lints/src/collapsible_if.rs | 1 + clippy_lints/src/collection_is_never_read.rs | 1 + clippy_lints/src/comparison_chain.rs | 1 + clippy_lints/src/copies.rs | 1 + clippy_lints/src/copy_iterator.rs | 1 + clippy_lints/src/crate_in_macro_def.rs | 1 + clippy_lints/src/create_dir.rs | 1 + clippy_lints/src/dbg_macro.rs | 1 + clippy_lints/src/declare_clippy_lint.rs | 168 ---------- clippy_lints/src/declared_lints.rs | 2 +- clippy_lints/src/default.rs | 1 + .../src/default_constructed_unit_structs.rs | 1 + .../src/default_instead_of_iter_empty.rs | 1 + clippy_lints/src/default_numeric_fallback.rs | 1 + .../src/default_union_representation.rs | 1 + clippy_lints/src/dereference.rs | 1 + clippy_lints/src/derivable_impls.rs | 1 + clippy_lints/src/derive.rs | 1 + clippy_lints/src/disallowed_macros.rs | 1 + clippy_lints/src/disallowed_methods.rs | 1 + clippy_lints/src/disallowed_names.rs | 1 + clippy_lints/src/disallowed_script_idents.rs | 1 + clippy_lints/src/disallowed_types.rs | 1 + clippy_lints/src/doc/mod.rs | 1 + clippy_lints/src/double_parens.rs | 1 + clippy_lints/src/drop_forget_ref.rs | 1 + clippy_lints/src/duplicate_mod.rs | 1 + clippy_lints/src/else_if_without_else.rs | 1 + clippy_lints/src/empty_drop.rs | 1 + clippy_lints/src/empty_enum.rs | 1 + clippy_lints/src/empty_line_after.rs | 1 + clippy_lints/src/empty_with_brackets.rs | 1 + clippy_lints/src/endian_bytes.rs | 1 + clippy_lints/src/entry.rs | 1 + clippy_lints/src/enum_clike.rs | 1 + clippy_lints/src/equatable_if_let.rs | 1 + clippy_lints/src/error_impl_error.rs | 1 + clippy_lints/src/escape.rs | 1 + clippy_lints/src/eta_reduction.rs | 1 + clippy_lints/src/excessive_bools.rs | 1 + clippy_lints/src/excessive_nesting.rs | 1 + clippy_lints/src/exhaustive_items.rs | 1 + clippy_lints/src/exit.rs | 1 + clippy_lints/src/explicit_write.rs | 1 + .../src/extra_unused_type_parameters.rs | 1 + clippy_lints/src/fallible_impl_from.rs | 1 + .../src/field_scoped_visibility_modifiers.rs | 1 + clippy_lints/src/float_literal.rs | 1 + clippy_lints/src/floating_point_arithmetic.rs | 4 +- clippy_lints/src/format.rs | 1 + clippy_lints/src/format_args.rs | 1 + clippy_lints/src/format_impl.rs | 1 + clippy_lints/src/format_push_string.rs | 1 + clippy_lints/src/formatting.rs | 1 + clippy_lints/src/four_forward_slashes.rs | 1 + clippy_lints/src/from_over_into.rs | 1 + clippy_lints/src/from_raw_with_void_ptr.rs | 1 + clippy_lints/src/from_str_radix_10.rs | 1 + clippy_lints/src/functions/mod.rs | 1 + clippy_lints/src/future_not_send.rs | 1 + clippy_lints/src/if_let_mutex.rs | 1 + clippy_lints/src/if_not_else.rs | 1 + clippy_lints/src/if_then_some_else_none.rs | 1 + clippy_lints/src/ignored_unit_patterns.rs | 1 + .../impl_hash_with_borrow_str_and_bytes.rs | 1 + clippy_lints/src/implicit_hasher.rs | 1 + clippy_lints/src/implicit_return.rs | 1 + clippy_lints/src/implicit_saturating_add.rs | 1 + clippy_lints/src/implicit_saturating_sub.rs | 1 + clippy_lints/src/implied_bounds_in_impls.rs | 1 + clippy_lints/src/incompatible_msrv.rs | 1 + .../src/inconsistent_struct_constructor.rs | 1 + clippy_lints/src/index_refutable_slice.rs | 1 + clippy_lints/src/indexing_slicing.rs | 1 + clippy_lints/src/ineffective_open_options.rs | 1 + clippy_lints/src/infinite_iter.rs | 1 + clippy_lints/src/inherent_impl.rs | 1 + clippy_lints/src/inherent_to_string.rs | 1 + clippy_lints/src/init_numbered_fields.rs | 1 + clippy_lints/src/inline_fn_without_body.rs | 1 + clippy_lints/src/instant_subtraction.rs | 1 + clippy_lints/src/int_plus_one.rs | 1 + .../src/integer_division_remainder_used.rs | 1 + .../src/invalid_upcast_comparisons.rs | 1 + clippy_lints/src/item_name_repetitions.rs | 1 + clippy_lints/src/items_after_statements.rs | 1 + clippy_lints/src/items_after_test_module.rs | 1 + .../src/iter_not_returning_iterator.rs | 1 + clippy_lints/src/iter_over_hash_type.rs | 1 + clippy_lints/src/iter_without_into_iter.rs | 1 + clippy_lints/src/large_const_arrays.rs | 1 + clippy_lints/src/large_enum_variant.rs | 1 + clippy_lints/src/large_futures.rs | 1 + clippy_lints/src/large_include_file.rs | 1 + clippy_lints/src/large_stack_arrays.rs | 1 + clippy_lints/src/large_stack_frames.rs | 1 + clippy_lints/src/legacy_numeric_constants.rs | 1 + clippy_lints/src/len_zero.rs | 1 + clippy_lints/src/let_if_seq.rs | 1 + clippy_lints/src/let_underscore.rs | 1 + clippy_lints/src/let_with_type_underscore.rs | 1 + clippy_lints/src/lib.rs | 126 +------- clippy_lints/src/lifetimes.rs | 1 + clippy_lints/src/lines_filter_map_ok.rs | 1 + clippy_lints/src/literal_representation.rs | 1 + .../literal_string_with_formatting_args.rs | 1 + clippy_lints/src/loops/mod.rs | 1 + clippy_lints/src/macro_metavars_in_unsafe.rs | 1 + clippy_lints/src/macro_use.rs | 1 + clippy_lints/src/main_recursion.rs | 1 + clippy_lints/src/manual_abs_diff.rs | 1 + clippy_lints/src/manual_assert.rs | 1 + clippy_lints/src/manual_async_fn.rs | 1 + clippy_lints/src/manual_bits.rs | 1 + clippy_lints/src/manual_clamp.rs | 1 + clippy_lints/src/manual_div_ceil.rs | 1 + clippy_lints/src/manual_float_methods.rs | 1 + clippy_lints/src/manual_hash_one.rs | 1 + clippy_lints/src/manual_ignore_case_cmp.rs | 1 + clippy_lints/src/manual_is_ascii_check.rs | 1 + clippy_lints/src/manual_is_power_of_two.rs | 1 + clippy_lints/src/manual_let_else.rs | 2 +- clippy_lints/src/manual_main_separator_str.rs | 1 + clippy_lints/src/manual_non_exhaustive.rs | 1 + clippy_lints/src/manual_option_as_slice.rs | 1 + clippy_lints/src/manual_range_patterns.rs | 1 + clippy_lints/src/manual_rem_euclid.rs | 1 + clippy_lints/src/manual_retain.rs | 1 + clippy_lints/src/manual_rotate.rs | 1 + .../src/manual_slice_size_calculation.rs | 1 + clippy_lints/src/manual_string_new.rs | 1 + clippy_lints/src/manual_strip.rs | 1 + clippy_lints/src/map_unit_fn.rs | 1 + clippy_lints/src/match_result_ok.rs | 1 + clippy_lints/src/matches/mod.rs | 1 + clippy_lints/src/mem_replace.rs | 1 + clippy_lints/src/methods/mod.rs | 1 + clippy_lints/src/min_ident_chars.rs | 1 + clippy_lints/src/minmax.rs | 1 + clippy_lints/src/misc.rs | 1 + clippy_lints/src/misc_early/mod.rs | 1 + .../src/mismatching_type_param_order.rs | 1 + clippy_lints/src/missing_assert_message.rs | 1 + .../src/missing_asserts_for_indexing.rs | 1 + clippy_lints/src/missing_const_for_fn.rs | 1 + .../src/missing_const_for_thread_local.rs | 1 + clippy_lints/src/missing_doc.rs | 1 + .../src/missing_enforced_import_rename.rs | 1 + clippy_lints/src/missing_fields_in_debug.rs | 1 + clippy_lints/src/missing_inline.rs | 1 + clippy_lints/src/missing_trait_methods.rs | 1 + .../src/mixed_read_write_in_expression.rs | 1 + clippy_lints/src/module_style.rs | 1 + clippy_lints/src/multi_assignments.rs | 1 + clippy_lints/src/multiple_bound_locations.rs | 1 + .../src/multiple_unsafe_ops_per_block.rs | 1 + clippy_lints/src/mut_key.rs | 1 + clippy_lints/src/mut_mut.rs | 1 + clippy_lints/src/mut_reference.rs | 1 + clippy_lints/src/mutable_debug_assertion.rs | 1 + clippy_lints/src/mutex_atomic.rs | 1 + .../src/needless_arbitrary_self_type.rs | 1 + clippy_lints/src/needless_bool.rs | 1 + clippy_lints/src/needless_borrowed_ref.rs | 1 + .../src/needless_borrows_for_generic_args.rs | 1 + clippy_lints/src/needless_continue.rs | 1 + clippy_lints/src/needless_else.rs | 1 + clippy_lints/src/needless_for_each.rs | 1 + clippy_lints/src/needless_if.rs | 1 + clippy_lints/src/needless_late_init.rs | 1 + clippy_lints/src/needless_maybe_sized.rs | 1 + .../src/needless_parens_on_range_literals.rs | 2 +- clippy_lints/src/needless_pass_by_ref_mut.rs | 1 + clippy_lints/src/needless_pass_by_value.rs | 1 + clippy_lints/src/needless_question_mark.rs | 1 + clippy_lints/src/needless_update.rs | 1 + clippy_lints/src/neg_cmp_op_on_partial_ord.rs | 1 + clippy_lints/src/neg_multiply.rs | 1 + clippy_lints/src/new_without_default.rs | 1 + clippy_lints/src/no_effect.rs | 1 + clippy_lints/src/no_mangle_with_rust_abi.rs | 1 + clippy_lints/src/non_canonical_impls.rs | 1 + clippy_lints/src/non_copy_const.rs | 1 + clippy_lints/src/non_expressive_names.rs | 1 + .../src/non_octal_unix_permissions.rs | 1 + .../src/non_send_fields_in_send_ty.rs | 1 + clippy_lints/src/non_std_lazy_statics.rs | 1 + clippy_lints/src/non_zero_suggestions.rs | 1 + clippy_lints/src/nonstandard_macro_braces.rs | 1 + clippy_lints/src/octal_escapes.rs | 1 + clippy_lints/src/only_used_in_recursion.rs | 1 + clippy_lints/src/operators/mod.rs | 1 + clippy_lints/src/option_env_unwrap.rs | 1 + clippy_lints/src/option_if_let_else.rs | 1 + clippy_lints/src/panic_in_result_fn.rs | 1 + clippy_lints/src/panic_unimplemented.rs | 1 + clippy_lints/src/panicking_overflow_checks.rs | 1 + clippy_lints/src/partial_pub_fields.rs | 1 + clippy_lints/src/partialeq_ne_impl.rs | 1 + clippy_lints/src/partialeq_to_none.rs | 1 + clippy_lints/src/pass_by_ref_or_value.rs | 1 + clippy_lints/src/pathbuf_init_then_push.rs | 1 + clippy_lints/src/pattern_type_mismatch.rs | 1 + .../src/permissions_set_readonly_false.rs | 1 + .../src/pointers_in_nomem_asm_block.rs | 1 + clippy_lints/src/precedence.rs | 1 + clippy_lints/src/ptr.rs | 1 + clippy_lints/src/ptr_offset_with_cast.rs | 1 + clippy_lints/src/pub_underscore_fields.rs | 1 + clippy_lints/src/pub_use.rs | 1 + clippy_lints/src/question_mark.rs | 1 + clippy_lints/src/question_mark_used.rs | 2 +- clippy_lints/src/ranges.rs | 1 + clippy_lints/src/raw_strings.rs | 1 + clippy_lints/src/rc_clone_in_vec_init.rs | 1 + clippy_lints/src/read_zero_byte_vec.rs | 4 +- clippy_lints/src/redundant_async_block.rs | 1 + clippy_lints/src/redundant_clone.rs | 1 + clippy_lints/src/redundant_closure_call.rs | 1 + clippy_lints/src/redundant_else.rs | 1 + clippy_lints/src/redundant_field_names.rs | 1 + clippy_lints/src/redundant_locals.rs | 1 + clippy_lints/src/redundant_pub_crate.rs | 1 + clippy_lints/src/redundant_slicing.rs | 1 + .../src/redundant_static_lifetimes.rs | 1 + clippy_lints/src/redundant_test_prefix.rs | 1 + .../src/redundant_type_annotations.rs | 1 + clippy_lints/src/ref_option_ref.rs | 1 + clippy_lints/src/ref_patterns.rs | 1 + clippy_lints/src/reference.rs | 1 + clippy_lints/src/regex.rs | 1 + clippy_lints/src/repeat_vec_with_capacity.rs | 1 + .../src/reserve_after_initialization.rs | 1 + clippy_lints/src/return_self_not_must_use.rs | 1 + clippy_lints/src/returns.rs | 1 + clippy_lints/src/same_name_method.rs | 1 + clippy_lints/src/self_named_constructors.rs | 1 + clippy_lints/src/semicolon_block.rs | 1 + .../src/semicolon_if_nothing_returned.rs | 1 + clippy_lints/src/serde_api.rs | 1 + clippy_lints/src/set_contains_or_insert.rs | 1 + clippy_lints/src/shadow.rs | 1 + .../src/significant_drop_tightening.rs | 1 + clippy_lints/src/single_call_fn.rs | 1 + .../src/single_char_lifetime_names.rs | 1 + .../src/single_component_path_imports.rs | 1 + clippy_lints/src/single_option_map.rs | 1 + clippy_lints/src/single_range_in_vec_init.rs | 1 + clippy_lints/src/size_of_in_element_count.rs | 1 + clippy_lints/src/size_of_ref.rs | 1 + .../src/slow_vector_initialization.rs | 1 + clippy_lints/src/std_instead_of_core.rs | 1 + clippy_lints/src/string_patterns.rs | 1 + clippy_lints/src/strings.rs | 1 + clippy_lints/src/strlen_on_c_strings.rs | 1 + .../src/suspicious_operation_groupings.rs | 1 + clippy_lints/src/suspicious_trait_impl.rs | 1 + .../src/suspicious_xor_used_as_pow.rs | 1 + clippy_lints/src/swap.rs | 1 + clippy_lints/src/swap_ptr_to_ref.rs | 1 + clippy_lints/src/tabs_in_doc_comments.rs | 1 + clippy_lints/src/temporary_assignment.rs | 1 + clippy_lints/src/tests_outside_test_module.rs | 1 + clippy_lints/src/to_digit_is_some.rs | 1 + clippy_lints/src/to_string_trait_impl.rs | 1 + clippy_lints/src/trailing_empty_array.rs | 1 + clippy_lints/src/trait_bounds.rs | 1 + clippy_lints/src/transmute/mod.rs | 1 + clippy_lints/src/tuple_array_conversions.rs | 1 + clippy_lints/src/types/mod.rs | 1 + clippy_lints/src/unconditional_recursion.rs | 1 + .../src/undocumented_unsafe_blocks.rs | 1 + clippy_lints/src/unicode.rs | 1 + clippy_lints/src/uninhabited_references.rs | 1 + clippy_lints/src/uninit_vec.rs | 1 + clippy_lints/src/unit_return_expecting_ord.rs | 1 + clippy_lints/src/unit_types/mod.rs | 1 + clippy_lints/src/unnecessary_box_returns.rs | 1 + clippy_lints/src/unnecessary_literal_bound.rs | 1 + .../src/unnecessary_map_on_constructor.rs | 1 + .../src/unnecessary_owned_empty_strings.rs | 1 + clippy_lints/src/unnecessary_self_imports.rs | 1 + clippy_lints/src/unnecessary_semicolon.rs | 1 + .../src/unnecessary_struct_initialization.rs | 1 + clippy_lints/src/unnecessary_wraps.rs | 1 + clippy_lints/src/unneeded_struct_pattern.rs | 1 + clippy_lints/src/unnested_or_patterns.rs | 1 + clippy_lints/src/unsafe_removed_from_name.rs | 1 + clippy_lints/src/unused_async.rs | 1 + clippy_lints/src/unused_io_amount.rs | 1 + clippy_lints/src/unused_peekable.rs | 1 + clippy_lints/src/unused_result_ok.rs | 1 + clippy_lints/src/unused_rounding.rs | 1 + clippy_lints/src/unused_self.rs | 1 + clippy_lints/src/unused_trait_names.rs | 1 + clippy_lints/src/unused_unit.rs | 1 + clippy_lints/src/unwrap.rs | 1 + clippy_lints/src/unwrap_in_result.rs | 1 + clippy_lints/src/upper_case_acronyms.rs | 1 + clippy_lints/src/use_self.rs | 1 + clippy_lints/src/useless_conversion.rs | 1 + clippy_lints/src/vec.rs | 1 + clippy_lints/src/vec_init_then_push.rs | 1 + clippy_lints/src/visibility.rs | 1 + clippy_lints/src/wildcard_imports.rs | 1 + clippy_lints/src/write.rs | 1 + clippy_lints/src/zero_div_zero.rs | 1 + clippy_lints/src/zero_repeat_side_effects.rs | 1 + clippy_lints/src/zero_sized_map_values.rs | 1 + clippy_lints/src/zombie_processes.rs | 1 + declare_clippy_lint/Cargo.toml | 10 + declare_clippy_lint/src/lib.rs | 264 +++++++++++++++ src/driver.rs | 5 +- 343 files changed, 812 insertions(+), 428 deletions(-) delete mode 100644 clippy_lints/src/declare_clippy_lint.rs create mode 100644 declare_clippy_lint/Cargo.toml create mode 100644 declare_clippy_lint/src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index 2da350ba44e3..4abb874f39eb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,6 +24,7 @@ path = "src/driver.rs" clippy_config = { path = "clippy_config" } clippy_lints = { path = "clippy_lints" } clippy_utils = { path = "clippy_utils" } +declare_clippy_lint = { path = "declare_clippy_lint" } rustc_tools_util = { path = "rustc_tools_util", version = "0.4.2" } clippy_lints_internal = { path = "clippy_lints_internal", optional = true } tempfile = { version = "3.20", optional = true } diff --git a/clippy_dev/src/update_lints.rs b/clippy_dev/src/update_lints.rs index 25ba2c720490..4ce904038b4a 100644 --- a/clippy_dev/src/update_lints.rs +++ b/clippy_dev/src/update_lints.rs @@ -14,6 +14,43 @@ const GENERATED_FILE_COMMENT: &str = "// This file was generated by `cargo dev u const DOCS_LINK: &str = "https://rust-lang.github.io/rust-clippy/master/index.html"; +macro_rules! declare_lint_crates { + ($($name:ident,)*) => { + #[allow(non_camel_case_types)] + #[derive(Debug, Clone, Copy, PartialEq, Eq)] + pub enum Crate { + $($name),* + } + impl Crate { + #[must_use] + pub fn src_path(self) -> &'static str { + match self { + $(Self::$name => concat!(stringify!($name), "/src")),* + } + } + + fn crate_root_path(self) -> &'static str { + match self { + $(Self::$name => concat!(stringify!($name), "/src/lib.rs")),* + } + } + + fn declared_lints_path(self) -> &'static str { + match self { + $(Self::$name => concat!(stringify!($name), "/src/declared_lints.rs")),* + } + } + + fn all() -> impl Iterator { + [$(Self::$name),*].into_iter() + } + } + } +} +declare_lint_crates! { + clippy_lints, +} + /// Runs the `update_lints` command. /// /// This updates various generated values from the lint source code. @@ -36,123 +73,159 @@ pub fn generate_lint_files( deprecated: &[DeprecatedLint], renamed: &[RenamedLint], ) { - FileUpdater::default().update_files_checked( + let mut updater = FileUpdater::default(); + updater.update_file_checked( "cargo dev update_lints", update_mode, - &mut [ - ( - "README.md", - &mut update_text_region_fn("[There are over ", " lints included in this crate!]", |dst| { - write!(dst, "{}", round_to_fifty(lints.len())).unwrap(); - }), - ), - ( - "book/src/README.md", - &mut update_text_region_fn("[There are over ", " lints included in this crate!]", |dst| { - write!(dst, "{}", round_to_fifty(lints.len())).unwrap(); - }), - ), - ( - "CHANGELOG.md", - &mut update_text_region_fn( - "\n", - "", - |dst| { - for lint in lints - .iter() - .map(|l| &*l.name) - .chain(deprecated.iter().filter_map(|l| l.name.strip_prefix("clippy::"))) - .chain(renamed.iter().filter_map(|l| l.old_name.strip_prefix("clippy::"))) - .sorted() - { - writeln!(dst, "[`{lint}`]: {DOCS_LINK}#{lint}").unwrap(); - } - }, - ), - ), - ( - "clippy_lints/src/lib.rs", - &mut update_text_region_fn( - "// begin lints modules, do not remove this comment, it’s used in `update_lints`\n", - "// end lints modules, do not remove this comment, it’s used in `update_lints`", - |dst| { - for lint_mod in lints.iter().map(|l| &l.module).sorted().dedup() { - writeln!(dst, "mod {lint_mod};").unwrap(); - } - }, - ), - ), - ("clippy_lints/src/declared_lints.rs", &mut |_, src, dst| { - dst.push_str(GENERATED_FILE_COMMENT); - dst.push_str("pub static LINTS: &[&crate::LintInfo] = &[\n"); - for (module_name, lint_name) in lints.iter().map(|l| (&l.module, l.name.to_uppercase())).sorted() { - writeln!(dst, " crate::{module_name}::{lint_name}_INFO,").unwrap(); - } - dst.push_str("];\n"); - UpdateStatus::from_changed(src != dst) - }), - ("clippy_lints/src/deprecated_lints.rs", &mut |_, src, dst| { - let mut searcher = RustSearcher::new(src); - assert!( - searcher.find_token(Token::Ident("declare_with_version")) - && searcher.find_token(Token::Ident("declare_with_version")), - "error reading deprecated lints" - ); - dst.push_str(&src[..searcher.pos() as usize]); - dst.push_str("! { DEPRECATED(DEPRECATED_VERSION) = [\n"); - for lint in deprecated { - write!( - dst, - " #[clippy::version = \"{}\"]\n (\"{}\", \"{}\"),\n", - lint.version, lint.name, lint.reason, - ) - .unwrap(); + "README.md", + &mut update_text_region_fn("[There are over ", " lints included in this crate!]", |dst| { + write!(dst, "{}", round_to_fifty(lints.len())).unwrap(); + }), + ); + updater.update_file_checked( + "cargo dev update_lints", + update_mode, + "book/src/README.md", + &mut update_text_region_fn("[There are over ", " lints included in this crate!]", |dst| { + write!(dst, "{}", round_to_fifty(lints.len())).unwrap(); + }), + ); + updater.update_file_checked( + "cargo dev update_lints", + update_mode, + "CHANGELOG.md", + &mut update_text_region_fn( + "\n", + "", + |dst| { + for lint in lints + .iter() + .map(|l| &*l.name) + .chain(deprecated.iter().filter_map(|l| l.name.strip_prefix("clippy::"))) + .chain(renamed.iter().filter_map(|l| l.old_name.strip_prefix("clippy::"))) + .sorted() + { + writeln!(dst, "[`{lint}`]: {DOCS_LINK}#{lint}").unwrap(); } - dst.push_str( - "]}\n\n\ + }, + ), + ); + updater.update_file_checked( + "cargo dev update_lints", + update_mode, + "clippy_lints/src/deprecated_lints.rs", + &mut |_, src, dst| { + let mut searcher = RustSearcher::new(src); + assert!( + searcher.find_token(Token::Ident("declare_with_version")) + && searcher.find_token(Token::Ident("declare_with_version")), + "error reading deprecated lints" + ); + dst.push_str(&src[..searcher.pos() as usize]); + dst.push_str("! { DEPRECATED(DEPRECATED_VERSION) = [\n"); + for lint in deprecated { + write!( + dst, + " #[clippy::version = \"{}\"]\n (\"{}\", \"{}\"),\n", + lint.version, lint.name, lint.reason, + ) + .unwrap(); + } + dst.push_str( + "]}\n\n\ #[rustfmt::skip]\n\ declare_with_version! { RENAMED(RENAMED_VERSION) = [\n\ ", - ); - for lint in renamed { - write!( - dst, - " #[clippy::version = \"{}\"]\n (\"{}\", \"{}\"),\n", - lint.version, lint.old_name, lint.new_name, - ) - .unwrap(); - } - dst.push_str("]}\n"); - UpdateStatus::from_changed(src != dst) - }), - ("tests/ui/deprecated.rs", &mut |_, src, dst| { - dst.push_str(GENERATED_FILE_COMMENT); - for lint in deprecated { - writeln!(dst, "#![warn({})] //~ ERROR: lint `{}`", lint.name, lint.name).unwrap(); + ); + for lint in renamed { + write!( + dst, + " #[clippy::version = \"{}\"]\n (\"{}\", \"{}\"),\n", + lint.version, lint.old_name, lint.new_name, + ) + .unwrap(); + } + dst.push_str("]}\n"); + UpdateStatus::from_changed(src != dst) + }, + ); + updater.update_file_checked( + "cargo dev update_lints", + update_mode, + "tests/ui/deprecated.rs", + &mut |_, src, dst| { + dst.push_str(GENERATED_FILE_COMMENT); + for lint in deprecated { + writeln!(dst, "#![warn({})] //~ ERROR: lint `{}`", lint.name, lint.name).unwrap(); + } + dst.push_str("\nfn main() {}\n"); + UpdateStatus::from_changed(src != dst) + }, + ); + updater.update_file_checked( + "cargo dev update_lints", + update_mode, + "tests/ui/rename.rs", + &mut move |_, src, dst| { + let mut seen_lints = HashSet::new(); + dst.push_str(GENERATED_FILE_COMMENT); + dst.push_str("#![allow(clippy::duplicated_attributes)]\n"); + for lint in renamed { + if seen_lints.insert(&lint.new_name) { + writeln!(dst, "#![allow({})]", lint.new_name).unwrap(); } - dst.push_str("\nfn main() {}\n"); - UpdateStatus::from_changed(src != dst) - }), - ("tests/ui/rename.rs", &mut move |_, src, dst| { - let mut seen_lints = HashSet::new(); - dst.push_str(GENERATED_FILE_COMMENT); - dst.push_str("#![allow(clippy::duplicated_attributes)]\n"); - for lint in renamed { - if seen_lints.insert(&lint.new_name) { - writeln!(dst, "#![allow({})]", lint.new_name).unwrap(); - } + } + seen_lints.clear(); + for lint in renamed { + if seen_lints.insert(&lint.old_name) { + writeln!(dst, "#![warn({})] //~ ERROR: lint `{}`", lint.old_name, lint.old_name).unwrap(); } - seen_lints.clear(); - for lint in renamed { - if seen_lints.insert(&lint.old_name) { - writeln!(dst, "#![warn({})] //~ ERROR: lint `{}`", lint.old_name, lint.old_name).unwrap(); + } + dst.push_str("\nfn main() {}\n"); + UpdateStatus::from_changed(src != dst) + }, + ); + for c in Crate::all() { + updater.update_file_checked( + "cargo dev update_lints", + update_mode, + c.crate_root_path(), + &mut update_text_region_fn( + "// begin lints modules, do not remove this comment, it’s used in `update_lints`\n", + "// end lints modules, do not remove this comment, it’s used in `update_lints`", + |dst| { + for lint_mod in lints + .iter() + .filter(|l| l.def_crate == c) + .map(|l| l.module.split_once("::").map_or(&*l.module, |x| x.0)) + .sorted() + .dedup() + { + writeln!(dst, "mod {lint_mod};").unwrap(); } + }, + ), + ); + updater.update_file_checked( + "cargo dev update_lints", + update_mode, + c.declared_lints_path(), + &mut |_, src, dst| { + dst.push_str(GENERATED_FILE_COMMENT); + dst.push_str("pub static LINTS: &[&::declare_clippy_lint::LintInfo] = &[\n"); + for (module_name, lint_name) in lints + .iter() + .filter(|l| l.def_crate == c) + .map(|l| (&l.module, l.name.to_uppercase())) + .sorted() + { + writeln!(dst, " crate::{module_name}::{lint_name}_INFO,").unwrap(); } - dst.push_str("\nfn main() {}\n"); + dst.push_str("];\n"); UpdateStatus::from_changed(src != dst) - }), - ], - ); + }, + ); + } } fn round_to_fifty(count: usize) -> usize { @@ -167,6 +240,7 @@ pub struct Lint { pub module: String, pub path: PathBuf, pub declaration_range: Range, + pub def_crate: Crate, } pub struct DeprecatedLint { @@ -186,13 +260,16 @@ pub struct RenamedLint { pub fn find_lint_decls() -> Vec { let mut lints = Vec::with_capacity(1000); let mut contents = String::new(); - for (file, module) in read_src_with_module("clippy_lints/src".as_ref()) { - parse_clippy_lint_decls( - file.path(), - File::open_read_to_cleared_string(file.path(), &mut contents), - &module, - &mut lints, - ); + for c in Crate::all() { + for (file, module) in read_src_with_module(c.src_path().as_ref()) { + parse_clippy_lint_decls( + file.path(), + File::open_read_to_cleared_string(file.path(), &mut contents), + c, + &module, + &mut lints, + ); + } } lints.sort_by(|lhs, rhs| lhs.name.cmp(&rhs.name)); lints @@ -233,7 +310,7 @@ fn read_src_with_module(src_root: &Path) -> impl use<'_> + Iterator) { +fn parse_clippy_lint_decls(path: &Path, contents: &str, def_crate: Crate, module: &str, lints: &mut Vec) { #[allow(clippy::enum_glob_use)] use Token::*; #[rustfmt::skip] @@ -257,6 +334,7 @@ fn parse_clippy_lint_decls(path: &Path, contents: &str, module: &str, lints: &mu module: module.into(), path: path.into(), declaration_range: start..searcher.pos() as usize, + def_crate, }); } } diff --git a/clippy_dev/src/utils.rs b/clippy_dev/src/utils.rs index 255e36afe69c..7d74a2565219 100644 --- a/clippy_dev/src/utils.rs +++ b/clippy_dev/src/utils.rs @@ -378,21 +378,6 @@ impl FileUpdater { self.update_file_checked_inner(tool, mode, path.as_ref(), update); } - #[expect(clippy::type_complexity)] - pub fn update_files_checked( - &mut self, - tool: &str, - mode: UpdateMode, - files: &mut [( - impl AsRef, - &mut dyn FnMut(&Path, &str, &mut String) -> UpdateStatus, - )], - ) { - for (path, update) in files { - self.update_file_checked_inner(tool, mode, path.as_ref(), update); - } - } - pub fn update_file( &mut self, path: impl AsRef, diff --git a/clippy_lints/Cargo.toml b/clippy_lints/Cargo.toml index 39e4e2e365ea..37b554fd0d85 100644 --- a/clippy_lints/Cargo.toml +++ b/clippy_lints/Cargo.toml @@ -13,6 +13,7 @@ arrayvec = { version = "0.7", default-features = false } cargo_metadata = "0.18" clippy_config = { path = "../clippy_config" } clippy_utils = { path = "../clippy_utils" } +declare_clippy_lint = { path = "../declare_clippy_lint" } itertools = "0.12" quine-mc_cluskey = "0.2" regex-syntax = "0.8" diff --git a/clippy_lints/src/absolute_paths.rs b/clippy_lints/src/absolute_paths.rs index 1af6d448a93c..889c5aed2111 100644 --- a/clippy_lints/src/absolute_paths.rs +++ b/clippy_lints/src/absolute_paths.rs @@ -1,6 +1,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint; use clippy_utils::is_from_proc_macro; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxHashSet; use rustc_hir::def::{DefKind, Res}; use rustc_hir::def_id::{CRATE_DEF_INDEX, DefId}; diff --git a/clippy_lints/src/almost_complete_range.rs b/clippy_lints/src/almost_complete_range.rs index 4f55968d5625..89b4f1326397 100644 --- a/clippy_lints/src/almost_complete_range.rs +++ b/clippy_lints/src/almost_complete_range.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::msrvs::{self, MsrvStack}; use clippy_utils::source::{trim_span, walk_span_to_context}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{Expr, ExprKind, LitKind, Pat, PatKind, RangeEnd, RangeLimits}; use rustc_errors::Applicability; use rustc_lint::{EarlyContext, EarlyLintPass, LintContext}; diff --git a/clippy_lints/src/approx_const.rs b/clippy_lints/src/approx_const.rs index 9ae746c13b26..d44d02bc5471 100644 --- a/clippy_lints/src/approx_const.rs +++ b/clippy_lints/src/approx_const.rs @@ -1,6 +1,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_help; use clippy_utils::msrvs::{self, Msrv}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{FloatTy, LitFloatType, LitKind}; use rustc_attr_parsing::RustcVersion; use rustc_hir::{HirId, Lit}; diff --git a/clippy_lints/src/arbitrary_source_item_ordering.rs b/clippy_lints/src/arbitrary_source_item_ordering.rs index 01ac1fe00039..fa35a5617236 100644 --- a/clippy_lints/src/arbitrary_source_item_ordering.rs +++ b/clippy_lints/src/arbitrary_source_item_ordering.rs @@ -6,6 +6,7 @@ use clippy_config::types::{ }; use clippy_utils::diagnostics::span_lint_and_note; use clippy_utils::is_cfg_test; +use declare_clippy_lint::declare_clippy_lint; use rustc_attr_parsing::AttributeKind; use rustc_hir::{ AssocItemKind, Attribute, FieldDef, HirId, ImplItemRef, IsAuto, Item, ItemKind, Mod, QPath, TraitItemRef, TyKind, diff --git a/clippy_lints/src/arc_with_non_send_sync.rs b/clippy_lints/src/arc_with_non_send_sync.rs index 2643f850879c..492e3d722b0d 100644 --- a/clippy_lints/src/arc_with_non_send_sync.rs +++ b/clippy_lints/src/arc_with_non_send_sync.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::is_from_proc_macro; use clippy_utils::ty::{implements_trait, is_type_diagnostic_item}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Expr, ExprKind, QPath}; use rustc_lint::{LateContext, LateLintPass}; use rustc_middle::ty; diff --git a/clippy_lints/src/as_conversions.rs b/clippy_lints/src/as_conversions.rs index 27e304a848e3..34cbb71f60e2 100644 --- a/clippy_lints/src/as_conversions.rs +++ b/clippy_lints/src/as_conversions.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::is_from_proc_macro; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass, LintContext}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/asm_syntax.rs b/clippy_lints/src/asm_syntax.rs index 69a8eb7d94e7..f84bb657b370 100644 --- a/clippy_lints/src/asm_syntax.rs +++ b/clippy_lints/src/asm_syntax.rs @@ -1,6 +1,7 @@ use std::fmt; use clippy_utils::diagnostics::span_lint_and_then; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{Expr, ExprKind, InlineAsmOptions}; use rustc_ast::{InlineAsm, Item, ItemKind}; use rustc_lint::{EarlyContext, EarlyLintPass, Lint, LintContext}; diff --git a/clippy_lints/src/assertions_on_constants.rs b/clippy_lints/src/assertions_on_constants.rs index b6684825835a..eb89ebe2e98f 100644 --- a/clippy_lints/src/assertions_on_constants.rs +++ b/clippy_lints/src/assertions_on_constants.rs @@ -2,6 +2,7 @@ use clippy_utils::consts::{ConstEvalCtxt, Constant}; use clippy_utils::diagnostics::span_lint_and_help; use clippy_utils::is_inside_always_const_context; use clippy_utils::macros::{PanicExpn, find_assert_args, root_macro_call_first_node}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/assertions_on_result_states.rs b/clippy_lints/src/assertions_on_result_states.rs index c073dee855e2..8250a399a83d 100644 --- a/clippy_lints/src/assertions_on_result_states.rs +++ b/clippy_lints/src/assertions_on_result_states.rs @@ -4,6 +4,7 @@ use clippy_utils::source::snippet_with_context; use clippy_utils::ty::{has_debug_impl, is_copy, is_type_diagnostic_item}; use clippy_utils::usage::local_used_after_expr; use clippy_utils::{is_expr_final_block_expr, path_res}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def::Res; use rustc_hir::{Expr, ExprKind}; diff --git a/clippy_lints/src/assigning_clones.rs b/clippy_lints/src/assigning_clones.rs index 8b8b42bbf722..1dff4a8207d2 100644 --- a/clippy_lints/src/assigning_clones.rs +++ b/clippy_lints/src/assigning_clones.rs @@ -4,6 +4,7 @@ use clippy_utils::mir::{PossibleBorrowerMap, enclosing_mir}; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::sugg::Sugg; use clippy_utils::{is_diag_trait_item, is_in_test, last_path_segment, local_is_initialized, path_to_local, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{self as hir, Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/async_yields_async.rs b/clippy_lints/src/async_yields_async.rs index 013819b0da8a..2264647d3236 100644 --- a/clippy_lints/src/async_yields_async.rs +++ b/clippy_lints/src/async_yields_async.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_hir_and_then; use clippy_utils::source::snippet; use clippy_utils::ty::implements_trait; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Closure, ClosureKind, CoroutineDesugaring, CoroutineKind, CoroutineSource, Expr, ExprKind, QPath}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/attrs/mod.rs b/clippy_lints/src/attrs/mod.rs index 9a1242980418..6a22d6be64ec 100644 --- a/clippy_lints/src/attrs/mod.rs +++ b/clippy_lints/src/attrs/mod.rs @@ -16,6 +16,7 @@ mod utils; use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_help; use clippy_utils::msrvs::{self, Msrv, MsrvStack}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::{self as ast, AttrArgs, AttrKind, Attribute, MetaItemInner, MetaItemKind}; use rustc_hir::{ImplItem, Item, ItemKind, TraitItem}; use rustc_lint::{EarlyContext, EarlyLintPass, LateContext, LateLintPass}; diff --git a/clippy_lints/src/await_holding_invalid.rs b/clippy_lints/src/await_holding_invalid.rs index 31cc004f6855..73d5173edb24 100644 --- a/clippy_lints/src/await_holding_invalid.rs +++ b/clippy_lints/src/await_holding_invalid.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_config::types::{DisallowedPathWithoutReplacement, create_disallowed_map}; use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::paths::{self, PathNS}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir as hir; use rustc_hir::def_id::{DefId, DefIdMap}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/blocks_in_conditions.rs b/clippy_lints/src/blocks_in_conditions.rs index 011962846cb3..b2f2a238e3e5 100644 --- a/clippy_lints/src/blocks_in_conditions.rs +++ b/clippy_lints/src/blocks_in_conditions.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::snippet_block_with_applicability; use clippy_utils::{contains_return, higher, is_from_proc_macro}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{BlockCheckMode, Expr, ExprKind, MatchSource}; use rustc_lint::{LateContext, LateLintPass, LintContext}; diff --git a/clippy_lints/src/bool_assert_comparison.rs b/clippy_lints/src/bool_assert_comparison.rs index ae36bb76117d..7fed112f89b7 100644 --- a/clippy_lints/src/bool_assert_comparison.rs +++ b/clippy_lints/src/bool_assert_comparison.rs @@ -3,6 +3,7 @@ use clippy_utils::macros::{find_assert_eq_args, root_macro_call_first_node}; use clippy_utils::sugg::Sugg; use clippy_utils::sym; use clippy_utils::ty::{implements_trait, is_copy}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::LitKind; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind, Lit}; diff --git a/clippy_lints/src/bool_to_int_with_if.rs b/clippy_lints/src/bool_to_int_with_if.rs index 129e77478406..ba1f643821c4 100644 --- a/clippy_lints/src/bool_to_int_with_if.rs +++ b/clippy_lints/src/bool_to_int_with_if.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::HasSession; use clippy_utils::sugg::Sugg; use clippy_utils::{higher, is_else_clause, is_in_const_context, span_contains_comment}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::LitKind; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind}; diff --git a/clippy_lints/src/booleans.rs b/clippy_lints/src/booleans.rs index bc6ba84772b3..649b75d8aaec 100644 --- a/clippy_lints/src/booleans.rs +++ b/clippy_lints/src/booleans.rs @@ -5,6 +5,7 @@ use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::SpanRangeExt; use clippy_utils::sugg::Sugg; use clippy_utils::ty::{implements_trait, is_type_diagnostic_item}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::LitKind; use rustc_attr_parsing::RustcVersion; use rustc_errors::Applicability; diff --git a/clippy_lints/src/borrow_deref_ref.rs b/clippy_lints/src/borrow_deref_ref.rs index 7cde007a9b66..adbc5ac1d1a5 100644 --- a/clippy_lints/src/borrow_deref_ref.rs +++ b/clippy_lints/src/borrow_deref_ref.rs @@ -3,6 +3,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::SpanRangeExt; use clippy_utils::ty::implements_trait; use clippy_utils::{get_parent_expr, is_from_proc_macro, is_lint_allowed, is_mutable}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{BorrowKind, ExprKind, UnOp}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/box_default.rs b/clippy_lints/src/box_default.rs index 3b861848f94a..146aa266e382 100644 --- a/clippy_lints/src/box_default.rs +++ b/clippy_lints/src/box_default.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::macros::macro_backtrace; use clippy_utils::ty::expr_sig; use clippy_utils::{is_default_equivalent, path_def_id}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def::Res; use rustc_hir::intravisit::{InferKind, Visitor, VisitorExt, walk_ty}; diff --git a/clippy_lints/src/byte_char_slices.rs b/clippy_lints/src/byte_char_slices.rs index d88c0711b397..36146662d514 100644 --- a/clippy_lints/src/byte_char_slices.rs +++ b/clippy_lints/src/byte_char_slices.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_sugg; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{BorrowKind, Expr, ExprKind, Mutability}; use rustc_ast::token::{Lit, LitKind}; use rustc_errors::Applicability; diff --git a/clippy_lints/src/cargo/mod.rs b/clippy_lints/src/cargo/mod.rs index 60371dcd7715..8723584a4f82 100644 --- a/clippy_lints/src/cargo/mod.rs +++ b/clippy_lints/src/cargo/mod.rs @@ -8,6 +8,7 @@ use cargo_metadata::MetadataCommand; use clippy_config::Conf; use clippy_utils::diagnostics::span_lint; use clippy_utils::is_lint_allowed; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxHashSet; use rustc_hir::hir_id::CRATE_HIR_ID; use rustc_lint::{LateContext, LateLintPass, Lint}; diff --git a/clippy_lints/src/casts/mod.rs b/clippy_lints/src/casts/mod.rs index daae9a8bb085..0ae439a9920a 100644 --- a/clippy_lints/src/casts/mod.rs +++ b/clippy_lints/src/casts/mod.rs @@ -29,6 +29,7 @@ mod zero_ptr; use clippy_config::Conf; use clippy_utils::is_hir_ty_cfg_dependant; use clippy_utils::msrvs::{self, Msrv}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass, LintContext}; use rustc_session::impl_lint_pass; diff --git a/clippy_lints/src/cfg_not_test.rs b/clippy_lints/src/cfg_not_test.rs index 7590fe96fd21..1ca281a8731c 100644 --- a/clippy_lints/src/cfg_not_test.rs +++ b/clippy_lints/src/cfg_not_test.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_then; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::MetaItemInner; use rustc_lint::{EarlyContext, EarlyLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/checked_conversions.rs b/clippy_lints/src/checked_conversions.rs index 8ada608049c7..90d3eda1c070 100644 --- a/clippy_lints/src/checked_conversions.rs +++ b/clippy_lints/src/checked_conversions.rs @@ -3,6 +3,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::snippet_with_applicability; use clippy_utils::{SpanlessEq, is_in_const_context, is_integer_literal}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{BinOpKind, Expr, ExprKind, QPath, TyKind}; use rustc_lint::{LateContext, LateLintPass, LintContext}; diff --git a/clippy_lints/src/cloned_ref_to_slice_refs.rs b/clippy_lints/src/cloned_ref_to_slice_refs.rs index 6b239a1541b0..f58b42e53787 100644 --- a/clippy_lints/src/cloned_ref_to_slice_refs.rs +++ b/clippy_lints/src/cloned_ref_to_slice_refs.rs @@ -4,6 +4,7 @@ use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::sugg::Sugg; use clippy_utils::visitors::is_const_evaluatable; use clippy_utils::{is_in_const_context, is_mutable, is_trait_method}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/cognitive_complexity.rs b/clippy_lints/src/cognitive_complexity.rs index aeb53a52cf3d..a6398b5a5b62 100644 --- a/clippy_lints/src/cognitive_complexity.rs +++ b/clippy_lints/src/cognitive_complexity.rs @@ -5,6 +5,7 @@ use clippy_utils::ty::is_type_diagnostic_item; use clippy_utils::visitors::for_each_expr_without_closures; use clippy_utils::{LimitStack, get_async_fn_body, is_async_fn}; use core::ops::ControlFlow; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::intravisit::FnKind; use rustc_hir::{Attribute, Body, Expr, ExprKind, FnDecl}; use rustc_lint::{LateContext, LateLintPass, LintContext}; diff --git a/clippy_lints/src/collapsible_if.rs b/clippy_lints/src/collapsible_if.rs index 7f6ecea99fb0..90414150d53c 100644 --- a/clippy_lints/src/collapsible_if.rs +++ b/clippy_lints/src/collapsible_if.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::{span_lint_and_sugg, span_lint_and_then}; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::{IntoSpan as _, SpanRangeExt, snippet, snippet_block, snippet_block_with_applicability}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::BinOpKind; use rustc_errors::Applicability; use rustc_hir::{Block, Expr, ExprKind, Stmt, StmtKind}; diff --git a/clippy_lints/src/collection_is_never_read.rs b/clippy_lints/src/collection_is_never_read.rs index 1279be34ed8f..8471108eabf5 100644 --- a/clippy_lints/src/collection_is_never_read.rs +++ b/clippy_lints/src/collection_is_never_read.rs @@ -3,6 +3,7 @@ use clippy_utils::ty::{get_type_diagnostic_name, is_type_lang_item}; use clippy_utils::visitors::{Visitable, for_each_expr}; use clippy_utils::{get_enclosing_block, path_to_local_id}; use core::ops::ControlFlow; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Body, ExprKind, HirId, LangItem, LetStmt, Node, PatKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/comparison_chain.rs b/clippy_lints/src/comparison_chain.rs index 238ebd4a444c..77d4e8537f74 100644 --- a/clippy_lints/src/comparison_chain.rs +++ b/clippy_lints/src/comparison_chain.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::sugg::Sugg; use clippy_utils::ty::implements_trait; use clippy_utils::{SpanlessEq, if_sequence, is_else_clause, is_in_const_context}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{BinOpKind, Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/copies.rs b/clippy_lints/src/copies.rs index 2467fc95fd05..45325f94b5c4 100644 --- a/clippy_lints/src/copies.rs +++ b/clippy_lints/src/copies.rs @@ -10,6 +10,7 @@ use clippy_utils::{ }; use core::iter; use core::ops::ControlFlow; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{BinOpKind, Block, Expr, ExprKind, HirId, HirIdSet, Stmt, StmtKind, intravisit}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/copy_iterator.rs b/clippy_lints/src/copy_iterator.rs index 4ecf3e41611b..a83076c1e53d 100644 --- a/clippy_lints/src/copy_iterator.rs +++ b/clippy_lints/src/copy_iterator.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_note; use clippy_utils::ty::is_copy; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Impl, Item, ItemKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/crate_in_macro_def.rs b/clippy_lints/src/crate_in_macro_def.rs index 19f62e8bf79c..1e4038829281 100644 --- a/clippy_lints/src/crate_in_macro_def.rs +++ b/clippy_lints/src/crate_in_macro_def.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_sugg; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{AttrKind, Attribute, Item, ItemKind}; use rustc_ast::token::{Token, TokenKind}; use rustc_ast::tokenstream::{TokenStream, TokenTree}; diff --git a/clippy_lints/src/create_dir.rs b/clippy_lints/src/create_dir.rs index b43906903a0e..943466124253 100644 --- a/clippy_lints/src/create_dir.rs +++ b/clippy_lints/src/create_dir.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::snippet_with_applicability; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/dbg_macro.rs b/clippy_lints/src/dbg_macro.rs index 06376c57119d..4c7dc3831f69 100644 --- a/clippy_lints/src/dbg_macro.rs +++ b/clippy_lints/src/dbg_macro.rs @@ -3,6 +3,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::is_in_test; use clippy_utils::macros::{MacroCall, macro_backtrace}; use clippy_utils::source::snippet_with_applicability; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxHashSet; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind, Node}; diff --git a/clippy_lints/src/declare_clippy_lint.rs b/clippy_lints/src/declare_clippy_lint.rs deleted file mode 100644 index 9f82f8767279..000000000000 --- a/clippy_lints/src/declare_clippy_lint.rs +++ /dev/null @@ -1,168 +0,0 @@ -#[macro_export] -#[allow(clippy::crate_in_macro_def)] -macro_rules! declare_clippy_lint { - (@ - $(#[doc = $lit:literal])* - pub $lint_name:ident, - $level:ident, - $lintcategory:expr, - $desc:literal, - $version_expr:expr, - $version_lit:literal - $(, $eval_always: literal)? - ) => { - rustc_session::declare_tool_lint! { - $(#[doc = $lit])* - #[clippy::version = $version_lit] - pub clippy::$lint_name, - $level, - $desc, - report_in_external_macro:true - $(, @eval_always = $eval_always)? - } - - pub(crate) static ${concat($lint_name, _INFO)}: &'static crate::LintInfo = &crate::LintInfo { - lint: &$lint_name, - category: $lintcategory, - explanation: concat!($($lit,"\n",)*), - location: concat!(file!(), "#L", line!()), - version: $version_expr - }; - }; - ( - $(#[doc = $lit:literal])* - #[clippy::version = $version:literal] - pub $lint_name:ident, - restriction, - $desc:literal - $(, @eval_always = $eval_always: literal)? - ) => { - declare_clippy_lint! {@ - $(#[doc = $lit])* - pub $lint_name, Allow, crate::LintCategory::Restriction, $desc, - Some($version), $version - $(, $eval_always)? - } - }; - ( - $(#[doc = $lit:literal])* - #[clippy::version = $version:literal] - pub $lint_name:ident, - style, - $desc:literal - $(, @eval_always = $eval_always: literal)? - ) => { - declare_clippy_lint! {@ - $(#[doc = $lit])* - pub $lint_name, Warn, crate::LintCategory::Style, $desc, - Some($version), $version - $(, $eval_always)? - } - }; - ( - $(#[doc = $lit:literal])* - #[clippy::version = $version:literal] - pub $lint_name:ident, - correctness, - $desc:literal - $(, @eval_always = $eval_always: literal)? - ) => { - declare_clippy_lint! {@ - $(#[doc = $lit])* - pub $lint_name, Deny, crate::LintCategory::Correctness, $desc, - Some($version), $version - $(, $eval_always)? - - } - }; - ( - $(#[doc = $lit:literal])* - #[clippy::version = $version:literal] - pub $lint_name:ident, - perf, - $desc:literal - $(, @eval_always = $eval_always: literal)? - ) => { - declare_clippy_lint! {@ - $(#[doc = $lit])* - pub $lint_name, Warn, crate::LintCategory::Perf, $desc, - Some($version), $version - $(, $eval_always)? - } - }; - ( - $(#[doc = $lit:literal])* - #[clippy::version = $version:literal] - pub $lint_name:ident, - complexity, - $desc:literal - $(, @eval_always = $eval_always: literal)? - ) => { - declare_clippy_lint! {@ - $(#[doc = $lit])* - pub $lint_name, Warn, crate::LintCategory::Complexity, $desc, - Some($version), $version - $(, $eval_always)? - } - }; - ( - $(#[doc = $lit:literal])* - #[clippy::version = $version:literal] - pub $lint_name:ident, - suspicious, - $desc:literal - $(, @eval_always = $eval_always: literal)? - ) => { - declare_clippy_lint! {@ - $(#[doc = $lit])* - pub $lint_name, Warn, crate::LintCategory::Suspicious, $desc, - Some($version), $version - $(, $eval_always)? - } - }; - ( - $(#[doc = $lit:literal])* - #[clippy::version = $version:literal] - pub $lint_name:ident, - nursery, - $desc:literal - $(, @eval_always = $eval_always: literal)? - ) => { - declare_clippy_lint! {@ - $(#[doc = $lit])* - pub $lint_name, Allow, crate::LintCategory::Nursery, $desc, - Some($version), $version - $(, $eval_always)? - } - }; - ( - $(#[doc = $lit:literal])* - #[clippy::version = $version:literal] - pub $lint_name:ident, - pedantic, - $desc:literal - $(, @eval_always = $eval_always: literal)? - ) => { - declare_clippy_lint! {@ - $(#[doc = $lit])* - pub $lint_name, Allow, crate::LintCategory::Pedantic, $desc, - Some($version), $version - $(, $eval_always)? - } - }; - ( - $(#[doc = $lit:literal])* - #[clippy::version = $version:literal] - pub $lint_name:ident, - cargo, - $desc:literal - $(, @eval_always = $eval_always: literal)? - ) => { - declare_clippy_lint! {@ - $(#[doc = $lit])* - pub $lint_name, Allow, crate::LintCategory::Cargo, $desc, - Some($version), $version - $(, $eval_always)? - } - }; -} diff --git a/clippy_lints/src/declared_lints.rs b/clippy_lints/src/declared_lints.rs index bb825c7655f8..d06729bbdd8c 100644 --- a/clippy_lints/src/declared_lints.rs +++ b/clippy_lints/src/declared_lints.rs @@ -2,7 +2,7 @@ // Use that command to update this file and do not edit by hand. // Manual edits will be overwritten. -pub static LINTS: &[&crate::LintInfo] = &[ +pub static LINTS: &[&::declare_clippy_lint::LintInfo] = &[ crate::absolute_paths::ABSOLUTE_PATHS_INFO, crate::almost_complete_range::ALMOST_COMPLETE_RANGE_INFO, crate::approx_const::APPROX_CONSTANT_INFO, diff --git a/clippy_lints/src/default.rs b/clippy_lints/src/default.rs index 886c325b355f..1e557a238fb2 100644 --- a/clippy_lints/src/default.rs +++ b/clippy_lints/src/default.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::{span_lint_and_note, span_lint_and_sugg}; use clippy_utils::source::snippet_with_context; use clippy_utils::ty::{has_drop, is_copy}; use clippy_utils::{contains_name, get_parent_expr, in_automatically_derived, is_from_proc_macro}; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxHashSet; use rustc_errors::Applicability; use rustc_hir::def::Res; diff --git a/clippy_lints/src/default_constructed_unit_structs.rs b/clippy_lints/src/default_constructed_unit_structs.rs index f8a9037fc804..8135ecea9e51 100644 --- a/clippy_lints/src/default_constructed_unit_structs.rs +++ b/clippy_lints/src/default_constructed_unit_structs.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::is_ty_alias; use clippy_utils::source::SpanRangeExt as _; +use declare_clippy_lint::declare_clippy_lint; use hir::ExprKind; use hir::def::Res; use rustc_errors::Applicability; diff --git a/clippy_lints/src/default_instead_of_iter_empty.rs b/clippy_lints/src/default_instead_of_iter_empty.rs index 056e39c02af9..ee9ced8ae69f 100644 --- a/clippy_lints/src/default_instead_of_iter_empty.rs +++ b/clippy_lints/src/default_instead_of_iter_empty.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::snippet_with_context; use clippy_utils::{last_path_segment, std_or_core}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind, GenericArg, QPath, TyKind, def}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/default_numeric_fallback.rs b/clippy_lints/src/default_numeric_fallback.rs index 784214c29af9..7046076a6477 100644 --- a/clippy_lints/src/default_numeric_fallback.rs +++ b/clippy_lints/src/default_numeric_fallback.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_hir_and_then; use clippy_utils::numeric_literal; use clippy_utils::source::snippet_opt; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{LitFloatType, LitIntType, LitKind}; use rustc_errors::Applicability; use rustc_hir::intravisit::{Visitor, walk_expr, walk_pat, walk_stmt}; diff --git a/clippy_lints/src/default_union_representation.rs b/clippy_lints/src/default_union_representation.rs index 7c64bf46e7bd..7415af56c7ca 100644 --- a/clippy_lints/src/default_union_representation.rs +++ b/clippy_lints/src/default_union_representation.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_then; +use declare_clippy_lint::declare_clippy_lint; use rustc_attr_parsing::{AttributeKind, ReprAttr, find_attr}; use rustc_hir::{HirId, Item, ItemKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/dereference.rs b/clippy_lints/src/dereference.rs index a22a2ee66d25..b9d121381032 100644 --- a/clippy_lints/src/dereference.rs +++ b/clippy_lints/src/dereference.rs @@ -7,6 +7,7 @@ use clippy_utils::{ peel_middle_ty_refs, }; use core::mem; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::util::parser::ExprPrecedence; use rustc_data_structures::fx::FxIndexMap; use rustc_errors::Applicability; diff --git a/clippy_lints/src/derivable_impls.rs b/clippy_lints/src/derivable_impls.rs index 10331b3855b8..74cc0845d213 100644 --- a/clippy_lints/src/derivable_impls.rs +++ b/clippy_lints/src/derivable_impls.rs @@ -3,6 +3,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::indent_of; use clippy_utils::{is_default_equivalent, peel_blocks}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def::{CtorKind, CtorOf, DefKind, Res}; use rustc_hir::{ diff --git a/clippy_lints/src/derive.rs b/clippy_lints/src/derive.rs index 3443b36eb4f3..3fa11ebc640c 100644 --- a/clippy_lints/src/derive.rs +++ b/clippy_lints/src/derive.rs @@ -3,6 +3,7 @@ use std::ops::ControlFlow; use clippy_utils::diagnostics::{span_lint_and_note, span_lint_and_then, span_lint_hir_and_then}; use clippy_utils::ty::{implements_trait, implements_trait_with_env, is_copy}; use clippy_utils::{has_non_exhaustive_attr, is_lint_allowed, paths}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def_id::DefId; use rustc_hir::intravisit::{FnKind, Visitor, walk_expr, walk_fn, walk_item}; diff --git a/clippy_lints/src/disallowed_macros.rs b/clippy_lints/src/disallowed_macros.rs index 25b7099c855d..5afbb13cee61 100644 --- a/clippy_lints/src/disallowed_macros.rs +++ b/clippy_lints/src/disallowed_macros.rs @@ -3,6 +3,7 @@ use clippy_config::types::{DisallowedPath, create_disallowed_map}; use clippy_utils::diagnostics::{span_lint_and_then, span_lint_hir_and_then}; use clippy_utils::macros::macro_backtrace; use clippy_utils::paths::PathNS; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxHashSet; use rustc_hir::def::DefKind; use rustc_hir::def_id::DefIdMap; diff --git a/clippy_lints/src/disallowed_methods.rs b/clippy_lints/src/disallowed_methods.rs index fb970e17f38f..cc1853a694c1 100644 --- a/clippy_lints/src/disallowed_methods.rs +++ b/clippy_lints/src/disallowed_methods.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_config::types::{DisallowedPath, create_disallowed_map}; use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::paths::PathNS; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::def::{CtorKind, DefKind, Res}; use rustc_hir::def_id::DefIdMap; use rustc_hir::{Expr, ExprKind}; diff --git a/clippy_lints/src/disallowed_names.rs b/clippy_lints/src/disallowed_names.rs index f55b0cf1c503..ceb0e6ffa4e2 100644 --- a/clippy_lints/src/disallowed_names.rs +++ b/clippy_lints/src/disallowed_names.rs @@ -1,6 +1,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint; use clippy_utils::is_in_test; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxHashSet; use rustc_hir::{Pat, PatKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/disallowed_script_idents.rs b/clippy_lints/src/disallowed_script_idents.rs index d1a8590c59b4..30c3c3dfb863 100644 --- a/clippy_lints/src/disallowed_script_idents.rs +++ b/clippy_lints/src/disallowed_script_idents.rs @@ -1,5 +1,6 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast; use rustc_data_structures::fx::FxHashSet; use rustc_lint::{EarlyContext, EarlyLintPass, Level, LintContext}; diff --git a/clippy_lints/src/disallowed_types.rs b/clippy_lints/src/disallowed_types.rs index d0b2f0c8407f..eeb40ba0a478 100644 --- a/clippy_lints/src/disallowed_types.rs +++ b/clippy_lints/src/disallowed_types.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_config::types::{DisallowedPath, create_disallowed_map}; use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::paths::PathNS; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxHashMap; use rustc_hir::def::{DefKind, Res}; use rustc_hir::def_id::DefIdMap; diff --git a/clippy_lints/src/doc/mod.rs b/clippy_lints/src/doc/mod.rs index 87da380e9540..d1af5bdb6607 100644 --- a/clippy_lints/src/doc/mod.rs +++ b/clippy_lints/src/doc/mod.rs @@ -5,6 +5,7 @@ use clippy_utils::attrs::is_doc_hidden; use clippy_utils::diagnostics::{span_lint, span_lint_and_help, span_lint_and_then}; use clippy_utils::source::snippet_opt; use clippy_utils::{is_entrypoint_fn, is_trait_impl_item}; +use declare_clippy_lint::declare_clippy_lint; use pulldown_cmark::Event::{ Code, DisplayMath, End, FootnoteReference, HardBreak, Html, InlineHtml, InlineMath, Rule, SoftBreak, Start, TaskListMarker, Text, diff --git a/clippy_lints/src/double_parens.rs b/clippy_lints/src/double_parens.rs index 4dd8f01ee709..084f06d1a8c7 100644 --- a/clippy_lints/src/double_parens.rs +++ b/clippy_lints/src/double_parens.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{Expr, ExprKind}; use rustc_lint::{EarlyContext, EarlyLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/drop_forget_ref.rs b/clippy_lints/src/drop_forget_ref.rs index 5c360ce6a5f7..c8d0f17d649e 100644 --- a/clippy_lints/src/drop_forget_ref.rs +++ b/clippy_lints/src/drop_forget_ref.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::is_must_use_func_call; use clippy_utils::ty::{is_copy, is_must_use_ty, is_type_lang_item}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Arm, Expr, ExprKind, LangItem, Node}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/duplicate_mod.rs b/clippy_lints/src/duplicate_mod.rs index ce551a64d998..d936c43c4a8d 100644 --- a/clippy_lints/src/duplicate_mod.rs +++ b/clippy_lints/src/duplicate_mod.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_help; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{Crate, Inline, Item, ItemKind, ModKind}; use rustc_errors::MultiSpan; use rustc_lint::{EarlyContext, EarlyLintPass, Level, LintContext}; diff --git a/clippy_lints/src/else_if_without_else.rs b/clippy_lints/src/else_if_without_else.rs index a38e853172f7..bc40610cd7a9 100644 --- a/clippy_lints/src/else_if_without_else.rs +++ b/clippy_lints/src/else_if_without_else.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_then; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{Expr, ExprKind}; use rustc_lint::{EarlyContext, EarlyLintPass, LintContext}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/empty_drop.rs b/clippy_lints/src/empty_drop.rs index d557a36c7ac2..c50e23e764e7 100644 --- a/clippy_lints/src/empty_drop.rs +++ b/clippy_lints/src/empty_drop.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::peel_blocks; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Body, ExprKind, Impl, ImplItemKind, Item, ItemKind, Node}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/empty_enum.rs b/clippy_lints/src/empty_enum.rs index b0389fd9a2f6..7ef7c8d79f03 100644 --- a/clippy_lints/src/empty_enum.rs +++ b/clippy_lints/src/empty_enum.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_help; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Item, ItemKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/empty_line_after.rs b/clippy_lints/src/empty_line_after.rs index 0c5f8bbf4ca5..315a33919cfa 100644 --- a/clippy_lints/src/empty_line_after.rs +++ b/clippy_lints/src/empty_line_after.rs @@ -3,6 +3,7 @@ use std::borrow::Cow; use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::{SpanRangeExt, snippet_indent}; use clippy_utils::tokenize_with_text; +use declare_clippy_lint::declare_clippy_lint; use itertools::Itertools; use rustc_ast::token::CommentKind; use rustc_ast::{AssocItemKind, AttrKind, AttrStyle, Attribute, Crate, Item, ItemKind, ModKind, NodeId}; diff --git a/clippy_lints/src/empty_with_brackets.rs b/clippy_lints/src/empty_with_brackets.rs index 8c12364883c7..074c49509a12 100644 --- a/clippy_lints/src/empty_with_brackets.rs +++ b/clippy_lints/src/empty_with_brackets.rs @@ -1,5 +1,6 @@ use clippy_utils::attrs::span_contains_cfg; use clippy_utils::diagnostics::{span_lint_and_then, span_lint_hir_and_then}; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxIndexMap; use rustc_errors::Applicability; use rustc_hir::def::CtorOf; diff --git a/clippy_lints/src/endian_bytes.rs b/clippy_lints/src/endian_bytes.rs index a7670ffce887..0a185e8d7a08 100644 --- a/clippy_lints/src/endian_bytes.rs +++ b/clippy_lints/src/endian_bytes.rs @@ -1,6 +1,7 @@ use crate::Lint; use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::is_lint_allowed; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass, LintContext}; use rustc_middle::ty::Ty; diff --git a/clippy_lints/src/entry.rs b/clippy_lints/src/entry.rs index 182cb4e46d2b..d9e54aedab8d 100644 --- a/clippy_lints/src/entry.rs +++ b/clippy_lints/src/entry.rs @@ -7,6 +7,7 @@ use clippy_utils::{ peel_hir_expr_while, }; use core::fmt::{self, Write}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::hir_id::HirIdSet; use rustc_hir::intravisit::{Visitor, walk_body, walk_expr}; diff --git a/clippy_lints/src/enum_clike.rs b/clippy_lints/src/enum_clike.rs index ec81294624ef..18286ddedcac 100644 --- a/clippy_lints/src/enum_clike.rs +++ b/clippy_lints/src/enum_clike.rs @@ -1,5 +1,6 @@ use clippy_utils::consts::{Constant, mir_to_const}; use clippy_utils::diagnostics::span_lint; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Item, ItemKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_middle::ty::util::IntTypeExt; diff --git a/clippy_lints/src/equatable_if_let.rs b/clippy_lints/src/equatable_if_let.rs index 72f5eaf8a4bc..6ff10ffe0eeb 100644 --- a/clippy_lints/src/equatable_if_let.rs +++ b/clippy_lints/src/equatable_if_let.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::snippet_with_context; use clippy_utils::ty::implements_trait; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind, Pat, PatKind}; use rustc_lint::{LateContext, LateLintPass, LintContext}; diff --git a/clippy_lints/src/error_impl_error.rs b/clippy_lints/src/error_impl_error.rs index 6525648efb1e..7d08a0a78d6c 100644 --- a/clippy_lints/src/error_impl_error.rs +++ b/clippy_lints/src/error_impl_error.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::{span_lint, span_lint_hir_and_then}; use clippy_utils::path_res; use clippy_utils::ty::implements_trait; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::def_id::{DefId, LocalDefId}; use rustc_hir::{Item, ItemKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/escape.rs b/clippy_lints/src/escape.rs index 2cb3b32babe8..0ed90d9c54ff 100644 --- a/clippy_lints/src/escape.rs +++ b/clippy_lints/src/escape.rs @@ -1,5 +1,6 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_hir; +use declare_clippy_lint::declare_clippy_lint; use rustc_abi::ExternAbi; use rustc_hir::{AssocItemKind, Body, FnDecl, HirId, HirIdSet, Impl, ItemKind, Node, Pat, PatKind, intravisit}; use rustc_hir_typeck::expr_use_visitor::{Delegate, ExprUseVisitor, PlaceBase, PlaceWithHirId}; diff --git a/clippy_lints/src/eta_reduction.rs b/clippy_lints/src/eta_reduction.rs index 645f93068496..76e3c8cc2291 100644 --- a/clippy_lints/src/eta_reduction.rs +++ b/clippy_lints/src/eta_reduction.rs @@ -6,6 +6,7 @@ use clippy_utils::usage::{local_used_after_expr, local_used_in}; use clippy_utils::{ get_path_from_caller_to_method_type, is_adjusted, is_no_std_crate, path_to_local, path_to_local_id, }; +use declare_clippy_lint::declare_clippy_lint; use rustc_abi::ExternAbi; use rustc_errors::Applicability; use rustc_hir::{BindingMode, Expr, ExprKind, FnRetTy, GenericArgs, Param, PatKind, QPath, Safety, TyKind}; diff --git a/clippy_lints/src/excessive_bools.rs b/clippy_lints/src/excessive_bools.rs index 38d115b878c7..4040fd6fad0f 100644 --- a/clippy_lints/src/excessive_bools.rs +++ b/clippy_lints/src/excessive_bools.rs @@ -1,6 +1,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_help; use clippy_utils::{get_parent_as_impl, has_repr_attr, is_bool}; +use declare_clippy_lint::declare_clippy_lint; use rustc_abi::ExternAbi; use rustc_hir::intravisit::FnKind; use rustc_hir::{Body, FnDecl, Item, ItemKind, TraitFn, TraitItem, TraitItemKind, Ty}; diff --git a/clippy_lints/src/excessive_nesting.rs b/clippy_lints/src/excessive_nesting.rs index 1d3ae8949441..eb0a1701652d 100644 --- a/clippy_lints/src/excessive_nesting.rs +++ b/clippy_lints/src/excessive_nesting.rs @@ -1,6 +1,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_help; use clippy_utils::source::snippet; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::node_id::NodeSet; use rustc_ast::visit::{Visitor, walk_block, walk_item}; use rustc_ast::{Block, Crate, Inline, Item, ItemKind, ModKind, NodeId}; diff --git a/clippy_lints/src/exhaustive_items.rs b/clippy_lints/src/exhaustive_items.rs index 5a74e97c97c5..3f18ee23274a 100644 --- a/clippy_lints/src/exhaustive_items.rs +++ b/clippy_lints/src/exhaustive_items.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::indent_of; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Item, ItemKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/exit.rs b/clippy_lints/src/exit.rs index cc8e4d7d9e28..cd77669f6770 100644 --- a/clippy_lints/src/exit.rs +++ b/clippy_lints/src/exit.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint; use clippy_utils::is_entrypoint_fn; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Expr, ExprKind, Item, ItemKind, OwnerNode}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/explicit_write.rs b/clippy_lints/src/explicit_write.rs index a5a4e05b3a6d..741cbcf7be74 100644 --- a/clippy_lints/src/explicit_write.rs +++ b/clippy_lints/src/explicit_write.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::macros::{FormatArgsStorage, format_args_inputs_span}; use clippy_utils::source::snippet_with_applicability; use clippy_utils::{is_expn_of, path_def_id}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def::Res; use rustc_hir::{BindingMode, Block, BlockCheckMode, Expr, ExprKind, Node, PatKind, QPath, Stmt, StmtKind}; diff --git a/clippy_lints/src/extra_unused_type_parameters.rs b/clippy_lints/src/extra_unused_type_parameters.rs index c0b0fd88d9e1..106837213dd4 100644 --- a/clippy_lints/src/extra_unused_type_parameters.rs +++ b/clippy_lints/src/extra_unused_type_parameters.rs @@ -1,6 +1,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::{span_lint_and_help, span_lint_and_then}; use clippy_utils::{is_from_proc_macro, trait_ref_of_method}; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::{FxHashMap, FxHashSet}; use rustc_errors::Applicability; use rustc_hir::intravisit::{Visitor, walk_impl_item, walk_item, walk_param_bound, walk_ty, walk_unambig_ty}; diff --git a/clippy_lints/src/fallible_impl_from.rs b/clippy_lints/src/fallible_impl_from.rs index c868b782f43c..03645c68d022 100644 --- a/clippy_lints/src/fallible_impl_from.rs +++ b/clippy_lints/src/fallible_impl_from.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::macros::{is_panic, root_macro_call_first_node}; use clippy_utils::method_chain_args; use clippy_utils::ty::is_type_diagnostic_item; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir as hir; use rustc_lint::{LateContext, LateLintPass}; use rustc_middle::ty; diff --git a/clippy_lints/src/field_scoped_visibility_modifiers.rs b/clippy_lints/src/field_scoped_visibility_modifiers.rs index aae8291905d3..5af9ceda67f5 100644 --- a/clippy_lints/src/field_scoped_visibility_modifiers.rs +++ b/clippy_lints/src/field_scoped_visibility_modifiers.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_then; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{Item, ItemKind, VisibilityKind}; use rustc_lint::{EarlyContext, EarlyLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/float_literal.rs b/clippy_lints/src/float_literal.rs index c51267567d01..10ab54978da9 100644 --- a/clippy_lints/src/float_literal.rs +++ b/clippy_lints/src/float_literal.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::numeric_literal; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{self, LitFloatType, LitKind}; use rustc_errors::Applicability; use rustc_hir as hir; diff --git a/clippy_lints/src/floating_point_arithmetic.rs b/clippy_lints/src/floating_point_arithmetic.rs index e653a57196d6..3e37f5793e0b 100644 --- a/clippy_lints/src/floating_point_arithmetic.rs +++ b/clippy_lints/src/floating_point_arithmetic.rs @@ -5,14 +5,14 @@ use clippy_utils::{ eq_expr_value, get_parent_expr, higher, is_in_const_context, is_inherent_method_call, is_no_std_crate, numeric_literal, peel_blocks, sugg, sym, }; +use declare_clippy_lint::declare_clippy_lint; +use rustc_ast::ast; use rustc_errors::Applicability; use rustc_hir::{BinOpKind, Expr, ExprKind, PathSegment, UnOp}; use rustc_lint::{LateContext, LateLintPass}; use rustc_middle::ty; use rustc_session::declare_lint_pass; use rustc_span::source_map::Spanned; - -use rustc_ast::ast; use std::f32::consts as f32_consts; use std::f64::consts as f64_consts; use sugg::Sugg; diff --git a/clippy_lints/src/format.rs b/clippy_lints/src/format.rs index 94e66769eb26..48539c86c85c 100644 --- a/clippy_lints/src/format.rs +++ b/clippy_lints/src/format.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::macros::{FormatArgsStorage, find_format_arg_expr, root_macro_call_first_node}; use clippy_utils::source::{SpanRangeExt, snippet_with_context}; use clippy_utils::sugg::Sugg; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::{FormatArgsPiece, FormatOptions, FormatTrait}; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind}; diff --git a/clippy_lints/src/format_args.rs b/clippy_lints/src/format_args.rs index 8a3f8e1c5874..2ca94925a351 100644 --- a/clippy_lints/src/format_args.rs +++ b/clippy_lints/src/format_args.rs @@ -10,6 +10,7 @@ use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::{SpanRangeExt, snippet}; use clippy_utils::ty::{implements_trait, is_type_lang_item}; use clippy_utils::{is_diag_trait_item, is_from_proc_macro, is_in_test}; +use declare_clippy_lint::declare_clippy_lint; use itertools::Itertools; use rustc_ast::{ FormatArgPosition, FormatArgPositionKind, FormatArgsPiece, FormatArgumentKind, FormatCount, FormatOptions, diff --git a/clippy_lints/src/format_impl.rs b/clippy_lints/src/format_impl.rs index 0535ecf5240f..0a1f69df9667 100644 --- a/clippy_lints/src/format_impl.rs +++ b/clippy_lints/src/format_impl.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::{span_lint, span_lint_and_sugg}; use clippy_utils::macros::{FormatArgsStorage, find_format_arg_expr, is_format_macro, root_macro_call_first_node}; use clippy_utils::{get_parent_as_impl, is_diag_trait_item, path_to_local, peel_ref_operators, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::{FormatArgsPiece, FormatTrait}; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind, Impl, ImplItem, ImplItemKind, QPath}; diff --git a/clippy_lints/src/format_push_string.rs b/clippy_lints/src/format_push_string.rs index b64d608c0c70..1ce9dd923de0 100644 --- a/clippy_lints/src/format_push_string.rs +++ b/clippy_lints/src/format_push_string.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::higher; use clippy_utils::ty::is_type_lang_item; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{AssignOpKind, Expr, ExprKind, LangItem, MatchSource}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/formatting.rs b/clippy_lints/src/formatting.rs index 4b482f7b233b..ff1eb5a59bb3 100644 --- a/clippy_lints/src/formatting.rs +++ b/clippy_lints/src/formatting.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::{span_lint_and_help, span_lint_and_note}; use clippy_utils::is_span_if; use clippy_utils::source::snippet_opt; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{BinOpKind, Block, Expr, ExprKind, StmtKind}; use rustc_lint::{EarlyContext, EarlyLintPass, LintContext}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/four_forward_slashes.rs b/clippy_lints/src/four_forward_slashes.rs index 8822b87f92f7..ebd7011643b0 100644 --- a/clippy_lints/src/four_forward_slashes.rs +++ b/clippy_lints/src/four_forward_slashes.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_then; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::Item; use rustc_lint::{LateContext, LateLintPass, LintContext}; diff --git a/clippy_lints/src/from_over_into.rs b/clippy_lints/src/from_over_into.rs index be887b03ae4b..e30a7adfa67b 100644 --- a/clippy_lints/src/from_over_into.rs +++ b/clippy_lints/src/from_over_into.rs @@ -6,6 +6,7 @@ use clippy_utils::macros::span_is_local; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::path_def_id; use clippy_utils::source::SpanRangeExt; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::intravisit::{Visitor, walk_path}; use rustc_hir::{ diff --git a/clippy_lints/src/from_raw_with_void_ptr.rs b/clippy_lints/src/from_raw_with_void_ptr.rs index 5e2e2c9dbf72..d5b5be4ef396 100644 --- a/clippy_lints/src/from_raw_with_void_ptr.rs +++ b/clippy_lints/src/from_raw_with_void_ptr.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_help; use clippy_utils::ty::is_c_void; use clippy_utils::{path_def_id, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::def_id::DefId; use rustc_hir::{Expr, ExprKind, QPath}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/from_str_radix_10.rs b/clippy_lints/src/from_str_radix_10.rs index b816963cc825..41c04d1424d6 100644 --- a/clippy_lints/src/from_str_radix_10.rs +++ b/clippy_lints/src/from_str_radix_10.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::sugg::Sugg; use clippy_utils::ty::{is_type_diagnostic_item, is_type_lang_item}; use clippy_utils::{is_in_const_context, is_integer_literal, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind, LangItem, PrimTy, QPath, TyKind, def}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/functions/mod.rs b/clippy_lints/src/functions/mod.rs index d0d02a382d15..23a6aa068a60 100644 --- a/clippy_lints/src/functions/mod.rs +++ b/clippy_lints/src/functions/mod.rs @@ -11,6 +11,7 @@ mod too_many_lines; use clippy_config::Conf; use clippy_utils::msrvs::Msrv; use clippy_utils::paths::{PathNS, lookup_path_str}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir as hir; use rustc_hir::intravisit; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/future_not_send.rs b/clippy_lints/src/future_not_send.rs index 3ccfa51ab70b..4dd56fcb3025 100644 --- a/clippy_lints/src/future_not_send.rs +++ b/clippy_lints/src/future_not_send.rs @@ -2,6 +2,7 @@ use std::ops::ControlFlow; use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::return_ty; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::intravisit::FnKind; use rustc_hir::{Body, FnDecl}; use rustc_infer::infer::TyCtxtInferExt; diff --git a/clippy_lints/src/if_let_mutex.rs b/clippy_lints/src/if_let_mutex.rs index 6444e99ae9cd..46fe7910ac02 100644 --- a/clippy_lints/src/if_let_mutex.rs +++ b/clippy_lints/src/if_let_mutex.rs @@ -3,6 +3,7 @@ use clippy_utils::ty::is_type_diagnostic_item; use clippy_utils::visitors::for_each_expr_without_closures; use clippy_utils::{eq_expr_value, higher}; use core::ops::ControlFlow; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Diag; use rustc_hir::{Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/if_not_else.rs b/clippy_lints/src/if_not_else.rs index 45f9aa0a53e4..589c395b4d52 100644 --- a/clippy_lints/src/if_not_else.rs +++ b/clippy_lints/src/if_not_else.rs @@ -2,6 +2,7 @@ use clippy_utils::consts::{ConstEvalCtxt, Constant}; use clippy_utils::diagnostics::{span_lint_and_help, span_lint_and_sugg}; use clippy_utils::is_else_clause; use clippy_utils::source::{HasSession, indent_of, reindent_multiline, snippet}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{BinOpKind, Expr, ExprKind, UnOp}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/if_then_some_else_none.rs b/clippy_lints/src/if_then_some_else_none.rs index 9e94280fc074..ff7b910f73fd 100644 --- a/clippy_lints/src/if_then_some_else_none.rs +++ b/clippy_lints/src/if_then_some_else_none.rs @@ -7,6 +7,7 @@ use clippy_utils::sugg::Sugg; use clippy_utils::{ contains_return, higher, is_else_clause, is_in_const_context, is_res_lang_ctor, path_res, peel_blocks, }; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::LangItem::{OptionNone, OptionSome}; use rustc_hir::{Expr, ExprKind}; diff --git a/clippy_lints/src/ignored_unit_patterns.rs b/clippy_lints/src/ignored_unit_patterns.rs index e4ace3bdabf0..50e85f61f528 100644 --- a/clippy_lints/src/ignored_unit_patterns.rs +++ b/clippy_lints/src/ignored_unit_patterns.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_sugg; +use declare_clippy_lint::declare_clippy_lint; use hir::{Node, PatKind}; use rustc_errors::Applicability; use rustc_hir as hir; diff --git a/clippy_lints/src/impl_hash_with_borrow_str_and_bytes.rs b/clippy_lints/src/impl_hash_with_borrow_str_and_bytes.rs index 940adbae428e..1625a8c299ec 100644 --- a/clippy_lints/src/impl_hash_with_borrow_str_and_bytes.rs +++ b/clippy_lints/src/impl_hash_with_borrow_str_and_bytes.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::ty::implements_trait; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::def::{DefKind, Res}; use rustc_hir::{Item, ItemKind, Path, TraitRef}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/implicit_hasher.rs b/clippy_lints/src/implicit_hasher.rs index cab7a9fb7099..72de0133cd80 100644 --- a/clippy_lints/src/implicit_hasher.rs +++ b/clippy_lints/src/implicit_hasher.rs @@ -15,6 +15,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::{IntoSpan, SpanRangeExt, snippet}; use clippy_utils::sym; use clippy_utils::ty::is_type_diagnostic_item; +use declare_clippy_lint::declare_clippy_lint; declare_clippy_lint! { /// ### What it does diff --git a/clippy_lints/src/implicit_return.rs b/clippy_lints/src/implicit_return.rs index 076017a247b4..f868d9e52903 100644 --- a/clippy_lints/src/implicit_return.rs +++ b/clippy_lints/src/implicit_return.rs @@ -3,6 +3,7 @@ use clippy_utils::source::{snippet_with_applicability, snippet_with_context, wal use clippy_utils::visitors::for_each_expr_without_closures; use clippy_utils::{desugar_await, get_async_closure_expr, get_async_fn_body, is_async_fn, is_from_proc_macro}; use core::ops::ControlFlow; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::intravisit::FnKind; use rustc_hir::{Block, Body, Expr, ExprKind, FnDecl, FnRetTy, HirId}; diff --git a/clippy_lints/src/implicit_saturating_add.rs b/clippy_lints/src/implicit_saturating_add.rs index 185fc2aa2d4a..fa16994aff77 100644 --- a/clippy_lints/src/implicit_saturating_add.rs +++ b/clippy_lints/src/implicit_saturating_add.rs @@ -2,6 +2,7 @@ use clippy_utils::consts::{ConstEvalCtxt, Constant}; use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::get_parent_expr; use clippy_utils::source::snippet_with_context; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{LitIntType, LitKind}; use rustc_data_structures::packed::Pu128; use rustc_errors::Applicability; diff --git a/clippy_lints/src/implicit_saturating_sub.rs b/clippy_lints/src/implicit_saturating_sub.rs index 0823ef53ef98..302b3a4d227a 100644 --- a/clippy_lints/src/implicit_saturating_sub.rs +++ b/clippy_lints/src/implicit_saturating_sub.rs @@ -5,6 +5,7 @@ use clippy_utils::sugg::{Sugg, make_binop}; use clippy_utils::{ SpanlessEq, eq_expr_value, higher, is_in_const_context, is_integer_literal, peel_blocks, peel_blocks_with_stmt, }; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::LitKind; use rustc_data_structures::packed::Pu128; use rustc_errors::Applicability; diff --git a/clippy_lints/src/implied_bounds_in_impls.rs b/clippy_lints/src/implied_bounds_in_impls.rs index 6b89abdb0367..bc4352515078 100644 --- a/clippy_lints/src/implied_bounds_in_impls.rs +++ b/clippy_lints/src/implied_bounds_in_impls.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::snippet; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::{Applicability, SuggestionStyle}; use rustc_hir::def_id::DefId; use rustc_hir::{ diff --git a/clippy_lints/src/incompatible_msrv.rs b/clippy_lints/src/incompatible_msrv.rs index e55edb1fcaa8..a2d07e473f1a 100644 --- a/clippy_lints/src/incompatible_msrv.rs +++ b/clippy_lints/src/incompatible_msrv.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint; use clippy_utils::is_in_test; use clippy_utils::msrvs::Msrv; +use declare_clippy_lint::declare_clippy_lint; use rustc_attr_parsing::{RustcVersion, StabilityLevel, StableSince}; use rustc_data_structures::fx::FxHashMap; use rustc_hir::{Expr, ExprKind, HirId, QPath}; diff --git a/clippy_lints/src/inconsistent_struct_constructor.rs b/clippy_lints/src/inconsistent_struct_constructor.rs index e6129757e560..3b4032ca6722 100644 --- a/clippy_lints/src/inconsistent_struct_constructor.rs +++ b/clippy_lints/src/inconsistent_struct_constructor.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::fulfill_or_allowed; use clippy_utils::source::snippet; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxHashMap; use rustc_errors::Applicability; use rustc_hir::{self as hir, ExprKind}; diff --git a/clippy_lints/src/index_refutable_slice.rs b/clippy_lints/src/index_refutable_slice.rs index 989997d69f7c..6a876f86a662 100644 --- a/clippy_lints/src/index_refutable_slice.rs +++ b/clippy_lints/src/index_refutable_slice.rs @@ -5,6 +5,7 @@ use clippy_utils::higher::IfLet; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::ty::is_copy; use clippy_utils::{is_expn_of, is_lint_allowed, path_to_local}; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::{FxHashSet, FxIndexMap, FxIndexSet}; use rustc_errors::Applicability; use rustc_hir as hir; diff --git a/clippy_lints/src/indexing_slicing.rs b/clippy_lints/src/indexing_slicing.rs index 99a393b4d53a..bb4a814d2b8d 100644 --- a/clippy_lints/src/indexing_slicing.rs +++ b/clippy_lints/src/indexing_slicing.rs @@ -3,6 +3,7 @@ use clippy_utils::consts::{ConstEvalCtxt, Constant}; use clippy_utils::diagnostics::{span_lint, span_lint_and_then}; use clippy_utils::ty::{deref_chain, get_adt_inherent_method}; use clippy_utils::{higher, is_from_proc_macro, is_in_test, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::RangeLimits; use rustc_hir::{Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/ineffective_open_options.rs b/clippy_lints/src/ineffective_open_options.rs index 3a28553b55e2..acb5551315e0 100644 --- a/clippy_lints/src/ineffective_open_options.rs +++ b/clippy_lints/src/ineffective_open_options.rs @@ -1,6 +1,7 @@ use crate::methods::method_call; use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::peel_blocks; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::LitKind; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind}; diff --git a/clippy_lints/src/infinite_iter.rs b/clippy_lints/src/infinite_iter.rs index c4e10837bf19..8a79624e4971 100644 --- a/clippy_lints/src/infinite_iter.rs +++ b/clippy_lints/src/infinite_iter.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint; use clippy_utils::ty::{get_type_diagnostic_name, implements_trait}; use clippy_utils::{higher, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{BorrowKind, Closure, Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/inherent_impl.rs b/clippy_lints/src/inherent_impl.rs index 309d2dfb28b8..5d7902f6f53d 100644 --- a/clippy_lints/src/inherent_impl.rs +++ b/clippy_lints/src/inherent_impl.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::is_lint_allowed; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxHashMap; use rustc_hir::def_id::LocalDefId; use rustc_hir::{Item, ItemKind, Node}; diff --git a/clippy_lints/src/inherent_to_string.rs b/clippy_lints/src/inherent_to_string.rs index 7f2e25367a6a..e66f65343cf4 100644 --- a/clippy_lints/src/inherent_to_string.rs +++ b/clippy_lints/src/inherent_to_string.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_help; use clippy_utils::ty::{implements_trait, is_type_lang_item}; use clippy_utils::{return_ty, trait_ref_of_method}; +use declare_clippy_lint::declare_clippy_lint; use rustc_abi::ExternAbi; use rustc_hir::{GenericParamKind, ImplItem, ImplItemKind, LangItem}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/init_numbered_fields.rs b/clippy_lints/src/init_numbered_fields.rs index 7a14bbfb9e8b..d4c333f2c0cb 100644 --- a/clippy_lints/src/init_numbered_fields.rs +++ b/clippy_lints/src/init_numbered_fields.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::{snippet_with_applicability, snippet_with_context}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def::{DefKind, Res}; use rustc_hir::{Expr, ExprKind, StructTailExpr}; diff --git a/clippy_lints/src/inline_fn_without_body.rs b/clippy_lints/src/inline_fn_without_body.rs index da5ca5e67721..aa85bdd3bd73 100644 --- a/clippy_lints/src/inline_fn_without_body.rs +++ b/clippy_lints/src/inline_fn_without_body.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::sugg::DiagExt; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{TraitFn, TraitItem, TraitItemKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/instant_subtraction.rs b/clippy_lints/src/instant_subtraction.rs index 91f65d0b79ca..94374774061d 100644 --- a/clippy_lints/src/instant_subtraction.rs +++ b/clippy_lints/src/instant_subtraction.rs @@ -4,6 +4,7 @@ use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::snippet_with_context; use clippy_utils::sugg::Sugg; use clippy_utils::ty; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{BinOpKind, Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/int_plus_one.rs b/clippy_lints/src/int_plus_one.rs index 67ce57de254d..eda65b079fd8 100644 --- a/clippy_lints/src/int_plus_one.rs +++ b/clippy_lints/src/int_plus_one.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::SpanRangeExt; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{BinOpKind, Expr, ExprKind, LitKind}; use rustc_ast::token; use rustc_errors::Applicability; diff --git a/clippy_lints/src/integer_division_remainder_used.rs b/clippy_lints/src/integer_division_remainder_used.rs index a1215491b48c..b9f8374c813d 100644 --- a/clippy_lints/src/integer_division_remainder_used.rs +++ b/clippy_lints/src/integer_division_remainder_used.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::BinOpKind; use rustc_hir::{Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/invalid_upcast_comparisons.rs b/clippy_lints/src/invalid_upcast_comparisons.rs index b0ecc5d52ddb..2ae8540b5263 100644 --- a/clippy_lints/src/invalid_upcast_comparisons.rs +++ b/clippy_lints/src/invalid_upcast_comparisons.rs @@ -10,6 +10,7 @@ use clippy_utils::comparisons::Rel; use clippy_utils::consts::{ConstEvalCtxt, FullInt}; use clippy_utils::diagnostics::span_lint; use clippy_utils::source::snippet; +use declare_clippy_lint::declare_clippy_lint; declare_clippy_lint! { /// ### What it does diff --git a/clippy_lints/src/item_name_repetitions.rs b/clippy_lints/src/item_name_repetitions.rs index 3d4dcd020702..fc9627e458ae 100644 --- a/clippy_lints/src/item_name_repetitions.rs +++ b/clippy_lints/src/item_name_repetitions.rs @@ -4,6 +4,7 @@ use clippy_utils::is_bool; use clippy_utils::macros::span_is_local; use clippy_utils::source::is_present_in_source; use clippy_utils::str_utils::{camel_case_split, count_match_end, count_match_start, to_camel_case, to_snake_case}; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxHashSet; use rustc_hir::{EnumDef, FieldDef, Item, ItemKind, OwnerId, QPath, TyKind, Variant, VariantData}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/items_after_statements.rs b/clippy_lints/src/items_after_statements.rs index 021d43cefdda..8fead6effd03 100644 --- a/clippy_lints/src/items_after_statements.rs +++ b/clippy_lints/src/items_after_statements.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_hir; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Block, ItemKind, StmtKind}; use rustc_lint::{LateContext, LateLintPass, LintContext}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/items_after_test_module.rs b/clippy_lints/src/items_after_test_module.rs index dd63de288b87..a76d0cd4b88e 100644 --- a/clippy_lints/src/items_after_test_module.rs +++ b/clippy_lints/src/items_after_test_module.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_hir_and_then; use clippy_utils::source::SpanRangeExt; use clippy_utils::{fulfill_or_allowed, is_cfg_test, is_from_proc_macro}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::{Applicability, SuggestionStyle}; use rustc_hir::{HirId, Item, ItemKind, Mod}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/iter_not_returning_iterator.rs b/clippy_lints/src/iter_not_returning_iterator.rs index 753360906d66..0bbc373eaafa 100644 --- a/clippy_lints/src/iter_not_returning_iterator.rs +++ b/clippy_lints/src/iter_not_returning_iterator.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint; use clippy_utils::ty::implements_trait; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::def_id::LocalDefId; use rustc_hir::{FnSig, ImplItem, ImplItemKind, Item, ItemKind, Node, TraitItem, TraitItemKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/iter_over_hash_type.rs b/clippy_lints/src/iter_over_hash_type.rs index b1cb6da9475b..6bd427d8b1bd 100644 --- a/clippy_lints/src/iter_over_hash_type.rs +++ b/clippy_lints/src/iter_over_hash_type.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint; use clippy_utils::higher::ForLoop; use clippy_utils::ty::is_type_diagnostic_item; +use declare_clippy_lint::declare_clippy_lint; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; use rustc_span::sym; diff --git a/clippy_lints/src/iter_without_into_iter.rs b/clippy_lints/src/iter_without_into_iter.rs index 900b20aa9cfb..41f15e53031f 100644 --- a/clippy_lints/src/iter_without_into_iter.rs +++ b/clippy_lints/src/iter_without_into_iter.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::snippet; use clippy_utils::ty::{deref_chain, get_adt_inherent_method, implements_trait, make_normalized_projection}; use clippy_utils::{get_parent_as_impl, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::Mutability; use rustc_errors::Applicability; use rustc_hir::{FnRetTy, ImplItemKind, ImplicitSelfKind, ItemKind, TyKind}; diff --git a/clippy_lints/src/large_const_arrays.rs b/clippy_lints/src/large_const_arrays.rs index 394005e99129..c72c94dc60f8 100644 --- a/clippy_lints/src/large_const_arrays.rs +++ b/clippy_lints/src/large_const_arrays.rs @@ -1,5 +1,6 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_then; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Item, ItemKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/large_enum_variant.rs b/clippy_lints/src/large_enum_variant.rs index d08efa0ec9cc..30be5f31918a 100644 --- a/clippy_lints/src/large_enum_variant.rs +++ b/clippy_lints/src/large_enum_variant.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::snippet_with_applicability; use clippy_utils::ty::{AdtVariantInfo, approx_ty_size, is_copy}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Item, ItemKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/large_futures.rs b/clippy_lints/src/large_futures.rs index fd7965d564d5..127f9b8e990d 100644 --- a/clippy_lints/src/large_futures.rs +++ b/clippy_lints/src/large_futures.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::snippet; use clippy_utils::ty::implements_trait; +use declare_clippy_lint::declare_clippy_lint; use rustc_abi::Size; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind, LangItem, MatchSource, QPath}; diff --git a/clippy_lints/src/large_include_file.rs b/clippy_lints/src/large_include_file.rs index 621a2af1d322..3ecf87c28cc1 100644 --- a/clippy_lints/src/large_include_file.rs +++ b/clippy_lints/src/large_include_file.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::macros::root_macro_call_first_node; use clippy_utils::source::snippet_opt; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::{AttrArgs, AttrKind, Attribute, LitKind}; use rustc_hir::{Expr, ExprKind}; use rustc_lint::{EarlyContext, EarlyLintPass, LateContext, LateLintPass}; diff --git a/clippy_lints/src/large_stack_arrays.rs b/clippy_lints/src/large_stack_arrays.rs index 620e27fa67c6..6c90d93fc8f3 100644 --- a/clippy_lints/src/large_stack_arrays.rs +++ b/clippy_lints/src/large_stack_arrays.rs @@ -5,6 +5,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::is_from_proc_macro; use clippy_utils::macros::macro_backtrace; use clippy_utils::source::snippet; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Expr, ExprKind, Item, ItemKind, Node}; use rustc_lint::{LateContext, LateLintPass}; use rustc_middle::ty; diff --git a/clippy_lints/src/large_stack_frames.rs b/clippy_lints/src/large_stack_frames.rs index 5ed948c02bbc..055cca4a7187 100644 --- a/clippy_lints/src/large_stack_frames.rs +++ b/clippy_lints/src/large_stack_frames.rs @@ -4,6 +4,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::fn_has_unsatisfiable_preds; use clippy_utils::source::SpanRangeExt; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::def_id::LocalDefId; use rustc_hir::intravisit::FnKind; use rustc_hir::{Body, FnDecl}; diff --git a/clippy_lints/src/legacy_numeric_constants.rs b/clippy_lints/src/legacy_numeric_constants.rs index 01b49403cac8..254c41a9bd40 100644 --- a/clippy_lints/src/legacy_numeric_constants.rs +++ b/clippy_lints/src/legacy_numeric_constants.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::{span_lint_and_then, span_lint_hir_and_then}; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::{get_parent_expr, is_from_proc_macro}; +use declare_clippy_lint::declare_clippy_lint; use hir::def_id::DefId; use rustc_errors::Applicability; use rustc_hir as hir; diff --git a/clippy_lints/src/len_zero.rs b/clippy_lints/src/len_zero.rs index aded31971cec..1959b820c692 100644 --- a/clippy_lints/src/len_zero.rs +++ b/clippy_lints/src/len_zero.rs @@ -5,6 +5,7 @@ use clippy_utils::ty::implements_trait; use clippy_utils::{ fulfill_or_allowed, get_parent_as_impl, is_trait_method, parent_item_name, peel_ref_operators, sym, }; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::LitKind; use rustc_errors::Applicability; use rustc_hir::def::Res; diff --git a/clippy_lints/src/let_if_seq.rs b/clippy_lints/src/let_if_seq.rs index 5db28e9ae9b8..84f3a3b96951 100644 --- a/clippy_lints/src/let_if_seq.rs +++ b/clippy_lints/src/let_if_seq.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_hir_and_then; use clippy_utils::path_to_local_id; use clippy_utils::source::snippet; use clippy_utils::visitors::is_local_used; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir as hir; use rustc_hir::{BindingMode, Mutability}; diff --git a/clippy_lints/src/let_underscore.rs b/clippy_lints/src/let_underscore.rs index 916191b2a7b0..3cc693ef40d5 100644 --- a/clippy_lints/src/let_underscore.rs +++ b/clippy_lints/src/let_underscore.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::ty::{implements_trait, is_must_use_ty}; use clippy_utils::{is_from_proc_macro, is_must_use_func_call, paths}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{LetStmt, LocalSource, PatKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_middle::ty::{GenericArgKind, IsSuggestable}; diff --git a/clippy_lints/src/let_with_type_underscore.rs b/clippy_lints/src/let_with_type_underscore.rs index 1917ca24a05b..b12df10c6c66 100644 --- a/clippy_lints/src/let_with_type_underscore.rs +++ b/clippy_lints/src/let_with_type_underscore.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::is_from_proc_macro; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{LetStmt, TyKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/lib.rs b/clippy_lints/src/lib.rs index 006145cc623c..466158b460dc 100644 --- a/clippy_lints/src/lib.rs +++ b/clippy_lints/src/lib.rs @@ -57,9 +57,6 @@ extern crate rustc_target; extern crate rustc_trait_selection; extern crate thin_vec; -#[macro_use] -mod declare_clippy_lint; - #[macro_use] extern crate clippy_utils; @@ -407,109 +404,11 @@ mod zombie_processes; use clippy_config::{Conf, get_configuration_metadata, sanitize_explanation}; use clippy_utils::macros::FormatArgsStorage; +use declare_clippy_lint::RegistrationGroups; use rustc_data_structures::fx::FxHashSet; -use rustc_lint::{Lint, LintId}; +use rustc_lint::Lint; use utils::attr_collector::{AttrCollector, AttrStorage}; -#[derive(Default)] -struct RegistrationGroups { - all: Vec, - cargo: Vec, - complexity: Vec, - correctness: Vec, - nursery: Vec, - pedantic: Vec, - perf: Vec, - restriction: Vec, - style: Vec, - suspicious: Vec, -} - -impl RegistrationGroups { - #[rustfmt::skip] - fn register(self, store: &mut rustc_lint::LintStore) { - store.register_group(true, "clippy::all", Some("clippy_all"), self.all); - store.register_group(true, "clippy::cargo", Some("clippy_cargo"), self.cargo); - store.register_group(true, "clippy::complexity", Some("clippy_complexity"), self.complexity); - store.register_group(true, "clippy::correctness", Some("clippy_correctness"), self.correctness); - store.register_group(true, "clippy::nursery", Some("clippy_nursery"), self.nursery); - store.register_group(true, "clippy::pedantic", Some("clippy_pedantic"), self.pedantic); - store.register_group(true, "clippy::perf", Some("clippy_perf"), self.perf); - store.register_group(true, "clippy::restriction", Some("clippy_restriction"), self.restriction); - store.register_group(true, "clippy::style", Some("clippy_style"), self.style); - store.register_group(true, "clippy::suspicious", Some("clippy_suspicious"), self.suspicious); - } -} - -#[derive(Copy, Clone, Debug)] -pub(crate) enum LintCategory { - Cargo, - Complexity, - Correctness, - Nursery, - Pedantic, - Perf, - Restriction, - Style, - Suspicious, -} - -#[allow(clippy::enum_glob_use)] -use LintCategory::*; - -impl LintCategory { - fn is_all(self) -> bool { - matches!(self, Correctness | Suspicious | Style | Complexity | Perf) - } - - fn group(self, groups: &mut RegistrationGroups) -> &mut Vec { - match self { - Cargo => &mut groups.cargo, - Complexity => &mut groups.complexity, - Correctness => &mut groups.correctness, - Nursery => &mut groups.nursery, - Pedantic => &mut groups.pedantic, - Perf => &mut groups.perf, - Restriction => &mut groups.restriction, - Style => &mut groups.style, - Suspicious => &mut groups.suspicious, - } - } -} - -pub struct LintInfo { - /// Double reference to maintain pointer equality - pub lint: &'static &'static Lint, - category: LintCategory, - pub explanation: &'static str, - /// e.g. `clippy_lints/src/absolute_paths.rs#43` - pub location: &'static str, - pub version: Option<&'static str>, -} - -impl LintInfo { - /// Returns the lint name in lowercase without the `clippy::` prefix - #[allow(clippy::missing_panics_doc)] - pub fn name_lower(&self) -> String { - self.lint.name.strip_prefix("clippy::").unwrap().to_ascii_lowercase() - } - - /// Returns the name of the lint's category in lowercase (`style`, `pedantic`) - pub fn category_str(&self) -> &'static str { - match self.category { - Cargo => "cargo", - Complexity => "complexity", - Correctness => "correctness", - Nursery => "nursery", - Pedantic => "pedantic", - Perf => "perf", - Restriction => "restriction", - Style => "style", - Suspicious => "suspicious", - } - } -} - pub fn explain(name: &str) -> i32 { let target = format!("clippy::{}", name.to_ascii_uppercase()); @@ -532,29 +431,12 @@ pub fn explain(name: &str) -> i32 { } } -fn register_categories(store: &mut rustc_lint::LintStore) { - let mut groups = RegistrationGroups::default(); - - for LintInfo { lint, category, .. } in declared_lints::LINTS { - if category.is_all() { - groups.all.push(LintId::of(lint)); - } - - category.group(&mut groups).push(LintId::of(lint)); - } - - let lints: Vec<&'static Lint> = declared_lints::LINTS.iter().map(|info| *info.lint).collect(); - - store.register_lints(&lints); - groups.register(store); -} - /// Register all lints and lint groups with the rustc lint store /// /// Used in `./src/driver.rs`. #[expect(clippy::too_many_lines)] -pub fn register_lints(store: &mut rustc_lint::LintStore, conf: &'static Conf) { - register_categories(store); +pub fn register_lints(store: &mut rustc_lint::LintStore, conf: &'static Conf, groups: &mut RegistrationGroups) { + groups.insert_lints(declared_lints::LINTS); for (old_name, new_name) in deprecated_lints::RENAMED { store.register_renamed(old_name, new_name); diff --git a/clippy_lints/src/lifetimes.rs b/clippy_lints/src/lifetimes.rs index 8fe0c9d60f96..3af7b9720c9d 100644 --- a/clippy_lints/src/lifetimes.rs +++ b/clippy_lints/src/lifetimes.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::{span_lint, span_lint_and_then}; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::trait_ref_of_method; +use declare_clippy_lint::declare_clippy_lint; use itertools::Itertools; use rustc_ast::visit::{try_visit, walk_list}; use rustc_data_structures::fx::{FxHashSet, FxIndexMap, FxIndexSet}; diff --git a/clippy_lints/src/lines_filter_map_ok.rs b/clippy_lints/src/lines_filter_map_ok.rs index d8af44233d3e..41b3438b778b 100644 --- a/clippy_lints/src/lines_filter_map_ok.rs +++ b/clippy_lints/src/lines_filter_map_ok.rs @@ -3,6 +3,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::ty::is_type_diagnostic_item; use clippy_utils::{is_diag_item_method, is_trait_method, path_to_local_id}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Body, Closure, Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/literal_representation.rs b/clippy_lints/src/literal_representation.rs index 7cbfa2d097ae..d81e55b535b2 100644 --- a/clippy_lints/src/literal_representation.rs +++ b/clippy_lints/src/literal_representation.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::numeric_literal::{NumericLiteral, Radix}; use clippy_utils::source::SpanRangeExt; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{Expr, ExprKind, LitKind}; use rustc_ast::token; use rustc_errors::Applicability; diff --git a/clippy_lints/src/literal_string_with_formatting_args.rs b/clippy_lints/src/literal_string_with_formatting_args.rs index 244e7c95122e..45e5a347782f 100644 --- a/clippy_lints/src/literal_string_with_formatting_args.rs +++ b/clippy_lints/src/literal_string_with_formatting_args.rs @@ -9,6 +9,7 @@ use rustc_span::{BytePos, Span}; use clippy_utils::diagnostics::span_lint; use clippy_utils::is_from_proc_macro; use clippy_utils::mir::enclosing_mir; +use declare_clippy_lint::declare_clippy_lint; declare_clippy_lint! { /// ### What it does diff --git a/clippy_lints/src/loops/mod.rs b/clippy_lints/src/loops/mod.rs index 56d2bef2305a..4b2f64689f5f 100644 --- a/clippy_lints/src/loops/mod.rs +++ b/clippy_lints/src/loops/mod.rs @@ -27,6 +27,7 @@ mod while_let_on_iterator; use clippy_config::Conf; use clippy_utils::higher; use clippy_utils::msrvs::Msrv; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::Label; use rustc_hir::{Expr, ExprKind, LoopSource, Pat}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/macro_metavars_in_unsafe.rs b/clippy_lints/src/macro_metavars_in_unsafe.rs index 9071c9c95f9d..3d68c24a613c 100644 --- a/clippy_lints/src/macro_metavars_in_unsafe.rs +++ b/clippy_lints/src/macro_metavars_in_unsafe.rs @@ -1,6 +1,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_hir_and_then; use clippy_utils::is_lint_allowed; +use declare_clippy_lint::declare_clippy_lint; use itertools::Itertools; use rustc_hir::def_id::LocalDefId; use rustc_hir::intravisit::{Visitor, walk_block, walk_expr, walk_stmt}; diff --git a/clippy_lints/src/macro_use.rs b/clippy_lints/src/macro_use.rs index 98ad1f6a160d..8278e8012063 100644 --- a/clippy_lints/src/macro_use.rs +++ b/clippy_lints/src/macro_use.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_hir_and_then; use clippy_utils::source::snippet; +use declare_clippy_lint::declare_clippy_lint; use hir::def::{DefKind, Res}; use rustc_data_structures::fx::FxHashSet; use rustc_errors::Applicability; diff --git a/clippy_lints/src/main_recursion.rs b/clippy_lints/src/main_recursion.rs index 01ea2f5debea..674991ba57cf 100644 --- a/clippy_lints/src/main_recursion.rs +++ b/clippy_lints/src/main_recursion.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_help; use clippy_utils::source::snippet; use clippy_utils::{is_entrypoint_fn, is_no_std_crate}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Expr, ExprKind, QPath}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::impl_lint_pass; diff --git a/clippy_lints/src/manual_abs_diff.rs b/clippy_lints/src/manual_abs_diff.rs index bac4b3d32f2a..c0c32b124fd5 100644 --- a/clippy_lints/src/manual_abs_diff.rs +++ b/clippy_lints/src/manual_abs_diff.rs @@ -6,6 +6,7 @@ use clippy_utils::source::HasSession as _; use clippy_utils::sugg::Sugg; use clippy_utils::ty::is_type_diagnostic_item; use clippy_utils::{eq_expr_value, peel_blocks, span_contains_comment}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{BinOpKind, Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/manual_assert.rs b/clippy_lints/src/manual_assert.rs index 8378e15c581c..994045c46acf 100644 --- a/clippy_lints/src/manual_assert.rs +++ b/clippy_lints/src/manual_assert.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::macros::{is_panic, root_macro_call}; use clippy_utils::{is_else_clause, is_parent_stmt, peel_blocks_with_stmt, span_extract_comment, sugg}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind, UnOp}; use rustc_lint::{LateContext, LateLintPass, LintContext}; diff --git a/clippy_lints/src/manual_async_fn.rs b/clippy_lints/src/manual_async_fn.rs index abd1ac954cda..5d726762e194 100644 --- a/clippy_lints/src/manual_async_fn.rs +++ b/clippy_lints/src/manual_async_fn.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::{SpanRangeExt, position_before_rarrow, snippet_block}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::intravisit::FnKind; use rustc_hir::{ diff --git a/clippy_lints/src/manual_bits.rs b/clippy_lints/src/manual_bits.rs index 40fe88532729..1c423a226881 100644 --- a/clippy_lints/src/manual_bits.rs +++ b/clippy_lints/src/manual_bits.rs @@ -3,6 +3,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::get_parent_expr; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::snippet_with_context; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::LitKind; use rustc_data_structures::packed::Pu128; use rustc_errors::Applicability; diff --git a/clippy_lints/src/manual_clamp.rs b/clippy_lints/src/manual_clamp.rs index 02afe9f0997d..c4d0bd20f9b2 100644 --- a/clippy_lints/src/manual_clamp.rs +++ b/clippy_lints/src/manual_clamp.rs @@ -10,6 +10,7 @@ use clippy_utils::{ MaybePath, eq_expr_value, is_diag_trait_item, is_in_const_context, is_trait_method, path_res, path_to_local_id, peel_blocks, peel_blocks_with_stmt, }; +use declare_clippy_lint::declare_clippy_lint; use itertools::Itertools; use rustc_errors::{Applicability, Diag}; use rustc_hir::def::Res; diff --git a/clippy_lints/src/manual_div_ceil.rs b/clippy_lints/src/manual_div_ceil.rs index ed0cce754b95..d5fbb6077ff4 100644 --- a/clippy_lints/src/manual_div_ceil.rs +++ b/clippy_lints/src/manual_div_ceil.rs @@ -4,6 +4,7 @@ use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::snippet_with_context; use clippy_utils::sugg::{Sugg, has_enclosing_paren}; use clippy_utils::{SpanlessEq, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::{BinOpKind, LitIntType, LitKind, UnOp}; use rustc_data_structures::packed::Pu128; use rustc_errors::Applicability; diff --git a/clippy_lints/src/manual_float_methods.rs b/clippy_lints/src/manual_float_methods.rs index bd2785fea270..b5418081628c 100644 --- a/clippy_lints/src/manual_float_methods.rs +++ b/clippy_lints/src/manual_float_methods.rs @@ -4,6 +4,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::SpanRangeExt; use clippy_utils::{is_from_proc_macro, path_to_local}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def::DefKind; use rustc_hir::def_id::DefId; diff --git a/clippy_lints/src/manual_hash_one.rs b/clippy_lints/src/manual_hash_one.rs index b3ee45cc0209..019e7c8e0902 100644 --- a/clippy_lints/src/manual_hash_one.rs +++ b/clippy_lints/src/manual_hash_one.rs @@ -4,6 +4,7 @@ use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::SpanRangeExt; use clippy_utils::visitors::{is_local_used, local_used_once}; use clippy_utils::{is_trait_method, path_to_local_id, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{BindingMode, ExprKind, LetStmt, Node, PatKind, StmtKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/manual_ignore_case_cmp.rs b/clippy_lints/src/manual_ignore_case_cmp.rs index 57c03fbb2ed2..6017c93bac2e 100644 --- a/clippy_lints/src/manual_ignore_case_cmp.rs +++ b/clippy_lints/src/manual_ignore_case_cmp.rs @@ -3,6 +3,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::snippet_with_applicability; use clippy_utils::sym; use clippy_utils::ty::{get_type_diagnostic_name, is_type_diagnostic_item, is_type_lang_item}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::LitKind; use rustc_errors::Applicability; use rustc_hir::ExprKind::{Binary, Lit, MethodCall}; diff --git a/clippy_lints/src/manual_is_ascii_check.rs b/clippy_lints/src/manual_is_ascii_check.rs index ac8c88f02057..d7642fd24cdb 100644 --- a/clippy_lints/src/manual_is_ascii_check.rs +++ b/clippy_lints/src/manual_is_ascii_check.rs @@ -4,6 +4,7 @@ use clippy_utils::macros::matching_root_macro_call; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::sugg::Sugg; use clippy_utils::{higher, is_in_const_context, path_to_local, peel_ref_operators, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::LitKind::{Byte, Char}; use rustc_ast::ast::RangeLimits; use rustc_errors::Applicability; diff --git a/clippy_lints/src/manual_is_power_of_two.rs b/clippy_lints/src/manual_is_power_of_two.rs index b4cd988329d3..952ed2780933 100644 --- a/clippy_lints/src/manual_is_power_of_two.rs +++ b/clippy_lints/src/manual_is_power_of_two.rs @@ -4,6 +4,7 @@ use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::sugg::Sugg; use clippy_utils::ty::ty_from_hir_ty; use clippy_utils::{SpanlessEq, is_in_const_context, is_integer_literal}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{BinOpKind, Expr, ExprKind, QPath}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/manual_let_else.rs b/clippy_lints/src/manual_let_else.rs index 0b3bec714c0e..458a4268921d 100644 --- a/clippy_lints/src/manual_let_else.rs +++ b/clippy_lints/src/manual_let_else.rs @@ -7,13 +7,13 @@ use clippy_utils::ty::is_type_diagnostic_item; use clippy_utils::{ MaybePath, is_lint_allowed, is_never_expr, is_wild, msrvs, pat_and_expr_can_be_question_mark, path_res, peel_blocks, }; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::BindingMode; use rustc_data_structures::fx::FxHashMap; use rustc_errors::Applicability; use rustc_hir::def::{CtorOf, DefKind, Res}; use rustc_hir::{Arm, Expr, ExprKind, HirId, MatchSource, Pat, PatExpr, PatExprKind, PatKind, QPath, Stmt, StmtKind}; use rustc_lint::{LateContext, LintContext}; - use rustc_span::Span; use rustc_span::symbol::{Symbol, sym}; use std::slice; diff --git a/clippy_lints/src/manual_main_separator_str.rs b/clippy_lints/src/manual_main_separator_str.rs index f54ccf2c87b0..4340e5dd32bd 100644 --- a/clippy_lints/src/manual_main_separator_str.rs +++ b/clippy_lints/src/manual_main_separator_str.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::{is_trait_method, peel_hir_expr_refs}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def::{DefKind, Res}; use rustc_hir::{Expr, ExprKind, Mutability, QPath}; diff --git a/clippy_lints/src/manual_non_exhaustive.rs b/clippy_lints/src/manual_non_exhaustive.rs index 067b92cd46ee..adbd92c40439 100644 --- a/clippy_lints/src/manual_non_exhaustive.rs +++ b/clippy_lints/src/manual_non_exhaustive.rs @@ -3,6 +3,7 @@ use clippy_utils::diagnostics::{span_lint_and_then, span_lint_hir_and_then}; use clippy_utils::is_doc_hidden; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::snippet_indent; +use declare_clippy_lint::declare_clippy_lint; use itertools::Itertools; use rustc_ast::attr; use rustc_data_structures::fx::FxHashSet; diff --git a/clippy_lints/src/manual_option_as_slice.rs b/clippy_lints/src/manual_option_as_slice.rs index b55c11f2d5b6..ec7eaa50a17c 100644 --- a/clippy_lints/src/manual_option_as_slice.rs +++ b/clippy_lints/src/manual_option_as_slice.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::{span_lint, span_lint_and_sugg}; use clippy_utils::msrvs::Msrv; use clippy_utils::{is_none_arm, msrvs, paths, peel_hir_expr_refs, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def::{DefKind, Res}; use rustc_hir::{Arm, Expr, ExprKind, LangItem, Pat, PatKind, QPath, is_range_literal}; diff --git a/clippy_lints/src/manual_range_patterns.rs b/clippy_lints/src/manual_range_patterns.rs index bf4f2bff3195..862f0e13f316 100644 --- a/clippy_lints/src/manual_range_patterns.rs +++ b/clippy_lints/src/manual_range_patterns.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::SpanRangeExt; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::LitKind; use rustc_data_structures::fx::FxHashSet; use rustc_errors::Applicability; diff --git a/clippy_lints/src/manual_rem_euclid.rs b/clippy_lints/src/manual_rem_euclid.rs index 41e07e26bff0..d962df7fc517 100644 --- a/clippy_lints/src/manual_rem_euclid.rs +++ b/clippy_lints/src/manual_rem_euclid.rs @@ -4,6 +4,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::snippet_with_context; use clippy_utils::{is_in_const_context, path_to_local}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{BinOpKind, Expr, ExprKind, Node, TyKind}; use rustc_lint::{LateContext, LateLintPass, LintContext}; diff --git a/clippy_lints/src/manual_retain.rs b/clippy_lints/src/manual_retain.rs index 98e8b1f5cf92..fb1f961cfe00 100644 --- a/clippy_lints/src/manual_retain.rs +++ b/clippy_lints/src/manual_retain.rs @@ -4,6 +4,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::snippet; use clippy_utils::ty::{get_type_diagnostic_name, is_type_lang_item}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir as hir; use rustc_hir::ExprKind::Assign; diff --git a/clippy_lints/src/manual_rotate.rs b/clippy_lints/src/manual_rotate.rs index 06ee00c2cef3..544ae215fc5a 100644 --- a/clippy_lints/src/manual_rotate.rs +++ b/clippy_lints/src/manual_rotate.rs @@ -3,6 +3,7 @@ use std::fmt::Display; use clippy_utils::consts::{ConstEvalCtxt, Constant}; use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::sugg; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{BinOpKind, Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/manual_slice_size_calculation.rs b/clippy_lints/src/manual_slice_size_calculation.rs index 2dad0fa4925e..416da158ff12 100644 --- a/clippy_lints/src/manual_slice_size_calculation.rs +++ b/clippy_lints/src/manual_slice_size_calculation.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::snippet_with_context; use clippy_utils::{expr_or_init, is_in_const_context, std_or_core}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{BinOpKind, Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/manual_string_new.rs b/clippy_lints/src/manual_string_new.rs index 7ca3b7120667..c25d313ac4c7 100644 --- a/clippy_lints/src/manual_string_new.rs +++ b/clippy_lints/src/manual_string_new.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_sugg; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::LitKind; use rustc_errors::Applicability::MachineApplicable; use rustc_hir::{Expr, ExprKind, PathSegment, QPath, TyKind}; diff --git a/clippy_lints/src/manual_strip.rs b/clippy_lints/src/manual_strip.rs index 9e911e61f196..5ea55cb762d8 100644 --- a/clippy_lints/src/manual_strip.rs +++ b/clippy_lints/src/manual_strip.rs @@ -5,6 +5,7 @@ use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::snippet_with_applicability; use clippy_utils::usage::mutated_variables; use clippy_utils::{eq_expr_value, higher}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::BindingMode; use rustc_ast::ast::LitKind; use rustc_data_structures::fx::FxHashMap; diff --git a/clippy_lints/src/map_unit_fn.rs b/clippy_lints/src/map_unit_fn.rs index b607f8117eb8..e8186c48fa81 100644 --- a/clippy_lints/src/map_unit_fn.rs +++ b/clippy_lints/src/map_unit_fn.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::{snippet, snippet_with_applicability, snippet_with_context}; use clippy_utils::ty::is_type_diagnostic_item; use clippy_utils::{iter_input_pats, method_chain_args}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir as hir; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/match_result_ok.rs b/clippy_lints/src/match_result_ok.rs index 2a5fc8b66091..4ea4cf6c831b 100644 --- a/clippy_lints/src/match_result_ok.rs +++ b/clippy_lints/src/match_result_ok.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::snippet_with_context; use clippy_utils::ty::is_type_diagnostic_item; use clippy_utils::{higher, is_res_lang_ctor}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind, LangItem, PatKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/matches/mod.rs b/clippy_lints/src/matches/mod.rs index c6ebd6144c76..4f5c649b6dcc 100644 --- a/clippy_lints/src/matches/mod.rs +++ b/clippy_lints/src/matches/mod.rs @@ -30,6 +30,7 @@ use clippy_utils::source::walk_span_to_context; use clippy_utils::{ higher, is_direct_expn_of, is_in_const_context, is_span_match, span_contains_cfg, span_extract_comments, }; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Arm, Expr, ExprKind, LetStmt, MatchSource, Pat, PatKind}; use rustc_lint::{LateContext, LateLintPass, LintContext}; use rustc_session::impl_lint_pass; diff --git a/clippy_lints/src/mem_replace.rs b/clippy_lints/src/mem_replace.rs index 28efd2038b38..6d6d71e3baec 100644 --- a/clippy_lints/src/mem_replace.rs +++ b/clippy_lints/src/mem_replace.rs @@ -7,6 +7,7 @@ use clippy_utils::ty::is_non_aggregate_primitive_type; use clippy_utils::{ is_default_equivalent, is_expr_used_or_unified, is_res_lang_ctor, path_res, peel_ref_operators, std_or_core, }; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::LangItem::{OptionNone, OptionSome}; use rustc_hir::{Expr, ExprKind}; diff --git a/clippy_lints/src/methods/mod.rs b/clippy_lints/src/methods/mod.rs index e0e6a1a59b62..baaf9d1a38e5 100644 --- a/clippy_lints/src/methods/mod.rs +++ b/clippy_lints/src/methods/mod.rs @@ -151,6 +151,7 @@ use clippy_utils::macros::FormatArgsStorage; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::ty::{contains_ty_adt_constructor_opaque, implements_trait, is_copy, is_type_diagnostic_item}; use clippy_utils::{contains_return, is_bool, is_trait_method, iter_input_pats, peel_blocks, return_ty}; +use declare_clippy_lint::declare_clippy_lint; pub use path_ends_with_ext::DEFAULT_ALLOWED_DOTFILES; use rustc_abi::ExternAbi; use rustc_data_structures::fx::FxHashSet; diff --git a/clippy_lints/src/min_ident_chars.rs b/clippy_lints/src/min_ident_chars.rs index 00ea9bba0d19..846d7b7d4898 100644 --- a/clippy_lints/src/min_ident_chars.rs +++ b/clippy_lints/src/min_ident_chars.rs @@ -1,6 +1,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint; use clippy_utils::is_from_proc_macro; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxHashSet; use rustc_hir::def::{DefKind, Res}; use rustc_hir::intravisit::{Visitor, walk_item, walk_trait_item}; diff --git a/clippy_lints/src/minmax.rs b/clippy_lints/src/minmax.rs index 64eafc0ebccd..295caa4e5028 100644 --- a/clippy_lints/src/minmax.rs +++ b/clippy_lints/src/minmax.rs @@ -1,6 +1,7 @@ use clippy_utils::consts::{ConstEvalCtxt, Constant}; use clippy_utils::diagnostics::span_lint; use clippy_utils::{is_trait_method, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/misc.rs b/clippy_lints/src/misc.rs index 09ee6f7037c6..491ba2577637 100644 --- a/clippy_lints/src/misc.rs +++ b/clippy_lints/src/misc.rs @@ -5,6 +5,7 @@ use clippy_utils::{ SpanlessEq, fulfill_or_allowed, get_parent_expr, in_automatically_derived, is_lint_allowed, iter_input_pats, last_path_segment, }; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def::Res; use rustc_hir::intravisit::FnKind; diff --git a/clippy_lints/src/misc_early/mod.rs b/clippy_lints/src/misc_early/mod.rs index f880f1f329ff..22e91b22e1b0 100644 --- a/clippy_lints/src/misc_early/mod.rs +++ b/clippy_lints/src/misc_early/mod.rs @@ -9,6 +9,7 @@ mod zero_prefixed_literal; use clippy_utils::diagnostics::span_lint; use clippy_utils::source::snippet_opt; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{Expr, ExprKind, Generics, LitFloatType, LitIntType, LitKind, NodeId, Pat, PatKind}; use rustc_ast::token; use rustc_ast::visit::FnKind; diff --git a/clippy_lints/src/mismatching_type_param_order.rs b/clippy_lints/src/mismatching_type_param_order.rs index 394bc4aef1cc..895e22ef6bd5 100644 --- a/clippy_lints/src/mismatching_type_param_order.rs +++ b/clippy_lints/src/mismatching_type_param_order.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_help; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxHashMap; use rustc_hir::def::{DefKind, Res}; use rustc_hir::{GenericArg, Item, ItemKind, QPath, Ty, TyKind}; diff --git a/clippy_lints/src/missing_assert_message.rs b/clippy_lints/src/missing_assert_message.rs index 86348f04600b..f84b35f03673 100644 --- a/clippy_lints/src/missing_assert_message.rs +++ b/clippy_lints/src/missing_assert_message.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::is_in_test; use clippy_utils::macros::{PanicExpn, find_assert_args, find_assert_eq_args, root_macro_call_first_node}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::Expr; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/missing_asserts_for_indexing.rs b/clippy_lints/src/missing_asserts_for_indexing.rs index c8e3462b24ef..42abee4137a6 100644 --- a/clippy_lints/src/missing_asserts_for_indexing.rs +++ b/clippy_lints/src/missing_asserts_for_indexing.rs @@ -7,6 +7,7 @@ use clippy_utils::macros::{find_assert_eq_args, first_node_macro_backtrace}; use clippy_utils::source::snippet; use clippy_utils::visitors::for_each_expr_without_closures; use clippy_utils::{eq_expr_value, hash_expr, higher}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::{BinOpKind, LitKind, RangeLimits}; use rustc_data_structures::packed::Pu128; use rustc_data_structures::unhash::UnindexMap; diff --git a/clippy_lints/src/missing_const_for_fn.rs b/clippy_lints/src/missing_const_for_fn.rs index a6be7581c9a3..4872f2584bed 100644 --- a/clippy_lints/src/missing_const_for_fn.rs +++ b/clippy_lints/src/missing_const_for_fn.rs @@ -3,6 +3,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::qualify_min_const_fn::is_min_const_fn; use clippy_utils::{fn_has_unsatisfiable_preds, is_entrypoint_fn, is_from_proc_macro, is_in_test, trait_ref_of_method}; +use declare_clippy_lint::declare_clippy_lint; use rustc_abi::ExternAbi; use rustc_errors::Applicability; use rustc_hir::def_id::CRATE_DEF_ID; diff --git a/clippy_lints/src/missing_const_for_thread_local.rs b/clippy_lints/src/missing_const_for_thread_local.rs index ea74940828a1..78eda83f72f5 100644 --- a/clippy_lints/src/missing_const_for_thread_local.rs +++ b/clippy_lints/src/missing_const_for_thread_local.rs @@ -5,6 +5,7 @@ use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::qualify_min_const_fn::is_min_const_fn; use clippy_utils::source::snippet; use clippy_utils::{fn_has_unsatisfiable_preds, peel_blocks}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind, intravisit}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/missing_doc.rs b/clippy_lints/src/missing_doc.rs index 7772051eb5c6..df9781bd15c4 100644 --- a/clippy_lints/src/missing_doc.rs +++ b/clippy_lints/src/missing_doc.rs @@ -10,6 +10,7 @@ use clippy_utils::attrs::is_doc_hidden; use clippy_utils::diagnostics::span_lint; use clippy_utils::is_from_proc_macro; use clippy_utils::source::SpanRangeExt; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::MetaItemInner; use rustc_hir as hir; use rustc_hir::Attribute; diff --git a/clippy_lints/src/missing_enforced_import_rename.rs b/clippy_lints/src/missing_enforced_import_rename.rs index a1e621cc9f6b..30811b7b3b6a 100644 --- a/clippy_lints/src/missing_enforced_import_rename.rs +++ b/clippy_lints/src/missing_enforced_import_rename.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::paths::{PathNS, lookup_path_str}; use clippy_utils::source::SpanRangeExt; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def::Res; use rustc_hir::def_id::DefIdMap; diff --git a/clippy_lints/src/missing_fields_in_debug.rs b/clippy_lints/src/missing_fields_in_debug.rs index be7dd74fd62b..a1a4a22e3b97 100644 --- a/clippy_lints/src/missing_fields_in_debug.rs +++ b/clippy_lints/src/missing_fields_in_debug.rs @@ -4,6 +4,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::ty::is_type_diagnostic_item; use clippy_utils::visitors::{Visitable, for_each_expr}; use clippy_utils::{is_path_lang_item, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::LitKind; use rustc_data_structures::fx::FxHashSet; use rustc_hir::def::{DefKind, Res}; diff --git a/clippy_lints/src/missing_inline.rs b/clippy_lints/src/missing_inline.rs index 1f613171b46e..5e480675eaf9 100644 --- a/clippy_lints/src/missing_inline.rs +++ b/clippy_lints/src/missing_inline.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir as hir; use rustc_hir::Attribute; use rustc_lint::{LateContext, LateLintPass, LintContext}; diff --git a/clippy_lints/src/missing_trait_methods.rs b/clippy_lints/src/missing_trait_methods.rs index e266c36b6e73..247060bfb619 100644 --- a/clippy_lints/src/missing_trait_methods.rs +++ b/clippy_lints/src/missing_trait_methods.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::is_lint_allowed; use clippy_utils::macros::span_is_local; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::def_id::DefIdSet; use rustc_hir::{Impl, Item, ItemKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/mixed_read_write_in_expression.rs b/clippy_lints/src/mixed_read_write_in_expression.rs index d9f4fb271fb4..368431f478b7 100644 --- a/clippy_lints/src/mixed_read_write_in_expression.rs +++ b/clippy_lints/src/mixed_read_write_in_expression.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::{span_lint, span_lint_and_then}; use clippy_utils::macros::root_macro_call_first_node; use clippy_utils::{get_parent_expr, path_to_local, path_to_local_id, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::intravisit::{Visitor, walk_expr}; use rustc_hir::{BinOpKind, Block, Expr, ExprKind, HirId, LetStmt, Node, Stmt, StmtKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/module_style.rs b/clippy_lints/src/module_style.rs index 98614baffcea..d82282f2be50 100644 --- a/clippy_lints/src/module_style.rs +++ b/clippy_lints/src/module_style.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_then; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast; use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexSet}; use rustc_lint::{EarlyContext, EarlyLintPass, Level, LintContext}; diff --git a/clippy_lints/src/multi_assignments.rs b/clippy_lints/src/multi_assignments.rs index 4383f28717dc..9c5769e8fc3f 100644 --- a/clippy_lints/src/multi_assignments.rs +++ b/clippy_lints/src/multi_assignments.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{Expr, ExprKind, Stmt, StmtKind}; use rustc_lint::{EarlyContext, EarlyLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/multiple_bound_locations.rs b/clippy_lints/src/multiple_bound_locations.rs index 4b32ba83b325..4319d3b28a91 100644 --- a/clippy_lints/src/multiple_bound_locations.rs +++ b/clippy_lints/src/multiple_bound_locations.rs @@ -7,6 +7,7 @@ use rustc_span::Span; use clippy_utils::diagnostics::span_lint; use clippy_utils::source::SpanRangeExt; +use declare_clippy_lint::declare_clippy_lint; declare_clippy_lint! { /// ### What it does diff --git a/clippy_lints/src/multiple_unsafe_ops_per_block.rs b/clippy_lints/src/multiple_unsafe_ops_per_block.rs index c6c27e22b90e..fc7b9afb9330 100644 --- a/clippy_lints/src/multiple_unsafe_ops_per_block.rs +++ b/clippy_lints/src/multiple_unsafe_ops_per_block.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::visitors::{Descend, Visitable, for_each_expr}; use core::ops::ControlFlow::Continue; +use declare_clippy_lint::declare_clippy_lint; use hir::def::{DefKind, Res}; use hir::{BlockCheckMode, ExprKind, QPath, UnOp}; use rustc_ast::Mutability; diff --git a/clippy_lints/src/mut_key.rs b/clippy_lints/src/mut_key.rs index 98a9a98d281a..8c1516e10e32 100644 --- a/clippy_lints/src/mut_key.rs +++ b/clippy_lints/src/mut_key.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::trait_ref_of_method; use clippy_utils::ty::InteriorMut; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir as hir; use rustc_lint::{LateContext, LateLintPass}; use rustc_middle::ty::print::with_forced_trimmed_paths; diff --git a/clippy_lints/src/mut_mut.rs b/clippy_lints/src/mut_mut.rs index d98c70e7f5a8..184e398fd69f 100644 --- a/clippy_lints/src/mut_mut.rs +++ b/clippy_lints/src/mut_mut.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::{span_lint, span_lint_hir}; use clippy_utils::higher; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{self as hir, AmbigArg, intravisit}; use rustc_lint::{LateContext, LateLintPass, LintContext}; use rustc_middle::ty; diff --git a/clippy_lints/src/mut_reference.rs b/clippy_lints/src/mut_reference.rs index 2fd1049f42e1..edc9739d6442 100644 --- a/clippy_lints/src/mut_reference.rs +++ b/clippy_lints/src/mut_reference.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{BorrowKind, Expr, ExprKind, Mutability}; use rustc_lint::{LateContext, LateLintPass}; use rustc_middle::ty::{self, Ty}; diff --git a/clippy_lints/src/mutable_debug_assertion.rs b/clippy_lints/src/mutable_debug_assertion.rs index 9b327955608a..7760a6ce2af0 100644 --- a/clippy_lints/src/mutable_debug_assertion.rs +++ b/clippy_lints/src/mutable_debug_assertion.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint; use clippy_utils::macros::{find_assert_eq_args, root_macro_call_first_node}; use clippy_utils::sym; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::intravisit::{Visitor, walk_expr}; use rustc_hir::{BorrowKind, Expr, ExprKind, MatchSource, Mutability}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/mutex_atomic.rs b/clippy_lints/src/mutex_atomic.rs index fe2157ca533a..1ae98cde9d68 100644 --- a/clippy_lints/src/mutex_atomic.rs +++ b/clippy_lints/src/mutex_atomic.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint; use clippy_utils::ty::is_type_diagnostic_item; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::Expr; use rustc_lint::{LateContext, LateLintPass}; use rustc_middle::ty::{self, IntTy, Ty, UintTy}; diff --git a/clippy_lints/src/needless_arbitrary_self_type.rs b/clippy_lints/src/needless_arbitrary_self_type.rs index 5f7fde30f03f..a80070533f26 100644 --- a/clippy_lints/src/needless_arbitrary_self_type.rs +++ b/clippy_lints/src/needless_arbitrary_self_type.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::snippet_with_applicability; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{BindingMode, ByRef, Lifetime, Mutability, Param, PatKind, Path, TyKind}; use rustc_errors::Applicability; use rustc_lint::{EarlyContext, EarlyLintPass}; diff --git a/clippy_lints/src/needless_bool.rs b/clippy_lints/src/needless_bool.rs index f768e11a4a2b..dbdb66ef00bf 100644 --- a/clippy_lints/src/needless_bool.rs +++ b/clippy_lints/src/needless_bool.rs @@ -5,6 +5,7 @@ use clippy_utils::{ SpanlessEq, get_parent_expr, higher, is_block_like, is_else_clause, is_expn_of, is_parent_stmt, is_receiver_of_method_call, peel_blocks, peel_blocks_with_stmt, span_extract_comment, }; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::LitKind; use rustc_errors::Applicability; use rustc_hir::{BinOpKind, Expr, ExprKind, UnOp}; diff --git a/clippy_lints/src/needless_borrowed_ref.rs b/clippy_lints/src/needless_borrowed_ref.rs index 1b6896827fed..40c7b760eb83 100644 --- a/clippy_lints/src/needless_borrowed_ref.rs +++ b/clippy_lints/src/needless_borrowed_ref.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_then; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{BindingMode, Mutability, Node, Pat, PatKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/needless_borrows_for_generic_args.rs b/clippy_lints/src/needless_borrows_for_generic_args.rs index e579dd5947d7..77181dc9e6c9 100644 --- a/clippy_lints/src/needless_borrows_for_generic_args.rs +++ b/clippy_lints/src/needless_borrows_for_generic_args.rs @@ -5,6 +5,7 @@ use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::snippet_with_context; use clippy_utils::ty::{implements_trait, is_copy}; use clippy_utils::{DefinedTy, ExprUseNode, expr_use_ctxt, peel_n_hir_expr_refs}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def::{DefKind, Res}; use rustc_hir::def_id::{DefId, LocalDefId}; diff --git a/clippy_lints/src/needless_continue.rs b/clippy_lints/src/needless_continue.rs index b8601f77e249..f87285929f51 100644 --- a/clippy_lints/src/needless_continue.rs +++ b/clippy_lints/src/needless_continue.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_help; use clippy_utils::source::{indent_of, snippet, snippet_block}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::{Block, Label, ast}; use rustc_lint::{EarlyContext, EarlyLintPass, LintContext}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/needless_else.rs b/clippy_lints/src/needless_else.rs index f8bb72a16db2..8c055962ad74 100644 --- a/clippy_lints/src/needless_else.rs +++ b/clippy_lints/src/needless_else.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::{IntoSpan, SpanRangeExt}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{Expr, ExprKind}; use rustc_errors::Applicability; use rustc_lint::{EarlyContext, EarlyLintPass}; diff --git a/clippy_lints/src/needless_for_each.rs b/clippy_lints/src/needless_for_each.rs index 7dd96f1f037f..515589f5f464 100644 --- a/clippy_lints/src/needless_for_each.rs +++ b/clippy_lints/src/needless_for_each.rs @@ -9,6 +9,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::snippet_with_applicability; use clippy_utils::ty::has_iter_method; use clippy_utils::{is_trait_method, sym}; +use declare_clippy_lint::declare_clippy_lint; declare_clippy_lint! { /// ### What it does diff --git a/clippy_lints/src/needless_if.rs b/clippy_lints/src/needless_if.rs index c90019f6ee16..251ca9511315 100644 --- a/clippy_lints/src/needless_if.rs +++ b/clippy_lints/src/needless_if.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::higher::If; use clippy_utils::is_from_proc_macro; use clippy_utils::source::SpanRangeExt; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{ExprKind, Stmt, StmtKind}; use rustc_lint::{LateContext, LateLintPass, LintContext}; diff --git a/clippy_lints/src/needless_late_init.rs b/clippy_lints/src/needless_late_init.rs index a914267cf500..ea1f8406dd1c 100644 --- a/clippy_lints/src/needless_late_init.rs +++ b/clippy_lints/src/needless_late_init.rs @@ -4,6 +4,7 @@ use clippy_utils::source::{SourceText, SpanRangeExt, snippet}; use clippy_utils::ty::needs_ordered_drop; use clippy_utils::visitors::{for_each_expr, for_each_expr_without_closures, is_local_used}; use core::ops::ControlFlow; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::{Applicability, MultiSpan}; use rustc_hir::{ BindingMode, Block, Expr, ExprKind, HirId, LetStmt, LocalSource, MatchSource, Node, Pat, PatKind, Stmt, StmtKind, diff --git a/clippy_lints/src/needless_maybe_sized.rs b/clippy_lints/src/needless_maybe_sized.rs index ad6313e391bd..ba7ee05f0e60 100644 --- a/clippy_lints/src/needless_maybe_sized.rs +++ b/clippy_lints/src/needless_maybe_sized.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_then; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def_id::{DefId, DefIdMap}; use rustc_hir::{BoundPolarity, GenericBound, Generics, PolyTraitRef, TraitBoundModifiers, WherePredicateKind}; diff --git a/clippy_lints/src/needless_parens_on_range_literals.rs b/clippy_lints/src/needless_parens_on_range_literals.rs index 8a62106377c5..0c05fee87f09 100644 --- a/clippy_lints/src/needless_parens_on_range_literals.rs +++ b/clippy_lints/src/needless_parens_on_range_literals.rs @@ -1,11 +1,11 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::higher; use clippy_utils::source::{snippet, snippet_with_applicability}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind}; - use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/needless_pass_by_ref_mut.rs b/clippy_lints/src/needless_pass_by_ref_mut.rs index 7052e1d0fbe5..778aaae84779 100644 --- a/clippy_lints/src/needless_pass_by_ref_mut.rs +++ b/clippy_lints/src/needless_pass_by_ref_mut.rs @@ -5,6 +5,7 @@ use clippy_utils::source::snippet; use clippy_utils::visitors::for_each_expr; use clippy_utils::{inherits_cfg, is_from_proc_macro, is_self}; use core::ops::ControlFlow; +use declare_clippy_lint::declare_clippy_lint; use rustc_abi::ExternAbi; use rustc_data_structures::fx::{FxHashSet, FxIndexMap, FxIndexSet}; use rustc_errors::Applicability; diff --git a/clippy_lints/src/needless_pass_by_value.rs b/clippy_lints/src/needless_pass_by_value.rs index 275d710c76a9..33ea7b60907c 100644 --- a/clippy_lints/src/needless_pass_by_value.rs +++ b/clippy_lints/src/needless_pass_by_value.rs @@ -5,6 +5,7 @@ use clippy_utils::ty::{ implements_trait, implements_trait_with_env_from_iter, is_copy, is_type_diagnostic_item, is_type_lang_item, }; use clippy_utils::{is_self, peel_hir_ty_options}; +use declare_clippy_lint::declare_clippy_lint; use rustc_abi::ExternAbi; use rustc_errors::{Applicability, Diag}; use rustc_hir::intravisit::FnKind; diff --git a/clippy_lints/src/needless_question_mark.rs b/clippy_lints/src/needless_question_mark.rs index 2a2160c3be2d..a7bc35489fc3 100644 --- a/clippy_lints/src/needless_question_mark.rs +++ b/clippy_lints/src/needless_question_mark.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_hir_and_then; use clippy_utils::path_res; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def::{DefKind, Res}; use rustc_hir::{Block, Body, Expr, ExprKind, LangItem, MatchSource, QPath}; diff --git a/clippy_lints/src/needless_update.rs b/clippy_lints/src/needless_update.rs index 4a86c3720ca2..2261cd53f1f4 100644 --- a/clippy_lints/src/needless_update.rs +++ b/clippy_lints/src/needless_update.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Expr, ExprKind, StructTailExpr}; use rustc_lint::{LateContext, LateLintPass}; use rustc_middle::ty; diff --git a/clippy_lints/src/neg_cmp_op_on_partial_ord.rs b/clippy_lints/src/neg_cmp_op_on_partial_ord.rs index 4f62ba2e58db..67937f32654d 100644 --- a/clippy_lints/src/neg_cmp_op_on_partial_ord.rs +++ b/clippy_lints/src/neg_cmp_op_on_partial_ord.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint; use clippy_utils::ty::implements_trait; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{BinOpKind, Expr, ExprKind, UnOp}; use rustc_lint::{LateContext, LateLintPass, LintContext}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/neg_multiply.rs b/clippy_lints/src/neg_multiply.rs index 74c8142787eb..d6695f8d58ff 100644 --- a/clippy_lints/src/neg_multiply.rs +++ b/clippy_lints/src/neg_multiply.rs @@ -2,6 +2,7 @@ use clippy_utils::consts::{self, Constant}; use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::snippet_with_context; use clippy_utils::sugg::has_enclosing_paren; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::util::parser::ExprPrecedence; use rustc_errors::Applicability; use rustc_hir::{BinOpKind, Expr, ExprKind, UnOp}; diff --git a/clippy_lints/src/new_without_default.rs b/clippy_lints/src/new_without_default.rs index 4b73a4455f55..5e8a0f288e32 100644 --- a/clippy_lints/src/new_without_default.rs +++ b/clippy_lints/src/new_without_default.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_hir_and_then; use clippy_utils::return_ty; use clippy_utils::source::snippet; use clippy_utils::sugg::DiagExt; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir as hir; use rustc_hir::HirIdSet; diff --git a/clippy_lints/src/no_effect.rs b/clippy_lints/src/no_effect.rs index 7ab7976d5697..e207d85122f6 100644 --- a/clippy_lints/src/no_effect.rs +++ b/clippy_lints/src/no_effect.rs @@ -4,6 +4,7 @@ use clippy_utils::ty::has_drop; use clippy_utils::{ in_automatically_derived, is_inside_always_const_context, is_lint_allowed, path_to_local, peel_blocks, }; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def::{DefKind, Res}; use rustc_hir::{ diff --git a/clippy_lints/src/no_mangle_with_rust_abi.rs b/clippy_lints/src/no_mangle_with_rust_abi.rs index b71dde906918..31c9f4ff3ec7 100644 --- a/clippy_lints/src/no_mangle_with_rust_abi.rs +++ b/clippy_lints/src/no_mangle_with_rust_abi.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::{snippet, snippet_with_applicability}; +use declare_clippy_lint::declare_clippy_lint; use rustc_abi::ExternAbi; use rustc_errors::Applicability; use rustc_hir::{Item, ItemKind}; diff --git a/clippy_lints/src/non_canonical_impls.rs b/clippy_lints/src/non_canonical_impls.rs index 93865197ec96..2699d8b25275 100644 --- a/clippy_lints/src/non_canonical_impls.rs +++ b/clippy_lints/src/non_canonical_impls.rs @@ -3,6 +3,7 @@ use clippy_utils::ty::implements_trait; use clippy_utils::{ is_diag_trait_item, is_from_proc_macro, is_res_lang_ctor, last_path_segment, path_res, std_or_core, }; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def_id::LocalDefId; use rustc_hir::{Expr, ExprKind, ImplItem, ImplItemKind, LangItem, Node, UnOp}; diff --git a/clippy_lints/src/non_copy_const.rs b/clippy_lints/src/non_copy_const.rs index a27c6aa75e36..719bb3f971fa 100644 --- a/clippy_lints/src/non_copy_const.rs +++ b/clippy_lints/src/non_copy_const.rs @@ -24,6 +24,7 @@ use clippy_utils::is_in_const_context; use clippy_utils::macros::macro_backtrace; use clippy_utils::paths::{PathNS, lookup_path_str}; use clippy_utils::ty::{get_field_idx_by_name, implements_trait}; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxHashMap; use rustc_hir::def::{DefKind, Res}; use rustc_hir::def_id::{DefId, DefIdSet}; diff --git a/clippy_lints/src/non_expressive_names.rs b/clippy_lints/src/non_expressive_names.rs index c5873589b26f..0b0af1380251 100644 --- a/clippy_lints/src/non_expressive_names.rs +++ b/clippy_lints/src/non_expressive_names.rs @@ -1,5 +1,6 @@ use clippy_config::Conf; use clippy_utils::diagnostics::{span_lint, span_lint_and_then}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{ self, Arm, AssocItem, AssocItemKind, Attribute, Block, FnDecl, Item, ItemKind, Local, Pat, PatKind, }; diff --git a/clippy_lints/src/non_octal_unix_permissions.rs b/clippy_lints/src/non_octal_unix_permissions.rs index 23a1622f30ff..efe9f2f51c8f 100644 --- a/clippy_lints/src/non_octal_unix_permissions.rs +++ b/clippy_lints/src/non_octal_unix_permissions.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::{SpanRangeExt, snippet_with_applicability}; use clippy_utils::sym; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/non_send_fields_in_send_ty.rs b/clippy_lints/src/non_send_fields_in_send_ty.rs index 9542fed38759..aa7d518b056b 100644 --- a/clippy_lints/src/non_send_fields_in_send_ty.rs +++ b/clippy_lints/src/non_send_fields_in_send_ty.rs @@ -3,6 +3,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::is_lint_allowed; use clippy_utils::source::snippet; use clippy_utils::ty::{implements_trait, is_copy}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ImplPolarity; use rustc_hir::def_id::DefId; use rustc_hir::{FieldDef, Item, ItemKind, Node}; diff --git a/clippy_lints/src/non_std_lazy_statics.rs b/clippy_lints/src/non_std_lazy_statics.rs index f66b9519317b..e2bfb0214316 100644 --- a/clippy_lints/src/non_std_lazy_statics.rs +++ b/clippy_lints/src/non_std_lazy_statics.rs @@ -4,6 +4,7 @@ use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::paths::{self, PathNS, find_crates, lookup_path_str}; use clippy_utils::visitors::for_each_expr; use clippy_utils::{fn_def_id, is_no_std_crate, path_def_id, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxIndexMap; use rustc_errors::Applicability; use rustc_hir::def::{DefKind, Res}; diff --git a/clippy_lints/src/non_zero_suggestions.rs b/clippy_lints/src/non_zero_suggestions.rs index 1b8ab1bdedf8..36bf9ce82092 100644 --- a/clippy_lints/src/non_zero_suggestions.rs +++ b/clippy_lints/src/non_zero_suggestions.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::snippet; use clippy_utils::sym; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::BinOpKind; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind}; diff --git a/clippy_lints/src/nonstandard_macro_braces.rs b/clippy_lints/src/nonstandard_macro_braces.rs index 83f7d9319697..410d4162facb 100644 --- a/clippy_lints/src/nonstandard_macro_braces.rs +++ b/clippy_lints/src/nonstandard_macro_braces.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_config::types::MacroMatcher; use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::{SourceText, SpanRangeExt}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast; use rustc_data_structures::fx::{FxHashMap, FxHashSet}; use rustc_errors::Applicability; diff --git a/clippy_lints/src/octal_escapes.rs b/clippy_lints/src/octal_escapes.rs index 6e7ee727965d..5e24fbcf4261 100644 --- a/clippy_lints/src/octal_escapes.rs +++ b/clippy_lints/src/octal_escapes.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::SpanRangeExt; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::token::LitKind; use rustc_ast::{Expr, ExprKind}; use rustc_errors::Applicability; diff --git a/clippy_lints/src/only_used_in_recursion.rs b/clippy_lints/src/only_used_in_recursion.rs index 6de203e068b7..a0d81b08fdaa 100644 --- a/clippy_lints/src/only_used_in_recursion.rs +++ b/clippy_lints/src/only_used_in_recursion.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::{get_expr_use_or_unification_node, path_def_id, path_to_local, path_to_local_id}; use core::cell::Cell; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxHashMap; use rustc_errors::Applicability; use rustc_hir::def_id::DefId; diff --git a/clippy_lints/src/operators/mod.rs b/clippy_lints/src/operators/mod.rs index d32c062cf56a..9df722e43132 100644 --- a/clippy_lints/src/operators/mod.rs +++ b/clippy_lints/src/operators/mod.rs @@ -25,6 +25,7 @@ pub(crate) mod arithmetic_side_effects; use clippy_config::Conf; use clippy_utils::msrvs::Msrv; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Body, Expr, ExprKind, UnOp}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::impl_lint_pass; diff --git a/clippy_lints/src/option_env_unwrap.rs b/clippy_lints/src/option_env_unwrap.rs index d16f5f8e112c..29a177edc538 100644 --- a/clippy_lints/src/option_env_unwrap.rs +++ b/clippy_lints/src/option_env_unwrap.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_help; use clippy_utils::is_direct_expn_of; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{Expr, ExprKind, MethodCall}; use rustc_lint::{EarlyContext, EarlyLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/option_if_let_else.rs b/clippy_lints/src/option_if_let_else.rs index 9487cec87efb..bf4df27893dd 100644 --- a/clippy_lints/src/option_if_let_else.rs +++ b/clippy_lints/src/option_if_let_else.rs @@ -7,6 +7,7 @@ use clippy_utils::{ CaptureKind, can_move_expr_to_closure, eager_or_lazy, expr_requires_coercion, higher, is_else_clause, is_in_const_context, is_res_lang_ctor, peel_blocks, peel_hir_expr_while, }; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxHashSet; use rustc_errors::Applicability; use rustc_hir::LangItem::{OptionNone, OptionSome, ResultErr, ResultOk}; diff --git a/clippy_lints/src/panic_in_result_fn.rs b/clippy_lints/src/panic_in_result_fn.rs index ee1d59490ce9..0f489cd806fe 100644 --- a/clippy_lints/src/panic_in_result_fn.rs +++ b/clippy_lints/src/panic_in_result_fn.rs @@ -4,6 +4,7 @@ use clippy_utils::ty::is_type_diagnostic_item; use clippy_utils::visitors::{Descend, for_each_expr}; use clippy_utils::{is_inside_always_const_context, return_ty}; use core::ops::ControlFlow; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir as hir; use rustc_hir::intravisit::FnKind; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/panic_unimplemented.rs b/clippy_lints/src/panic_unimplemented.rs index 8962f36db1e6..fe3d6b407a39 100644 --- a/clippy_lints/src/panic_unimplemented.rs +++ b/clippy_lints/src/panic_unimplemented.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint; use clippy_utils::is_in_test; use clippy_utils::macros::{is_panic, root_macro_call_first_node}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::def::{DefKind, Res}; use rustc_hir::{Expr, ExprKind, QPath}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/panicking_overflow_checks.rs b/clippy_lints/src/panicking_overflow_checks.rs index bc1821a48a34..c0d0639ac8ee 100644 --- a/clippy_lints/src/panicking_overflow_checks.rs +++ b/clippy_lints/src/panicking_overflow_checks.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint; use clippy_utils::eq_expr_value; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{BinOpKind, Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_middle::ty; diff --git a/clippy_lints/src/partial_pub_fields.rs b/clippy_lints/src/partial_pub_fields.rs index cda752d003fa..c68620fe2699 100644 --- a/clippy_lints/src/partial_pub_fields.rs +++ b/clippy_lints/src/partial_pub_fields.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_then; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{Item, ItemKind}; use rustc_lint::{EarlyContext, EarlyLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/partialeq_ne_impl.rs b/clippy_lints/src/partialeq_ne_impl.rs index 8eaf65e63065..97f23687c1a4 100644 --- a/clippy_lints/src/partialeq_ne_impl.rs +++ b/clippy_lints/src/partialeq_ne_impl.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_hir; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Impl, Item, ItemKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/partialeq_to_none.rs b/clippy_lints/src/partialeq_to_none.rs index 9b9024c81057..9d462920cda9 100644 --- a/clippy_lints/src/partialeq_to_none.rs +++ b/clippy_lints/src/partialeq_to_none.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::ty::is_type_diagnostic_item; use clippy_utils::{is_res_lang_ctor, path_res, peel_hir_expr_refs, peel_ref_operators, sugg}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{BinOpKind, Expr, ExprKind, LangItem}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/pass_by_ref_or_value.rs b/clippy_lints/src/pass_by_ref_or_value.rs index 5d30b66def2c..92ee1da83dcf 100644 --- a/clippy_lints/src/pass_by_ref_or_value.rs +++ b/clippy_lints/src/pass_by_ref_or_value.rs @@ -6,6 +6,7 @@ use clippy_utils::source::snippet; use clippy_utils::ty::{for_each_top_level_late_bound_region, is_copy}; use clippy_utils::{is_self, is_self_ty}; use core::ops::ControlFlow; +use declare_clippy_lint::declare_clippy_lint; use rustc_abi::ExternAbi; use rustc_ast::attr; use rustc_data_structures::fx::FxHashSet; diff --git a/clippy_lints/src/pathbuf_init_then_push.rs b/clippy_lints/src/pathbuf_init_then_push.rs index 35caac855cf6..72e04c504552 100644 --- a/clippy_lints/src/pathbuf_init_then_push.rs +++ b/clippy_lints/src/pathbuf_init_then_push.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::path_to_local_id; use clippy_utils::source::{SpanRangeExt, snippet}; use clippy_utils::ty::is_type_diagnostic_item; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::{LitKind, StrStyle}; use rustc_errors::Applicability; use rustc_hir::def::Res; diff --git a/clippy_lints/src/pattern_type_mismatch.rs b/clippy_lints/src/pattern_type_mismatch.rs index 19d9acfc9305..9499eb3f23b5 100644 --- a/clippy_lints/src/pattern_type_mismatch.rs +++ b/clippy_lints/src/pattern_type_mismatch.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_then; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{ Body, Expr, ExprKind, FnDecl, LetExpr, LocalSource, Mutability, Pat, PatKind, Stmt, StmtKind, intravisit, }; diff --git a/clippy_lints/src/permissions_set_readonly_false.rs b/clippy_lints/src/permissions_set_readonly_false.rs index da56a785007c..8ed99630e341 100644 --- a/clippy_lints/src/permissions_set_readonly_false.rs +++ b/clippy_lints/src/permissions_set_readonly_false.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::sym; use clippy_utils::ty::is_type_diagnostic_item; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::LitKind; use rustc_hir::{Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/pointers_in_nomem_asm_block.rs b/clippy_lints/src/pointers_in_nomem_asm_block.rs index 385f634a1505..78656d6944ad 100644 --- a/clippy_lints/src/pointers_in_nomem_asm_block.rs +++ b/clippy_lints/src/pointers_in_nomem_asm_block.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_then; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::InlineAsmOptions; use rustc_hir::{Expr, ExprKind, InlineAsm, InlineAsmOperand}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/precedence.rs b/clippy_lints/src/precedence.rs index ec6835db897e..28b49bcffbd7 100644 --- a/clippy_lints/src/precedence.rs +++ b/clippy_lints/src/precedence.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::snippet_with_applicability; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::BinOpKind::{Add, BitAnd, BitOr, BitXor, Div, Mul, Rem, Shl, Shr, Sub}; use rustc_ast::ast::{BinOpKind, Expr, ExprKind}; use rustc_errors::Applicability; diff --git a/clippy_lints/src/ptr.rs b/clippy_lints/src/ptr.rs index 9149406642d6..a932851a781e 100644 --- a/clippy_lints/src/ptr.rs +++ b/clippy_lints/src/ptr.rs @@ -3,6 +3,7 @@ use clippy_utils::source::SpanRangeExt; use clippy_utils::sugg::Sugg; use clippy_utils::visitors::contains_unsafe_block; use clippy_utils::{get_expr_use_or_unification_node, is_lint_allowed, path_def_id, path_to_local, std_or_core}; +use declare_clippy_lint::declare_clippy_lint; use hir::LifetimeKind; use rustc_abi::ExternAbi; use rustc_errors::{Applicability, MultiSpan}; diff --git a/clippy_lints/src/ptr_offset_with_cast.rs b/clippy_lints/src/ptr_offset_with_cast.rs index d8d813f9846d..1bf4b1f96930 100644 --- a/clippy_lints/src/ptr_offset_with_cast.rs +++ b/clippy_lints/src/ptr_offset_with_cast.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::{span_lint, span_lint_and_sugg}; use clippy_utils::source::SpanRangeExt; use clippy_utils::sym; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/pub_underscore_fields.rs b/clippy_lints/src/pub_underscore_fields.rs index e4a9bf7a8481..81a515524640 100644 --- a/clippy_lints/src/pub_underscore_fields.rs +++ b/clippy_lints/src/pub_underscore_fields.rs @@ -3,6 +3,7 @@ use clippy_config::types::PubUnderscoreFieldsBehaviour; use clippy_utils::attrs::is_doc_hidden; use clippy_utils::diagnostics::span_lint_hir_and_then; use clippy_utils::is_path_lang_item; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{FieldDef, Item, ItemKind, LangItem}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::impl_lint_pass; diff --git a/clippy_lints/src/pub_use.rs b/clippy_lints/src/pub_use.rs index 5b973a79eae3..56f00d89c3fe 100644 --- a/clippy_lints/src/pub_use.rs +++ b/clippy_lints/src/pub_use.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_then; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{Item, ItemKind, VisibilityKind}; use rustc_lint::{EarlyContext, EarlyLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/question_mark.rs b/clippy_lints/src/question_mark.rs index c02e5e0621c9..de57c3f8ff8c 100644 --- a/clippy_lints/src/question_mark.rs +++ b/clippy_lints/src/question_mark.rs @@ -12,6 +12,7 @@ use clippy_utils::{ pat_and_expr_can_be_question_mark, path_res, path_to_local, path_to_local_id, peel_blocks, peel_blocks_with_stmt, span_contains_cfg, span_contains_comment, sym, }; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::LangItem::{self, OptionNone, OptionSome, ResultErr, ResultOk}; use rustc_hir::def::Res; diff --git a/clippy_lints/src/question_mark_used.rs b/clippy_lints/src/question_mark_used.rs index 96ea485d7693..9d93c8016a31 100644 --- a/clippy_lints/src/question_mark_used.rs +++ b/clippy_lints/src/question_mark_used.rs @@ -1,6 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_then; - use clippy_utils::macros::span_is_local; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Expr, ExprKind, MatchSource}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/ranges.rs b/clippy_lints/src/ranges.rs index d292ed86ea4c..a8707b726f1d 100644 --- a/clippy_lints/src/ranges.rs +++ b/clippy_lints/src/ranges.rs @@ -5,6 +5,7 @@ use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::{SpanRangeExt, snippet, snippet_with_applicability}; use clippy_utils::sugg::Sugg; use clippy_utils::{get_parent_expr, higher, is_in_const_context, is_integer_const, path_to_local}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::RangeLimits; use rustc_errors::Applicability; use rustc_hir::{BinOpKind, Expr, ExprKind, HirId}; diff --git a/clippy_lints/src/raw_strings.rs b/clippy_lints/src/raw_strings.rs index 6a79cae32a59..5055648b398a 100644 --- a/clippy_lints/src/raw_strings.rs +++ b/clippy_lints/src/raw_strings.rs @@ -1,6 +1,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::{SpanRangeExt, snippet_opt}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{Expr, ExprKind}; use rustc_ast::token::LitKind; use rustc_errors::Applicability; diff --git a/clippy_lints/src/rc_clone_in_vec_init.rs b/clippy_lints/src/rc_clone_in_vec_init.rs index 689a2ac4c6ae..986a387e7e95 100644 --- a/clippy_lints/src/rc_clone_in_vec_init.rs +++ b/clippy_lints/src/rc_clone_in_vec_init.rs @@ -3,6 +3,7 @@ use clippy_utils::higher::VecArgs; use clippy_utils::macros::root_macro_call_first_node; use clippy_utils::source::{indent_of, snippet}; use clippy_utils::{last_path_segment, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind, QPath, TyKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/read_zero_byte_vec.rs b/clippy_lints/src/read_zero_byte_vec.rs index 49b522994fbf..738f1c05c021 100644 --- a/clippy_lints/src/read_zero_byte_vec.rs +++ b/clippy_lints/src/read_zero_byte_vec.rs @@ -2,12 +2,12 @@ use clippy_utils::diagnostics::{span_lint_hir, span_lint_hir_and_then}; use clippy_utils::get_enclosing_block; use clippy_utils::higher::{VecInitKind, get_vec_init_kind}; use clippy_utils::source::snippet; +use declare_clippy_lint::declare_clippy_lint; -use hir::{Expr, ExprKind, HirId, LetStmt, PatKind, PathSegment, QPath, StmtKind}; use rustc_errors::Applicability; -use rustc_hir as hir; use rustc_hir::def::Res; use rustc_hir::intravisit::{Visitor, walk_expr}; +use rustc_hir::{self as hir, Expr, ExprKind, HirId, LetStmt, PatKind, PathSegment, QPath, StmtKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/redundant_async_block.rs b/clippy_lints/src/redundant_async_block.rs index d2442ad0f373..2a654aa82247 100644 --- a/clippy_lints/src/redundant_async_block.rs +++ b/clippy_lints/src/redundant_async_block.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::{snippet, walk_span_to_context}; use clippy_utils::ty::implements_trait; use clippy_utils::{desugar_await, peel_blocks}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Closure, ClosureKind, CoroutineDesugaring, CoroutineKind, CoroutineSource, Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/redundant_clone.rs b/clippy_lints/src/redundant_clone.rs index e57b8cc2d84e..b63e84a835b2 100644 --- a/clippy_lints/src/redundant_clone.rs +++ b/clippy_lints/src/redundant_clone.rs @@ -3,6 +3,7 @@ use clippy_utils::fn_has_unsatisfiable_preds; use clippy_utils::mir::{LocalUsage, PossibleBorrowerMap, visit_local_usage}; use clippy_utils::source::SpanRangeExt; use clippy_utils::ty::{has_drop, is_copy, is_type_diagnostic_item, is_type_lang_item, walk_ptrs_ty_depth}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::intravisit::FnKind; use rustc_hir::{Body, FnDecl, LangItem, def_id}; diff --git a/clippy_lints/src/redundant_closure_call.rs b/clippy_lints/src/redundant_closure_call.rs index 84597269a58f..d4bc847a27b7 100644 --- a/clippy_lints/src/redundant_closure_call.rs +++ b/clippy_lints/src/redundant_closure_call.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::{span_lint_and_then, span_lint_hir}; use clippy_utils::get_parent_expr; use clippy_utils::sugg::Sugg; +use declare_clippy_lint::declare_clippy_lint; use hir::Param; use rustc_errors::Applicability; use rustc_hir as hir; diff --git a/clippy_lints/src/redundant_else.rs b/clippy_lints/src/redundant_else.rs index a3be16ed858e..92166dde77a7 100644 --- a/clippy_lints/src/redundant_else.rs +++ b/clippy_lints/src/redundant_else.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::{indent_of, reindent_multiline, snippet}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{Block, Expr, ExprKind, Stmt, StmtKind}; use rustc_ast::visit::{Visitor, walk_expr}; use rustc_errors::Applicability; diff --git a/clippy_lints/src/redundant_field_names.rs b/clippy_lints/src/redundant_field_names.rs index feefe10f57d7..6b8141005e36 100644 --- a/clippy_lints/src/redundant_field_names.rs +++ b/clippy_lints/src/redundant_field_names.rs @@ -1,6 +1,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::msrvs::{self, MsrvStack}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{Expr, ExprKind}; use rustc_errors::Applicability; use rustc_lint::{EarlyContext, EarlyLintPass, LintContext}; diff --git a/clippy_lints/src/redundant_locals.rs b/clippy_lints/src/redundant_locals.rs index 8f33a47e2908..498392479feb 100644 --- a/clippy_lints/src/redundant_locals.rs +++ b/clippy_lints/src/redundant_locals.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_help; use clippy_utils::is_from_proc_macro; use clippy_utils::ty::needs_ordered_drop; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::Mutability; use rustc_hir::def::Res; use rustc_hir::{BindingMode, ByRef, ExprKind, HirId, LetStmt, Node, Pat, PatKind, QPath}; diff --git a/clippy_lints/src/redundant_pub_crate.rs b/clippy_lints/src/redundant_pub_crate.rs index 7b381fac5f11..782b13dfdafd 100644 --- a/clippy_lints/src/redundant_pub_crate.rs +++ b/clippy_lints/src/redundant_pub_crate.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::HasSession; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def::{DefKind, Res}; use rustc_hir::{Item, ItemKind}; diff --git a/clippy_lints/src/redundant_slicing.rs b/clippy_lints/src/redundant_slicing.rs index 1117dea703c2..042c02cbe6bf 100644 --- a/clippy_lints/src/redundant_slicing.rs +++ b/clippy_lints/src/redundant_slicing.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::snippet_with_context; use clippy_utils::ty::is_type_lang_item; use clippy_utils::{get_parent_expr, peel_middle_ty_refs}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::util::parser::ExprPrecedence; use rustc_errors::Applicability; use rustc_hir::{BorrowKind, Expr, ExprKind, LangItem, Mutability}; diff --git a/clippy_lints/src/redundant_static_lifetimes.rs b/clippy_lints/src/redundant_static_lifetimes.rs index b4e1f70d1535..d11da7a7d32c 100644 --- a/clippy_lints/src/redundant_static_lifetimes.rs +++ b/clippy_lints/src/redundant_static_lifetimes.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::msrvs::{self, MsrvStack}; use clippy_utils::source::snippet; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{ConstItem, Item, ItemKind, StaticItem, Ty, TyKind}; use rustc_errors::Applicability; use rustc_lint::{EarlyContext, EarlyLintPass}; diff --git a/clippy_lints/src/redundant_test_prefix.rs b/clippy_lints/src/redundant_test_prefix.rs index 84276e321657..35d419934d6d 100644 --- a/clippy_lints/src/redundant_test_prefix.rs +++ b/clippy_lints/src/redundant_test_prefix.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::is_test_function; use clippy_utils::visitors::for_each_expr; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::intravisit::FnKind; use rustc_hir::{self as hir, Body, ExprKind, FnDecl}; diff --git a/clippy_lints/src/redundant_type_annotations.rs b/clippy_lints/src/redundant_type_annotations.rs index 7bd4d6e993b4..cd70b9182028 100644 --- a/clippy_lints/src/redundant_type_annotations.rs +++ b/clippy_lints/src/redundant_type_annotations.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint; use clippy_utils::is_lint_allowed; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::LitKind; use rustc_hir as hir; use rustc_hir::def::DefKind; diff --git a/clippy_lints/src/ref_option_ref.rs b/clippy_lints/src/ref_option_ref.rs index 074345e75321..eaa30a4b0da3 100644 --- a/clippy_lints/src/ref_option_ref.rs +++ b/clippy_lints/src/ref_option_ref.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::last_path_segment; use clippy_utils::source::snippet; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{AmbigArg, GenericArg, GenericArgsParentheses, Mutability, Ty, TyKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/ref_patterns.rs b/clippy_lints/src/ref_patterns.rs index 002c6c41d52b..4c0d0150ef8d 100644 --- a/clippy_lints/src/ref_patterns.rs +++ b/clippy_lints/src/ref_patterns.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_then; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{BindingMode, Pat, PatKind}; use rustc_lint::{EarlyContext, EarlyLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/reference.rs b/clippy_lints/src/reference.rs index 4bff37216eda..3023886b0cfb 100644 --- a/clippy_lints/src/reference.rs +++ b/clippy_lints/src/reference.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::{SpanRangeExt, snippet_with_applicability}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{Expr, ExprKind, Mutability, UnOp}; use rustc_errors::Applicability; use rustc_lint::{EarlyContext, EarlyLintPass}; diff --git a/clippy_lints/src/regex.rs b/clippy_lints/src/regex.rs index 89d945161f62..c6833bb31787 100644 --- a/clippy_lints/src/regex.rs +++ b/clippy_lints/src/regex.rs @@ -5,6 +5,7 @@ use clippy_utils::diagnostics::{span_lint, span_lint_and_help}; use clippy_utils::paths::PathLookup; use clippy_utils::source::SpanRangeExt; use clippy_utils::{path_def_id, paths}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{LitKind, StrStyle}; use rustc_hir::def_id::DefIdMap; use rustc_hir::{BorrowKind, Expr, ExprKind, OwnerId}; diff --git a/clippy_lints/src/repeat_vec_with_capacity.rs b/clippy_lints/src/repeat_vec_with_capacity.rs index 8805687efccf..bf39cffbaa10 100644 --- a/clippy_lints/src/repeat_vec_with_capacity.rs +++ b/clippy_lints/src/repeat_vec_with_capacity.rs @@ -6,6 +6,7 @@ use clippy_utils::macros::matching_root_macro_call; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::snippet; use clippy_utils::{expr_or_init, fn_def_id, std_or_core}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/reserve_after_initialization.rs b/clippy_lints/src/reserve_after_initialization.rs index 152d7450f5ff..bad691510927 100644 --- a/clippy_lints/src/reserve_after_initialization.rs +++ b/clippy_lints/src/reserve_after_initialization.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::higher::{VecInitKind, get_vec_init_kind}; use clippy_utils::source::snippet; use clippy_utils::{is_from_proc_macro, path_to_local_id}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def::Res; use rustc_hir::{BindingMode, Block, Expr, ExprKind, HirId, LetStmt, PatKind, QPath, Stmt, StmtKind}; diff --git a/clippy_lints/src/return_self_not_must_use.rs b/clippy_lints/src/return_self_not_must_use.rs index 07ae92fa9843..8245d63b1b53 100644 --- a/clippy_lints/src/return_self_not_must_use.rs +++ b/clippy_lints/src/return_self_not_must_use.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_help; use clippy_utils::ty::is_must_use_ty; use clippy_utils::{nth_arg, return_ty}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::def_id::LocalDefId; use rustc_hir::intravisit::FnKind; use rustc_hir::{Body, FnDecl, OwnerId, TraitItem, TraitItemKind}; diff --git a/clippy_lints/src/returns.rs b/clippy_lints/src/returns.rs index 122d97fdf819..67c78f1e0178 100644 --- a/clippy_lints/src/returns.rs +++ b/clippy_lints/src/returns.rs @@ -8,6 +8,7 @@ use clippy_utils::{ span_find_starting_semi, sym, }; use core::ops::ControlFlow; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::MetaItemInner; use rustc_errors::Applicability; use rustc_hir::LangItem::ResultErr; diff --git a/clippy_lints/src/same_name_method.rs b/clippy_lints/src/same_name_method.rs index 226e8ff6adbf..65530903fff3 100644 --- a/clippy_lints/src/same_name_method.rs +++ b/clippy_lints/src/same_name_method.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_hir_and_then; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxHashMap; use rustc_hir::def::{DefKind, Res}; use rustc_hir::{HirId, Impl, ItemKind, Node, Path, QPath, TraitRef, TyKind}; diff --git a/clippy_lints/src/self_named_constructors.rs b/clippy_lints/src/self_named_constructors.rs index 534ba3a50c6b..afaa24e04a6d 100644 --- a/clippy_lints/src/self_named_constructors.rs +++ b/clippy_lints/src/self_named_constructors.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint; use clippy_utils::return_ty; use clippy_utils::ty::contains_adt_constructor; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Impl, ImplItem, ImplItemKind, ItemKind, Node}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/semicolon_block.rs b/clippy_lints/src/semicolon_block.rs index d85f4a8fa016..0013e271cdac 100644 --- a/clippy_lints/src/semicolon_block.rs +++ b/clippy_lints/src/semicolon_block.rs @@ -1,5 +1,6 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_then; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Block, Expr, ExprKind, Stmt, StmtKind}; use rustc_lint::{LateContext, LateLintPass, LintContext}; diff --git a/clippy_lints/src/semicolon_if_nothing_returned.rs b/clippy_lints/src/semicolon_if_nothing_returned.rs index 63237c655ef1..ed547987b913 100644 --- a/clippy_lints/src/semicolon_if_nothing_returned.rs +++ b/clippy_lints/src/semicolon_if_nothing_returned.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::snippet_with_context; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Block, ExprKind}; use rustc_lint::{LateContext, LateLintPass, LintContext}; diff --git a/clippy_lints/src/serde_api.rs b/clippy_lints/src/serde_api.rs index a64b9b223786..10ce2e149f06 100644 --- a/clippy_lints/src/serde_api.rs +++ b/clippy_lints/src/serde_api.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint; use clippy_utils::paths; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Impl, Item, ItemKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/set_contains_or_insert.rs b/clippy_lints/src/set_contains_or_insert.rs index ff6e6ef214b5..3cc9f33bf6b4 100644 --- a/clippy_lints/src/set_contains_or_insert.rs +++ b/clippy_lints/src/set_contains_or_insert.rs @@ -4,6 +4,7 @@ use clippy_utils::diagnostics::span_lint; use clippy_utils::ty::is_type_diagnostic_item; use clippy_utils::visitors::for_each_expr; use clippy_utils::{SpanlessEq, higher, peel_hir_expr_while, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Expr, ExprKind, UnOp}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/shadow.rs b/clippy_lints/src/shadow.rs index 14399867f318..d956fbb82657 100644 --- a/clippy_lints/src/shadow.rs +++ b/clippy_lints/src/shadow.rs @@ -4,6 +4,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::path_to_local_id; use clippy_utils::source::snippet; use clippy_utils::visitors::{Descend, Visitable, for_each_expr}; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxHashMap; use rustc_hir::def::Res; use rustc_hir::def_id::LocalDefId; diff --git a/clippy_lints/src/significant_drop_tightening.rs b/clippy_lints/src/significant_drop_tightening.rs index ccb1209c6fcb..5d053252d3ba 100644 --- a/clippy_lints/src/significant_drop_tightening.rs +++ b/clippy_lints/src/significant_drop_tightening.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::{indent_of, snippet}; use clippy_utils::{expr_or_init, get_attr, path_to_local, peel_hir_expr_unary}; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::{FxHashMap, FxIndexMap}; use rustc_errors::Applicability; use rustc_hir::def::{DefKind, Res}; diff --git a/clippy_lints/src/single_call_fn.rs b/clippy_lints/src/single_call_fn.rs index 64891743dc63..fba8cf6d51a8 100644 --- a/clippy_lints/src/single_call_fn.rs +++ b/clippy_lints/src/single_call_fn.rs @@ -1,6 +1,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_hir_and_then; use clippy_utils::{is_from_proc_macro, is_in_test_function}; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::{FxIndexMap, IndexEntry}; use rustc_hir::def::DefKind; use rustc_hir::def_id::LocalDefId; diff --git a/clippy_lints/src/single_char_lifetime_names.rs b/clippy_lints/src/single_char_lifetime_names.rs index 8c34da0d14a4..b34bbac1a71e 100644 --- a/clippy_lints/src/single_char_lifetime_names.rs +++ b/clippy_lints/src/single_char_lifetime_names.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_then; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{GenericParam, GenericParamKind}; use rustc_lint::{EarlyContext, EarlyLintPass, LintContext}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/single_component_path_imports.rs b/clippy_lints/src/single_component_path_imports.rs index 62939912304b..668652b4a978 100644 --- a/clippy_lints/src/single_component_path_imports.rs +++ b/clippy_lints/src/single_component_path_imports.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::{span_lint_and_help, span_lint_and_sugg}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::node_id::{NodeId, NodeMap}; use rustc_ast::ptr::P; use rustc_ast::visit::{Visitor, walk_expr}; diff --git a/clippy_lints/src/single_option_map.rs b/clippy_lints/src/single_option_map.rs index cc497c97a472..6452b8143447 100644 --- a/clippy_lints/src/single_option_map.rs +++ b/clippy_lints/src/single_option_map.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_help; use clippy_utils::ty::is_type_diagnostic_item; use clippy_utils::{path_res, peel_blocks}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::def::Res; use rustc_hir::def_id::LocalDefId; use rustc_hir::intravisit::FnKind; diff --git a/clippy_lints/src/single_range_in_vec_init.rs b/clippy_lints/src/single_range_in_vec_init.rs index 54d09ff9ee40..734c7e771654 100644 --- a/clippy_lints/src/single_range_in_vec_init.rs +++ b/clippy_lints/src/single_range_in_vec_init.rs @@ -4,6 +4,7 @@ use clippy_utils::macros::root_macro_call_first_node; use clippy_utils::source::SpanRangeExt; use clippy_utils::ty::implements_trait; use clippy_utils::{is_no_std_crate, paths}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::{LitIntType, LitKind, UintTy}; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind, LangItem, QPath, StructTailExpr}; diff --git a/clippy_lints/src/size_of_in_element_count.rs b/clippy_lints/src/size_of_in_element_count.rs index 835ec1e4ca1c..4496e493437a 100644 --- a/clippy_lints/src/size_of_in_element_count.rs +++ b/clippy_lints/src/size_of_in_element_count.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_help; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{BinOpKind, Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_middle::ty::{self, Ty}; diff --git a/clippy_lints/src/size_of_ref.rs b/clippy_lints/src/size_of_ref.rs index 60d923bcd77e..43a49015d6eb 100644 --- a/clippy_lints/src/size_of_ref.rs +++ b/clippy_lints/src/size_of_ref.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_help; use clippy_utils::{path_def_id, peel_middle_ty_refs}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/slow_vector_initialization.rs b/clippy_lints/src/slow_vector_initialization.rs index 30a5fe4db27e..08a4406a169a 100644 --- a/clippy_lints/src/slow_vector_initialization.rs +++ b/clippy_lints/src/slow_vector_initialization.rs @@ -5,6 +5,7 @@ use clippy_utils::{ SpanlessEq, get_enclosing_block, is_integer_literal, is_path_diagnostic_item, path_to_local, path_to_local_id, span_contains_comment, sym, }; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::intravisit::{Visitor, walk_block, walk_expr, walk_stmt}; use rustc_hir::{BindingMode, Block, Expr, ExprKind, HirId, PatKind, Stmt, StmtKind}; diff --git a/clippy_lints/src/std_instead_of_core.rs b/clippy_lints/src/std_instead_of_core.rs index d68ac8bab128..6f874b54a8f7 100644 --- a/clippy_lints/src/std_instead_of_core.rs +++ b/clippy_lints/src/std_instead_of_core.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::is_from_proc_macro; use clippy_utils::msrvs::Msrv; +use declare_clippy_lint::declare_clippy_lint; use rustc_attr_parsing::{StabilityLevel, StableSince}; use rustc_errors::Applicability; use rustc_hir::def::Res; diff --git a/clippy_lints/src/string_patterns.rs b/clippy_lints/src/string_patterns.rs index 5c95dfe83473..3551af89c995 100644 --- a/clippy_lints/src/string_patterns.rs +++ b/clippy_lints/src/string_patterns.rs @@ -8,6 +8,7 @@ use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::path_to_local_id; use clippy_utils::source::{snippet, str_literal_to_char_literal}; use clippy_utils::visitors::{Descend, for_each_expr}; +use declare_clippy_lint::declare_clippy_lint; use itertools::Itertools; use rustc_ast::{BinOpKind, LitKind}; use rustc_errors::Applicability; diff --git a/clippy_lints/src/strings.rs b/clippy_lints/src/strings.rs index 73a9fe71e001..c956372dd8c4 100644 --- a/clippy_lints/src/strings.rs +++ b/clippy_lints/src/strings.rs @@ -5,6 +5,7 @@ use clippy_utils::{ SpanlessEq, get_expr_use_or_unification_node, get_parent_expr, is_lint_allowed, method_calls, path_def_id, peel_blocks, sym, }; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def_id::DefId; use rustc_hir::{BinOpKind, BorrowKind, Expr, ExprKind, LangItem, Node, QPath}; diff --git a/clippy_lints/src/strlen_on_c_strings.rs b/clippy_lints/src/strlen_on_c_strings.rs index 1ada7094dc55..121482839f5f 100644 --- a/clippy_lints/src/strlen_on_c_strings.rs +++ b/clippy_lints/src/strlen_on_c_strings.rs @@ -3,6 +3,7 @@ use clippy_utils::match_libc_symbol; use clippy_utils::source::snippet_with_context; use clippy_utils::ty::{is_type_diagnostic_item, is_type_lang_item}; use clippy_utils::visitors::is_expr_unsafe; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Block, BlockCheckMode, Expr, ExprKind, LangItem, Node, UnsafeSource}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/suspicious_operation_groupings.rs b/clippy_lints/src/suspicious_operation_groupings.rs index 0d809c17989d..7f8a2386d504 100644 --- a/clippy_lints/src/suspicious_operation_groupings.rs +++ b/clippy_lints/src/suspicious_operation_groupings.rs @@ -2,6 +2,7 @@ use clippy_utils::ast_utils::{IdentIter, eq_id, is_useless_with_eq_exprs}; use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::snippet_with_applicability; use core::ops::{Add, AddAssign}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{BinOpKind, Expr, ExprKind, StmtKind}; use rustc_data_structures::fx::FxHashSet; use rustc_errors::Applicability; diff --git a/clippy_lints/src/suspicious_trait_impl.rs b/clippy_lints/src/suspicious_trait_impl.rs index edb7600b7c06..3731dfe0e420 100644 --- a/clippy_lints/src/suspicious_trait_impl.rs +++ b/clippy_lints/src/suspicious_trait_impl.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint; use clippy_utils::visitors::for_each_expr_without_closures; use clippy_utils::{BINOP_TRAITS, OP_ASSIGN_TRAITS, binop_traits, trait_ref_of_method}; use core::ops::ControlFlow; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir as hir; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/suspicious_xor_used_as_pow.rs b/clippy_lints/src/suspicious_xor_used_as_pow.rs index e55d17818e4f..c7399181b5b8 100644 --- a/clippy_lints/src/suspicious_xor_used_as_pow.rs +++ b/clippy_lints/src/suspicious_xor_used_as_pow.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::numeric_literal::NumericLiteral; use clippy_utils::source::snippet; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::LitKind; use rustc_errors::Applicability; use rustc_hir::{BinOpKind, Expr, ExprKind}; diff --git a/clippy_lints/src/swap.rs b/clippy_lints/src/swap.rs index e3ecd6508bf9..e514d8882dcb 100644 --- a/clippy_lints/src/swap.rs +++ b/clippy_lints/src/swap.rs @@ -9,6 +9,7 @@ use itertools::Itertools; use rustc_data_structures::fx::FxIndexSet; use rustc_hir::intravisit::{Visitor, walk_expr}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{AssignOpKind, Block, Expr, ExprKind, LetStmt, PatKind, QPath, Stmt, StmtKind}; use rustc_lint::{LateContext, LateLintPass, LintContext}; diff --git a/clippy_lints/src/swap_ptr_to_ref.rs b/clippy_lints/src/swap_ptr_to_ref.rs index ff196355a2e3..7a1025dd4a3e 100644 --- a/clippy_lints/src/swap_ptr_to_ref.rs +++ b/clippy_lints/src/swap_ptr_to_ref.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::path_def_id; use clippy_utils::source::snippet_with_context; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{BorrowKind, Expr, ExprKind, Mutability, UnOp}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/tabs_in_doc_comments.rs b/clippy_lints/src/tabs_in_doc_comments.rs index af9e13dba36e..701accaa22ab 100644 --- a/clippy_lints/src/tabs_in_doc_comments.rs +++ b/clippy_lints/src/tabs_in_doc_comments.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_sugg; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast; use rustc_errors::Applicability; use rustc_lint::{EarlyContext, EarlyLintPass}; diff --git a/clippy_lints/src/temporary_assignment.rs b/clippy_lints/src/temporary_assignment.rs index 8151dd8f2cfe..8f107c13dbdd 100644 --- a/clippy_lints/src/temporary_assignment.rs +++ b/clippy_lints/src/temporary_assignment.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint; use clippy_utils::is_adjusted; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/tests_outside_test_module.rs b/clippy_lints/src/tests_outside_test_module.rs index 3cd4fefffadf..ef4bdac9fdab 100644 --- a/clippy_lints/src/tests_outside_test_module.rs +++ b/clippy_lints/src/tests_outside_test_module.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::{is_in_cfg_test, is_in_test_function}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::intravisit::FnKind; use rustc_hir::{Body, FnDecl}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/to_digit_is_some.rs b/clippy_lints/src/to_digit_is_some.rs index 7d7d74f27b3c..c924591b1c0d 100644 --- a/clippy_lints/src/to_digit_is_some.rs +++ b/clippy_lints/src/to_digit_is_some.rs @@ -3,6 +3,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::snippet_with_applicability; use clippy_utils::{is_in_const_context, paths, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir as hir; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/to_string_trait_impl.rs b/clippy_lints/src/to_string_trait_impl.rs index 9596b85664b3..ef76ef1d7ec7 100644 --- a/clippy_lints/src/to_string_trait_impl.rs +++ b/clippy_lints/src/to_string_trait_impl.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_help; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Impl, Item, ItemKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/trailing_empty_array.rs b/clippy_lints/src/trailing_empty_array.rs index 20bf3a0bff1c..3a2c8ca7284c 100644 --- a/clippy_lints/src/trailing_empty_array.rs +++ b/clippy_lints/src/trailing_empty_array.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_help; use clippy_utils::{has_repr_attr, is_in_test}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Item, ItemKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_middle::ty; diff --git a/clippy_lints/src/trait_bounds.rs b/clippy_lints/src/trait_bounds.rs index 45e54302e32c..df98cfc1bb28 100644 --- a/clippy_lints/src/trait_bounds.rs +++ b/clippy_lints/src/trait_bounds.rs @@ -4,6 +4,7 @@ use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::{SpanRangeExt, snippet, snippet_with_applicability}; use clippy_utils::{SpanlessEq, SpanlessHash, is_from_proc_macro}; use core::hash::{Hash, Hasher}; +use declare_clippy_lint::declare_clippy_lint; use itertools::Itertools; use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexMap, IndexEntry}; use rustc_data_structures::unhash::UnhashMap; diff --git a/clippy_lints/src/transmute/mod.rs b/clippy_lints/src/transmute/mod.rs index d5112e2c3f97..0571febdcb97 100644 --- a/clippy_lints/src/transmute/mod.rs +++ b/clippy_lints/src/transmute/mod.rs @@ -18,6 +18,7 @@ mod wrong_transmute; use clippy_config::Conf; use clippy_utils::is_in_const_context; use clippy_utils::msrvs::Msrv; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Expr, ExprKind, QPath}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::impl_lint_pass; diff --git a/clippy_lints/src/tuple_array_conversions.rs b/clippy_lints/src/tuple_array_conversions.rs index 95ce19975c7e..8f9e49220622 100644 --- a/clippy_lints/src/tuple_array_conversions.rs +++ b/clippy_lints/src/tuple_array_conversions.rs @@ -3,6 +3,7 @@ use clippy_utils::diagnostics::span_lint_and_help; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::visitors::for_each_local_use_after_expr; use clippy_utils::{is_from_proc_macro, path_to_local}; +use declare_clippy_lint::declare_clippy_lint; use itertools::Itertools; use rustc_ast::LitKind; use rustc_hir::{Expr, ExprKind, Node, PatKind}; diff --git a/clippy_lints/src/types/mod.rs b/clippy_lints/src/types/mod.rs index c1c7cc516565..aa5dcacaf347 100644 --- a/clippy_lints/src/types/mod.rs +++ b/clippy_lints/src/types/mod.rs @@ -11,6 +11,7 @@ mod utils; mod vec_box; use clippy_config::Conf; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir as hir; use rustc_hir::intravisit::FnKind; use rustc_hir::{ diff --git a/clippy_lints/src/unconditional_recursion.rs b/clippy_lints/src/unconditional_recursion.rs index d321c48f6aff..f35887029018 100644 --- a/clippy_lints/src/unconditional_recursion.rs +++ b/clippy_lints/src/unconditional_recursion.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::{expr_or_init, fn_def_id_with_node_args, path_def_id}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::BinOpKind; use rustc_data_structures::fx::FxHashMap; use rustc_hir as hir; diff --git a/clippy_lints/src/undocumented_unsafe_blocks.rs b/clippy_lints/src/undocumented_unsafe_blocks.rs index a2938c86c76a..edd3a4fa962c 100644 --- a/clippy_lints/src/undocumented_unsafe_blocks.rs +++ b/clippy_lints/src/undocumented_unsafe_blocks.rs @@ -6,6 +6,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::is_lint_allowed; use clippy_utils::source::walk_span_to_context; use clippy_utils::visitors::{Descend, for_each_expr}; +use declare_clippy_lint::declare_clippy_lint; use hir::HirId; use rustc_hir as hir; use rustc_hir::{Block, BlockCheckMode, ItemKind, Node, UnsafeSource}; diff --git a/clippy_lints/src/unicode.rs b/clippy_lints/src/unicode.rs index 79571b0409d2..b3a3f4bea4e3 100644 --- a/clippy_lints/src/unicode.rs +++ b/clippy_lints/src/unicode.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::is_lint_allowed; use clippy_utils::macros::span_is_local; use clippy_utils::source::snippet; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::LitKind; use rustc_errors::Applicability; use rustc_hir::{Expr, ExprKind, HirId}; diff --git a/clippy_lints/src/uninhabited_references.rs b/clippy_lints/src/uninhabited_references.rs index b342f37f0c5f..73aad7c6451f 100644 --- a/clippy_lints/src/uninhabited_references.rs +++ b/clippy_lints/src/uninhabited_references.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::intravisit::FnKind; use rustc_hir::{Body, Expr, ExprKind, FnDecl, FnRetTy, TyKind, UnOp}; use rustc_hir_analysis::lower_ty; diff --git a/clippy_lints/src/uninit_vec.rs b/clippy_lints/src/uninit_vec.rs index cee4a53f03cb..7e41e06db520 100644 --- a/clippy_lints/src/uninit_vec.rs +++ b/clippy_lints/src/uninit_vec.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::{span_lint, span_lint_and_then}; use clippy_utils::higher::{VecInitKind, get_vec_init_kind}; use clippy_utils::ty::{is_type_diagnostic_item, is_uninit_value_valid_for_ty}; use clippy_utils::{SpanlessEq, is_integer_literal, is_lint_allowed, path_to_local_id, peel_hir_expr_while, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Block, Expr, ExprKind, HirId, PatKind, PathSegment, Stmt, StmtKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_middle::ty; diff --git a/clippy_lints/src/unit_return_expecting_ord.rs b/clippy_lints/src/unit_return_expecting_ord.rs index 67ceac92dbc0..dda1d0cd0adc 100644 --- a/clippy_lints/src/unit_return_expecting_ord.rs +++ b/clippy_lints/src/unit_return_expecting_ord.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::{span_lint, span_lint_and_help}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::def_id::DefId; use rustc_hir::{Closure, Expr, ExprKind, StmtKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/unit_types/mod.rs b/clippy_lints/src/unit_types/mod.rs index e016bd3434b1..632baccc2476 100644 --- a/clippy_lints/src/unit_types/mod.rs +++ b/clippy_lints/src/unit_types/mod.rs @@ -3,6 +3,7 @@ mod unit_arg; mod unit_cmp; mod utils; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Expr, LetStmt}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/unnecessary_box_returns.rs b/clippy_lints/src/unnecessary_box_returns.rs index 2b7d3dc0c90a..8688dfd65733 100644 --- a/clippy_lints/src/unnecessary_box_returns.rs +++ b/clippy_lints/src/unnecessary_box_returns.rs @@ -1,6 +1,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::ty::approx_ty_size; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def_id::LocalDefId; use rustc_hir::{FnDecl, FnRetTy, ImplItemKind, Item, ItemKind, Node, TraitItem, TraitItemKind}; diff --git a/clippy_lints/src/unnecessary_literal_bound.rs b/clippy_lints/src/unnecessary_literal_bound.rs index 9f107fbeec03..79e97426c262 100644 --- a/clippy_lints/src/unnecessary_literal_bound.rs +++ b/clippy_lints/src/unnecessary_literal_bound.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::path_res; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::LitKind; use rustc_errors::Applicability; use rustc_hir::def::Res; diff --git a/clippy_lints/src/unnecessary_map_on_constructor.rs b/clippy_lints/src/unnecessary_map_on_constructor.rs index d3700d05b014..9a2aab8813aa 100644 --- a/clippy_lints/src/unnecessary_map_on_constructor.rs +++ b/clippy_lints/src/unnecessary_map_on_constructor.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::snippet_with_applicability; use clippy_utils::ty::get_type_diagnostic_name; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir as hir; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/unnecessary_owned_empty_strings.rs b/clippy_lints/src/unnecessary_owned_empty_strings.rs index 7d996775a58c..ecb79ea8ead2 100644 --- a/clippy_lints/src/unnecessary_owned_empty_strings.rs +++ b/clippy_lints/src/unnecessary_owned_empty_strings.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::ty::is_type_lang_item; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::LitKind; use rustc_errors::Applicability; use rustc_hir::{BorrowKind, Expr, ExprKind, LangItem, Mutability}; diff --git a/clippy_lints/src/unnecessary_self_imports.rs b/clippy_lints/src/unnecessary_self_imports.rs index 93dff1b85796..dd5e91550cfa 100644 --- a/clippy_lints/src/unnecessary_self_imports.rs +++ b/clippy_lints/src/unnecessary_self_imports.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint_and_then; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::{Item, ItemKind, UseTreeKind}; use rustc_errors::Applicability; use rustc_lint::{EarlyContext, EarlyLintPass}; diff --git a/clippy_lints/src/unnecessary_semicolon.rs b/clippy_lints/src/unnecessary_semicolon.rs index f1d1a76d0c2d..5b9601e15c98 100644 --- a/clippy_lints/src/unnecessary_semicolon.rs +++ b/clippy_lints/src/unnecessary_semicolon.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::leaks_droppable_temporary_with_limited_lifetime; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{Block, ExprKind, HirId, MatchSource, Stmt, StmtKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/unnecessary_struct_initialization.rs b/clippy_lints/src/unnecessary_struct_initialization.rs index 5792b6b3178d..6de7855a2a41 100644 --- a/clippy_lints/src/unnecessary_struct_initialization.rs +++ b/clippy_lints/src/unnecessary_struct_initialization.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::snippet; use clippy_utils::ty::is_copy; use clippy_utils::{get_parent_expr, is_mutable, path_to_local}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Expr, ExprField, ExprKind, Path, QPath, StructTailExpr, UnOp}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/unnecessary_wraps.rs b/clippy_lints/src/unnecessary_wraps.rs index 54a7efc090ad..56103d57d048 100644 --- a/clippy_lints/src/unnecessary_wraps.rs +++ b/clippy_lints/src/unnecessary_wraps.rs @@ -5,6 +5,7 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::snippet; use clippy_utils::visitors::find_all_ret_expressions; use clippy_utils::{contains_return, is_res_lang_ctor, path_res, return_ty}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::LangItem::{OptionSome, ResultOk}; use rustc_hir::intravisit::FnKind; diff --git a/clippy_lints/src/unneeded_struct_pattern.rs b/clippy_lints/src/unneeded_struct_pattern.rs index 3326dea8c5df..bdbf6cc74f51 100644 --- a/clippy_lints/src/unneeded_struct_pattern.rs +++ b/clippy_lints/src/unneeded_struct_pattern.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::is_from_proc_macro; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def::{DefKind, Res}; use rustc_hir::{Pat, PatKind, QPath}; diff --git a/clippy_lints/src/unnested_or_patterns.rs b/clippy_lints/src/unnested_or_patterns.rs index 9ad184450de4..e54b8fda31d2 100644 --- a/clippy_lints/src/unnested_or_patterns.rs +++ b/clippy_lints/src/unnested_or_patterns.rs @@ -5,6 +5,7 @@ use clippy_utils::ast_utils::{eq_field_pat, eq_id, eq_maybe_qself, eq_pat, eq_pa use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::msrvs::{self, MsrvStack}; use clippy_utils::over; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::PatKind::*; use rustc_ast::mut_visit::*; use rustc_ast::ptr::P; diff --git a/clippy_lints/src/unsafe_removed_from_name.rs b/clippy_lints/src/unsafe_removed_from_name.rs index e70d2a2dafee..fbc385afdba3 100644 --- a/clippy_lints/src/unsafe_removed_from_name.rs +++ b/clippy_lints/src/unsafe_removed_from_name.rs @@ -1,4 +1,5 @@ use clippy_utils::diagnostics::span_lint; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{Item, ItemKind, UseTree, UseTreeKind}; use rustc_lint::{EarlyContext, EarlyLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/unused_async.rs b/clippy_lints/src/unused_async.rs index 8ceaa3dc58ec..ee1d3d4a7e09 100644 --- a/clippy_lints/src/unused_async.rs +++ b/clippy_lints/src/unused_async.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_hir_and_then; use clippy_utils::is_def_id_trait_method; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::def::DefKind; use rustc_hir::intravisit::{FnKind, Visitor, walk_expr, walk_fn}; use rustc_hir::{Body, Defaultness, Expr, ExprKind, FnDecl, HirId, Node, TraitItem, YieldSource}; diff --git a/clippy_lints/src/unused_io_amount.rs b/clippy_lints/src/unused_io_amount.rs index 5e1cb9e54f57..7dc6a0ac8c3d 100644 --- a/clippy_lints/src/unused_io_amount.rs +++ b/clippy_lints/src/unused_io_amount.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_hir_and_then; use clippy_utils::macros::{is_panic, root_macro_call_first_node}; use clippy_utils::{is_res_lang_ctor, paths, peel_blocks}; +use declare_clippy_lint::declare_clippy_lint; use hir::{ExprKind, HirId, PatKind}; use rustc_hir as hir; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/unused_peekable.rs b/clippy_lints/src/unused_peekable.rs index 7487e273caa7..b16fd2ab4bfa 100644 --- a/clippy_lints/src/unused_peekable.rs +++ b/clippy_lints/src/unused_peekable.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_hir_and_then; use clippy_utils::ty::{is_type_diagnostic_item, peel_mid_ty_refs_is_mutable}; use clippy_utils::{fn_def_id, is_trait_method, path_to_local_id, peel_ref_operators}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::Mutability; use rustc_hir::intravisit::{Visitor, walk_expr}; use rustc_hir::{Block, Expr, ExprKind, HirId, LetStmt, Node, PatKind, PathSegment, StmtKind}; diff --git a/clippy_lints/src/unused_result_ok.rs b/clippy_lints/src/unused_result_ok.rs index 958f19d18335..ff9ab63a1b57 100644 --- a/clippy_lints/src/unused_result_ok.rs +++ b/clippy_lints/src/unused_result_ok.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::snippet_with_context; use clippy_utils::ty::is_type_diagnostic_item; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{ExprKind, Stmt, StmtKind}; use rustc_lint::{LateContext, LateLintPass, LintContext}; diff --git a/clippy_lints/src/unused_rounding.rs b/clippy_lints/src/unused_rounding.rs index 3e5afec541c4..06d086596b33 100644 --- a/clippy_lints/src/unused_rounding.rs +++ b/clippy_lints/src/unused_rounding.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::snippet; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{Expr, ExprKind, MethodCall}; use rustc_errors::Applicability; use rustc_lint::{EarlyContext, EarlyLintPass}; diff --git a/clippy_lints/src/unused_self.rs b/clippy_lints/src/unused_self.rs index 12da891a71b1..9dcc851872ab 100644 --- a/clippy_lints/src/unused_self.rs +++ b/clippy_lints/src/unused_self.rs @@ -3,6 +3,7 @@ use clippy_utils::diagnostics::span_lint_and_help; use clippy_utils::macros::root_macro_call_first_node; use clippy_utils::sym; use clippy_utils::visitors::is_local_used; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{Body, Impl, ImplItem, ImplItemKind, ItemKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::impl_lint_pass; diff --git a/clippy_lints/src/unused_trait_names.rs b/clippy_lints/src/unused_trait_names.rs index 14ac65cf4dfe..5668b3e15e7a 100644 --- a/clippy_lints/src/unused_trait_names.rs +++ b/clippy_lints/src/unused_trait_names.rs @@ -3,6 +3,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::is_from_proc_macro; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::snippet_opt; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def::{DefKind, Res}; use rustc_hir::{Item, ItemKind, UseKind}; diff --git a/clippy_lints/src/unused_unit.rs b/clippy_lints/src/unused_unit.rs index 9859ddfdf7bd..3c7e5fe94cf8 100644 --- a/clippy_lints/src/unused_unit.rs +++ b/clippy_lints/src/unused_unit.rs @@ -1,6 +1,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::{SpanRangeExt, position_before_rarrow}; use clippy_utils::{is_never_expr, is_unit_expr}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::{Block, StmtKind}; use rustc_errors::Applicability; use rustc_hir::def_id::LocalDefId; diff --git a/clippy_lints/src/unwrap.rs b/clippy_lints/src/unwrap.rs index c641d4e55b94..a01f5e0956ac 100644 --- a/clippy_lints/src/unwrap.rs +++ b/clippy_lints/src/unwrap.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_hir_and_then; use clippy_utils::ty::is_type_diagnostic_item; use clippy_utils::usage::is_potentially_local_place; use clippy_utils::{higher, path_to_local, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::intravisit::{FnKind, Visitor, walk_expr, walk_fn}; use rustc_hir::{BinOpKind, Body, Expr, ExprKind, FnDecl, HirId, Node, UnOp}; diff --git a/clippy_lints/src/unwrap_in_result.rs b/clippy_lints/src/unwrap_in_result.rs index f870eb71e19b..3fa5c01ae002 100644 --- a/clippy_lints/src/unwrap_in_result.rs +++ b/clippy_lints/src/unwrap_in_result.rs @@ -3,6 +3,7 @@ use clippy_utils::ty::is_type_diagnostic_item; use clippy_utils::visitors::for_each_expr; use clippy_utils::{method_chain_args, return_ty}; use core::ops::ControlFlow; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir as hir; use rustc_hir::ImplItemKind; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/upper_case_acronyms.rs b/clippy_lints/src/upper_case_acronyms.rs index 8922478e7183..e617523749f2 100644 --- a/clippy_lints/src/upper_case_acronyms.rs +++ b/clippy_lints/src/upper_case_acronyms.rs @@ -1,6 +1,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_hir_and_then; use core::mem::replace; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{HirId, Item, ItemKind}; use rustc_lint::{LateContext, LateLintPass, LintContext}; diff --git a/clippy_lints/src/use_self.rs b/clippy_lints/src/use_self.rs index 743f54ca993a..05cc4cb3fa76 100644 --- a/clippy_lints/src/use_self.rs +++ b/clippy_lints/src/use_self.rs @@ -3,6 +3,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::is_from_proc_macro; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::ty::{same_type_and_consts, ty_from_hir_ty}; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxHashSet; use rustc_errors::Applicability; use rustc_hir::def::{CtorOf, DefKind, Res}; diff --git a/clippy_lints/src/useless_conversion.rs b/clippy_lints/src/useless_conversion.rs index c04fcf622b90..efe26cd31715 100644 --- a/clippy_lints/src/useless_conversion.rs +++ b/clippy_lints/src/useless_conversion.rs @@ -5,6 +5,7 @@ use clippy_utils::ty::{get_type_diagnostic_name, is_copy, is_type_diagnostic_ite use clippy_utils::{ get_parent_expr, is_inherent_method_call, is_trait_item, is_trait_method, is_ty_alias, path_to_local, }; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def_id::DefId; use rustc_hir::{BindingMode, Expr, ExprKind, HirId, MatchSource, Mutability, Node, PatKind}; diff --git a/clippy_lints/src/vec.rs b/clippy_lints/src/vec.rs index 3346b15dae9c..1e54c3f086cc 100644 --- a/clippy_lints/src/vec.rs +++ b/clippy_lints/src/vec.rs @@ -9,6 +9,7 @@ use clippy_utils::source::SpanRangeExt; use clippy_utils::ty::is_copy; use clippy_utils::visitors::for_each_local_use_after_expr; use clippy_utils::{get_parent_expr, higher, is_in_test, is_trait_method, span_contains_comment}; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::{BorrowKind, Expr, ExprKind, HirId, LetStmt, Mutability, Node, Pat, PatKind}; use rustc_lint::{LateContext, LateLintPass}; diff --git a/clippy_lints/src/vec_init_then_push.rs b/clippy_lints/src/vec_init_then_push.rs index 3c23662e9d16..77ac63ea1ab1 100644 --- a/clippy_lints/src/vec_init_then_push.rs +++ b/clippy_lints/src/vec_init_then_push.rs @@ -4,6 +4,7 @@ use clippy_utils::source::snippet; use clippy_utils::visitors::for_each_local_use_after_expr; use clippy_utils::{get_parent_expr, path_to_local_id}; use core::ops::ControlFlow; +use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; use rustc_hir::def::Res; use rustc_hir::{BindingMode, Block, Expr, ExprKind, HirId, LetStmt, Mutability, PatKind, QPath, Stmt, StmtKind, UnOp}; diff --git a/clippy_lints/src/visibility.rs b/clippy_lints/src/visibility.rs index d17b3df99216..2d6369084321 100644 --- a/clippy_lints/src/visibility.rs +++ b/clippy_lints/src/visibility.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::SpanRangeExt; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::ast::{Item, VisibilityKind}; use rustc_errors::Applicability; use rustc_lint::{EarlyContext, EarlyLintPass, LintContext}; diff --git a/clippy_lints/src/wildcard_imports.rs b/clippy_lints/src/wildcard_imports.rs index 45a5dbabeb4e..287fd3b4d2eb 100644 --- a/clippy_lints/src/wildcard_imports.rs +++ b/clippy_lints/src/wildcard_imports.rs @@ -2,6 +2,7 @@ use clippy_config::Conf; use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::is_in_test; use clippy_utils::source::{snippet, snippet_with_applicability}; +use declare_clippy_lint::declare_clippy_lint; use rustc_data_structures::fx::FxHashSet; use rustc_errors::Applicability; use rustc_hir::def::{DefKind, Res}; diff --git a/clippy_lints/src/write.rs b/clippy_lints/src/write.rs index a8758b65c919..7f9c6615c889 100644 --- a/clippy_lints/src/write.rs +++ b/clippy_lints/src/write.rs @@ -3,6 +3,7 @@ use clippy_utils::diagnostics::{span_lint, span_lint_and_then}; use clippy_utils::macros::{FormatArgsStorage, MacroCall, format_arg_removal_span, root_macro_call_first_node}; use clippy_utils::source::{SpanRangeExt, expand_past_previous_comma}; use clippy_utils::{is_in_test, sym}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::token::LitKind; use rustc_ast::{ FormatArgPosition, FormatArgPositionKind, FormatArgs, FormatArgsPiece, FormatOptions, FormatPlaceholder, diff --git a/clippy_lints/src/zero_div_zero.rs b/clippy_lints/src/zero_div_zero.rs index 5eb207a0aedb..daac3cab0ea3 100644 --- a/clippy_lints/src/zero_div_zero.rs +++ b/clippy_lints/src/zero_div_zero.rs @@ -1,5 +1,6 @@ use clippy_utils::consts::{ConstEvalCtxt, Constant}; use clippy_utils::diagnostics::span_lint_and_help; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{BinOpKind, Expr, ExprKind}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::declare_lint_pass; diff --git a/clippy_lints/src/zero_repeat_side_effects.rs b/clippy_lints/src/zero_repeat_side_effects.rs index 30fdf22fdbb0..c8c1d4a99e90 100644 --- a/clippy_lints/src/zero_repeat_side_effects.rs +++ b/clippy_lints/src/zero_repeat_side_effects.rs @@ -2,6 +2,7 @@ use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::higher::VecArgs; use clippy_utils::source::snippet; use clippy_utils::visitors::for_each_expr_without_closures; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::LitKind; use rustc_data_structures::packed::Pu128; use rustc_errors::Applicability; diff --git a/clippy_lints/src/zero_sized_map_values.rs b/clippy_lints/src/zero_sized_map_values.rs index 24b1381ba458..f5133faa4846 100644 --- a/clippy_lints/src/zero_sized_map_values.rs +++ b/clippy_lints/src/zero_sized_map_values.rs @@ -1,5 +1,6 @@ use clippy_utils::diagnostics::span_lint_and_help; use clippy_utils::ty::{is_type_diagnostic_item, ty_from_hir_ty}; +use declare_clippy_lint::declare_clippy_lint; use rustc_hir::{self as hir, AmbigArg, HirId, ItemKind, Node}; use rustc_lint::{LateContext, LateLintPass}; use rustc_middle::ty::layout::LayoutOf as _; diff --git a/clippy_lints/src/zombie_processes.rs b/clippy_lints/src/zombie_processes.rs index 09f1084fe700..5494f222cdc0 100644 --- a/clippy_lints/src/zombie_processes.rs +++ b/clippy_lints/src/zombie_processes.rs @@ -1,6 +1,7 @@ use ControlFlow::{Break, Continue}; use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::{fn_def_id, get_enclosing_block, path_to_local_id}; +use declare_clippy_lint::declare_clippy_lint; use rustc_ast::Mutability; use rustc_ast::visit::visit_opt; use rustc_errors::Applicability; diff --git a/declare_clippy_lint/Cargo.toml b/declare_clippy_lint/Cargo.toml new file mode 100644 index 000000000000..c8a9b13e6ce9 --- /dev/null +++ b/declare_clippy_lint/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "declare_clippy_lint" +version = "0.1.89" +edition = "2024" +repository = "https://github.com/rust-lang/rust-clippy" +license = "MIT OR Apache-2.0" + +[package.metadata.rust-analyzer] +# This crate uses #[feature(rustc_private)] +rustc_private = true diff --git a/declare_clippy_lint/src/lib.rs b/declare_clippy_lint/src/lib.rs new file mode 100644 index 000000000000..8250bf3987b5 --- /dev/null +++ b/declare_clippy_lint/src/lib.rs @@ -0,0 +1,264 @@ +#![feature(macro_metavar_expr_concat, rustc_private)] + +extern crate rustc_lint; + +use rustc_lint::{Lint, LintId, LintStore}; + +// Accessed by `declare_clippy_lints!`. +pub extern crate rustc_session; + +#[derive(Default)] +pub struct RegistrationGroups { + all: Vec, + cargo: Vec, + complexity: Vec, + correctness: Vec, + nursery: Vec, + pedantic: Vec, + perf: Vec, + restriction: Vec, + style: Vec, + suspicious: Vec, +} +impl RegistrationGroups { + pub fn insert_lints(&mut self, lints: &[&LintInfo]) { + for &&LintInfo { lint, category, .. } in lints { + use LintCategory::*; + let (all, cat) = match category { + Complexity => (Some(&mut self.all), &mut self.complexity), + Correctness => (Some(&mut self.all), &mut self.correctness), + Perf => (Some(&mut self.all), &mut self.perf), + Style => (Some(&mut self.all), &mut self.style), + Suspicious => (Some(&mut self.all), &mut self.suspicious), + Cargo => (None, &mut self.cargo), + Nursery => (None, &mut self.nursery), + Pedantic => (None, &mut self.pedantic), + Restriction => (None, &mut self.restriction), + }; + if let Some(all) = all { + all.push(LintId::of(lint)); + } + cat.push(LintId::of(lint)); + } + } + + pub fn register(self, store: &mut LintStore) { + store.register_group(true, "clippy::all", Some("clippy_all"), self.all); + store.register_group(true, "clippy::cargo", Some("clippy_cargo"), self.cargo); + store.register_group(true, "clippy::complexity", Some("clippy_complexity"), self.complexity); + store.register_group(true, "clippy::correctness", Some("clippy_correctness"), self.correctness); + store.register_group(true, "clippy::nursery", Some("clippy_nursery"), self.nursery); + store.register_group(true, "clippy::pedantic", Some("clippy_pedantic"), self.pedantic); + store.register_group(true, "clippy::perf", Some("clippy_perf"), self.perf); + store.register_group(true, "clippy::restriction", Some("clippy_restriction"), self.restriction); + store.register_group(true, "clippy::style", Some("clippy_style"), self.style); + store.register_group(true, "clippy::suspicious", Some("clippy_suspicious"), self.suspicious); + } +} + +#[derive(Copy, Clone, Debug)] +pub enum LintCategory { + Cargo, + Complexity, + Correctness, + Nursery, + Pedantic, + Perf, + Restriction, + Style, + Suspicious, +} +impl LintCategory { + pub fn name(self) -> &'static str { + match self { + Self::Cargo => "cargo", + Self::Complexity => "complexity", + Self::Correctness => "correctness", + Self::Nursery => "nursery", + Self::Pedantic => "pedantic", + Self::Perf => "perf", + Self::Restriction => "restriction", + Self::Style => "style", + Self::Suspicious => "suspicious", + } + } +} + +pub struct LintInfo { + /// Double reference to maintain pointer equality + pub lint: &'static &'static Lint, + pub category: LintCategory, + pub explanation: &'static str, + /// e.g. `clippy_lints/src/absolute_paths.rs#43` + pub location: &'static str, + pub version: &'static str, +} + +impl LintInfo { + /// Returns the lint name in lowercase without the `clippy::` prefix + #[allow(clippy::missing_panics_doc)] + pub fn name_lower(&self) -> String { + self.lint.name.strip_prefix("clippy::").unwrap().to_ascii_lowercase() + } +} + +#[macro_export] +macro_rules! declare_clippy_lint_inner { + ( + $(#[doc = $docs:literal])* + #[clippy::version = $version:literal] + $vis:vis $lint_name:ident, + $level:ident, + $category:ident, + $desc:literal + $(, @eval_always = $eval_always:literal)? + ) => { + $crate::rustc_session::declare_tool_lint! { + $(#[doc = $docs])* + #[clippy::version = $version] + $vis clippy::$lint_name, + $level, + $desc, + report_in_external_macro:true + $(, @eval_always = $eval_always)? + } + + pub(crate) static ${concat($lint_name, _INFO)}: &'static $crate::LintInfo = &$crate::LintInfo { + lint: &$lint_name, + category: $crate::LintCategory::$category, + explanation: concat!($($docs,"\n",)*), + location: concat!(file!(), "#L", line!()), + version: $version, + }; + }; +} + +#[macro_export] +macro_rules! declare_clippy_lint { + ( + $(#[$($meta:tt)*])* + $vis:vis $lint_name:ident, + correctness, + $($rest:tt)* + ) => { + $crate::declare_clippy_lint_inner! { + $(#[$($meta)*])* + $vis $lint_name, + Deny, + Correctness, + $($rest)* + } + }; + ( + $(#[$($meta:tt)*])* + $vis:vis $lint_name:ident, + complexity, + $($rest:tt)* + ) => { + $crate::declare_clippy_lint_inner! { + $(#[$($meta)*])* + $vis $lint_name, + Warn, + Complexity, + $($rest)* + } + }; + ( + $(#[$($meta:tt)*])* + $vis:vis $lint_name:ident, + perf, + $($rest:tt)* + ) => { + $crate::declare_clippy_lint_inner! { + $(#[$($meta)*])* + $vis $lint_name, + Warn, + Perf, + $($rest)* + } + }; + ( + $(#[$($meta:tt)*])* + $vis:vis $lint_name:ident, + style, + $($rest:tt)* + ) => { + $crate::declare_clippy_lint_inner! { + $(#[$($meta)*])* + $vis $lint_name, + Warn, + Style, + $($rest)* + } + }; + ( + $(#[$($meta:tt)*])* + $vis:vis $lint_name:ident, + suspicious, + $($rest:tt)* + ) => { + $crate::declare_clippy_lint_inner! { + $(#[$($meta)*])* + $vis $lint_name, + Warn, + Suspicious, + $($rest)* + } + }; + ( + $(#[$($meta:tt)*])* + $vis:vis $lint_name:ident, + cargo, + $($rest:tt)* + ) => { + $crate::declare_clippy_lint_inner! { + $(#[$($meta)*])* + $vis $lint_name, + Allow, + Cargo, + $($rest)* + } + }; + ( + $(#[$($meta:tt)*])* + $vis:vis $lint_name:ident, + nursery, + $($rest:tt)* + ) => { + $crate::declare_clippy_lint_inner! { + $(#[$($meta)*])* + $vis $lint_name, + Allow, + Nursery, + $($rest)* + } + }; + ( + $(#[$($meta:tt)*])* + $vis:vis $lint_name:ident, + pedantic, + $($rest:tt)* + ) => { + $crate::declare_clippy_lint_inner! { + $(#[$($meta)*])* + $vis $lint_name, + Allow, + Pedantic, + $($rest)* + } + }; + ( + $(#[$($meta:tt)*])* + $vis:vis $lint_name:ident, + restriction, + $($rest:tt)* + ) => { + $crate::declare_clippy_lint_inner! { + $(#[$($meta)*])* + $vis $lint_name, + Allow, + Restriction, + $($rest)* + } + }; +} diff --git a/src/driver.rs b/src/driver.rs index f8acf88cf81c..99ec05b83ef3 100644 --- a/src/driver.rs +++ b/src/driver.rs @@ -14,6 +14,7 @@ extern crate rustc_session; extern crate rustc_span; use clippy_utils::sym; +use declare_clippy_lint::RegistrationGroups; use rustc_interface::interface; use rustc_session::EarlyDiagCtxt; use rustc_session::config::ErrorOutputType; @@ -157,7 +158,9 @@ impl rustc_driver::Callbacks for ClippyCallbacks { } let conf = clippy_config::Conf::read(sess, &conf_path); - clippy_lints::register_lints(lint_store, conf); + let mut groups = RegistrationGroups::default(); + clippy_lints::register_lints(lint_store, conf, &mut groups); + groups.register(lint_store); #[cfg(feature = "internal")] clippy_lints_internal::register_lints(lint_store); })); From 11d7080d693fa78867fa55a8de798ff05c8654a3 Mon Sep 17 00:00:00 2001 From: Jason Newcomb Date: Sat, 17 May 2025 10:33:29 -0400 Subject: [PATCH 2/3] m1 --- clippy_lints/src/ineffective_open_options.rs | 2 +- clippy_lints/src/methods/chars_next_cmp.rs | 8 --- .../src/methods/chars_next_cmp_with_unwrap.rs | 8 --- clippy_lints_methods/Cargo.toml | 28 +++++++++ .../src}/bind_instead_of_map.rs | 0 .../src}/bytecount.rs | 0 .../src}/bytes_count_to_len.rs | 0 .../src}/bytes_nth.rs | 2 +- ...se_sensitive_file_extension_comparisons.rs | 0 .../src}/chars_cmp.rs | 2 +- .../src}/chars_cmp_with_unwrap.rs | 2 +- .../src}/chars_last_cmp.rs | 4 +- .../src}/chars_last_cmp_with_unwrap.rs | 4 +- clippy_lints_methods/src/chars_next_cmp.rs | 8 +++ .../src/chars_next_cmp_with_unwrap.rs | 8 +++ .../src}/clear_with_drain.rs | 0 .../src}/clone_on_copy.rs | 0 .../src}/clone_on_ref_ptr.rs | 0 .../src}/cloned_instead_of_copied.rs | 0 .../src}/collapsible_str_replace.rs | 0 .../src}/double_ended_iterator_last.rs | 0 .../src}/drain_collect.rs | 2 +- .../src}/err_expect.rs | 0 .../src}/expect_fun_call.rs | 0 .../src}/extend_with_drain.rs | 0 .../src}/filetype_is_file.rs | 0 .../src}/filter_map.rs | 0 .../src}/filter_map_bool_then.rs | 0 .../src}/filter_map_identity.rs | 0 .../src}/filter_map_next.rs | 0 .../src}/filter_next.rs | 0 .../src}/flat_map_identity.rs | 0 .../src}/flat_map_option.rs | 0 .../src}/format_collect.rs | 0 .../src}/from_iter_instead_of_collect.rs | 0 .../src}/get_first.rs | 0 .../src}/get_last_with_len.rs | 0 .../src}/get_unwrap.rs | 0 .../src}/implicit_clone.rs | 0 .../src}/inefficient_to_string.rs | 0 .../src}/inspect_for_each.rs | 0 .../src}/into_iter_on_ref.rs | 0 .../src}/io_other_error.rs | 0 .../src}/is_digit_ascii_radix.rs | 0 .../src}/is_empty.rs | 0 .../src}/iter_cloned_collect.rs | 2 +- .../src}/iter_count.rs | 0 .../src}/iter_filter.rs | 0 .../src}/iter_kv_map.rs | 0 .../src}/iter_next_slice.rs | 0 .../src}/iter_nth.rs | 0 .../src}/iter_nth_zero.rs | 0 .../iter_on_single_or_empty_collections.rs | 0 .../src}/iter_out_of_bounds.rs | 0 .../src}/iter_overeager_cloned.rs | 0 .../src}/iter_skip_next.rs | 0 .../src}/iter_skip_zero.rs | 0 .../src}/iter_with_drain.rs | 0 .../src}/iterator_step_by_zero.rs | 0 .../src}/join_absolute_paths.rs | 0 .../mod.rs => clippy_lints_methods/src/lib.rs | 58 +++++++++++++++++++ .../src}/manual_c_str_literals.rs | 0 .../src}/manual_contains.rs | 0 .../src}/manual_inspect.rs | 0 .../src}/manual_is_variant_and.rs | 0 .../src}/manual_next_back.rs | 0 .../src}/manual_ok_or.rs | 0 .../src}/manual_repeat_n.rs | 0 .../src}/manual_saturating_arithmetic.rs | 0 .../src}/manual_str_repeat.rs | 0 .../src}/manual_try_fold.rs | 0 .../src}/map_all_any_identity.rs | 0 .../src}/map_clone.rs | 0 .../src}/map_collect_result_unit.rs | 0 .../src}/map_err_ignore.rs | 0 .../src}/map_flatten.rs | 0 .../src}/map_identity.rs | 0 .../src}/map_unwrap_or.rs | 0 .../map_with_unused_argument_over_ranges.rs | 2 +- .../src}/mut_mutex_lock.rs | 0 .../src}/needless_as_bytes.rs | 0 .../src}/needless_character_iteration.rs | 0 .../src}/needless_collect.rs | 0 .../src}/needless_option_as_deref.rs | 0 .../src}/needless_option_take.rs | 0 .../src}/no_effect_replace.rs | 0 .../src}/obfuscated_if_else.rs | 0 .../src}/ok_expect.rs | 0 .../src}/open_options.rs | 0 .../src}/option_as_ref_cloned.rs | 0 .../src}/option_as_ref_deref.rs | 0 .../src}/option_map_or_none.rs | 0 .../src}/option_map_unwrap_or.rs | 0 .../src}/or_fun_call.rs | 0 .../src}/or_then_unwrap.rs | 0 .../src}/path_buf_push_overwrite.rs | 0 .../src}/path_ends_with_ext.rs | 0 .../src}/range_zip_with_len.rs | 0 .../src}/read_line_without_trim.rs | 0 .../src}/readonly_write_lock.rs | 0 .../src}/redundant_as_str.rs | 0 .../src}/repeat_once.rs | 0 .../src}/result_map_or_else_none.rs | 0 .../src}/return_and_then.rs | 0 .../src}/search_is_some.rs | 0 .../src}/seek_from_current.rs | 0 .../src}/seek_to_start_instead_of_rewind.rs | 0 .../src}/single_char_add_str.rs | 2 +- .../src}/single_char_insert_string.rs | 0 .../src}/single_char_push_string.rs | 0 .../src}/skip_while_next.rs | 0 .../src}/sliced_string_as_bytes.rs | 0 .../src}/stable_sort_primitive.rs | 0 .../src}/str_split.rs | 0 .../src}/str_splitn.rs | 0 .../src}/string_extend_chars.rs | 0 .../src}/string_lit_chars_any.rs | 0 .../src}/suspicious_command_arg_space.rs | 0 .../src}/suspicious_map.rs | 0 .../src}/suspicious_splitn.rs | 0 .../src}/suspicious_to_owned.rs | 0 .../src}/swap_with_temporary.rs | 0 .../src}/type_id_on_box.rs | 2 +- .../src}/unbuffered_bytes.rs | 0 .../src}/uninit_assumed_init.rs | 0 .../src}/unit_hash.rs | 0 .../src}/unnecessary_fallible_conversions.rs | 0 .../src}/unnecessary_filter_map.rs | 0 .../src}/unnecessary_first_then_check.rs | 0 .../src}/unnecessary_fold.rs | 0 .../src}/unnecessary_get_then_check.rs | 0 .../src}/unnecessary_iter_cloned.rs | 0 .../src}/unnecessary_join.rs | 0 .../src}/unnecessary_lazy_eval.rs | 0 .../src}/unnecessary_literal_unwrap.rs | 0 .../src}/unnecessary_map_or.rs | 0 .../src}/unnecessary_min_or_max.rs | 0 .../src}/unnecessary_result_map_or_else.rs | 0 .../src}/unnecessary_sort_by.rs | 0 .../src}/unnecessary_to_owned.rs | 0 .../src}/unused_enumerate_index.rs | 0 .../src}/unwrap_expect_used.rs | 0 .../src}/useless_asref.rs | 0 .../src}/useless_nonzero_new_unchecked.rs | 0 .../src}/utils.rs | 0 .../src}/vec_resize_to_zero.rs | 0 .../src}/verbose_file_reads.rs | 0 .../src}/waker_clone_wake.rs | 0 .../src}/wrong_self_convention.rs | 2 +- .../src}/zst_offset.rs | 0 150 files changed, 116 insertions(+), 30 deletions(-) delete mode 100644 clippy_lints/src/methods/chars_next_cmp.rs delete mode 100644 clippy_lints/src/methods/chars_next_cmp_with_unwrap.rs create mode 100644 clippy_lints_methods/Cargo.toml rename {clippy_lints/src/methods => clippy_lints_methods/src}/bind_instead_of_map.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/bytecount.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/bytes_count_to_len.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/bytes_nth.rs (97%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/case_sensitive_file_extension_comparisons.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/chars_cmp.rs (97%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/chars_cmp_with_unwrap.rs (96%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/chars_last_cmp.rs (70%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/chars_last_cmp_with_unwrap.rs (72%) create mode 100644 clippy_lints_methods/src/chars_next_cmp.rs create mode 100644 clippy_lints_methods/src/chars_next_cmp_with_unwrap.rs rename {clippy_lints/src/methods => clippy_lints_methods/src}/clear_with_drain.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/clone_on_copy.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/clone_on_ref_ptr.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/cloned_instead_of_copied.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/collapsible_str_replace.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/double_ended_iterator_last.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/drain_collect.rs (98%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/err_expect.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/expect_fun_call.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/extend_with_drain.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/filetype_is_file.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/filter_map.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/filter_map_bool_then.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/filter_map_identity.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/filter_map_next.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/filter_next.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/flat_map_identity.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/flat_map_option.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/format_collect.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/from_iter_instead_of_collect.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/get_first.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/get_last_with_len.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/get_unwrap.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/implicit_clone.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/inefficient_to_string.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/inspect_for_each.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/into_iter_on_ref.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/io_other_error.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/is_digit_ascii_radix.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/is_empty.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/iter_cloned_collect.rs (96%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/iter_count.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/iter_filter.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/iter_kv_map.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/iter_next_slice.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/iter_nth.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/iter_nth_zero.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/iter_on_single_or_empty_collections.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/iter_out_of_bounds.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/iter_overeager_cloned.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/iter_skip_next.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/iter_skip_zero.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/iter_with_drain.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/iterator_step_by_zero.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/join_absolute_paths.rs (100%) rename clippy_lints/src/methods/mod.rs => clippy_lints_methods/src/lib.rs (99%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/manual_c_str_literals.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/manual_contains.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/manual_inspect.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/manual_is_variant_and.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/manual_next_back.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/manual_ok_or.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/manual_repeat_n.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/manual_saturating_arithmetic.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/manual_str_repeat.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/manual_try_fold.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/map_all_any_identity.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/map_clone.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/map_collect_result_unit.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/map_err_ignore.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/map_flatten.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/map_identity.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/map_unwrap_or.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/map_with_unused_argument_over_ranges.rs (98%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/mut_mutex_lock.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/needless_as_bytes.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/needless_character_iteration.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/needless_collect.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/needless_option_as_deref.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/needless_option_take.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/no_effect_replace.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/obfuscated_if_else.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/ok_expect.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/open_options.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/option_as_ref_cloned.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/option_as_ref_deref.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/option_map_or_none.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/option_map_unwrap_or.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/or_fun_call.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/or_then_unwrap.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/path_buf_push_overwrite.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/path_ends_with_ext.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/range_zip_with_len.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/read_line_without_trim.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/readonly_write_lock.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/redundant_as_str.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/repeat_once.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/result_map_or_else_none.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/return_and_then.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/search_is_some.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/seek_from_current.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/seek_to_start_instead_of_rewind.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/single_char_add_str.rs (88%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/single_char_insert_string.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/single_char_push_string.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/skip_while_next.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/sliced_string_as_bytes.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/stable_sort_primitive.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/str_split.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/str_splitn.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/string_extend_chars.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/string_lit_chars_any.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/suspicious_command_arg_space.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/suspicious_map.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/suspicious_splitn.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/suspicious_to_owned.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/swap_with_temporary.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/type_id_on_box.rs (99%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/unbuffered_bytes.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/uninit_assumed_init.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/unit_hash.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/unnecessary_fallible_conversions.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/unnecessary_filter_map.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/unnecessary_first_then_check.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/unnecessary_fold.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/unnecessary_get_then_check.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/unnecessary_iter_cloned.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/unnecessary_join.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/unnecessary_lazy_eval.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/unnecessary_literal_unwrap.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/unnecessary_map_or.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/unnecessary_min_or_max.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/unnecessary_result_map_or_else.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/unnecessary_sort_by.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/unnecessary_to_owned.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/unused_enumerate_index.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/unwrap_expect_used.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/useless_asref.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/useless_nonzero_new_unchecked.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/utils.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/vec_resize_to_zero.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/verbose_file_reads.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/waker_clone_wake.rs (100%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/wrong_self_convention.rs (99%) rename {clippy_lints/src/methods => clippy_lints_methods/src}/zst_offset.rs (100%) diff --git a/clippy_lints/src/ineffective_open_options.rs b/clippy_lints/src/ineffective_open_options.rs index acb5551315e0..88e9185450f5 100644 --- a/clippy_lints/src/ineffective_open_options.rs +++ b/clippy_lints/src/ineffective_open_options.rs @@ -1,4 +1,4 @@ -use crate::methods::method_call; +use super::method_call; use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::peel_blocks; use declare_clippy_lint::declare_clippy_lint; diff --git a/clippy_lints/src/methods/chars_next_cmp.rs b/clippy_lints/src/methods/chars_next_cmp.rs deleted file mode 100644 index b631fecab972..000000000000 --- a/clippy_lints/src/methods/chars_next_cmp.rs +++ /dev/null @@ -1,8 +0,0 @@ -use rustc_lint::LateContext; - -use super::CHARS_NEXT_CMP; - -/// Checks for the `CHARS_NEXT_CMP` lint. -pub(super) fn check(cx: &LateContext<'_>, info: &crate::methods::BinaryExprInfo<'_>) -> bool { - crate::methods::chars_cmp::check(cx, info, &["chars", "next"], CHARS_NEXT_CMP, "starts_with") -} diff --git a/clippy_lints/src/methods/chars_next_cmp_with_unwrap.rs b/clippy_lints/src/methods/chars_next_cmp_with_unwrap.rs deleted file mode 100644 index caf21d3ff3bc..000000000000 --- a/clippy_lints/src/methods/chars_next_cmp_with_unwrap.rs +++ /dev/null @@ -1,8 +0,0 @@ -use rustc_lint::LateContext; - -use super::CHARS_NEXT_CMP; - -/// Checks for the `CHARS_NEXT_CMP` lint with `unwrap()`. -pub(super) fn check(cx: &LateContext<'_>, info: &crate::methods::BinaryExprInfo<'_>) -> bool { - crate::methods::chars_cmp_with_unwrap::check(cx, info, &["chars", "next", "unwrap"], CHARS_NEXT_CMP, "starts_with") -} diff --git a/clippy_lints_methods/Cargo.toml b/clippy_lints_methods/Cargo.toml new file mode 100644 index 000000000000..9c3879100cd5 --- /dev/null +++ b/clippy_lints_methods/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "clippy_lints_methods" +version = "0.1.89" +description = "A bunch of helpful lints to avoid common pitfalls in Rust" +repository = "https://github.com/rust-lang/rust-clippy" +readme = "../README.md" +license = "MIT OR Apache-2.0" +keywords = ["clippy", "lint", "plugin"] +edition = "2024" + +[dependencies] +# arrayvec = { version = "0.7", default-features = false } +# cargo_metadata = "0.18" +clippy_config = { path = "../clippy_config" } +clippy_utils = { path = "../clippy_utils" } +# itertools = "0.12" +# quine-mc_cluskey = "0.2" +# regex-syntax = "0.8" +# serde = { version = "1.0", features = ["derive"] } +# toml = "0.7.3" +# unicode-normalization = "0.1" +# unicode-script = { version = "0.5", default-features = false } +# semver = "1.0" +# url = "2.2" + +[package.metadata.rust-analyzer] +# This crate uses #[feature(rustc_private)] +rustc_private = true diff --git a/clippy_lints/src/methods/bind_instead_of_map.rs b/clippy_lints_methods/src/bind_instead_of_map.rs similarity index 100% rename from clippy_lints/src/methods/bind_instead_of_map.rs rename to clippy_lints_methods/src/bind_instead_of_map.rs diff --git a/clippy_lints/src/methods/bytecount.rs b/clippy_lints_methods/src/bytecount.rs similarity index 100% rename from clippy_lints/src/methods/bytecount.rs rename to clippy_lints_methods/src/bytecount.rs diff --git a/clippy_lints/src/methods/bytes_count_to_len.rs b/clippy_lints_methods/src/bytes_count_to_len.rs similarity index 100% rename from clippy_lints/src/methods/bytes_count_to_len.rs rename to clippy_lints_methods/src/bytes_count_to_len.rs diff --git a/clippy_lints/src/methods/bytes_nth.rs b/clippy_lints_methods/src/bytes_nth.rs similarity index 97% rename from clippy_lints/src/methods/bytes_nth.rs rename to clippy_lints_methods/src/bytes_nth.rs index de22514c37c6..40172777c7b5 100644 --- a/clippy_lints/src/methods/bytes_nth.rs +++ b/clippy_lints_methods/src/bytes_nth.rs @@ -5,7 +5,7 @@ use rustc_errors::Applicability; use rustc_hir::{Expr, LangItem}; use rustc_lint::LateContext; -use crate::methods::method_call; +use super::method_call; use super::BYTES_NTH; diff --git a/clippy_lints/src/methods/case_sensitive_file_extension_comparisons.rs b/clippy_lints_methods/src/case_sensitive_file_extension_comparisons.rs similarity index 100% rename from clippy_lints/src/methods/case_sensitive_file_extension_comparisons.rs rename to clippy_lints_methods/src/case_sensitive_file_extension_comparisons.rs diff --git a/clippy_lints/src/methods/chars_cmp.rs b/clippy_lints_methods/src/chars_cmp.rs similarity index 97% rename from clippy_lints/src/methods/chars_cmp.rs rename to clippy_lints_methods/src/chars_cmp.rs index 4ae0aeea2d1c..0927e5d0e8eb 100644 --- a/clippy_lints/src/methods/chars_cmp.rs +++ b/clippy_lints_methods/src/chars_cmp.rs @@ -9,7 +9,7 @@ use rustc_middle::ty; /// Wrapper fn for `CHARS_NEXT_CMP` and `CHARS_LAST_CMP` lints. pub(super) fn check( cx: &LateContext<'_>, - info: &crate::methods::BinaryExprInfo<'_>, + info: &super::BinaryExprInfo<'_>, chain_methods: &[&str], lint: &'static Lint, suggest: &str, diff --git a/clippy_lints/src/methods/chars_cmp_with_unwrap.rs b/clippy_lints_methods/src/chars_cmp_with_unwrap.rs similarity index 96% rename from clippy_lints/src/methods/chars_cmp_with_unwrap.rs rename to clippy_lints_methods/src/chars_cmp_with_unwrap.rs index 9c45ec2e56cb..12c0a1f20530 100644 --- a/clippy_lints/src/methods/chars_cmp_with_unwrap.rs +++ b/clippy_lints_methods/src/chars_cmp_with_unwrap.rs @@ -9,7 +9,7 @@ use rustc_lint::{LateContext, Lint}; /// Wrapper fn for `CHARS_NEXT_CMP` and `CHARS_LAST_CMP` lints with `unwrap()`. pub(super) fn check( cx: &LateContext<'_>, - info: &crate::methods::BinaryExprInfo<'_>, + info: &super::BinaryExprInfo<'_>, chain_methods: &[&str], lint: &'static Lint, suggest: &str, diff --git a/clippy_lints/src/methods/chars_last_cmp.rs b/clippy_lints_methods/src/chars_last_cmp.rs similarity index 70% rename from clippy_lints/src/methods/chars_last_cmp.rs rename to clippy_lints_methods/src/chars_last_cmp.rs index 2efff4c3c549..5cda827ee600 100644 --- a/clippy_lints/src/methods/chars_last_cmp.rs +++ b/clippy_lints_methods/src/chars_last_cmp.rs @@ -1,10 +1,10 @@ -use crate::methods::chars_cmp; +use super::chars_cmp; use rustc_lint::LateContext; use super::CHARS_LAST_CMP; /// Checks for the `CHARS_LAST_CMP` lint. -pub(super) fn check(cx: &LateContext<'_>, info: &crate::methods::BinaryExprInfo<'_>) -> bool { +pub(super) fn check(cx: &LateContext<'_>, info: &super::BinaryExprInfo<'_>) -> bool { if chars_cmp::check(cx, info, &["chars", "last"], CHARS_LAST_CMP, "ends_with") { true } else { diff --git a/clippy_lints/src/methods/chars_last_cmp_with_unwrap.rs b/clippy_lints_methods/src/chars_last_cmp_with_unwrap.rs similarity index 72% rename from clippy_lints/src/methods/chars_last_cmp_with_unwrap.rs rename to clippy_lints_methods/src/chars_last_cmp_with_unwrap.rs index 5b8713f7d790..4c5927624c02 100644 --- a/clippy_lints/src/methods/chars_last_cmp_with_unwrap.rs +++ b/clippy_lints_methods/src/chars_last_cmp_with_unwrap.rs @@ -1,10 +1,10 @@ -use crate::methods::chars_cmp_with_unwrap; +use super::chars_cmp_with_unwrap; use rustc_lint::LateContext; use super::CHARS_LAST_CMP; /// Checks for the `CHARS_LAST_CMP` lint with `unwrap()`. -pub(super) fn check(cx: &LateContext<'_>, info: &crate::methods::BinaryExprInfo<'_>) -> bool { +pub(super) fn check(cx: &LateContext<'_>, info: &super::BinaryExprInfo<'_>) -> bool { if chars_cmp_with_unwrap::check(cx, info, &["chars", "last", "unwrap"], CHARS_LAST_CMP, "ends_with") { true } else { diff --git a/clippy_lints_methods/src/chars_next_cmp.rs b/clippy_lints_methods/src/chars_next_cmp.rs new file mode 100644 index 000000000000..05194f5247f4 --- /dev/null +++ b/clippy_lints_methods/src/chars_next_cmp.rs @@ -0,0 +1,8 @@ +use rustc_lint::LateContext; + +use super::CHARS_NEXT_CMP; + +/// Checks for the `CHARS_NEXT_CMP` lint. +pub(super) fn check(cx: &LateContext<'_>, info: &super::BinaryExprInfo<'_>) -> bool { + super::chars_cmp::check(cx, info, &["chars", "next"], CHARS_NEXT_CMP, "starts_with") +} diff --git a/clippy_lints_methods/src/chars_next_cmp_with_unwrap.rs b/clippy_lints_methods/src/chars_next_cmp_with_unwrap.rs new file mode 100644 index 000000000000..84690eff3c00 --- /dev/null +++ b/clippy_lints_methods/src/chars_next_cmp_with_unwrap.rs @@ -0,0 +1,8 @@ +use rustc_lint::LateContext; + +use super::CHARS_NEXT_CMP; + +/// Checks for the `CHARS_NEXT_CMP` lint with `unwrap()`. +pub(super) fn check(cx: &LateContext<'_>, info: &super::BinaryExprInfo<'_>) -> bool { + super::chars_cmp_with_unwrap::check(cx, info, &["chars", "next", "unwrap"], CHARS_NEXT_CMP, "starts_with") +} diff --git a/clippy_lints/src/methods/clear_with_drain.rs b/clippy_lints_methods/src/clear_with_drain.rs similarity index 100% rename from clippy_lints/src/methods/clear_with_drain.rs rename to clippy_lints_methods/src/clear_with_drain.rs diff --git a/clippy_lints/src/methods/clone_on_copy.rs b/clippy_lints_methods/src/clone_on_copy.rs similarity index 100% rename from clippy_lints/src/methods/clone_on_copy.rs rename to clippy_lints_methods/src/clone_on_copy.rs diff --git a/clippy_lints/src/methods/clone_on_ref_ptr.rs b/clippy_lints_methods/src/clone_on_ref_ptr.rs similarity index 100% rename from clippy_lints/src/methods/clone_on_ref_ptr.rs rename to clippy_lints_methods/src/clone_on_ref_ptr.rs diff --git a/clippy_lints/src/methods/cloned_instead_of_copied.rs b/clippy_lints_methods/src/cloned_instead_of_copied.rs similarity index 100% rename from clippy_lints/src/methods/cloned_instead_of_copied.rs rename to clippy_lints_methods/src/cloned_instead_of_copied.rs diff --git a/clippy_lints/src/methods/collapsible_str_replace.rs b/clippy_lints_methods/src/collapsible_str_replace.rs similarity index 100% rename from clippy_lints/src/methods/collapsible_str_replace.rs rename to clippy_lints_methods/src/collapsible_str_replace.rs diff --git a/clippy_lints/src/methods/double_ended_iterator_last.rs b/clippy_lints_methods/src/double_ended_iterator_last.rs similarity index 100% rename from clippy_lints/src/methods/double_ended_iterator_last.rs rename to clippy_lints_methods/src/double_ended_iterator_last.rs diff --git a/clippy_lints/src/methods/drain_collect.rs b/clippy_lints_methods/src/drain_collect.rs similarity index 98% rename from clippy_lints/src/methods/drain_collect.rs rename to clippy_lints_methods/src/drain_collect.rs index cbf713a3b17c..7e22b4b59efd 100644 --- a/clippy_lints/src/methods/drain_collect.rs +++ b/clippy_lints_methods/src/drain_collect.rs @@ -1,4 +1,4 @@ -use crate::methods::DRAIN_COLLECT; +use super::DRAIN_COLLECT; use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::source::snippet; use clippy_utils::ty::is_type_lang_item; diff --git a/clippy_lints/src/methods/err_expect.rs b/clippy_lints_methods/src/err_expect.rs similarity index 100% rename from clippy_lints/src/methods/err_expect.rs rename to clippy_lints_methods/src/err_expect.rs diff --git a/clippy_lints/src/methods/expect_fun_call.rs b/clippy_lints_methods/src/expect_fun_call.rs similarity index 100% rename from clippy_lints/src/methods/expect_fun_call.rs rename to clippy_lints_methods/src/expect_fun_call.rs diff --git a/clippy_lints/src/methods/extend_with_drain.rs b/clippy_lints_methods/src/extend_with_drain.rs similarity index 100% rename from clippy_lints/src/methods/extend_with_drain.rs rename to clippy_lints_methods/src/extend_with_drain.rs diff --git a/clippy_lints/src/methods/filetype_is_file.rs b/clippy_lints_methods/src/filetype_is_file.rs similarity index 100% rename from clippy_lints/src/methods/filetype_is_file.rs rename to clippy_lints_methods/src/filetype_is_file.rs diff --git a/clippy_lints/src/methods/filter_map.rs b/clippy_lints_methods/src/filter_map.rs similarity index 100% rename from clippy_lints/src/methods/filter_map.rs rename to clippy_lints_methods/src/filter_map.rs diff --git a/clippy_lints/src/methods/filter_map_bool_then.rs b/clippy_lints_methods/src/filter_map_bool_then.rs similarity index 100% rename from clippy_lints/src/methods/filter_map_bool_then.rs rename to clippy_lints_methods/src/filter_map_bool_then.rs diff --git a/clippy_lints/src/methods/filter_map_identity.rs b/clippy_lints_methods/src/filter_map_identity.rs similarity index 100% rename from clippy_lints/src/methods/filter_map_identity.rs rename to clippy_lints_methods/src/filter_map_identity.rs diff --git a/clippy_lints/src/methods/filter_map_next.rs b/clippy_lints_methods/src/filter_map_next.rs similarity index 100% rename from clippy_lints/src/methods/filter_map_next.rs rename to clippy_lints_methods/src/filter_map_next.rs diff --git a/clippy_lints/src/methods/filter_next.rs b/clippy_lints_methods/src/filter_next.rs similarity index 100% rename from clippy_lints/src/methods/filter_next.rs rename to clippy_lints_methods/src/filter_next.rs diff --git a/clippy_lints/src/methods/flat_map_identity.rs b/clippy_lints_methods/src/flat_map_identity.rs similarity index 100% rename from clippy_lints/src/methods/flat_map_identity.rs rename to clippy_lints_methods/src/flat_map_identity.rs diff --git a/clippy_lints/src/methods/flat_map_option.rs b/clippy_lints_methods/src/flat_map_option.rs similarity index 100% rename from clippy_lints/src/methods/flat_map_option.rs rename to clippy_lints_methods/src/flat_map_option.rs diff --git a/clippy_lints/src/methods/format_collect.rs b/clippy_lints_methods/src/format_collect.rs similarity index 100% rename from clippy_lints/src/methods/format_collect.rs rename to clippy_lints_methods/src/format_collect.rs diff --git a/clippy_lints/src/methods/from_iter_instead_of_collect.rs b/clippy_lints_methods/src/from_iter_instead_of_collect.rs similarity index 100% rename from clippy_lints/src/methods/from_iter_instead_of_collect.rs rename to clippy_lints_methods/src/from_iter_instead_of_collect.rs diff --git a/clippy_lints/src/methods/get_first.rs b/clippy_lints_methods/src/get_first.rs similarity index 100% rename from clippy_lints/src/methods/get_first.rs rename to clippy_lints_methods/src/get_first.rs diff --git a/clippy_lints/src/methods/get_last_with_len.rs b/clippy_lints_methods/src/get_last_with_len.rs similarity index 100% rename from clippy_lints/src/methods/get_last_with_len.rs rename to clippy_lints_methods/src/get_last_with_len.rs diff --git a/clippy_lints/src/methods/get_unwrap.rs b/clippy_lints_methods/src/get_unwrap.rs similarity index 100% rename from clippy_lints/src/methods/get_unwrap.rs rename to clippy_lints_methods/src/get_unwrap.rs diff --git a/clippy_lints/src/methods/implicit_clone.rs b/clippy_lints_methods/src/implicit_clone.rs similarity index 100% rename from clippy_lints/src/methods/implicit_clone.rs rename to clippy_lints_methods/src/implicit_clone.rs diff --git a/clippy_lints/src/methods/inefficient_to_string.rs b/clippy_lints_methods/src/inefficient_to_string.rs similarity index 100% rename from clippy_lints/src/methods/inefficient_to_string.rs rename to clippy_lints_methods/src/inefficient_to_string.rs diff --git a/clippy_lints/src/methods/inspect_for_each.rs b/clippy_lints_methods/src/inspect_for_each.rs similarity index 100% rename from clippy_lints/src/methods/inspect_for_each.rs rename to clippy_lints_methods/src/inspect_for_each.rs diff --git a/clippy_lints/src/methods/into_iter_on_ref.rs b/clippy_lints_methods/src/into_iter_on_ref.rs similarity index 100% rename from clippy_lints/src/methods/into_iter_on_ref.rs rename to clippy_lints_methods/src/into_iter_on_ref.rs diff --git a/clippy_lints/src/methods/io_other_error.rs b/clippy_lints_methods/src/io_other_error.rs similarity index 100% rename from clippy_lints/src/methods/io_other_error.rs rename to clippy_lints_methods/src/io_other_error.rs diff --git a/clippy_lints/src/methods/is_digit_ascii_radix.rs b/clippy_lints_methods/src/is_digit_ascii_radix.rs similarity index 100% rename from clippy_lints/src/methods/is_digit_ascii_radix.rs rename to clippy_lints_methods/src/is_digit_ascii_radix.rs diff --git a/clippy_lints/src/methods/is_empty.rs b/clippy_lints_methods/src/is_empty.rs similarity index 100% rename from clippy_lints/src/methods/is_empty.rs rename to clippy_lints_methods/src/is_empty.rs diff --git a/clippy_lints/src/methods/iter_cloned_collect.rs b/clippy_lints_methods/src/iter_cloned_collect.rs similarity index 96% rename from clippy_lints/src/methods/iter_cloned_collect.rs rename to clippy_lints_methods/src/iter_cloned_collect.rs index 17cc07b91c5d..ac71cd4e71f4 100644 --- a/clippy_lints/src/methods/iter_cloned_collect.rs +++ b/clippy_lints_methods/src/iter_cloned_collect.rs @@ -1,4 +1,4 @@ -use crate::methods::utils::derefs_to_slice; +use super::utils::derefs_to_slice; use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::ty::{get_iterator_item_ty, is_type_diagnostic_item}; use rustc_errors::Applicability; diff --git a/clippy_lints/src/methods/iter_count.rs b/clippy_lints_methods/src/iter_count.rs similarity index 100% rename from clippy_lints/src/methods/iter_count.rs rename to clippy_lints_methods/src/iter_count.rs diff --git a/clippy_lints/src/methods/iter_filter.rs b/clippy_lints_methods/src/iter_filter.rs similarity index 100% rename from clippy_lints/src/methods/iter_filter.rs rename to clippy_lints_methods/src/iter_filter.rs diff --git a/clippy_lints/src/methods/iter_kv_map.rs b/clippy_lints_methods/src/iter_kv_map.rs similarity index 100% rename from clippy_lints/src/methods/iter_kv_map.rs rename to clippy_lints_methods/src/iter_kv_map.rs diff --git a/clippy_lints/src/methods/iter_next_slice.rs b/clippy_lints_methods/src/iter_next_slice.rs similarity index 100% rename from clippy_lints/src/methods/iter_next_slice.rs rename to clippy_lints_methods/src/iter_next_slice.rs diff --git a/clippy_lints/src/methods/iter_nth.rs b/clippy_lints_methods/src/iter_nth.rs similarity index 100% rename from clippy_lints/src/methods/iter_nth.rs rename to clippy_lints_methods/src/iter_nth.rs diff --git a/clippy_lints/src/methods/iter_nth_zero.rs b/clippy_lints_methods/src/iter_nth_zero.rs similarity index 100% rename from clippy_lints/src/methods/iter_nth_zero.rs rename to clippy_lints_methods/src/iter_nth_zero.rs diff --git a/clippy_lints/src/methods/iter_on_single_or_empty_collections.rs b/clippy_lints_methods/src/iter_on_single_or_empty_collections.rs similarity index 100% rename from clippy_lints/src/methods/iter_on_single_or_empty_collections.rs rename to clippy_lints_methods/src/iter_on_single_or_empty_collections.rs diff --git a/clippy_lints/src/methods/iter_out_of_bounds.rs b/clippy_lints_methods/src/iter_out_of_bounds.rs similarity index 100% rename from clippy_lints/src/methods/iter_out_of_bounds.rs rename to clippy_lints_methods/src/iter_out_of_bounds.rs diff --git a/clippy_lints/src/methods/iter_overeager_cloned.rs b/clippy_lints_methods/src/iter_overeager_cloned.rs similarity index 100% rename from clippy_lints/src/methods/iter_overeager_cloned.rs rename to clippy_lints_methods/src/iter_overeager_cloned.rs diff --git a/clippy_lints/src/methods/iter_skip_next.rs b/clippy_lints_methods/src/iter_skip_next.rs similarity index 100% rename from clippy_lints/src/methods/iter_skip_next.rs rename to clippy_lints_methods/src/iter_skip_next.rs diff --git a/clippy_lints/src/methods/iter_skip_zero.rs b/clippy_lints_methods/src/iter_skip_zero.rs similarity index 100% rename from clippy_lints/src/methods/iter_skip_zero.rs rename to clippy_lints_methods/src/iter_skip_zero.rs diff --git a/clippy_lints/src/methods/iter_with_drain.rs b/clippy_lints_methods/src/iter_with_drain.rs similarity index 100% rename from clippy_lints/src/methods/iter_with_drain.rs rename to clippy_lints_methods/src/iter_with_drain.rs diff --git a/clippy_lints/src/methods/iterator_step_by_zero.rs b/clippy_lints_methods/src/iterator_step_by_zero.rs similarity index 100% rename from clippy_lints/src/methods/iterator_step_by_zero.rs rename to clippy_lints_methods/src/iterator_step_by_zero.rs diff --git a/clippy_lints/src/methods/join_absolute_paths.rs b/clippy_lints_methods/src/join_absolute_paths.rs similarity index 100% rename from clippy_lints/src/methods/join_absolute_paths.rs rename to clippy_lints_methods/src/join_absolute_paths.rs diff --git a/clippy_lints/src/methods/mod.rs b/clippy_lints_methods/src/lib.rs similarity index 99% rename from clippy_lints/src/methods/mod.rs rename to clippy_lints_methods/src/lib.rs index baaf9d1a38e5..eabbc42cee14 100644 --- a/clippy_lints/src/methods/mod.rs +++ b/clippy_lints_methods/src/lib.rs @@ -1,3 +1,61 @@ +// #![feature(array_windows)] +// #![feature(box_patterns)] +// #![feature(macro_metavar_expr_concat)] +// #![feature(f128)] +// #![feature(f16)] +// #![feature(if_let_guard)] +// #![feature(iter_intersperse)] +// #![feature(iter_partition_in_place)] +// #![feature(never_type)] +// #![feature(round_char_boundary)] +#![feature(rustc_private)] +// #![feature(stmt_expr_attributes)] +// #![feature(unwrap_infallible)] +#![allow( + clippy::missing_docs_in_private_items, + clippy::must_use_candidate, + rustc::diagnostic_outside_of_impl, + rustc::untranslatable_diagnostic, + clippy::literal_string_with_formatting_args +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + rust_2018_idioms, + unused_lifetimes, + unused_qualifications, + rustc::internal +)] + +// FIXME: switch to something more ergonomic here, once available. +// (Currently there is no way to opt into sysroot crates without `extern crate`.) +// extern crate pulldown_cmark; +// extern crate rustc_abi; +// extern crate rustc_arena; +// extern crate rustc_ast; +// extern crate rustc_ast_pretty; +// extern crate rustc_attr_parsing; +// extern crate rustc_data_structures; +extern crate rustc_driver; +extern crate rustc_errors; +extern crate rustc_hir; +// extern crate rustc_hir_analysis; +// extern crate rustc_hir_pretty; +// extern crate rustc_hir_typeck; +// extern crate rustc_index; +// extern crate rustc_infer; +// extern crate rustc_lexer; +extern crate rustc_lint; +extern crate rustc_middle; +// extern crate rustc_parse; +// extern crate rustc_parse_format; +// extern crate rustc_resolve; +// extern crate rustc_session; +extern crate rustc_span; +// extern crate rustc_target; +// extern crate rustc_trait_selection; +// extern crate thin_vec; + mod bind_instead_of_map; mod bytecount; mod bytes_count_to_len; diff --git a/clippy_lints/src/methods/manual_c_str_literals.rs b/clippy_lints_methods/src/manual_c_str_literals.rs similarity index 100% rename from clippy_lints/src/methods/manual_c_str_literals.rs rename to clippy_lints_methods/src/manual_c_str_literals.rs diff --git a/clippy_lints/src/methods/manual_contains.rs b/clippy_lints_methods/src/manual_contains.rs similarity index 100% rename from clippy_lints/src/methods/manual_contains.rs rename to clippy_lints_methods/src/manual_contains.rs diff --git a/clippy_lints/src/methods/manual_inspect.rs b/clippy_lints_methods/src/manual_inspect.rs similarity index 100% rename from clippy_lints/src/methods/manual_inspect.rs rename to clippy_lints_methods/src/manual_inspect.rs diff --git a/clippy_lints/src/methods/manual_is_variant_and.rs b/clippy_lints_methods/src/manual_is_variant_and.rs similarity index 100% rename from clippy_lints/src/methods/manual_is_variant_and.rs rename to clippy_lints_methods/src/manual_is_variant_and.rs diff --git a/clippy_lints/src/methods/manual_next_back.rs b/clippy_lints_methods/src/manual_next_back.rs similarity index 100% rename from clippy_lints/src/methods/manual_next_back.rs rename to clippy_lints_methods/src/manual_next_back.rs diff --git a/clippy_lints/src/methods/manual_ok_or.rs b/clippy_lints_methods/src/manual_ok_or.rs similarity index 100% rename from clippy_lints/src/methods/manual_ok_or.rs rename to clippy_lints_methods/src/manual_ok_or.rs diff --git a/clippy_lints/src/methods/manual_repeat_n.rs b/clippy_lints_methods/src/manual_repeat_n.rs similarity index 100% rename from clippy_lints/src/methods/manual_repeat_n.rs rename to clippy_lints_methods/src/manual_repeat_n.rs diff --git a/clippy_lints/src/methods/manual_saturating_arithmetic.rs b/clippy_lints_methods/src/manual_saturating_arithmetic.rs similarity index 100% rename from clippy_lints/src/methods/manual_saturating_arithmetic.rs rename to clippy_lints_methods/src/manual_saturating_arithmetic.rs diff --git a/clippy_lints/src/methods/manual_str_repeat.rs b/clippy_lints_methods/src/manual_str_repeat.rs similarity index 100% rename from clippy_lints/src/methods/manual_str_repeat.rs rename to clippy_lints_methods/src/manual_str_repeat.rs diff --git a/clippy_lints/src/methods/manual_try_fold.rs b/clippy_lints_methods/src/manual_try_fold.rs similarity index 100% rename from clippy_lints/src/methods/manual_try_fold.rs rename to clippy_lints_methods/src/manual_try_fold.rs diff --git a/clippy_lints/src/methods/map_all_any_identity.rs b/clippy_lints_methods/src/map_all_any_identity.rs similarity index 100% rename from clippy_lints/src/methods/map_all_any_identity.rs rename to clippy_lints_methods/src/map_all_any_identity.rs diff --git a/clippy_lints/src/methods/map_clone.rs b/clippy_lints_methods/src/map_clone.rs similarity index 100% rename from clippy_lints/src/methods/map_clone.rs rename to clippy_lints_methods/src/map_clone.rs diff --git a/clippy_lints/src/methods/map_collect_result_unit.rs b/clippy_lints_methods/src/map_collect_result_unit.rs similarity index 100% rename from clippy_lints/src/methods/map_collect_result_unit.rs rename to clippy_lints_methods/src/map_collect_result_unit.rs diff --git a/clippy_lints/src/methods/map_err_ignore.rs b/clippy_lints_methods/src/map_err_ignore.rs similarity index 100% rename from clippy_lints/src/methods/map_err_ignore.rs rename to clippy_lints_methods/src/map_err_ignore.rs diff --git a/clippy_lints/src/methods/map_flatten.rs b/clippy_lints_methods/src/map_flatten.rs similarity index 100% rename from clippy_lints/src/methods/map_flatten.rs rename to clippy_lints_methods/src/map_flatten.rs diff --git a/clippy_lints/src/methods/map_identity.rs b/clippy_lints_methods/src/map_identity.rs similarity index 100% rename from clippy_lints/src/methods/map_identity.rs rename to clippy_lints_methods/src/map_identity.rs diff --git a/clippy_lints/src/methods/map_unwrap_or.rs b/clippy_lints_methods/src/map_unwrap_or.rs similarity index 100% rename from clippy_lints/src/methods/map_unwrap_or.rs rename to clippy_lints_methods/src/map_unwrap_or.rs diff --git a/clippy_lints/src/methods/map_with_unused_argument_over_ranges.rs b/clippy_lints_methods/src/map_with_unused_argument_over_ranges.rs similarity index 98% rename from clippy_lints/src/methods/map_with_unused_argument_over_ranges.rs rename to clippy_lints_methods/src/map_with_unused_argument_over_ranges.rs index a2a522a60687..e385b37bb54c 100644 --- a/clippy_lints/src/methods/map_with_unused_argument_over_ranges.rs +++ b/clippy_lints_methods/src/map_with_unused_argument_over_ranges.rs @@ -1,4 +1,4 @@ -use crate::methods::MAP_WITH_UNUSED_ARGUMENT_OVER_RANGES; +use super::MAP_WITH_UNUSED_ARGUMENT_OVER_RANGES; use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::msrvs::{self, Msrv}; use clippy_utils::source::snippet_with_applicability; diff --git a/clippy_lints/src/methods/mut_mutex_lock.rs b/clippy_lints_methods/src/mut_mutex_lock.rs similarity index 100% rename from clippy_lints/src/methods/mut_mutex_lock.rs rename to clippy_lints_methods/src/mut_mutex_lock.rs diff --git a/clippy_lints/src/methods/needless_as_bytes.rs b/clippy_lints_methods/src/needless_as_bytes.rs similarity index 100% rename from clippy_lints/src/methods/needless_as_bytes.rs rename to clippy_lints_methods/src/needless_as_bytes.rs diff --git a/clippy_lints/src/methods/needless_character_iteration.rs b/clippy_lints_methods/src/needless_character_iteration.rs similarity index 100% rename from clippy_lints/src/methods/needless_character_iteration.rs rename to clippy_lints_methods/src/needless_character_iteration.rs diff --git a/clippy_lints/src/methods/needless_collect.rs b/clippy_lints_methods/src/needless_collect.rs similarity index 100% rename from clippy_lints/src/methods/needless_collect.rs rename to clippy_lints_methods/src/needless_collect.rs diff --git a/clippy_lints/src/methods/needless_option_as_deref.rs b/clippy_lints_methods/src/needless_option_as_deref.rs similarity index 100% rename from clippy_lints/src/methods/needless_option_as_deref.rs rename to clippy_lints_methods/src/needless_option_as_deref.rs diff --git a/clippy_lints/src/methods/needless_option_take.rs b/clippy_lints_methods/src/needless_option_take.rs similarity index 100% rename from clippy_lints/src/methods/needless_option_take.rs rename to clippy_lints_methods/src/needless_option_take.rs diff --git a/clippy_lints/src/methods/no_effect_replace.rs b/clippy_lints_methods/src/no_effect_replace.rs similarity index 100% rename from clippy_lints/src/methods/no_effect_replace.rs rename to clippy_lints_methods/src/no_effect_replace.rs diff --git a/clippy_lints/src/methods/obfuscated_if_else.rs b/clippy_lints_methods/src/obfuscated_if_else.rs similarity index 100% rename from clippy_lints/src/methods/obfuscated_if_else.rs rename to clippy_lints_methods/src/obfuscated_if_else.rs diff --git a/clippy_lints/src/methods/ok_expect.rs b/clippy_lints_methods/src/ok_expect.rs similarity index 100% rename from clippy_lints/src/methods/ok_expect.rs rename to clippy_lints_methods/src/ok_expect.rs diff --git a/clippy_lints/src/methods/open_options.rs b/clippy_lints_methods/src/open_options.rs similarity index 100% rename from clippy_lints/src/methods/open_options.rs rename to clippy_lints_methods/src/open_options.rs diff --git a/clippy_lints/src/methods/option_as_ref_cloned.rs b/clippy_lints_methods/src/option_as_ref_cloned.rs similarity index 100% rename from clippy_lints/src/methods/option_as_ref_cloned.rs rename to clippy_lints_methods/src/option_as_ref_cloned.rs diff --git a/clippy_lints/src/methods/option_as_ref_deref.rs b/clippy_lints_methods/src/option_as_ref_deref.rs similarity index 100% rename from clippy_lints/src/methods/option_as_ref_deref.rs rename to clippy_lints_methods/src/option_as_ref_deref.rs diff --git a/clippy_lints/src/methods/option_map_or_none.rs b/clippy_lints_methods/src/option_map_or_none.rs similarity index 100% rename from clippy_lints/src/methods/option_map_or_none.rs rename to clippy_lints_methods/src/option_map_or_none.rs diff --git a/clippy_lints/src/methods/option_map_unwrap_or.rs b/clippy_lints_methods/src/option_map_unwrap_or.rs similarity index 100% rename from clippy_lints/src/methods/option_map_unwrap_or.rs rename to clippy_lints_methods/src/option_map_unwrap_or.rs diff --git a/clippy_lints/src/methods/or_fun_call.rs b/clippy_lints_methods/src/or_fun_call.rs similarity index 100% rename from clippy_lints/src/methods/or_fun_call.rs rename to clippy_lints_methods/src/or_fun_call.rs diff --git a/clippy_lints/src/methods/or_then_unwrap.rs b/clippy_lints_methods/src/or_then_unwrap.rs similarity index 100% rename from clippy_lints/src/methods/or_then_unwrap.rs rename to clippy_lints_methods/src/or_then_unwrap.rs diff --git a/clippy_lints/src/methods/path_buf_push_overwrite.rs b/clippy_lints_methods/src/path_buf_push_overwrite.rs similarity index 100% rename from clippy_lints/src/methods/path_buf_push_overwrite.rs rename to clippy_lints_methods/src/path_buf_push_overwrite.rs diff --git a/clippy_lints/src/methods/path_ends_with_ext.rs b/clippy_lints_methods/src/path_ends_with_ext.rs similarity index 100% rename from clippy_lints/src/methods/path_ends_with_ext.rs rename to clippy_lints_methods/src/path_ends_with_ext.rs diff --git a/clippy_lints/src/methods/range_zip_with_len.rs b/clippy_lints_methods/src/range_zip_with_len.rs similarity index 100% rename from clippy_lints/src/methods/range_zip_with_len.rs rename to clippy_lints_methods/src/range_zip_with_len.rs diff --git a/clippy_lints/src/methods/read_line_without_trim.rs b/clippy_lints_methods/src/read_line_without_trim.rs similarity index 100% rename from clippy_lints/src/methods/read_line_without_trim.rs rename to clippy_lints_methods/src/read_line_without_trim.rs diff --git a/clippy_lints/src/methods/readonly_write_lock.rs b/clippy_lints_methods/src/readonly_write_lock.rs similarity index 100% rename from clippy_lints/src/methods/readonly_write_lock.rs rename to clippy_lints_methods/src/readonly_write_lock.rs diff --git a/clippy_lints/src/methods/redundant_as_str.rs b/clippy_lints_methods/src/redundant_as_str.rs similarity index 100% rename from clippy_lints/src/methods/redundant_as_str.rs rename to clippy_lints_methods/src/redundant_as_str.rs diff --git a/clippy_lints/src/methods/repeat_once.rs b/clippy_lints_methods/src/repeat_once.rs similarity index 100% rename from clippy_lints/src/methods/repeat_once.rs rename to clippy_lints_methods/src/repeat_once.rs diff --git a/clippy_lints/src/methods/result_map_or_else_none.rs b/clippy_lints_methods/src/result_map_or_else_none.rs similarity index 100% rename from clippy_lints/src/methods/result_map_or_else_none.rs rename to clippy_lints_methods/src/result_map_or_else_none.rs diff --git a/clippy_lints/src/methods/return_and_then.rs b/clippy_lints_methods/src/return_and_then.rs similarity index 100% rename from clippy_lints/src/methods/return_and_then.rs rename to clippy_lints_methods/src/return_and_then.rs diff --git a/clippy_lints/src/methods/search_is_some.rs b/clippy_lints_methods/src/search_is_some.rs similarity index 100% rename from clippy_lints/src/methods/search_is_some.rs rename to clippy_lints_methods/src/search_is_some.rs diff --git a/clippy_lints/src/methods/seek_from_current.rs b/clippy_lints_methods/src/seek_from_current.rs similarity index 100% rename from clippy_lints/src/methods/seek_from_current.rs rename to clippy_lints_methods/src/seek_from_current.rs diff --git a/clippy_lints/src/methods/seek_to_start_instead_of_rewind.rs b/clippy_lints_methods/src/seek_to_start_instead_of_rewind.rs similarity index 100% rename from clippy_lints/src/methods/seek_to_start_instead_of_rewind.rs rename to clippy_lints_methods/src/seek_to_start_instead_of_rewind.rs diff --git a/clippy_lints/src/methods/single_char_add_str.rs b/clippy_lints_methods/src/single_char_add_str.rs similarity index 88% rename from clippy_lints/src/methods/single_char_add_str.rs rename to clippy_lints_methods/src/single_char_add_str.rs index ccdf5529d537..a6df847e1b93 100644 --- a/clippy_lints/src/methods/single_char_add_str.rs +++ b/clippy_lints_methods/src/single_char_add_str.rs @@ -1,4 +1,4 @@ -use crate::methods::{single_char_insert_string, single_char_push_string}; +use super::{single_char_insert_string, single_char_push_string}; use rustc_hir as hir; use rustc_lint::LateContext; use rustc_span::sym; diff --git a/clippy_lints/src/methods/single_char_insert_string.rs b/clippy_lints_methods/src/single_char_insert_string.rs similarity index 100% rename from clippy_lints/src/methods/single_char_insert_string.rs rename to clippy_lints_methods/src/single_char_insert_string.rs diff --git a/clippy_lints/src/methods/single_char_push_string.rs b/clippy_lints_methods/src/single_char_push_string.rs similarity index 100% rename from clippy_lints/src/methods/single_char_push_string.rs rename to clippy_lints_methods/src/single_char_push_string.rs diff --git a/clippy_lints/src/methods/skip_while_next.rs b/clippy_lints_methods/src/skip_while_next.rs similarity index 100% rename from clippy_lints/src/methods/skip_while_next.rs rename to clippy_lints_methods/src/skip_while_next.rs diff --git a/clippy_lints/src/methods/sliced_string_as_bytes.rs b/clippy_lints_methods/src/sliced_string_as_bytes.rs similarity index 100% rename from clippy_lints/src/methods/sliced_string_as_bytes.rs rename to clippy_lints_methods/src/sliced_string_as_bytes.rs diff --git a/clippy_lints/src/methods/stable_sort_primitive.rs b/clippy_lints_methods/src/stable_sort_primitive.rs similarity index 100% rename from clippy_lints/src/methods/stable_sort_primitive.rs rename to clippy_lints_methods/src/stable_sort_primitive.rs diff --git a/clippy_lints/src/methods/str_split.rs b/clippy_lints_methods/src/str_split.rs similarity index 100% rename from clippy_lints/src/methods/str_split.rs rename to clippy_lints_methods/src/str_split.rs diff --git a/clippy_lints/src/methods/str_splitn.rs b/clippy_lints_methods/src/str_splitn.rs similarity index 100% rename from clippy_lints/src/methods/str_splitn.rs rename to clippy_lints_methods/src/str_splitn.rs diff --git a/clippy_lints/src/methods/string_extend_chars.rs b/clippy_lints_methods/src/string_extend_chars.rs similarity index 100% rename from clippy_lints/src/methods/string_extend_chars.rs rename to clippy_lints_methods/src/string_extend_chars.rs diff --git a/clippy_lints/src/methods/string_lit_chars_any.rs b/clippy_lints_methods/src/string_lit_chars_any.rs similarity index 100% rename from clippy_lints/src/methods/string_lit_chars_any.rs rename to clippy_lints_methods/src/string_lit_chars_any.rs diff --git a/clippy_lints/src/methods/suspicious_command_arg_space.rs b/clippy_lints_methods/src/suspicious_command_arg_space.rs similarity index 100% rename from clippy_lints/src/methods/suspicious_command_arg_space.rs rename to clippy_lints_methods/src/suspicious_command_arg_space.rs diff --git a/clippy_lints/src/methods/suspicious_map.rs b/clippy_lints_methods/src/suspicious_map.rs similarity index 100% rename from clippy_lints/src/methods/suspicious_map.rs rename to clippy_lints_methods/src/suspicious_map.rs diff --git a/clippy_lints/src/methods/suspicious_splitn.rs b/clippy_lints_methods/src/suspicious_splitn.rs similarity index 100% rename from clippy_lints/src/methods/suspicious_splitn.rs rename to clippy_lints_methods/src/suspicious_splitn.rs diff --git a/clippy_lints/src/methods/suspicious_to_owned.rs b/clippy_lints_methods/src/suspicious_to_owned.rs similarity index 100% rename from clippy_lints/src/methods/suspicious_to_owned.rs rename to clippy_lints_methods/src/suspicious_to_owned.rs diff --git a/clippy_lints/src/methods/swap_with_temporary.rs b/clippy_lints_methods/src/swap_with_temporary.rs similarity index 100% rename from clippy_lints/src/methods/swap_with_temporary.rs rename to clippy_lints_methods/src/swap_with_temporary.rs diff --git a/clippy_lints/src/methods/type_id_on_box.rs b/clippy_lints_methods/src/type_id_on_box.rs similarity index 99% rename from clippy_lints/src/methods/type_id_on_box.rs rename to clippy_lints_methods/src/type_id_on_box.rs index e67ba5c4d314..95ed0a71567e 100644 --- a/clippy_lints/src/methods/type_id_on_box.rs +++ b/clippy_lints_methods/src/type_id_on_box.rs @@ -1,4 +1,4 @@ -use crate::methods::TYPE_ID_ON_BOX; +use super::TYPE_ID_ON_BOX; use clippy_utils::diagnostics::span_lint_and_then; use clippy_utils::source::snippet; use rustc_errors::Applicability; diff --git a/clippy_lints/src/methods/unbuffered_bytes.rs b/clippy_lints_methods/src/unbuffered_bytes.rs similarity index 100% rename from clippy_lints/src/methods/unbuffered_bytes.rs rename to clippy_lints_methods/src/unbuffered_bytes.rs diff --git a/clippy_lints/src/methods/uninit_assumed_init.rs b/clippy_lints_methods/src/uninit_assumed_init.rs similarity index 100% rename from clippy_lints/src/methods/uninit_assumed_init.rs rename to clippy_lints_methods/src/uninit_assumed_init.rs diff --git a/clippy_lints/src/methods/unit_hash.rs b/clippy_lints_methods/src/unit_hash.rs similarity index 100% rename from clippy_lints/src/methods/unit_hash.rs rename to clippy_lints_methods/src/unit_hash.rs diff --git a/clippy_lints/src/methods/unnecessary_fallible_conversions.rs b/clippy_lints_methods/src/unnecessary_fallible_conversions.rs similarity index 100% rename from clippy_lints/src/methods/unnecessary_fallible_conversions.rs rename to clippy_lints_methods/src/unnecessary_fallible_conversions.rs diff --git a/clippy_lints/src/methods/unnecessary_filter_map.rs b/clippy_lints_methods/src/unnecessary_filter_map.rs similarity index 100% rename from clippy_lints/src/methods/unnecessary_filter_map.rs rename to clippy_lints_methods/src/unnecessary_filter_map.rs diff --git a/clippy_lints/src/methods/unnecessary_first_then_check.rs b/clippy_lints_methods/src/unnecessary_first_then_check.rs similarity index 100% rename from clippy_lints/src/methods/unnecessary_first_then_check.rs rename to clippy_lints_methods/src/unnecessary_first_then_check.rs diff --git a/clippy_lints/src/methods/unnecessary_fold.rs b/clippy_lints_methods/src/unnecessary_fold.rs similarity index 100% rename from clippy_lints/src/methods/unnecessary_fold.rs rename to clippy_lints_methods/src/unnecessary_fold.rs diff --git a/clippy_lints/src/methods/unnecessary_get_then_check.rs b/clippy_lints_methods/src/unnecessary_get_then_check.rs similarity index 100% rename from clippy_lints/src/methods/unnecessary_get_then_check.rs rename to clippy_lints_methods/src/unnecessary_get_then_check.rs diff --git a/clippy_lints/src/methods/unnecessary_iter_cloned.rs b/clippy_lints_methods/src/unnecessary_iter_cloned.rs similarity index 100% rename from clippy_lints/src/methods/unnecessary_iter_cloned.rs rename to clippy_lints_methods/src/unnecessary_iter_cloned.rs diff --git a/clippy_lints/src/methods/unnecessary_join.rs b/clippy_lints_methods/src/unnecessary_join.rs similarity index 100% rename from clippy_lints/src/methods/unnecessary_join.rs rename to clippy_lints_methods/src/unnecessary_join.rs diff --git a/clippy_lints/src/methods/unnecessary_lazy_eval.rs b/clippy_lints_methods/src/unnecessary_lazy_eval.rs similarity index 100% rename from clippy_lints/src/methods/unnecessary_lazy_eval.rs rename to clippy_lints_methods/src/unnecessary_lazy_eval.rs diff --git a/clippy_lints/src/methods/unnecessary_literal_unwrap.rs b/clippy_lints_methods/src/unnecessary_literal_unwrap.rs similarity index 100% rename from clippy_lints/src/methods/unnecessary_literal_unwrap.rs rename to clippy_lints_methods/src/unnecessary_literal_unwrap.rs diff --git a/clippy_lints/src/methods/unnecessary_map_or.rs b/clippy_lints_methods/src/unnecessary_map_or.rs similarity index 100% rename from clippy_lints/src/methods/unnecessary_map_or.rs rename to clippy_lints_methods/src/unnecessary_map_or.rs diff --git a/clippy_lints/src/methods/unnecessary_min_or_max.rs b/clippy_lints_methods/src/unnecessary_min_or_max.rs similarity index 100% rename from clippy_lints/src/methods/unnecessary_min_or_max.rs rename to clippy_lints_methods/src/unnecessary_min_or_max.rs diff --git a/clippy_lints/src/methods/unnecessary_result_map_or_else.rs b/clippy_lints_methods/src/unnecessary_result_map_or_else.rs similarity index 100% rename from clippy_lints/src/methods/unnecessary_result_map_or_else.rs rename to clippy_lints_methods/src/unnecessary_result_map_or_else.rs diff --git a/clippy_lints/src/methods/unnecessary_sort_by.rs b/clippy_lints_methods/src/unnecessary_sort_by.rs similarity index 100% rename from clippy_lints/src/methods/unnecessary_sort_by.rs rename to clippy_lints_methods/src/unnecessary_sort_by.rs diff --git a/clippy_lints/src/methods/unnecessary_to_owned.rs b/clippy_lints_methods/src/unnecessary_to_owned.rs similarity index 100% rename from clippy_lints/src/methods/unnecessary_to_owned.rs rename to clippy_lints_methods/src/unnecessary_to_owned.rs diff --git a/clippy_lints/src/methods/unused_enumerate_index.rs b/clippy_lints_methods/src/unused_enumerate_index.rs similarity index 100% rename from clippy_lints/src/methods/unused_enumerate_index.rs rename to clippy_lints_methods/src/unused_enumerate_index.rs diff --git a/clippy_lints/src/methods/unwrap_expect_used.rs b/clippy_lints_methods/src/unwrap_expect_used.rs similarity index 100% rename from clippy_lints/src/methods/unwrap_expect_used.rs rename to clippy_lints_methods/src/unwrap_expect_used.rs diff --git a/clippy_lints/src/methods/useless_asref.rs b/clippy_lints_methods/src/useless_asref.rs similarity index 100% rename from clippy_lints/src/methods/useless_asref.rs rename to clippy_lints_methods/src/useless_asref.rs diff --git a/clippy_lints/src/methods/useless_nonzero_new_unchecked.rs b/clippy_lints_methods/src/useless_nonzero_new_unchecked.rs similarity index 100% rename from clippy_lints/src/methods/useless_nonzero_new_unchecked.rs rename to clippy_lints_methods/src/useless_nonzero_new_unchecked.rs diff --git a/clippy_lints/src/methods/utils.rs b/clippy_lints_methods/src/utils.rs similarity index 100% rename from clippy_lints/src/methods/utils.rs rename to clippy_lints_methods/src/utils.rs diff --git a/clippy_lints/src/methods/vec_resize_to_zero.rs b/clippy_lints_methods/src/vec_resize_to_zero.rs similarity index 100% rename from clippy_lints/src/methods/vec_resize_to_zero.rs rename to clippy_lints_methods/src/vec_resize_to_zero.rs diff --git a/clippy_lints/src/methods/verbose_file_reads.rs b/clippy_lints_methods/src/verbose_file_reads.rs similarity index 100% rename from clippy_lints/src/methods/verbose_file_reads.rs rename to clippy_lints_methods/src/verbose_file_reads.rs diff --git a/clippy_lints/src/methods/waker_clone_wake.rs b/clippy_lints_methods/src/waker_clone_wake.rs similarity index 100% rename from clippy_lints/src/methods/waker_clone_wake.rs rename to clippy_lints_methods/src/waker_clone_wake.rs diff --git a/clippy_lints/src/methods/wrong_self_convention.rs b/clippy_lints_methods/src/wrong_self_convention.rs similarity index 99% rename from clippy_lints/src/methods/wrong_self_convention.rs rename to clippy_lints_methods/src/wrong_self_convention.rs index 7384e534ed7d..7fd48066f54e 100644 --- a/clippy_lints/src/methods/wrong_self_convention.rs +++ b/clippy_lints_methods/src/wrong_self_convention.rs @@ -1,4 +1,4 @@ -use crate::methods::SelfKind; +use super::SelfKind; use clippy_utils::diagnostics::span_lint_and_help; use clippy_utils::ty::is_copy; use rustc_lint::LateContext; diff --git a/clippy_lints/src/methods/zst_offset.rs b/clippy_lints_methods/src/zst_offset.rs similarity index 100% rename from clippy_lints/src/methods/zst_offset.rs rename to clippy_lints_methods/src/zst_offset.rs From dded6edaafe18557db8aab91076dd3e837735b65 Mon Sep 17 00:00:00 2001 From: Jason Newcomb Date: Mon, 19 May 2025 05:56:16 -0400 Subject: [PATCH 3/3] f --- Cargo.toml | 1 + clippy_dev/src/update_lints.rs | 13 +- clippy_lints/src/declared_lints.rs | 147 ------------------ clippy_lints/src/ineffective_open_options.rs | 67 ++++---- clippy_lints/src/lib.rs | 12 +- clippy_lints/src/useless_conversion.rs | 47 +----- clippy_lints_methods/src/declared_lints.rs | 153 +++++++++++++++++++ clippy_lints_methods/src/lib.rs | 70 +++++++-- clippy_utils/src/sym.rs | 3 + src/driver.rs | 3 +- 10 files changed, 275 insertions(+), 241 deletions(-) create mode 100644 clippy_lints_methods/src/declared_lints.rs diff --git a/Cargo.toml b/Cargo.toml index 4abb874f39eb..eed287079c65 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,6 +23,7 @@ path = "src/driver.rs" [dependencies] clippy_config = { path = "clippy_config" } clippy_lints = { path = "clippy_lints" } +clippy_lints_methods = { path = "clippy_lints_methods" } clippy_utils = { path = "clippy_utils" } declare_clippy_lint = { path = "declare_clippy_lint" } rustc_tools_util = { path = "rustc_tools_util", version = "0.4.2" } diff --git a/clippy_dev/src/update_lints.rs b/clippy_dev/src/update_lints.rs index 4ce904038b4a..8fd70f171646 100644 --- a/clippy_dev/src/update_lints.rs +++ b/clippy_dev/src/update_lints.rs @@ -49,6 +49,7 @@ macro_rules! declare_lint_crates { } declare_lint_crates! { clippy_lints, + clippy_lints_methods, } /// Runs the `update_lints` command. @@ -196,7 +197,7 @@ pub fn generate_lint_files( |dst| { for lint_mod in lints .iter() - .filter(|l| l.def_crate == c) + .filter(|l| l.def_crate == c && !l.module.is_empty()) .map(|l| l.module.split_once("::").map_or(&*l.module, |x| x.0)) .sorted() .dedup() @@ -213,13 +214,17 @@ pub fn generate_lint_files( &mut |_, src, dst| { dst.push_str(GENERATED_FILE_COMMENT); dst.push_str("pub static LINTS: &[&::declare_clippy_lint::LintInfo] = &[\n"); - for (module_name, lint_name) in lints + for (module, lint_name) in lints .iter() .filter(|l| l.def_crate == c) .map(|l| (&l.module, l.name.to_uppercase())) .sorted() { - writeln!(dst, " crate::{module_name}::{lint_name}_INFO,").unwrap(); + if module.is_empty() { + writeln!(dst, " crate::{lint_name}_INFO,").unwrap(); + } else { + writeln!(dst, " crate::{module}::{lint_name}_INFO,").unwrap(); + } } dst.push_str("];\n"); UpdateStatus::from_changed(src != dst) @@ -284,7 +289,7 @@ fn read_src_with_module(src_root: &Path) -> impl use<'_> + Iterator], call_span: Span) -> Option { impl<'tcx> LateLintPass<'tcx> for IneffectiveOpenOptions { fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) { - let Some(("open", mut receiver, [_arg], _, _)) = method_call(expr) else { - return; - }; - let receiver_ty = cx.typeck_results().expr_ty(receiver); - match receiver_ty.peel_refs().kind() { - ty::Adt(adt, _) if cx.tcx.is_diagnostic_item(sym::FsOpenOptions, adt.did()) => {}, - _ => return, - } - - let mut append = None; - let mut write = None; - - while let Some((name, recv, args, _, span)) = method_call(receiver) { - if name == "append" { - append = index_if_arg_is_boolean(args, span); - } else if name == "write" { - write = index_if_arg_is_boolean(args, span); + if let ExprKind::MethodCall(path, mut recv, [_], ..) = expr.kind + && path.ident.name == sym::open + && !expr.span.from_expansion() + && let recv_ty = cx.typeck_results().expr_ty(recv) + && let ty::Adt(adt, _) = *recv_ty.peel_refs().kind() + && cx.tcx.is_diagnostic_item(sym::FsOpenOptions, adt.did()) + { + let mut append = None; + let mut write = None; + while let ExprKind::MethodCall(path, next_recv, args, span) = recv.kind + && !recv.span.from_expansion() + { + match path.ident.name { + sym::append => append = index_if_arg_is_boolean(args, span), + sym::write => write = index_if_arg_is_boolean(args, span), + _ => {}, + } + recv = next_recv; } - receiver = recv; - } - if let Some(write_span) = write - && append.is_some() - { - span_lint_and_sugg( - cx, - INEFFECTIVE_OPEN_OPTIONS, - write_span, - "unnecessary use of `.write(true)` because there is `.append(true)`", - "remove `.write(true)`", - String::new(), - Applicability::MachineApplicable, - ); + if let Some(write_span) = write + && append.is_some() + { + span_lint_and_sugg( + cx, + INEFFECTIVE_OPEN_OPTIONS, + write_span, + "unnecessary use of `.write(true)` because there is `.append(true)`", + "remove `.write(true)`", + String::new(), + Applicability::MachineApplicable, + ); + } } } } diff --git a/clippy_lints/src/lib.rs b/clippy_lints/src/lib.rs index 466158b460dc..4166e6006a08 100644 --- a/clippy_lints/src/lib.rs +++ b/clippy_lints/src/lib.rs @@ -226,7 +226,6 @@ mod map_unit_fn; mod match_result_ok; mod matches; mod mem_replace; -mod methods; mod min_ident_chars; mod minmax; mod misc; @@ -435,8 +434,13 @@ pub fn explain(name: &str) -> i32 { /// /// Used in `./src/driver.rs`. #[expect(clippy::too_many_lines)] -pub fn register_lints(store: &mut rustc_lint::LintStore, conf: &'static Conf, groups: &mut RegistrationGroups) { +pub fn register_lints( + store: &mut rustc_lint::LintStore, + conf: &'static Conf, + groups: &mut RegistrationGroups, +) -> FormatArgsStorage { groups.insert_lints(declared_lints::LINTS); + store.register_lints(&declared_lints::LINTS.iter().map(|x| *x.lint).collect::>()); for (old_name, new_name) in deprecated_lints::RENAMED { store.register_renamed(old_name, new_name); @@ -502,8 +506,6 @@ pub fn register_lints(store: &mut rustc_lint::LintStore, conf: &'static Conf, gr store.register_late_pass(|_| Box::new(non_octal_unix_permissions::NonOctalUnixPermissions)); store.register_early_pass(|| Box::new(unnecessary_self_imports::UnnecessarySelfImports)); store.register_late_pass(move |_| Box::new(approx_const::ApproxConstant::new(conf))); - let format_args = format_args_storage.clone(); - store.register_late_pass(move |_| Box::new(methods::Methods::new(conf, format_args.clone()))); store.register_late_pass(move |_| Box::new(matches::Matches::new(conf))); store.register_late_pass(move |_| Box::new(manual_non_exhaustive::ManualNonExhaustive::new(conf))); store.register_late_pass(move |_| Box::new(manual_strip::ManualStrip::new(conf))); @@ -827,4 +829,6 @@ pub fn register_lints(store: &mut rustc_lint::LintStore, conf: &'static Conf, gr store.register_late_pass(move |_| Box::new(redundant_test_prefix::RedundantTestPrefix)); store.register_late_pass(|_| Box::new(cloned_ref_to_slice_refs::ClonedRefToSliceRefs::new(conf))); // add lints here, do not remove this comment, it's used in `new_lint` + + format_args_storage } diff --git a/clippy_lints/src/useless_conversion.rs b/clippy_lints/src/useless_conversion.rs index efe26cd31715..ef144166ebb1 100644 --- a/clippy_lints/src/useless_conversion.rs +++ b/clippy_lints/src/useless_conversion.rs @@ -1,9 +1,9 @@ use clippy_utils::diagnostics::{span_lint_and_help, span_lint_and_sugg, span_lint_and_then}; use clippy_utils::source::{snippet, snippet_with_context}; -use clippy_utils::sugg::{DiagExt as _, Sugg}; -use clippy_utils::ty::{get_type_diagnostic_name, is_copy, is_type_diagnostic_item, same_type_and_consts}; +use clippy_utils::sugg::Sugg; +use clippy_utils::ty::{is_copy, is_type_diagnostic_item, same_type_and_consts}; use clippy_utils::{ - get_parent_expr, is_inherent_method_call, is_trait_item, is_trait_method, is_ty_alias, path_to_local, + get_parent_expr, is_trait_method, is_ty_alias, path_to_local, }; use declare_clippy_lint::declare_clippy_lint; use rustc_errors::Applicability; @@ -177,6 +177,10 @@ impl<'tcx> LateLintPass<'tcx> for UselessConversion { } }, + ExprKind::MethodCall(path, recv, [arg], _) + if matches!(path.ident.name, sym::map_break | sym::map_continue | sym::map | sym::map_continue) + => {} + ExprKind::MethodCall(name, recv, [], _) => { if is_trait_method(cx, e, sym::Into) && name.ident.as_str() == "into" { let a = cx.typeck_results().expr_ty(e); @@ -413,43 +417,6 @@ impl<'tcx> LateLintPass<'tcx> for UselessConversion { } } -/// Check if `arg` is a `Into::into` or `From::from` applied to `receiver` to give `expr`, through a -/// higher-order mapping function. -pub fn check_function_application(cx: &LateContext<'_>, expr: &Expr<'_>, recv: &Expr<'_>, arg: &Expr<'_>) { - if has_eligible_receiver(cx, recv, expr) - && (is_trait_item(cx, arg, sym::Into) || is_trait_item(cx, arg, sym::From)) - && let ty::FnDef(_, args) = cx.typeck_results().expr_ty(arg).kind() - && let &[from_ty, to_ty] = args.into_type_list(cx.tcx).as_slice() - && same_type_and_consts(from_ty, to_ty) - { - span_lint_and_then( - cx, - USELESS_CONVERSION, - expr.span.with_lo(recv.span.hi()), - format!("useless conversion to the same type: `{from_ty}`"), - |diag| { - diag.suggest_remove_item( - cx, - expr.span.with_lo(recv.span.hi()), - "consider removing", - Applicability::MachineApplicable, - ); - }, - ); - } -} - -fn has_eligible_receiver(cx: &LateContext<'_>, recv: &Expr<'_>, expr: &Expr<'_>) -> bool { - if is_inherent_method_call(cx, expr) { - matches!( - get_type_diagnostic_name(cx, cx.typeck_results().expr_ty(recv)), - Some(sym::Option | sym::Result | sym::ControlFlow) - ) - } else { - is_trait_method(cx, expr, sym::Iterator) - } -} - fn adjustments(cx: &LateContext<'_>, expr: &Expr<'_>) -> String { let mut prefix = String::new(); for adj in cx.typeck_results().expr_adjustments(expr) { diff --git a/clippy_lints_methods/src/declared_lints.rs b/clippy_lints_methods/src/declared_lints.rs new file mode 100644 index 000000000000..d02461bfa8f5 --- /dev/null +++ b/clippy_lints_methods/src/declared_lints.rs @@ -0,0 +1,153 @@ +// This file was generated by `cargo dev update_lints`. +// Use that command to update this file and do not edit by hand. +// Manual edits will be overwritten. + +pub static LINTS: &[&::declare_clippy_lint::LintInfo] = &[ + crate::BIND_INSTEAD_OF_MAP_INFO, + crate::BYTES_COUNT_TO_LEN_INFO, + crate::BYTES_NTH_INFO, + crate::CASE_SENSITIVE_FILE_EXTENSION_COMPARISONS_INFO, + crate::CHARS_LAST_CMP_INFO, + crate::CHARS_NEXT_CMP_INFO, + crate::CLEAR_WITH_DRAIN_INFO, + crate::CLONED_INSTEAD_OF_COPIED_INFO, + crate::CLONE_ON_COPY_INFO, + crate::CLONE_ON_REF_PTR_INFO, + crate::COLLAPSIBLE_STR_REPLACE_INFO, + crate::CONST_IS_EMPTY_INFO, + crate::DOUBLE_ENDED_ITERATOR_LAST_INFO, + crate::DRAIN_COLLECT_INFO, + crate::ERR_EXPECT_INFO, + crate::EXPECT_FUN_CALL_INFO, + crate::EXPECT_USED_INFO, + crate::EXTEND_WITH_DRAIN_INFO, + crate::FILETYPE_IS_FILE_INFO, + crate::FILTER_MAP_BOOL_THEN_INFO, + crate::FILTER_MAP_IDENTITY_INFO, + crate::FILTER_MAP_NEXT_INFO, + crate::FILTER_NEXT_INFO, + crate::FLAT_MAP_IDENTITY_INFO, + crate::FLAT_MAP_OPTION_INFO, + crate::FORMAT_COLLECT_INFO, + crate::FROM_ITER_INSTEAD_OF_COLLECT_INFO, + crate::GET_FIRST_INFO, + crate::GET_LAST_WITH_LEN_INFO, + crate::GET_UNWRAP_INFO, + crate::IMPLICIT_CLONE_INFO, + crate::INEFFICIENT_TO_STRING_INFO, + crate::INSPECT_FOR_EACH_INFO, + crate::INTO_ITER_ON_REF_INFO, + crate::IO_OTHER_ERROR_INFO, + crate::IS_DIGIT_ASCII_RADIX_INFO, + crate::ITERATOR_STEP_BY_ZERO_INFO, + crate::ITER_CLONED_COLLECT_INFO, + crate::ITER_COUNT_INFO, + crate::ITER_FILTER_IS_OK_INFO, + crate::ITER_FILTER_IS_SOME_INFO, + crate::ITER_KV_MAP_INFO, + crate::ITER_NEXT_SLICE_INFO, + crate::ITER_NTH_INFO, + crate::ITER_NTH_ZERO_INFO, + crate::ITER_ON_EMPTY_COLLECTIONS_INFO, + crate::ITER_ON_SINGLE_ITEMS_INFO, + crate::ITER_OUT_OF_BOUNDS_INFO, + crate::ITER_OVEREAGER_CLONED_INFO, + crate::ITER_SKIP_NEXT_INFO, + crate::ITER_SKIP_ZERO_INFO, + crate::ITER_WITH_DRAIN_INFO, + crate::JOIN_ABSOLUTE_PATHS_INFO, + crate::MANUAL_CONTAINS_INFO, + crate::MANUAL_C_STR_LITERALS_INFO, + crate::MANUAL_FILTER_MAP_INFO, + crate::MANUAL_FIND_MAP_INFO, + crate::MANUAL_INSPECT_INFO, + crate::MANUAL_IS_VARIANT_AND_INFO, + crate::MANUAL_NEXT_BACK_INFO, + crate::MANUAL_OK_OR_INFO, + crate::MANUAL_REPEAT_N_INFO, + crate::MANUAL_SATURATING_ARITHMETIC_INFO, + crate::MANUAL_SPLIT_ONCE_INFO, + crate::MANUAL_STR_REPEAT_INFO, + crate::MANUAL_TRY_FOLD_INFO, + crate::MAP_ALL_ANY_IDENTITY_INFO, + crate::MAP_CLONE_INFO, + crate::MAP_COLLECT_RESULT_UNIT_INFO, + crate::MAP_ERR_IGNORE_INFO, + crate::MAP_FLATTEN_INFO, + crate::MAP_IDENTITY_INFO, + crate::MAP_UNWRAP_OR_INFO, + crate::MAP_WITH_UNUSED_ARGUMENT_OVER_RANGES_INFO, + crate::MUT_MUTEX_LOCK_INFO, + crate::NAIVE_BYTECOUNT_INFO, + crate::NEEDLESS_AS_BYTES_INFO, + crate::NEEDLESS_CHARACTER_ITERATION_INFO, + crate::NEEDLESS_COLLECT_INFO, + crate::NEEDLESS_OPTION_AS_DEREF_INFO, + crate::NEEDLESS_OPTION_TAKE_INFO, + crate::NEEDLESS_SPLITN_INFO, + crate::NEW_RET_NO_SELF_INFO, + crate::NONSENSICAL_OPEN_OPTIONS_INFO, + crate::NO_EFFECT_REPLACE_INFO, + crate::OBFUSCATED_IF_ELSE_INFO, + crate::OK_EXPECT_INFO, + crate::OPTION_AS_REF_CLONED_INFO, + crate::OPTION_AS_REF_DEREF_INFO, + crate::OPTION_FILTER_MAP_INFO, + crate::OPTION_MAP_OR_NONE_INFO, + crate::OR_FUN_CALL_INFO, + crate::OR_THEN_UNWRAP_INFO, + crate::PATH_BUF_PUSH_OVERWRITE_INFO, + crate::PATH_ENDS_WITH_EXT_INFO, + crate::RANGE_ZIP_WITH_LEN_INFO, + crate::READONLY_WRITE_LOCK_INFO, + crate::READ_LINE_WITHOUT_TRIM_INFO, + crate::REDUNDANT_AS_STR_INFO, + crate::REPEAT_ONCE_INFO, + crate::RESULT_FILTER_MAP_INFO, + crate::RESULT_MAP_OR_INTO_OPTION_INFO, + crate::RETURN_AND_THEN_INFO, + crate::SEARCH_IS_SOME_INFO, + crate::SEEK_FROM_CURRENT_INFO, + crate::SEEK_TO_START_INSTEAD_OF_REWIND_INFO, + crate::SHOULD_IMPLEMENT_TRAIT_INFO, + crate::SINGLE_CHAR_ADD_STR_INFO, + crate::SKIP_WHILE_NEXT_INFO, + crate::SLICED_STRING_AS_BYTES_INFO, + crate::STABLE_SORT_PRIMITIVE_INFO, + crate::STRING_EXTEND_CHARS_INFO, + crate::STRING_LIT_CHARS_ANY_INFO, + crate::STR_SPLIT_AT_NEWLINE_INFO, + crate::SUSPICIOUS_COMMAND_ARG_SPACE_INFO, + crate::SUSPICIOUS_MAP_INFO, + crate::SUSPICIOUS_OPEN_OPTIONS_INFO, + crate::SUSPICIOUS_SPLITN_INFO, + crate::SUSPICIOUS_TO_OWNED_INFO, + crate::SWAP_WITH_TEMPORARY_INFO, + crate::TYPE_ID_ON_BOX_INFO, + crate::UNBUFFERED_BYTES_INFO, + crate::UNINIT_ASSUMED_INIT_INFO, + crate::UNIT_HASH_INFO, + crate::UNNECESSARY_FALLIBLE_CONVERSIONS_INFO, + crate::UNNECESSARY_FILTER_MAP_INFO, + crate::UNNECESSARY_FIND_MAP_INFO, + crate::UNNECESSARY_FIRST_THEN_CHECK_INFO, + crate::UNNECESSARY_FOLD_INFO, + crate::UNNECESSARY_GET_THEN_CHECK_INFO, + crate::UNNECESSARY_JOIN_INFO, + crate::UNNECESSARY_LAZY_EVALUATIONS_INFO, + crate::UNNECESSARY_LITERAL_UNWRAP_INFO, + crate::UNNECESSARY_MAP_OR_INFO, + crate::UNNECESSARY_MIN_OR_MAX_INFO, + crate::UNNECESSARY_RESULT_MAP_OR_ELSE_INFO, + crate::UNNECESSARY_SORT_BY_INFO, + crate::UNNECESSARY_TO_OWNED_INFO, + crate::UNWRAP_OR_DEFAULT_INFO, + crate::UNWRAP_USED_INFO, + crate::USELESS_ASREF_INFO, + crate::USELESS_NONZERO_NEW_UNCHECKED_INFO, + crate::VEC_RESIZE_TO_ZERO_INFO, + crate::VERBOSE_FILE_READS_INFO, + crate::WAKER_CLONE_WAKE_INFO, + crate::WRONG_SELF_CONVENTION_INFO, + crate::ZST_OFFSET_INFO, +]; diff --git a/clippy_lints_methods/src/lib.rs b/clippy_lints_methods/src/lib.rs index eabbc42cee14..090dc0bfcc92 100644 --- a/clippy_lints_methods/src/lib.rs +++ b/clippy_lints_methods/src/lib.rs @@ -3,10 +3,10 @@ // #![feature(macro_metavar_expr_concat)] // #![feature(f128)] // #![feature(f16)] -// #![feature(if_let_guard)] +#![feature(if_let_guard)] // #![feature(iter_intersperse)] // #![feature(iter_partition_in_place)] -// #![feature(never_type)] +#![feature(never_type)] // #![feature(round_char_boundary)] #![feature(rustc_private)] // #![feature(stmt_expr_attributes)] @@ -32,16 +32,16 @@ // extern crate pulldown_cmark; // extern crate rustc_abi; // extern crate rustc_arena; -// extern crate rustc_ast; +extern crate rustc_ast; // extern crate rustc_ast_pretty; // extern crate rustc_attr_parsing; -// extern crate rustc_data_structures; +extern crate rustc_data_structures; extern crate rustc_driver; extern crate rustc_errors; extern crate rustc_hir; // extern crate rustc_hir_analysis; // extern crate rustc_hir_pretty; -// extern crate rustc_hir_typeck; +extern crate rustc_hir_typeck; // extern crate rustc_index; // extern crate rustc_infer; // extern crate rustc_lexer; @@ -72,6 +72,7 @@ mod clone_on_copy; mod clone_on_ref_ptr; mod cloned_instead_of_copied; mod collapsible_str_replace; +mod declared_lints; mod double_ended_iterator_last; mod drain_collect; mod err_expect; @@ -202,14 +203,17 @@ mod waker_clone_wake; mod wrong_self_convention; mod zst_offset; +// begin lints modules, do not remove this comment, it’s used in `update_lints` +// end lints modules, do not remove this comment, it’s used in `update_lints` + use clippy_config::Conf; use clippy_utils::consts::{ConstEvalCtxt, Constant}; -use clippy_utils::diagnostics::{span_lint, span_lint_and_help}; +use clippy_utils::diagnostics::{span_lint, span_lint_and_help, span_lint_and_then}; use clippy_utils::macros::FormatArgsStorage; use clippy_utils::msrvs::{self, Msrv}; -use clippy_utils::ty::{contains_ty_adt_constructor_opaque, implements_trait, is_copy, is_type_diagnostic_item}; -use clippy_utils::{contains_return, is_bool, is_trait_method, iter_input_pats, peel_blocks, return_ty}; -use declare_clippy_lint::declare_clippy_lint; +use clippy_utils::ty::{contains_ty_adt_constructor_opaque, get_type_diagnostic_name, same_type_and_consts, implements_trait, is_copy, is_type_diagnostic_item}; +use clippy_utils::{contains_return, is_bool, is_inherent_method_call, is_trait_item, is_trait_method, iter_input_pats, peel_blocks, return_ty}; +use declare_clippy_lint::{declare_clippy_lint, RegistrationGroups}; pub use path_ends_with_ext::DEFAULT_ALLOWED_DOTFILES; use rustc_abi::ExternAbi; use rustc_data_structures::fx::FxHashSet; @@ -5294,10 +5298,10 @@ impl Methods { } map_identity::check(cx, expr, recv, m_arg, name, span); manual_inspect::check(cx, expr, m_arg, name, span, self.msrv); - crate::useless_conversion::check_function_application(cx, expr, recv, m_arg); + check_function_application(cx, expr, recv, m_arg); }, ("map_break" | "map_continue", [m_arg]) => { - crate::useless_conversion::check_function_application(cx, expr, recv, m_arg); + check_function_application(cx, expr, recv, m_arg); }, ("map_or", [def, map]) => { option_map_or_none::check(cx, expr, recv, def, map); @@ -5822,3 +5826,47 @@ impl OutType { fn fn_header_equals(expected: hir::FnHeader, actual: hir::FnHeader) -> bool { expected.constness == actual.constness && expected.safety == actual.safety && expected.asyncness == actual.asyncness } + +fn has_eligible_receiver(cx: &LateContext<'_>, recv: &Expr<'_>, expr: &Expr<'_>) -> bool { + if is_inherent_method_call(cx, expr) { + matches!( + get_type_diagnostic_name(cx, cx.typeck_results().expr_ty(recv)), + Some(sym::Option | sym::Result | sym::ControlFlow) + ) + } else { + is_trait_method(cx, expr, sym::Iterator) + } +} + +/// Check if `arg` is a `Into::into` or `From::from` applied to `receiver` to give `expr`, through a +/// higher-order mapping function. +fn check_function_application(cx: &LateContext<'_>, expr: &Expr<'_>, recv: &Expr<'_>, arg: &Expr<'_>) { + if has_eligible_receiver(cx, recv, expr) + && (is_trait_item(cx, arg, sym::Into) || is_trait_item(cx, arg, sym::From)) + && let ty::FnDef(_, args) = cx.typeck_results().expr_ty(arg).kind() + && let &[from_ty, to_ty] = args.into_type_list(cx.tcx).as_slice() + && same_type_and_consts(from_ty, to_ty) + { + span_lint_and_then( + cx, + USELESS_CONVERSION, + expr.span.with_lo(recv.span.hi()), + format!("useless conversion to the same type: `{from_ty}`"), + |diag| { + diag.suggest_remove_item( + cx, + expr.span.with_lo(recv.span.hi()), + "consider removing", + Applicability::MachineApplicable, + ); + }, + ); + } +} + +pub fn register_lints(store: &mut rustc_lint::LintStore, conf: &'static Conf, groups: &mut RegistrationGroups, format_args_storage: &FormatArgsStorage) { + groups.insert_lints(declared_lints::LINTS); + store.register_lints(&declared_lints::LINTS.iter().map(|x| *x.lint).collect::>()); + let format_args = format_args_storage.clone(); + store.register_late_pass(move |_| Box::new(methods::Methods::new(conf, format_args.clone()))); +} diff --git a/clippy_utils/src/sym.rs b/clippy_utils/src/sym.rs index 9428262b99aa..0e39574ca871 100644 --- a/clippy_utils/src/sym.rs +++ b/clippy_utils/src/sym.rs @@ -33,6 +33,7 @@ generate! { abs, align_of, ambiguous_glob_reexports, + append, as_bytes, as_deref_mut, as_deref, @@ -129,6 +130,7 @@ generate! { next_tuple, Octal, once_cell, + open, OpenOptions, or_default, Other, @@ -197,4 +199,5 @@ generate! { wildcard_imports, with_capacity, wrapping_offset, + write, } diff --git a/src/driver.rs b/src/driver.rs index 99ec05b83ef3..5081a71362bc 100644 --- a/src/driver.rs +++ b/src/driver.rs @@ -159,7 +159,8 @@ impl rustc_driver::Callbacks for ClippyCallbacks { let conf = clippy_config::Conf::read(sess, &conf_path); let mut groups = RegistrationGroups::default(); - clippy_lints::register_lints(lint_store, conf, &mut groups); + let format_args = clippy_lints::register_lints(lint_store, conf, &mut groups); + clippy_lints_methods::register_lints(lint_store, conf, &mut groups, &format_args); groups.register(lint_store); #[cfg(feature = "internal")] clippy_lints_internal::register_lints(lint_store);