Skip to content

Commit 61e1870

Browse files
author
Evan Typanski
committed
Add MSRV check for const rem_euclid
1 parent 90f8277 commit 61e1870

File tree

5 files changed

+23
-3
lines changed

5 files changed

+23
-3
lines changed

clippy_lints/src/manual_rem_euclid.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use clippy_utils::consts::{constant_full_int, FullInt};
22
use clippy_utils::diagnostics::span_lint_and_sugg;
33
use clippy_utils::source::snippet_with_applicability;
4-
use clippy_utils::{meets_msrv, msrvs, path_to_local};
4+
use clippy_utils::{in_constant, meets_msrv, msrvs, path_to_local};
55
use rustc_errors::Applicability;
66
use rustc_hir::{BinOpKind, Expr, ExprKind, Node, TyKind};
77
use rustc_lint::{LateContext, LateLintPass};
@@ -51,6 +51,10 @@ impl<'tcx> LateLintPass<'tcx> for ManualRemEuclid {
5151
return;
5252
}
5353

54+
if in_constant(cx, expr.hir_id) && !meets_msrv(self.msrv, msrvs::REM_EUCLID_CONST) {
55+
return;
56+
}
57+
5458
if let ExprKind::Binary(op1, ..) = expr.kind
5559
&& op1.node == BinOpKind::Rem
5660
&& let Some((const1, expr1)) = check_for_positive_int_constant(cx, expr, false)

clippy_utils/src/msrvs.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ macro_rules! msrv_aliases {
1313
// names may refer to stabilized feature flags or library items
1414
msrv_aliases! {
1515
1,53,0 { OR_PATTERNS, MANUAL_BITS }
16-
1,52,0 { STR_SPLIT_ONCE }
16+
1,52,0 { STR_SPLIT_ONCE, REM_EUCLID_CONST }
1717
1,51,0 { BORROW_AS_PTR, UNSIGNED_ABS }
1818
1,50,0 { BOOL_THEN }
1919
1,47,0 { TAU }

tests/ui/manual_rem_euclid.fixed

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,8 @@ fn main() {
3131
pub fn rem_euclid_4(num: i32) -> i32 {
3232
num.rem_euclid(4)
3333
}
34+
35+
// Constant version came later, should still lint
36+
pub const fn const_rem_euclid_4(num: i32) -> i32 {
37+
num.rem_euclid(4)
38+
}

tests/ui/manual_rem_euclid.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,8 @@ fn main() {
3131
pub fn rem_euclid_4(num: i32) -> i32 {
3232
((num % 4) + 4) % 4
3333
}
34+
35+
// Constant version came later, should still lint
36+
pub const fn const_rem_euclid_4(num: i32) -> i32 {
37+
((num % 4) + 4) % 4
38+
}

tests/ui/manual_rem_euclid.stderr

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,11 @@ error: manual `rem_euclid` implementation
3636
LL | ((num % 4) + 4) % 4
3737
| ^^^^^^^^^^^^^^^^^^^ help: consider using: `num.rem_euclid(4)`
3838

39-
error: aborting due to 6 previous errors
39+
error: manual `rem_euclid` implementation
40+
--> $DIR/manual_rem_euclid.rs:37:5
41+
|
42+
LL | ((num % 4) + 4) % 4
43+
| ^^^^^^^^^^^^^^^^^^^ help: consider using: `num.rem_euclid(4)`
44+
45+
error: aborting due to 7 previous errors
4046

0 commit comments

Comments
 (0)