Skip to content

Commit 7a73a25

Browse files
committed
Auto merge of rust-lang#6086 - Ryan1729:add-suspicious_chained_operators-lint, r=llogiq
Add suspicious_operation_groupings lint This is my (<del> currently WIP </del>) attempt to close rust-lang#6039. changelog: Added `suspicious_operation_groupings` lint.
2 parents a644930 + af1cc5c commit 7a73a25

File tree

10 files changed

+1150
-24
lines changed

10 files changed

+1150
-24
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2073,6 +2073,7 @@ Released 2018-09-13
20732073
[`suspicious_else_formatting`]: https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_else_formatting
20742074
[`suspicious_map`]: https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_map
20752075
[`suspicious_op_assign_impl`]: https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_op_assign_impl
2076+
[`suspicious_operation_groupings`]: https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_operation_groupings
20762077
[`suspicious_unary_op_formatting`]: https://rust-lang.github.io/rust-clippy/master/index.html#suspicious_unary_op_formatting
20772078
[`tabs_in_doc_comments`]: https://rust-lang.github.io/rust-clippy/master/index.html#tabs_in_doc_comments
20782079
[`temporary_assignment`]: https://rust-lang.github.io/rust-clippy/master/index.html#temporary_assignment

clippy_lints/src/eq_op.rs

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
use crate::utils::{
2-
eq_expr_value, higher, implements_trait, in_macro, is_copy, is_expn_of, multispan_sugg, snippet, span_lint,
3-
span_lint_and_then,
2+
ast_utils::is_useless_with_eq_exprs, eq_expr_value, higher, implements_trait, in_macro, is_copy, is_expn_of,
3+
multispan_sugg, snippet, span_lint, span_lint_and_then,
44
};
55
use if_chain::if_chain;
66
use rustc_errors::Applicability;
7-
use rustc_hir::{BinOp, BinOpKind, BorrowKind, Expr, ExprKind, StmtKind};
7+
use rustc_hir::{BinOpKind, BorrowKind, Expr, ExprKind, StmtKind};
88
use rustc_lint::{LateContext, LateLintPass};
99
use rustc_session::{declare_lint_pass, declare_tool_lint};
1010

@@ -102,7 +102,7 @@ impl<'tcx> LateLintPass<'tcx> for EqOp {
102102
if macro_with_not_op(&left.kind) || macro_with_not_op(&right.kind) {
103103
return;
104104
}
105-
if is_valid_operator(op) && eq_expr_value(cx, left, right) {
105+
if is_useless_with_eq_exprs(higher::binop(op.node)) && eq_expr_value(cx, left, right) {
106106
span_lint(
107107
cx,
108108
EQ_OP,
@@ -245,22 +245,3 @@ impl<'tcx> LateLintPass<'tcx> for EqOp {
245245
}
246246
}
247247
}
248-
249-
fn is_valid_operator(op: BinOp) -> bool {
250-
matches!(
251-
op.node,
252-
BinOpKind::Sub
253-
| BinOpKind::Div
254-
| BinOpKind::Eq
255-
| BinOpKind::Lt
256-
| BinOpKind::Le
257-
| BinOpKind::Gt
258-
| BinOpKind::Ge
259-
| BinOpKind::Ne
260-
| BinOpKind::And
261-
| BinOpKind::Or
262-
| BinOpKind::BitXor
263-
| BinOpKind::BitAnd
264-
| BinOpKind::BitOr
265-
)
266-
}

clippy_lints/src/lib.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,7 @@ mod single_component_path_imports;
308308
mod slow_vector_initialization;
309309
mod stable_sort_primitive;
310310
mod strings;
311+
mod suspicious_operation_groupings;
311312
mod suspicious_trait_impl;
312313
mod swap;
313314
mod tabs_in_doc_comments;
@@ -834,6 +835,7 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
834835
&strings::STRING_LIT_AS_BYTES,
835836
&strings::STRING_TO_STRING,
836837
&strings::STR_TO_STRING,
838+
&suspicious_operation_groupings::SUSPICIOUS_OPERATION_GROUPINGS,
837839
&suspicious_trait_impl::SUSPICIOUS_ARITHMETIC_IMPL,
838840
&suspicious_trait_impl::SUSPICIOUS_OP_ASSIGN_IMPL,
839841
&swap::ALMOST_SWAPPED,
@@ -1066,6 +1068,7 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
10661068
store.register_late_pass(|| box types::UnitArg);
10671069
store.register_late_pass(|| box double_comparison::DoubleComparisons);
10681070
store.register_late_pass(|| box question_mark::QuestionMark);
1071+
store.register_early_pass(|| box suspicious_operation_groupings::SuspiciousOperationGroupings);
10691072
store.register_late_pass(|| box suspicious_trait_impl::SuspiciousImpl);
10701073
store.register_late_pass(|| box map_unit_fn::MapUnit);
10711074
store.register_late_pass(|| box inherent_impl::MultipleInherentImpl::default());
@@ -1547,6 +1550,7 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
15471550
LintId::of(&slow_vector_initialization::SLOW_VECTOR_INITIALIZATION),
15481551
LintId::of(&stable_sort_primitive::STABLE_SORT_PRIMITIVE),
15491552
LintId::of(&strings::STRING_FROM_UTF8_AS_BYTES),
1553+
LintId::of(&suspicious_operation_groupings::SUSPICIOUS_OPERATION_GROUPINGS),
15501554
LintId::of(&suspicious_trait_impl::SUSPICIOUS_ARITHMETIC_IMPL),
15511555
LintId::of(&suspicious_trait_impl::SUSPICIOUS_OP_ASSIGN_IMPL),
15521556
LintId::of(&swap::ALMOST_SWAPPED),
@@ -1698,6 +1702,7 @@ pub fn register_plugins(store: &mut rustc_lint::LintStore, sess: &Session, conf:
16981702
LintId::of(&returns::LET_AND_RETURN),
16991703
LintId::of(&returns::NEEDLESS_RETURN),
17001704
LintId::of(&single_component_path_imports::SINGLE_COMPONENT_PATH_IMPORTS),
1705+
LintId::of(&suspicious_operation_groupings::SUSPICIOUS_OPERATION_GROUPINGS),
17011706
LintId::of(&tabs_in_doc_comments::TABS_IN_DOC_COMMENTS),
17021707
LintId::of(&to_digit_is_some::TO_DIGIT_IS_SOME),
17031708
LintId::of(&try_err::TRY_ERR),

0 commit comments

Comments
 (0)