mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-27 23:20:39 +00:00
Auto merge of #7282 - camsteffen:lint-stmt-expr, r=flip1995
Fix allow on some statement lints changelog: Fix `#[allow(..)]` over statements for [`needless_collect`], [`short_circuit_statement`] and [`unnecessary_operation`] Fixes #7171 Fixes #7202
This commit is contained in:
commit
8066f836ec
6 changed files with 24 additions and 11 deletions
|
@ -1,5 +1,5 @@
|
||||||
use super::NEEDLESS_COLLECT;
|
use super::NEEDLESS_COLLECT;
|
||||||
use clippy_utils::diagnostics::{span_lint_and_sugg, span_lint_and_then};
|
use clippy_utils::diagnostics::{span_lint_and_sugg, span_lint_hir_and_then};
|
||||||
use clippy_utils::source::{snippet, snippet_with_applicability};
|
use clippy_utils::source::{snippet, snippet_with_applicability};
|
||||||
use clippy_utils::sugg::Sugg;
|
use clippy_utils::sugg::Sugg;
|
||||||
use clippy_utils::ty::is_type_diagnostic_item;
|
use clippy_utils::ty::is_type_diagnostic_item;
|
||||||
|
@ -116,9 +116,10 @@ fn check_needless_collect_indirect_usage<'tcx>(expr: &'tcx Expr<'_>, cx: &LateCo
|
||||||
// Suggest replacing iter_call with iter_replacement, and removing stmt
|
// Suggest replacing iter_call with iter_replacement, and removing stmt
|
||||||
let mut span = MultiSpan::from_span(collect_span);
|
let mut span = MultiSpan::from_span(collect_span);
|
||||||
span.push_span_label(iter_call.span, "the iterator could be used here instead".into());
|
span.push_span_label(iter_call.span, "the iterator could be used here instead".into());
|
||||||
span_lint_and_then(
|
span_lint_hir_and_then(
|
||||||
cx,
|
cx,
|
||||||
super::NEEDLESS_COLLECT,
|
super::NEEDLESS_COLLECT,
|
||||||
|
init_expr.hir_id,
|
||||||
span,
|
span,
|
||||||
NEEDLESS_COLLECT_MSG,
|
NEEDLESS_COLLECT_MSG,
|
||||||
|diag| {
|
|diag| {
|
||||||
|
|
|
@ -355,8 +355,10 @@ impl<'tcx> LateLintPass<'tcx> for MiscLints {
|
||||||
if binop.node == BinOpKind::And || binop.node == BinOpKind::Or;
|
if binop.node == BinOpKind::And || binop.node == BinOpKind::Or;
|
||||||
if let Some(sugg) = Sugg::hir_opt(cx, a);
|
if let Some(sugg) = Sugg::hir_opt(cx, a);
|
||||||
then {
|
then {
|
||||||
span_lint_and_then(cx,
|
span_lint_hir_and_then(
|
||||||
|
cx,
|
||||||
SHORT_CIRCUIT_STATEMENT,
|
SHORT_CIRCUIT_STATEMENT,
|
||||||
|
expr.hir_id,
|
||||||
stmt.span,
|
stmt.span,
|
||||||
"boolean short circuit operator in statement may be clearer using an explicit test",
|
"boolean short circuit operator in statement may be clearer using an explicit test",
|
||||||
|diag| {
|
|diag| {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use clippy_utils::diagnostics::{span_lint, span_lint_and_sugg};
|
use clippy_utils::diagnostics::{span_lint_hir, span_lint_hir_and_then};
|
||||||
use clippy_utils::source::snippet_opt;
|
use clippy_utils::source::snippet_opt;
|
||||||
use clippy_utils::ty::has_drop;
|
use clippy_utils::ty::has_drop;
|
||||||
use rustc_errors::Applicability;
|
use rustc_errors::Applicability;
|
||||||
|
@ -92,7 +92,7 @@ impl<'tcx> LateLintPass<'tcx> for NoEffect {
|
||||||
fn check_stmt(&mut self, cx: &LateContext<'tcx>, stmt: &'tcx Stmt<'_>) {
|
fn check_stmt(&mut self, cx: &LateContext<'tcx>, stmt: &'tcx Stmt<'_>) {
|
||||||
if let StmtKind::Semi(expr) = stmt.kind {
|
if let StmtKind::Semi(expr) = stmt.kind {
|
||||||
if has_no_effect(cx, expr) {
|
if has_no_effect(cx, expr) {
|
||||||
span_lint(cx, NO_EFFECT, stmt.span, "statement with no effect");
|
span_lint_hir(cx, NO_EFFECT, expr.hir_id, stmt.span, "statement with no effect");
|
||||||
} else if let Some(reduced) = reduce_expression(cx, expr) {
|
} else if let Some(reduced) = reduce_expression(cx, expr) {
|
||||||
let mut snippet = String::new();
|
let mut snippet = String::new();
|
||||||
for e in reduced {
|
for e in reduced {
|
||||||
|
@ -106,14 +106,15 @@ impl<'tcx> LateLintPass<'tcx> for NoEffect {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
span_lint_and_sugg(
|
span_lint_hir_and_then(
|
||||||
cx,
|
cx,
|
||||||
UNNECESSARY_OPERATION,
|
UNNECESSARY_OPERATION,
|
||||||
|
expr.hir_id,
|
||||||
stmt.span,
|
stmt.span,
|
||||||
"statement can be reduced",
|
"statement can be reduced",
|
||||||
"replace it with",
|
|diag| {
|
||||||
snippet,
|
diag.span_suggestion(stmt.span, "replace it with", snippet, Applicability::MachineApplicable);
|
||||||
Applicability::MachineApplicable,
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -167,7 +167,7 @@ pub fn span_lint_hir_and_then(
|
||||||
cx: &LateContext<'_>,
|
cx: &LateContext<'_>,
|
||||||
lint: &'static Lint,
|
lint: &'static Lint,
|
||||||
hir_id: HirId,
|
hir_id: HirId,
|
||||||
sp: Span,
|
sp: impl Into<MultiSpan>,
|
||||||
msg: &str,
|
msg: &str,
|
||||||
f: impl FnOnce(&mut DiagnosticBuilder<'_>),
|
f: impl FnOnce(&mut DiagnosticBuilder<'_>),
|
||||||
) {
|
) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use std::collections::{BinaryHeap, HashMap, LinkedList, VecDeque};
|
use std::collections::{BinaryHeap, HashMap, HashSet, LinkedList, VecDeque};
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let sample = [1; 5];
|
let sample = [1; 5];
|
||||||
|
@ -75,3 +75,9 @@ mod issue7110 {
|
||||||
buffer.len()
|
buffer.len()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn allow_test() {
|
||||||
|
#[allow(clippy::needless_collect)]
|
||||||
|
let v = [1].iter().collect::<Vec<_>>();
|
||||||
|
v.into_iter().collect::<HashSet<_>>();
|
||||||
|
}
|
||||||
|
|
|
@ -91,6 +91,9 @@ fn main() {
|
||||||
let s: String = "foo".into();
|
let s: String = "foo".into();
|
||||||
FooString { s: s };
|
FooString { s: s };
|
||||||
|
|
||||||
|
#[allow(clippy::no_effect)]
|
||||||
|
0;
|
||||||
|
|
||||||
// Do not warn
|
// Do not warn
|
||||||
get_number();
|
get_number();
|
||||||
unsafe { unsafe_fn() };
|
unsafe { unsafe_fn() };
|
||||||
|
|
Loading…
Reference in a new issue