- let conf = match utils::conf::conf_file(reg.args()) {
- Ok(file_name) => {
- // if the user specified a file, it must exist, otherwise default to `clippy.toml` but
- // do not require the file to exist
- let (ref file_name, must_exist) = if let Some(ref file_name) = file_name {
- (&**file_name, true)
- } else {
- ("clippy.toml", false)
- };
-
- let (conf, errors) = utils::conf::read_conf(file_name, must_exist);
-
- // all conf errors are non-fatal, we just use the default conf in case of error
- for error in errors {
- reg.sess.struct_err(&format!("error reading Clippy's configuration file: {}", error)).emit();
- }
-
- conf
- }
- Err((err, span)) => {
- reg.sess.struct_span_err(span, err)
- .span_note(span, "Clippy will use default configuration")
- .emit();
- utils::conf::Conf::default()
- }
- };
-
- let mut store = reg.sess.lint_store.borrow_mut();
- store.register_removed("unstable_as_slice", "`Vec::as_slice` has been stabilized in 1.7");
- store.register_removed("unstable_as_mut_slice", "`Vec::as_mut_slice` has been stabilized in 1.7");
- store.register_removed("str_to_string", "using `str::to_string` is common even today and specialization will likely happen soon");
- store.register_removed("string_to_string", "using `string::to_string` is common even today and specialization will likely happen soon");
- // end deprecated lints, do not remove this comment, it’s used in `update_lints`
-
- reg.register_late_lint_pass(box types::TypePass);
- reg.register_late_lint_pass(box booleans::NonminimalBool);
- reg.register_late_lint_pass(box misc::TopLevelRefPass);
- reg.register_late_lint_pass(box misc::CmpNan);
- reg.register_late_lint_pass(box eq_op::EqOp);
- reg.register_early_lint_pass(box enum_variants::EnumVariantNames);
- reg.register_late_lint_pass(box enum_glob_use::EnumGlobUse);
- reg.register_late_lint_pass(box enum_clike::EnumClikeUnportableVariant);
- reg.register_late_lint_pass(box bit_mask::BitMask);
- reg.register_late_lint_pass(box ptr_arg::PtrArg);
- reg.register_late_lint_pass(box needless_bool::NeedlessBool);
- reg.register_late_lint_pass(box needless_bool::BoolComparison);
- reg.register_late_lint_pass(box approx_const::ApproxConstant);
- reg.register_late_lint_pass(box misc::FloatCmp);
- reg.register_early_lint_pass(box precedence::Precedence);
- reg.register_late_lint_pass(box eta_reduction::EtaPass);
- reg.register_late_lint_pass(box identity_op::IdentityOp);
- reg.register_early_lint_pass(box items_after_statements::ItemsAfterStatements);
- reg.register_late_lint_pass(box mut_mut::MutMut);
- reg.register_late_lint_pass(box mut_reference::UnnecessaryMutPassed);
- reg.register_late_lint_pass(box len_zero::LenZero);
- reg.register_late_lint_pass(box misc::CmpOwned);
- reg.register_late_lint_pass(box attrs::AttrPass);
- reg.register_late_lint_pass(box collapsible_if::CollapsibleIf);
- reg.register_late_lint_pass(box block_in_if_condition::BlockInIfCondition);
- reg.register_late_lint_pass(box misc::ModuloOne);
- reg.register_late_lint_pass(box unicode::Unicode);
- reg.register_late_lint_pass(box strings::StringAdd);
- reg.register_early_lint_pass(box returns::ReturnPass);
- reg.register_late_lint_pass(box methods::MethodsPass);
- reg.register_late_lint_pass(box shadow::ShadowPass);
- reg.register_late_lint_pass(box types::LetPass);
- reg.register_late_lint_pass(box types::UnitCmp);
- reg.register_late_lint_pass(box loops::LoopsPass);
- reg.register_late_lint_pass(box lifetimes::LifetimePass);
- reg.register_late_lint_pass(box entry::HashMapLint);
- reg.register_late_lint_pass(box ranges::StepByZero);
- reg.register_late_lint_pass(box types::CastPass);
- reg.register_late_lint_pass(box types::TypeComplexityPass::new(conf.type_complexity_threshold));
- reg.register_late_lint_pass(box matches::MatchPass);
- reg.register_late_lint_pass(box misc::PatternPass);
- reg.register_late_lint_pass(box minmax::MinMaxPass);
- reg.register_late_lint_pass(box open_options::NonSensicalOpenOptions);
- reg.register_late_lint_pass(box zero_div_zero::ZeroDivZeroPass);
- reg.register_late_lint_pass(box mutex_atomic::MutexAtomic);
- reg.register_late_lint_pass(box needless_update::NeedlessUpdatePass);
- reg.register_late_lint_pass(box needless_borrow::NeedlessBorrow);
- reg.register_late_lint_pass(box no_effect::NoEffectPass);
- reg.register_late_lint_pass(box map_clone::MapClonePass);
- reg.register_late_lint_pass(box temporary_assignment::TemporaryAssignmentPass);
- reg.register_late_lint_pass(box transmute::Transmute);
- reg.register_late_lint_pass(box cyclomatic_complexity::CyclomaticComplexity::new(conf.cyclomatic_complexity_threshold));
- reg.register_late_lint_pass(box escape::EscapePass);
- reg.register_early_lint_pass(box misc_early::MiscEarly);
- reg.register_late_lint_pass(box misc::UsedUnderscoreBinding);
- reg.register_late_lint_pass(box array_indexing::ArrayIndexing);
- reg.register_late_lint_pass(box panic::PanicPass);
- reg.register_late_lint_pass(box strings::StringLitAsBytes);
- reg.register_late_lint_pass(box derive::Derive);
- reg.register_late_lint_pass(box types::CharLitAsU8);
- reg.register_late_lint_pass(box print::PrintLint);
- reg.register_late_lint_pass(box vec::UselessVec);
- reg.register_early_lint_pass(box non_expressive_names::NonExpressiveNames {
- max_single_char_names: conf.max_single_char_names,
- });
- reg.register_late_lint_pass(box drop_ref::DropRefPass);
- reg.register_late_lint_pass(box types::AbsurdExtremeComparisons);
- reg.register_late_lint_pass(box types::InvalidUpcastComparisons);
- reg.register_late_lint_pass(box regex::RegexPass::default());
- reg.register_late_lint_pass(box copies::CopyAndPaste);
- reg.register_late_lint_pass(box format::FormatMacLint);
- reg.register_early_lint_pass(box formatting::Formatting);
- reg.register_late_lint_pass(box swap::Swap);
- reg.register_early_lint_pass(box if_not_else::IfNotElse);
- reg.register_late_lint_pass(box overflow_check_conditional::OverflowCheckConditional);
- reg.register_late_lint_pass(box unused_label::UnusedLabel);
- reg.register_late_lint_pass(box new_without_default::NewWithoutDefault);
- reg.register_late_lint_pass(box blacklisted_name::BlackListedName::new(conf.blacklisted_names));
- reg.register_late_lint_pass(box functions::Functions::new(conf.too_many_arguments_threshold));
- reg.register_early_lint_pass(box doc::Doc::new(conf.doc_valid_idents));
- reg.register_late_lint_pass(box neg_multiply::NegMultiply);
- reg.register_late_lint_pass(box unsafe_removed_from_name::UnsafeNameRemoval);
- reg.register_late_lint_pass(box mem_forget::MemForget);
- reg.register_late_lint_pass(box arithmetic::Arithmetic::default());
- reg.register_late_lint_pass(box assign_ops::AssignOps);
-
- reg.register_lint_group("clippy_restrictions", vec![
- arithmetic::FLOAT_ARITHMETIC,
- arithmetic::INTEGER_ARITHMETIC,
- assign_ops::ASSIGN_OPS,
- ]);
-
- reg.register_lint_group("clippy_pedantic", vec![
- array_indexing::INDEXING_SLICING,
- booleans::NONMINIMAL_BOOL,
- enum_glob_use::ENUM_GLOB_USE,
- if_not_else::IF_NOT_ELSE,
- items_after_statements::ITEMS_AFTER_STATEMENTS,
- matches::SINGLE_MATCH_ELSE,
- mem_forget::MEM_FORGET,
- methods::OPTION_UNWRAP_USED,
- methods::RESULT_UNWRAP_USED,
- methods::WRONG_PUB_SELF_CONVENTION,
- misc::USED_UNDERSCORE_BINDING,
- mut_mut::MUT_MUT,
- mutex_atomic::MUTEX_INTEGER,
- non_expressive_names::SIMILAR_NAMES,
- print::PRINT_STDOUT,
- print::USE_DEBUG,
- shadow::SHADOW_REUSE,
- shadow::SHADOW_SAME,
- shadow::SHADOW_UNRELATED,
- strings::STRING_ADD,
- strings::STRING_ADD_ASSIGN,
- types::CAST_POSSIBLE_TRUNCATION,
- types::CAST_POSSIBLE_WRAP,
- types::CAST_PRECISION_LOSS,
- types::CAST_SIGN_LOSS,
- types::INVALID_UPCAST_COMPARISONS,
- unicode::NON_ASCII_LITERAL,
- unicode::UNICODE_NOT_NFC,
- ]);