mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-30 16:39:26 +00:00
Don't lint unnecessary_operation
in mixed macro contexts
This commit is contained in:
parent
12074808c7
commit
0893322e54
3 changed files with 24 additions and 2 deletions
|
@ -6,7 +6,8 @@ use clippy_utils::ty::has_drop;
|
|||
use rustc_errors::Applicability;
|
||||
use rustc_hir::def::{DefKind, Res};
|
||||
use rustc_hir::{is_range_literal, BinOpKind, BlockCheckMode, Expr, ExprKind, PatKind, Stmt, StmtKind, UnsafeSource};
|
||||
use rustc_lint::{LateContext, LateLintPass};
|
||||
use rustc_lint::{LateContext, LateLintPass, LintContext};
|
||||
use rustc_middle::lint::in_external_macro;
|
||||
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
||||
use std::ops::Deref;
|
||||
|
||||
|
@ -159,8 +160,11 @@ fn has_no_effect(cx: &LateContext<'_>, expr: &Expr<'_>) -> bool {
|
|||
fn check_unnecessary_operation(cx: &LateContext<'_>, stmt: &Stmt<'_>) {
|
||||
if_chain! {
|
||||
if let StmtKind::Semi(expr) = stmt.kind;
|
||||
let ctxt = stmt.span.ctxt();
|
||||
if expr.span.ctxt() == ctxt;
|
||||
if let Some(reduced) = reduce_expression(cx, expr);
|
||||
if !&reduced.iter().any(|e| e.span.from_expansion());
|
||||
if !in_external_macro(cx.sess(), stmt.span);
|
||||
if reduced.iter().all(|e| e.span.ctxt() == ctxt);
|
||||
then {
|
||||
if let ExprKind::Index(..) = &expr.kind {
|
||||
let snippet = if let (Some(arr), Some(func)) =
|
||||
|
|
|
@ -76,4 +76,13 @@ fn main() {
|
|||
DropStruct { ..get_drop_struct() };
|
||||
DropEnum::Tuple(get_number());
|
||||
DropEnum::Struct { field: get_number() };
|
||||
|
||||
// Issue #9954
|
||||
fn one() -> i8 {
|
||||
1
|
||||
}
|
||||
macro_rules! use_expr {
|
||||
($($e:expr),*) => {{ $($e;)* }}
|
||||
}
|
||||
use_expr!(isize::MIN / -(one() as isize), i8::MIN / -one());
|
||||
}
|
||||
|
|
|
@ -80,4 +80,13 @@ fn main() {
|
|||
DropStruct { ..get_drop_struct() };
|
||||
DropEnum::Tuple(get_number());
|
||||
DropEnum::Struct { field: get_number() };
|
||||
|
||||
// Issue #9954
|
||||
fn one() -> i8 {
|
||||
1
|
||||
}
|
||||
macro_rules! use_expr {
|
||||
($($e:expr),*) => {{ $($e;)* }}
|
||||
}
|
||||
use_expr!(isize::MIN / -(one() as isize), i8::MIN / -one());
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue