about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAbderahmane Bouziane <bobmatt911@gmail.com>2025-06-21 23:18:46 -0400
committerAbderahmane Bouziane <bobmatt911@gmail.com>2025-08-16 12:36:50 -0400
commite41fb7ca529d64d3dda9f7870a82ae2a49b130e9 (patch)
treebcf2731bb62d8e4335530717cc77f4e22321393e
parent76118ec84ee5c1e865d10cd5d99c02878dd56ade (diff)
downloadrust-e41fb7ca529d64d3dda9f7870a82ae2a49b130e9.tar.gz
rust-e41fb7ca529d64d3dda9f7870a82ae2a49b130e9.zip
similar_names stop linting for 3-char names
-rw-r--r--clippy_lints/src/non_expressive_names.rs5
-rw-r--r--clippy_utils/src/ast_utils/mod.rs2
-rw-r--r--tests/ui/similar_names.rs4
-rw-r--r--tests/ui/similar_names.stderr4
4 files changed, 12 insertions, 3 deletions
diff --git a/clippy_lints/src/non_expressive_names.rs b/clippy_lints/src/non_expressive_names.rs
index c5873589b26..1961ac1516d 100644
--- a/clippy_lints/src/non_expressive_names.rs
+++ b/clippy_lints/src/non_expressive_names.rs
@@ -248,6 +248,11 @@ impl SimilarNamesNameVisitor<'_, '_, '_> {
                 continue;
             }
 
+            // Skip similarity check if both names are exactly 3 characters
+            if count == 3 && existing_name.len == 3 {
+                continue;
+            }
+
             let dissimilar = match existing_name.len.cmp(&count) {
                 Ordering::Greater => existing_name.len - count != 1 || levenstein_not_1(interned_name, existing_str),
                 Ordering::Less => count - existing_name.len != 1 || levenstein_not_1(existing_str, interned_name),
diff --git a/clippy_utils/src/ast_utils/mod.rs b/clippy_utils/src/ast_utils/mod.rs
index e65914b9b5e..a0246d37343 100644
--- a/clippy_utils/src/ast_utils/mod.rs
+++ b/clippy_utils/src/ast_utils/mod.rs
@@ -325,7 +325,7 @@ pub fn eq_item<K>(l: &Item<K>, r: &Item<K>, mut eq_kind: impl FnMut(&K, &K) -> b
     over(&l.attrs, &r.attrs, eq_attr) && eq_vis(&l.vis, &r.vis) && eq_kind(&l.kind, &r.kind)
 }
 
-#[expect(clippy::similar_names, clippy::too_many_lines)] // Just a big match statement
+#[expect(clippy::too_many_lines)] // Just a big match statement
 pub fn eq_item_kind(l: &ItemKind, r: &ItemKind) -> bool {
     use ItemKind::*;
     match (l, r) {
diff --git a/tests/ui/similar_names.rs b/tests/ui/similar_names.rs
index 69b6ab6220b..55a141209f0 100644
--- a/tests/ui/similar_names.rs
+++ b/tests/ui/similar_names.rs
@@ -89,6 +89,10 @@ fn main() {
 
     let iter: i32;
     let item: i32;
+
+    // 3 letter names are allowed to be similar
+    let kta: i32;
+    let ktv: i32;
 }
 
 fn foo() {
diff --git a/tests/ui/similar_names.stderr b/tests/ui/similar_names.stderr
index 8d722fb8b56..c226f73d4db 100644
--- a/tests/ui/similar_names.stderr
+++ b/tests/ui/similar_names.stderr
@@ -49,13 +49,13 @@ LL |     let parser: i32;
    |         ^^^^^^
 
 error: binding's name is too similar to existing binding
-  --> tests/ui/similar_names.rs:98:16
+  --> tests/ui/similar_names.rs:102:16
    |
 LL |         bpple: sprang,
    |                ^^^^^^
    |
 note: existing binding defined here
-  --> tests/ui/similar_names.rs:97:16
+  --> tests/ui/similar_names.rs:101:16
    |
 LL |         apple: spring,
    |                ^^^^^^