From 55fdd1e78c73b67adce581fbf09aa0a1b6f07c61 Mon Sep 17 00:00:00 2001 From: naosense Date: Tue, 13 Dec 2022 10:50:49 +0800 Subject: [PATCH] replace reference with value --- clippy_lints/src/manual_is_ascii_check.rs | 8 ++++++-- tests/ui/manual_is_ascii_check.fixed | 12 ++++++------ tests/ui/manual_is_ascii_check.stderr | 12 ++++++------ 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/clippy_lints/src/manual_is_ascii_check.rs b/clippy_lints/src/manual_is_ascii_check.rs index eaaaf0c6581..b1578627b50 100644 --- a/clippy_lints/src/manual_is_ascii_check.rs +++ b/clippy_lints/src/manual_is_ascii_check.rs @@ -3,7 +3,7 @@ use clippy_utils::{diagnostics::span_lint_and_sugg, higher, in_constant, macros: use rustc_ast::ast::RangeLimits; use rustc_ast::LitKind::{Byte, Char}; use rustc_errors::Applicability; -use rustc_hir::{Expr, ExprKind, PatKind, RangeEnd}; +use rustc_hir::{BorrowKind, Expr, ExprKind, PatKind, RangeEnd}; use rustc_lint::{LateContext, LateLintPass}; use rustc_session::{declare_tool_lint, impl_lint_pass}; use rustc_span::{def_id::DefId, sym, Span}; @@ -86,8 +86,12 @@ impl<'tcx> LateLintPass<'tcx> for ManualIsAsciiCheck { && path.ident.name == sym!(contains) && let Some(higher::Range { start: Some(start), end: Some(end), limits: RangeLimits::Closed }) = higher::Range::hir(receiver) { - let range = check_range(start, end); + let range = check_range(start, end); + if let ExprKind::AddrOf(BorrowKind::Ref, _, e) = arg.kind { + check_is_ascii(cx, expr.span, e, &range); + } else { check_is_ascii(cx, expr.span, arg, &range); + } } } diff --git a/tests/ui/manual_is_ascii_check.fixed b/tests/ui/manual_is_ascii_check.fixed index b2f45aba59a..b5e8b9c19cb 100644 --- a/tests/ui/manual_is_ascii_check.fixed +++ b/tests/ui/manual_is_ascii_check.fixed @@ -16,13 +16,13 @@ fn main() { assert!(matches!('x', 'A'..='Z' | 'a'..='z' | '_')); - assert!(&b'0'.is_ascii_digit()); - assert!(&b'a'.is_ascii_lowercase()); - assert!(&b'A'.is_ascii_uppercase()); + assert!(b'0'.is_ascii_digit()); + assert!(b'a'.is_ascii_lowercase()); + assert!(b'A'.is_ascii_uppercase()); - assert!(&'0'.is_ascii_digit()); - assert!(&'a'.is_ascii_lowercase()); - assert!(&'A'.is_ascii_uppercase()); + assert!('0'.is_ascii_digit()); + assert!('a'.is_ascii_lowercase()); + assert!('A'.is_ascii_uppercase()); } #[clippy::msrv = "1.23"] diff --git a/tests/ui/manual_is_ascii_check.stderr b/tests/ui/manual_is_ascii_check.stderr index 797952a3aba..ae747d33b58 100644 --- a/tests/ui/manual_is_ascii_check.stderr +++ b/tests/ui/manual_is_ascii_check.stderr @@ -46,37 +46,37 @@ error: manual check for common ascii range --> $DIR/manual_is_ascii_check.rs:19:13 | LL | assert!((b'0'..=b'9').contains(&b'0')); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&b'0'.is_ascii_digit()` + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `b'0'.is_ascii_digit()` error: manual check for common ascii range --> $DIR/manual_is_ascii_check.rs:20:13 | LL | assert!((b'a'..=b'z').contains(&b'a')); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&b'a'.is_ascii_lowercase()` + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `b'a'.is_ascii_lowercase()` error: manual check for common ascii range --> $DIR/manual_is_ascii_check.rs:21:13 | LL | assert!((b'A'..=b'Z').contains(&b'A')); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&b'A'.is_ascii_uppercase()` + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `b'A'.is_ascii_uppercase()` error: manual check for common ascii range --> $DIR/manual_is_ascii_check.rs:23:13 | LL | assert!(('0'..='9').contains(&'0')); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&'0'.is_ascii_digit()` + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `'0'.is_ascii_digit()` error: manual check for common ascii range --> $DIR/manual_is_ascii_check.rs:24:13 | LL | assert!(('a'..='z').contains(&'a')); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&'a'.is_ascii_lowercase()` + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `'a'.is_ascii_lowercase()` error: manual check for common ascii range --> $DIR/manual_is_ascii_check.rs:25:13 | LL | assert!(('A'..='Z').contains(&'A')); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&'A'.is_ascii_uppercase()` + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `'A'.is_ascii_uppercase()` error: manual check for common ascii range --> $DIR/manual_is_ascii_check.rs:37:13