mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-27 15:11:30 +00:00
Auto merge of #5106 - flip1995:dbg_assert_mut_async, r=oli-obk
Don't trigger [debug_assert_with_mut_call] on debug_assert!(_.await) Fixes #5105 cc #5112 changelog: Don't trigger [`debug_assert_with_mut_call`] on `debug_assert!(_.await)` and move it to nursery.
This commit is contained in:
commit
5826a0472d
5 changed files with 68 additions and 58 deletions
|
@ -1261,7 +1261,6 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
|
|||
LintId::of(&misc_early::ZERO_PREFIXED_LITERAL),
|
||||
LintId::of(&mut_key::MUTABLE_KEY_TYPE),
|
||||
LintId::of(&mut_reference::UNNECESSARY_MUT_PASSED),
|
||||
LintId::of(&mutable_debug_assertion::DEBUG_ASSERT_WITH_MUT_CALL),
|
||||
LintId::of(&mutex_atomic::MUTEX_ATOMIC),
|
||||
LintId::of(&needless_bool::BOOL_COMPARISON),
|
||||
LintId::of(&needless_bool::NEEDLESS_BOOL),
|
||||
|
@ -1578,7 +1577,6 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
|
|||
LintId::of(&misc::FLOAT_CMP),
|
||||
LintId::of(&misc::MODULO_ONE),
|
||||
LintId::of(&mut_key::MUTABLE_KEY_TYPE),
|
||||
LintId::of(&mutable_debug_assertion::DEBUG_ASSERT_WITH_MUT_CALL),
|
||||
LintId::of(&non_copy_const::BORROW_INTERIOR_MUTABLE_CONST),
|
||||
LintId::of(&non_copy_const::DECLARE_INTERIOR_MUTABLE_CONST),
|
||||
LintId::of(&open_options::NONSENSICAL_OPEN_OPTIONS),
|
||||
|
@ -1632,6 +1630,7 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
|
|||
LintId::of(&fallible_impl_from::FALLIBLE_IMPL_FROM),
|
||||
LintId::of(&missing_const_for_fn::MISSING_CONST_FOR_FN),
|
||||
LintId::of(&mul_add::MANUAL_MUL_ADD),
|
||||
LintId::of(&mutable_debug_assertion::DEBUG_ASSERT_WITH_MUT_CALL),
|
||||
LintId::of(&mutex_atomic::MUTEX_INTEGER),
|
||||
LintId::of(&needless_borrow::NEEDLESS_BORROW),
|
||||
LintId::of(&path_buf_push_overwrite::PATH_BUF_PUSH_OVERWRITE),
|
||||
|
|
|
@ -4,7 +4,7 @@ use matches::matches;
|
|||
use rustc::hir::map::Map;
|
||||
use rustc::ty;
|
||||
use rustc_hir::intravisit::{walk_expr, NestedVisitorMap, Visitor};
|
||||
use rustc_hir::{BorrowKind, Expr, ExprKind, Mutability, StmtKind, UnOp};
|
||||
use rustc_hir::{BorrowKind, Expr, ExprKind, MatchSource, Mutability, StmtKind, UnOp};
|
||||
use rustc_lint::{LateContext, LateLintPass};
|
||||
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
||||
use rustc_span::Span;
|
||||
|
@ -28,7 +28,7 @@ declare_clippy_lint! {
|
|||
/// debug_assert!(take_a_mut_parameter(&mut 5));
|
||||
/// ```
|
||||
pub DEBUG_ASSERT_WITH_MUT_CALL,
|
||||
correctness,
|
||||
nursery,
|
||||
"mutable arguments in `debug_assert{,_ne,_eq}!`"
|
||||
}
|
||||
|
||||
|
@ -61,38 +61,38 @@ fn extract_call<'a, 'tcx>(cx: &'a LateContext<'a, 'tcx>, e: &'tcx Expr<'_>) -> O
|
|||
if block.stmts.len() == 1;
|
||||
if let StmtKind::Semi(ref matchexpr) = block.stmts[0].kind;
|
||||
then {
|
||||
// debug_assert
|
||||
if_chain! {
|
||||
if let ExprKind::Match(ref ifclause, _, _) = matchexpr.kind;
|
||||
if let ExprKind::DropTemps(ref droptmp) = ifclause.kind;
|
||||
if let ExprKind::Unary(UnOp::UnNot, ref condition) = droptmp.kind;
|
||||
then {
|
||||
// debug_assert
|
||||
let mut visitor = MutArgVisitor::new(cx);
|
||||
visitor.visit_expr(condition);
|
||||
return visitor.expr_span();
|
||||
} else {
|
||||
// debug_assert_{eq,ne}
|
||||
if_chain! {
|
||||
if let ExprKind::Block(ref matchblock, _) = matchexpr.kind;
|
||||
if let Some(ref matchheader) = matchblock.expr;
|
||||
if let ExprKind::Match(ref headerexpr, _, _) = matchheader.kind;
|
||||
if let ExprKind::Tup(ref conditions) = headerexpr.kind;
|
||||
if conditions.len() == 2;
|
||||
then {
|
||||
if let ExprKind::AddrOf(BorrowKind::Ref, _, ref lhs) = conditions[0].kind {
|
||||
let mut visitor = MutArgVisitor::new(cx);
|
||||
visitor.visit_expr(lhs);
|
||||
if let Some(span) = visitor.expr_span() {
|
||||
return Some(span);
|
||||
}
|
||||
}
|
||||
if let ExprKind::AddrOf(BorrowKind::Ref, _, ref rhs) = conditions[1].kind {
|
||||
let mut visitor = MutArgVisitor::new(cx);
|
||||
visitor.visit_expr(rhs);
|
||||
if let Some(span) = visitor.expr_span() {
|
||||
return Some(span);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// debug_assert_{eq,ne}
|
||||
if_chain! {
|
||||
if let ExprKind::Block(ref matchblock, _) = matchexpr.kind;
|
||||
if let Some(ref matchheader) = matchblock.expr;
|
||||
if let ExprKind::Match(ref headerexpr, _, _) = matchheader.kind;
|
||||
if let ExprKind::Tup(ref conditions) = headerexpr.kind;
|
||||
if conditions.len() == 2;
|
||||
then {
|
||||
if let ExprKind::AddrOf(BorrowKind::Ref, _, ref lhs) = conditions[0].kind {
|
||||
let mut visitor = MutArgVisitor::new(cx);
|
||||
visitor.visit_expr(lhs);
|
||||
if let Some(span) = visitor.expr_span() {
|
||||
return Some(span);
|
||||
}
|
||||
}
|
||||
if let ExprKind::AddrOf(BorrowKind::Ref, _, ref rhs) = conditions[1].kind {
|
||||
let mut visitor = MutArgVisitor::new(cx);
|
||||
visitor.visit_expr(rhs);
|
||||
if let Some(span) = visitor.expr_span() {
|
||||
return Some(span);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -147,6 +147,8 @@ impl<'a, 'tcx> Visitor<'tcx> for MutArgVisitor<'a, 'tcx> {
|
|||
}
|
||||
}
|
||||
},
|
||||
// Don't check await desugars
|
||||
ExprKind::Match(_, _, MatchSource::AwaitDesugar) => return,
|
||||
_ if !self.found => self.expr_span = Some(expr.span),
|
||||
_ => return,
|
||||
}
|
||||
|
|
|
@ -289,7 +289,7 @@ pub const ALL_LINTS: [Lint; 351] = [
|
|||
},
|
||||
Lint {
|
||||
name: "debug_assert_with_mut_call",
|
||||
group: "correctness",
|
||||
group: "nursery",
|
||||
desc: "mutable arguments in `debug_assert{,_ne,_eq}!`",
|
||||
deprecation: None,
|
||||
module: "mutable_debug_assertion",
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
// compile-flags: --edition=2018
|
||||
#![feature(custom_inner_attributes)]
|
||||
#![rustfmt::skip]
|
||||
#![warn(clippy::debug_assert_with_mut_call)]
|
||||
#![allow(clippy::trivially_copy_pass_by_ref, clippy::cognitive_complexity, clippy::redundant_closure_call)]
|
||||
|
||||
struct S;
|
||||
|
@ -114,6 +116,12 @@ fn misc() {
|
|||
})());
|
||||
}
|
||||
|
||||
async fn debug_await() {
|
||||
debug_assert!(async {
|
||||
true
|
||||
}.await);
|
||||
}
|
||||
|
||||
fn main() {
|
||||
func_non_mutable();
|
||||
func_mutable();
|
||||
|
@ -121,4 +129,5 @@ fn main() {
|
|||
method_mutable();
|
||||
|
||||
misc();
|
||||
debug_await();
|
||||
}
|
||||
|
|
|
@ -1,169 +1,169 @@
|
|||
error: do not call a function with mutable arguments inside of `debug_assert!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:40:19
|
||||
--> $DIR/debug_assert_with_mut_call.rs:42:19
|
||||
|
|
||||
LL | debug_assert!(bool_mut(&mut 3));
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: `#[deny(clippy::debug_assert_with_mut_call)]` on by default
|
||||
= note: `-D clippy::debug-assert-with-mut-call` implied by `-D warnings`
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:41:20
|
||||
--> $DIR/debug_assert_with_mut_call.rs:43:20
|
||||
|
|
||||
LL | debug_assert!(!bool_mut(&mut 3));
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert_eq!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:43:25
|
||||
--> $DIR/debug_assert_with_mut_call.rs:45:25
|
||||
|
|
||||
LL | debug_assert_eq!(0, u32_mut(&mut 3));
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert_eq!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:44:22
|
||||
--> $DIR/debug_assert_with_mut_call.rs:46:22
|
||||
|
|
||||
LL | debug_assert_eq!(u32_mut(&mut 3), 0);
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert_ne!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:46:25
|
||||
--> $DIR/debug_assert_with_mut_call.rs:48:25
|
||||
|
|
||||
LL | debug_assert_ne!(1, u32_mut(&mut 3));
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert_ne!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:47:22
|
||||
--> $DIR/debug_assert_with_mut_call.rs:49:22
|
||||
|
|
||||
LL | debug_assert_ne!(u32_mut(&mut 3), 1);
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:62:19
|
||||
--> $DIR/debug_assert_with_mut_call.rs:64:19
|
||||
|
|
||||
LL | debug_assert!(S.bool_self_mut());
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:63:20
|
||||
--> $DIR/debug_assert_with_mut_call.rs:65:20
|
||||
|
|
||||
LL | debug_assert!(!S.bool_self_mut());
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:64:19
|
||||
--> $DIR/debug_assert_with_mut_call.rs:66:19
|
||||
|
|
||||
LL | debug_assert!(S.bool_self_ref_arg_mut(&mut 3));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:65:19
|
||||
--> $DIR/debug_assert_with_mut_call.rs:67:19
|
||||
|
|
||||
LL | debug_assert!(S.bool_self_mut_arg_ref(&3));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:66:19
|
||||
--> $DIR/debug_assert_with_mut_call.rs:68:19
|
||||
|
|
||||
LL | debug_assert!(S.bool_self_mut_arg_mut(&mut 3));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert_eq!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:68:22
|
||||
--> $DIR/debug_assert_with_mut_call.rs:70:22
|
||||
|
|
||||
LL | debug_assert_eq!(S.u32_self_mut(), 0);
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert_eq!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:69:22
|
||||
--> $DIR/debug_assert_with_mut_call.rs:71:22
|
||||
|
|
||||
LL | debug_assert_eq!(S.u32_self_mut_arg_ref(&3), 0);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert_eq!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:70:22
|
||||
--> $DIR/debug_assert_with_mut_call.rs:72:22
|
||||
|
|
||||
LL | debug_assert_eq!(S.u32_self_ref_arg_mut(&mut 3), 0);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert_eq!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:71:22
|
||||
--> $DIR/debug_assert_with_mut_call.rs:73:22
|
||||
|
|
||||
LL | debug_assert_eq!(S.u32_self_mut_arg_mut(&mut 3), 0);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert_ne!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:73:22
|
||||
--> $DIR/debug_assert_with_mut_call.rs:75:22
|
||||
|
|
||||
LL | debug_assert_ne!(S.u32_self_mut(), 1);
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert_ne!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:74:22
|
||||
--> $DIR/debug_assert_with_mut_call.rs:76:22
|
||||
|
|
||||
LL | debug_assert_ne!(S.u32_self_mut_arg_ref(&3), 1);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert_ne!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:75:22
|
||||
--> $DIR/debug_assert_with_mut_call.rs:77:22
|
||||
|
|
||||
LL | debug_assert_ne!(S.u32_self_ref_arg_mut(&mut 3), 1);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert_ne!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:76:22
|
||||
--> $DIR/debug_assert_with_mut_call.rs:78:22
|
||||
|
|
||||
LL | debug_assert_ne!(S.u32_self_mut_arg_mut(&mut 3), 1);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert_eq!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:84:22
|
||||
--> $DIR/debug_assert_with_mut_call.rs:86:22
|
||||
|
|
||||
LL | debug_assert_eq!(v.pop(), Some(1));
|
||||
| ^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert_ne!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:85:31
|
||||
--> $DIR/debug_assert_with_mut_call.rs:87:31
|
||||
|
|
||||
LL | debug_assert_ne!(Some(3), v.pop());
|
||||
| ^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:88:19
|
||||
--> $DIR/debug_assert_with_mut_call.rs:90:19
|
||||
|
|
||||
LL | debug_assert!(bool_mut(a));
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:91:31
|
||||
--> $DIR/debug_assert_with_mut_call.rs:93:31
|
||||
|
|
||||
LL | debug_assert!(!(bool_ref(&u32_mut(&mut 3))));
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert_eq!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:94:22
|
||||
--> $DIR/debug_assert_with_mut_call.rs:96:22
|
||||
|
|
||||
LL | debug_assert_eq!(v.pop().unwrap(), 3);
|
||||
| ^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:98:19
|
||||
--> $DIR/debug_assert_with_mut_call.rs:100:19
|
||||
|
|
||||
LL | debug_assert!(bool_mut(&mut 3), "w/o format");
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:100:19
|
||||
--> $DIR/debug_assert_with_mut_call.rs:102:19
|
||||
|
|
||||
LL | debug_assert!(bool_mut(&mut 3), "{} format", "w/");
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:105:9
|
||||
--> $DIR/debug_assert_with_mut_call.rs:107:9
|
||||
|
|
||||
LL | bool_mut(&mut x);
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: do not call a function with mutable arguments inside of `debug_assert!`
|
||||
--> $DIR/debug_assert_with_mut_call.rs:112:9
|
||||
--> $DIR/debug_assert_with_mut_call.rs:114:9
|
||||
|
|
||||
LL | bool_mut(&mut x);
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
|
Loading…
Reference in a new issue