Don't lint manual_clamp in const contexts.

This commit is contained in:
Jason Newcomb 2023-03-10 11:07:28 -05:00
parent b0e2e7bdb4
commit 797d8bff08
2 changed files with 23 additions and 3 deletions

View File

@ -6,7 +6,8 @@
use clippy_utils::visitors::is_const_evaluatable; use clippy_utils::visitors::is_const_evaluatable;
use clippy_utils::MaybePath; use clippy_utils::MaybePath;
use clippy_utils::{ use clippy_utils::{
eq_expr_value, is_diag_trait_item, is_trait_method, path_res, path_to_local_id, peel_blocks, peel_blocks_with_stmt, eq_expr_value, in_constant, is_diag_trait_item, is_trait_method, path_res, path_to_local_id, peel_blocks,
peel_blocks_with_stmt,
}; };
use itertools::Itertools; use itertools::Itertools;
use rustc_errors::Applicability; use rustc_errors::Applicability;
@ -117,7 +118,7 @@ fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'tcx>) {
if !self.msrv.meets(msrvs::CLAMP) { if !self.msrv.meets(msrvs::CLAMP) {
return; return;
} }
if !expr.span.from_expansion() { if !expr.span.from_expansion() && !in_constant(cx, expr.hir_id) {
let suggestion = is_if_elseif_else_pattern(cx, expr) let suggestion = is_if_elseif_else_pattern(cx, expr)
.or_else(|| is_max_min_pattern(cx, expr)) .or_else(|| is_max_min_pattern(cx, expr))
.or_else(|| is_call_max_min_pattern(cx, expr)) .or_else(|| is_call_max_min_pattern(cx, expr))
@ -130,7 +131,7 @@ fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'tcx>) {
} }
fn check_block(&mut self, cx: &LateContext<'tcx>, block: &'tcx Block<'tcx>) { fn check_block(&mut self, cx: &LateContext<'tcx>, block: &'tcx Block<'tcx>) {
if !self.msrv.meets(msrvs::CLAMP) { if !self.msrv.meets(msrvs::CLAMP) || in_constant(cx, block.hir_id) {
return; return;
} }
for suggestion in is_two_if_pattern(cx, block) { for suggestion in is_two_if_pattern(cx, block) {

View File

@ -326,3 +326,22 @@ fn msrv_1_50() {
input input
}; };
} }
const fn _const() {
let (input, min, max) = (0, -1, 2);
let _ = if input < min {
min
} else if input > max {
max
} else {
input
};
let mut x = input;
if max < x {
let x = max;
}
if min > x {
x = min;
}
}