misc: extend let-chain
This commit is contained in:
parent
d289009eea
commit
8e3315f292
1 changed files with 21 additions and 28 deletions
|
|
@ -80,38 +80,31 @@ impl LateLintPass<'_> for ManualRotate {
|
|||
&& let BinOpKind::Add | BinOpKind::BitOr = op.node
|
||||
&& let Some((l_shift_dir, l_amount, l_expr)) = parse_shift(cx, l)
|
||||
&& let Some((r_shift_dir, r_amount, r_expr)) = parse_shift(cx, r)
|
||||
{
|
||||
if l_shift_dir == r_shift_dir {
|
||||
return;
|
||||
}
|
||||
if !clippy_utils::eq_expr_value(cx, l_expr, r_expr) {
|
||||
return;
|
||||
}
|
||||
let Some(bit_width) = (match cx.typeck_results().expr_ty(expr).kind() {
|
||||
&& l_shift_dir != r_shift_dir
|
||||
&& clippy_utils::eq_expr_value(cx, l_expr, r_expr)
|
||||
&& let Some(bit_width) = match cx.typeck_results().expr_ty(expr).kind() {
|
||||
ty::Int(itype) => itype.bit_width(),
|
||||
ty::Uint(itype) => itype.bit_width(),
|
||||
_ => return,
|
||||
}) else {
|
||||
return;
|
||||
};
|
||||
if l_amount + r_amount == u128::from(bit_width) {
|
||||
let (shift_function, amount) = if l_amount < r_amount {
|
||||
(l_shift_dir, l_amount)
|
||||
} else {
|
||||
(r_shift_dir, r_amount)
|
||||
};
|
||||
let mut applicability = Applicability::MachineApplicable;
|
||||
let expr_sugg = sugg::Sugg::hir_with_applicability(cx, l_expr, "_", &mut applicability).maybe_paren();
|
||||
span_lint_and_sugg(
|
||||
cx,
|
||||
MANUAL_ROTATE,
|
||||
expr.span,
|
||||
"there is no need to manually implement bit rotation",
|
||||
"this expression can be rewritten as",
|
||||
format!("{expr_sugg}.{shift_function}({amount})"),
|
||||
Applicability::MachineApplicable,
|
||||
);
|
||||
}
|
||||
&& l_amount + r_amount == u128::from(bit_width)
|
||||
{
|
||||
let (shift_function, amount) = if l_amount < r_amount {
|
||||
(l_shift_dir, l_amount)
|
||||
} else {
|
||||
(r_shift_dir, r_amount)
|
||||
};
|
||||
let mut applicability = Applicability::MachineApplicable;
|
||||
let expr_sugg = sugg::Sugg::hir_with_applicability(cx, l_expr, "_", &mut applicability).maybe_paren();
|
||||
span_lint_and_sugg(
|
||||
cx,
|
||||
MANUAL_ROTATE,
|
||||
expr.span,
|
||||
"there is no need to manually implement bit rotation",
|
||||
"this expression can be rewritten as",
|
||||
format!("{expr_sugg}.{shift_function}({amount})"),
|
||||
Applicability::MachineApplicable,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue