-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of #3686 - flip1995:rollup, r=flip1995
Rollup of 4 pull requests Successful merges: - #3582 (Add assert(true) and assert(false) lints) - #3679 (Fix automatic suggestion on `use_self`.) - #3684 ("make_return" and "blockify" convenience methods, fixes #3683) - #3685 (Rustup) Failed merges: r? @ghost
- Loading branch information
Showing
17 changed files
with
599 additions
and
47 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
// Copyright 2014-2018 The Rust Project Developers. See the COPYRIGHT | ||
// file at the top-level directory of this distribution. | ||
// | ||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or | ||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | ||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your | ||
// option. This file may not be copied, modified, or distributed | ||
// except according to those terms. | ||
|
||
use crate::consts::{constant, Constant}; | ||
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_help_and_lint}; | ||
use if_chain::if_chain; | ||
|
||
/// **What it does:** Check to call assert!(true/false) | ||
/// | ||
/// **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 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 AssertionsOnConstants; | ||
|
||
impl LintPass for AssertionsOnConstants { | ||
fn get_lints(&self) -> LintArray { | ||
lint_array![ASSERTIONS_ON_CONSTANTS] | ||
} | ||
} | ||
|
||
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(); | ||
if let ExprKind::Unary(_, ref lit) = e.node; | ||
then { | ||
if let ExprKind::Lit(ref inner) = lit.node { | ||
match inner.node { | ||
LitKind::Bool(true) => { | ||
span_help_and_lint(cx, ASSERTIONS_ON_CONSTANTS, e.span, | ||
"assert!(true) will be optimized out by the compiler", | ||
"remove it"); | ||
}, | ||
LitKind::Bool(false) => { | ||
span_help_and_lint( | ||
cx, ASSERTIONS_ON_CONSTANTS, e.span, | ||
"assert!(false) should probably be replaced", | ||
"use panic!() or unreachable!()"); | ||
}, | ||
_ => (), | ||
} | ||
} else if let Some(bool_const) = constant(cx, cx.tables, lit) { | ||
match bool_const.0 { | ||
Constant::Bool(true) => { | ||
span_help_and_lint(cx, ASSERTIONS_ON_CONSTANTS, e.span, | ||
"assert!(const: true) will be optimized out by the compiler", | ||
"remove it"); | ||
}, | ||
Constant::Bool(false) => { | ||
span_help_and_lint(cx, ASSERTIONS_ON_CONSTANTS, e.span, | ||
"assert!(const: false) should probably be replaced", | ||
"use panic!() or unreachable!()"); | ||
}, | ||
_ => (), | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
// Copyright 2014-2018 The Rust Project Developers. See the COPYRIGHT | ||
// file at the top-level directory of this distribution. | ||
// | ||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or | ||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | ||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your | ||
// option. This file may not be copied, modified, or distributed | ||
// except according to those terms. | ||
|
||
fn main() { | ||
assert!(true); | ||
assert!(false); | ||
assert!(true, "true message"); | ||
assert!(false, "false message"); | ||
|
||
const B: bool = true; | ||
assert!(B); | ||
|
||
const C: bool = false; | ||
assert!(C); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
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` | ||
= help: remove it | ||
|
||
error: assert!(false) should probably be replaced | ||
--> $DIR/assertions_on_constants.rs:12:5 | ||
| | ||
LL | assert!(false); | ||
| ^^^^^^^^^^^^^^^ | ||
| | ||
= help: use panic!() or unreachable!() | ||
|
||
error: assert!(true) will be optimized out by the compiler | ||
--> $DIR/assertions_on_constants.rs:13:5 | ||
| | ||
LL | assert!(true, "true message"); | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
| | ||
= help: remove it | ||
|
||
error: assert!(false) should probably be replaced | ||
--> $DIR/assertions_on_constants.rs:14:5 | ||
| | ||
LL | assert!(false, "false message"); | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
| | ||
= help: use panic!() or unreachable!() | ||
|
||
error: assert!(const: true) will be optimized out by the compiler | ||
--> $DIR/assertions_on_constants.rs:17:5 | ||
| | ||
LL | assert!(B); | ||
| ^^^^^^^^^^^ | ||
| | ||
= help: remove it | ||
|
||
error: assert!(const: false) should probably be replaced | ||
--> $DIR/assertions_on_constants.rs:20:5 | ||
| | ||
LL | assert!(C); | ||
| ^^^^^^^^^^^ | ||
| | ||
= help: use panic!() or unreachable!() | ||
|
||
error: aborting due to 6 previous errors | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.