# https://github.com/ericseppanen/cargo-cranky
# cargo install cargo-cranky && cargo cranky
# See also clippy.toml

deny = ["unsafe_code"]

warn = [
  "clippy::all",
  "clippy::as_ptr_cast_mut",
  "clippy::await_holding_lock",
  "clippy::bool_to_int_with_if",
  "clippy::branches_sharing_code",
  "clippy::char_lit_as_u8",
  "clippy::checked_conversions",
  "clippy::clear_with_drain",
  "clippy::cloned_instead_of_copied",
  "clippy::dbg_macro",
  "clippy::debug_assert_with_mut_call",
  "clippy::default_union_representation",
  "clippy::derive_partial_eq_without_eq",
  "clippy::disallowed_macros",                  # See clippy.toml
  "clippy::disallowed_methods",                 # See clippy.toml
  "clippy::disallowed_names",                   # See clippy.toml
  "clippy::disallowed_script_idents",           # See clippy.toml
  "clippy::disallowed_types",                   # See clippy.toml
  "clippy::doc_link_with_quotes",
  "clippy::doc_markdown",
  "clippy::empty_enum",
  "clippy::empty_line_after_outer_attr",
  "clippy::enum_glob_use",
  "clippy::equatable_if_let",
  "clippy::exit",
  "clippy::expl_impl_clone_on_copy",
  "clippy::explicit_deref_methods",
  "clippy::explicit_into_iter_loop",
  "clippy::explicit_iter_loop",
  "clippy::fallible_impl_from",
  "clippy::filter_map_next",
  "clippy::flat_map_option",
  "clippy::float_cmp_const",
  "clippy::fn_params_excessive_bools",
  "clippy::fn_to_numeric_cast_any",
  "clippy::from_iter_instead_of_collect",
  "clippy::get_unwrap",
  "clippy::if_let_mutex",
  "clippy::implicit_clone",
  "clippy::imprecise_flops",
  "clippy::index_refutable_slice",
  "clippy::inefficient_to_string",
  "clippy::invalid_upcast_comparisons",
  "clippy::iter_not_returning_iterator",
  "clippy::iter_on_empty_collections",
  "clippy::iter_on_single_items",
  "clippy::large_digit_groups",
  "clippy::large_include_file",
  "clippy::large_stack_arrays",
  "clippy::large_stack_frames",
  "clippy::large_types_passed_by_value",
  "clippy::let_unit_value",
  "clippy::linkedlist",
  "clippy::lossy_float_literal",
  "clippy::macro_use_imports",
  "clippy::manual_assert",
  "clippy::manual_clamp",
  "clippy::manual_instant_elapsed",
  "clippy::manual_let_else",
  "clippy::manual_ok_or",
  "clippy::manual_string_new",
  "clippy::map_err_ignore",
  "clippy::map_flatten",
  "clippy::map_unwrap_or",
  "clippy::match_on_vec_items",
  "clippy::match_same_arms",
  "clippy::match_wild_err_arm",
  "clippy::match_wildcard_for_single_variants",
  "clippy::mem_forget",
  "clippy::mismatched_target_os",
  "clippy::mismatching_type_param_order",
  "clippy::missing_enforced_import_renames",
  "clippy::missing_errors_doc",
  "clippy::missing_safety_doc",
  "clippy::mut_mut",
  "clippy::mutex_integer",
  "clippy::needless_borrow",
  "clippy::needless_continue",
  "clippy::needless_for_each",
  "clippy::needless_pass_by_value",
  "clippy::negative_feature_names",
  "clippy::nonstandard_macro_braces",
  "clippy::option_option",
  "clippy::path_buf_push_overwrite",
  "clippy::print_stdout",
  "clippy::ptr_as_ptr",
  "clippy::ptr_cast_constness",
  "clippy::pub_without_shorthand",
  "clippy::rc_mutex",
  "clippy::redundant_type_annotations",
  "clippy::ref_option_ref",
  "clippy::rest_pat_in_fully_bound_structs",
  "clippy::same_functions_in_if_condition",
  "clippy::semicolon_if_nothing_returned",
  "clippy::significant_drop_tightening",
  "clippy::single_match_else",
  "clippy::str_to_string",
  "clippy::string_add_assign",
  "clippy::string_add",
  "clippy::string_lit_as_bytes",
  "clippy::string_to_string",
  "clippy::suspicious_command_arg_space",
  "clippy::suspicious_xor_used_as_pow",
  "clippy::todo",
  "clippy::trailing_empty_array",
  "clippy::trait_duplication_in_bounds",
  "clippy::transmute_ptr_to_ptr",
  "clippy::tuple_array_conversions",
  "clippy::unchecked_duration_subtraction",
  "clippy::undocumented_unsafe_blocks",
  "clippy::unimplemented",
  "clippy::uninlined_format_args",
  "clippy::unnecessary_box_returns",
  "clippy::unnecessary_safety_comment",
  "clippy::unnecessary_safety_doc",
  "clippy::unnecessary_self_imports",
  "clippy::unnecessary_struct_initialization",
  "clippy::unnecessary_wraps",
  "clippy::unnested_or_patterns",
  "clippy::unused_peekable",
  "clippy::unused_rounding",
  "clippy::unused_self",
  "clippy::use_self",
  "clippy::useless_transmute",
  "clippy::verbose_file_reads",
  "clippy::wildcard_dependencies",
  "clippy::wildcard_imports",
  "clippy::zero_sized_map_values",
  "elided_lifetimes_in_paths",
  "future_incompatible",
  "nonstandard_style",
  "rust_2018_idioms",
  "rust_2021_prelude_collisions",
  "rustdoc::missing_crate_level_docs",
  "semicolon_in_expressions_from_macros",
  "trivial_numeric_casts",
  "unsafe_op_in_unsafe_fn",                     # `unsafe_op_in_unsafe_fn` may become the default in future Rust versions: https://github.com/rust-lang/rust/issues/71668
  "unused_extern_crates",
  "unused_import_braces",
  "unused_lifetimes",


  # Enable when we update MSRV:
  # "clippy::implied_bounds_in_impls",
  # "clippy::needless_pass_by_ref_mut",
  # "clippy::readonly_write_lock",
  # "clippy::should_panic_without_expect",
  # "clippy::string_lit_chars_any",
]

allow = [
  "clippy::manual_range_contains",       # this one is just worse imho
  "clippy::significant_drop_tightening", # A lot of false positives

  # TODO(emilk): enable more of these lints:
  "clippy::cloned_instead_of_copied",
  "clippy::let_underscore_untyped",
  "clippy::missing_assert_message",
  "clippy::missing_errors_doc",
  "clippy::print_stderr",               # TODO(emilk): use `log` crate instead
  "clippy::self_named_module_files",    # False positives
  "clippy::too_many_lines",
  "clippy::undocumented_unsafe_blocks",
  "clippy::unwrap_used",
  "clippy::useless_let_if_seq",         # False positives
  "clippy::wildcard_imports",           # We do this a lot
  "trivial_casts",
  "unused_qualifications",
]
