diff --git a/CHANGELOG.md b/CHANGELOG.md index 603fb0b5b7b..69d0350eb09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -616,6 +616,7 @@ All notable changes to this project will be documented in this file. [`absurd_extreme_comparisons`]: https://rust-lang.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons [`almost_swapped`]: https://rust-lang.github.io/rust-clippy/master/index.html#almost_swapped [`approx_constant`]: https://rust-lang.github.io/rust-clippy/master/index.html#approx_constant +[`assertions_on_constants`]: https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [`assign_op_pattern`]: https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [`assign_ops`]: https://rust-lang.github.io/rust-clippy/master/index.html#assign_ops [`bad_bit_mask`]: https://rust-lang.github.io/rust-clippy/master/index.html#bad_bit_mask @@ -679,10 +680,8 @@ All notable changes to this project will be documented in this file. [`expect_fun_call`]: https://rust-lang.github.io/rust-clippy/master/index.html#expect_fun_call [`expl_impl_clone_on_copy`]: https://rust-lang.github.io/rust-clippy/master/index.html#expl_impl_clone_on_copy [`explicit_counter_loop`]: https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop -[`explicit_false`]: https://rust-lang.github.io/rust-clippy/master/index.html#explicit_false [`explicit_into_iter_loop`]: https://rust-lang.github.io/rust-clippy/master/index.html#explicit_into_iter_loop [`explicit_iter_loop`]: https://rust-lang.github.io/rust-clippy/master/index.html#explicit_iter_loop -[`explicit_true`]: https://rust-lang.github.io/rust-clippy/master/index.html#explicit_true [`explicit_write`]: https://rust-lang.github.io/rust-clippy/master/index.html#explicit_write [`extend_from_slice`]: https://rust-lang.github.io/rust-clippy/master/index.html#extend_from_slice [`extra_unused_lifetimes`]: https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes diff --git a/README.md b/README.md index 658b2a70adc..751f0add8eb 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,11 @@ A collection of lints to catch common mistakes and improve your [Rust](https://github.com/rust-lang/rust) code. <<<<<<< HEAD -[There are 290 lints included in this crate!](https://rust-lang.github.io/rust-clippy/master/index.html) +[There are 291 lints included in this crate!](https://rust-lang.github.io/rust-clippy/master/index.html) ||||||| merged common ancestors [There are 291 lints included in this crate!](https://rust-lang.github.io/rust-clippy/master/index.html) ======= -[There are 293 lints included in this crate!](https://rust-lang.github.io/rust-clippy/master/index.html) +[There are 291 lints included in this crate!](https://rust-lang.github.io/rust-clippy/master/index.html) >>>>>>> run ./util/dev update_lints We have a bunch of lint categories to allow you to choose how much Clippy is supposed to ~~annoy~~ help you: diff --git a/clippy_lints/src/assert_checks.rs b/clippy_lints/src/assertions_on_constants.rs similarity index 58% rename from clippy_lints/src/assert_checks.rs rename to clippy_lints/src/assertions_on_constants.rs index dcc11951b26..0068d6fa157 100644 --- a/clippy_lints/src/assert_checks.rs +++ b/clippy_lints/src/assertions_on_constants.rs @@ -11,50 +11,40 @@ use crate::rustc::hir::{Expr, ExprKind}; use crate::rustc::lint::{LateContext, LateLintPass, LintArray, LintPass}; use crate::rustc::{declare_tool_lint, lint_array}; use crate::syntax::ast::LitKind; -use crate::utils::{is_direct_expn_of, span_lint}; +use crate::utils::{is_direct_expn_of, span_lint, span_lint_and_sugg}; +use rustc_errors::Applicability; use if_chain::if_chain; -/// **What it does:** Check explicit call assert!(true) +/// **What it does:** Check explicit call assert!(true/false) /// -/// **Why is this bad?** Will be optimized out by the compiler -/// -/// **Known problems:** None -/// -/// **Example:** -/// ```rust -/// assert!(true) -/// ``` -declare_clippy_lint! { - pub EXPLICIT_TRUE, - correctness, - "assert!(true) will be optimized out by the compiler" -} - -/// **What it does:** Check explicit call assert!(false) -/// -/// **Why is this bad?** Should probably be replaced by a panic!() or unreachable!() +/// **Why is this bad?** Will be optimized out by the compiler or should probably be replaced by a panic!() or unreachable!() /// /// **Known problems:** None /// /// **Example:** /// ```rust /// assert!(false) +/// // or +/// assert!(true) +/// // or +/// const B: bool = false; +/// assert!(B) /// ``` declare_clippy_lint! { - pub EXPLICIT_FALSE, - correctness, - "assert!(false) should probably be replaced by a panic!() or unreachable!()" + pub ASSERTIONS_ON_CONSTANTS, + style, + "assert!(true/false) will be optimized out by the compiler/should probably be replaced by a panic!() or unreachable!()" } -pub struct AssertChecks; +pub struct AssertionsOnConstants; -impl LintPass for AssertChecks { +impl LintPass for AssertionsOnConstants { fn get_lints(&self) -> LintArray { - lint_array![EXPLICIT_TRUE, EXPLICIT_FALSE] + lint_array![ASSERTIONS_ON_CONSTANTS] } } -impl<'a, 'tcx> LateLintPass<'a, 'tcx> for AssertChecks { +impl<'a, 'tcx> LateLintPass<'a, 'tcx> for AssertionsOnConstants { fn check_expr(&mut self, cx: &LateContext<'a, 'tcx>, e: &'tcx Expr) { if_chain! { if is_direct_expn_of(e.span, "assert").is_some(); @@ -63,12 +53,18 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for AssertChecks { then { match inner.node { LitKind::Bool(true) => { - span_lint(cx, EXPLICIT_TRUE, e.span, + span_lint(cx, ASSERTIONS_ON_CONSTANTS, e.span, "assert!(true) will be optimized out by the compiler"); }, LitKind::Bool(false) => { - span_lint(cx, EXPLICIT_FALSE, e.span, - "assert!(false) should probably be replaced by a panic!() or unreachable!()"); + span_lint_and_sugg( + cx, + ASSERTIONS_ON_CONSTANTS, + e.span, + "assert!(false) should probably be replaced", + "try", + "panic!()".to_string(), + Applicability::MachineApplicable); }, _ => (), } diff --git a/clippy_lints/src/lib.rs b/clippy_lints/src/lib.rs index 8af73a4f99b..192c9226b69 100644 --- a/clippy_lints/src/lib.rs +++ b/clippy_lints/src/lib.rs @@ -88,7 +88,7 @@ mod utils; // begin lints modules, do not remove this comment, it’s used in `update_lints` pub mod approx_const; pub mod arithmetic; -pub mod assert_checks; +pub mod assertions_on_constants; pub mod assign_ops; pub mod attrs; pub mod bit_mask; @@ -487,7 +487,7 @@ pub fn register_plugins(reg: &mut rustc_plugin::Registry<'_>, conf: &Conf) { reg.register_late_lint_pass(box ptr_offset_with_cast::Pass); reg.register_late_lint_pass(box redundant_clone::RedundantClone); reg.register_late_lint_pass(box slow_vector_initialization::Pass); - reg.register_late_lint_pass(box assert_checks::AssertChecks); + reg.register_late_lint_pass(box assertions_on_constants::AssertionsOnConstants); reg.register_lint_group("clippy::restriction", Some("clippy_restriction"), vec![ arithmetic::FLOAT_ARITHMETIC, @@ -565,8 +565,7 @@ pub fn register_plugins(reg: &mut rustc_plugin::Registry<'_>, conf: &Conf) { reg.register_lint_group("clippy::all", Some("clippy"), vec![ approx_const::APPROX_CONSTANT, - assert_checks::EXPLICIT_FALSE, - assert_checks::EXPLICIT_TRUE, + assertions_on_constants::ASSERTIONS_ON_CONSTANTS, assign_ops::ASSIGN_OP_PATTERN, assign_ops::MISREFACTORED_ASSIGN_OP, attrs::DEPRECATED_CFG_ATTR, @@ -788,6 +787,7 @@ pub fn register_plugins(reg: &mut rustc_plugin::Registry<'_>, conf: &Conf) { ]); reg.register_lint_group("clippy::style", Some("clippy_style"), vec![ + assertions_on_constants::ASSERTIONS_ON_CONSTANTS, assign_ops::ASSIGN_OP_PATTERN, attrs::UNKNOWN_CLIPPY_LINTS, bit_mask::VERBOSE_BIT_MASK, @@ -944,8 +944,6 @@ pub fn register_plugins(reg: &mut rustc_plugin::Registry<'_>, conf: &Conf) { reg.register_lint_group("clippy::correctness", Some("clippy_correctness"), vec![ approx_const::APPROX_CONSTANT, - assert_checks::EXPLICIT_FALSE, - assert_checks::EXPLICIT_TRUE, attrs::DEPRECATED_SEMVER, attrs::USELESS_ATTRIBUTE, bit_mask::BAD_BIT_MASK, diff --git a/tests/ui/assert_checks.stderr b/tests/ui/assert_checks.stderr deleted file mode 100644 index e2039941650..00000000000 --- a/tests/ui/assert_checks.stderr +++ /dev/null @@ -1,18 +0,0 @@ -error: assert!(true) will be optimized out by the compiler - --> $DIR/assert_checks.rs:11:5 - | -11 | assert!(true); - | ^^^^^^^^^^^^^^ - | - = note: #[deny(clippy::explicit_true)] on by default - -error: assert!(false) should probably be replaced by a panic!() or unreachable!() - --> $DIR/assert_checks.rs:12:5 - | -12 | assert!(false); - | ^^^^^^^^^^^^^^^ - | - = note: #[deny(clippy::explicit_false)] on by default - -error: aborting due to 2 previous errors - diff --git a/tests/ui/assert_checks.rs b/tests/ui/assertions_on_constants.rs similarity index 100% rename from tests/ui/assert_checks.rs rename to tests/ui/assertions_on_constants.rs diff --git a/tests/ui/assertions_on_constants.stderr b/tests/ui/assertions_on_constants.stderr new file mode 100644 index 00000000000..33104ed2066 --- /dev/null +++ b/tests/ui/assertions_on_constants.stderr @@ -0,0 +1,16 @@ +error: assert!(true) will be optimized out by the compiler + --> $DIR/assertions_on_constants.rs:11:5 + | +LL | assert!(true); + | ^^^^^^^^^^^^^^ + | + = note: `-D clippy::assertions-on-constants` implied by `-D warnings` + +error: assert!(false) should probably be replaced + --> $DIR/assertions_on_constants.rs:12:5 + | +LL | assert!(false); + | ^^^^^^^^^^^^^^^ help: try: `panic!()` + +error: aborting due to 2 previous errors + diff --git a/tests/ui/attrs.rs b/tests/ui/attrs.rs index c0ea7329718..2c7f67d4505 100644 --- a/tests/ui/attrs.rs +++ b/tests/ui/attrs.rs @@ -8,7 +8,7 @@ // except according to those terms. #![warn(clippy::inline_always, clippy::deprecated_semver)] -#![allow(clippy::assert_checks::explicit_true)] +#![allow(clippy::assertions_on_constants::assertions_on_constants)] #[inline(always)] fn test_attr_lint() { assert!(true) diff --git a/tests/ui/empty_line_after_outer_attribute.rs b/tests/ui/empty_line_after_outer_attribute.rs index a6e6adcac5c..2bb5037614d 100644 --- a/tests/ui/empty_line_after_outer_attribute.rs +++ b/tests/ui/empty_line_after_outer_attribute.rs @@ -8,7 +8,7 @@ // except according to those terms. #![warn(clippy::empty_line_after_outer_attr)] -#![allow(clippy::assert_checks::explicit_true)] +#![allow(clippy::assertions_on_constants::assertions_on_constants)] // This should produce a warning #[crate_type = "lib"] diff --git a/tests/ui/panic_unimplemented.rs b/tests/ui/panic_unimplemented.rs index 3c568658a6c..309a22dc215 100644 --- a/tests/ui/panic_unimplemented.rs +++ b/tests/ui/panic_unimplemented.rs @@ -8,7 +8,7 @@ // except according to those terms. #![warn(clippy::panic_params, clippy::unimplemented)] -#![allow(clippy::assert_checks::explicit_true)] +#![allow(clippy::assertions_on_constants::assertions_on_constants)] fn missing() { if true { panic!("{}");