From 0a988c663080f5c59ccd5a1d1f4e7903495871fd Mon Sep 17 00:00:00 2001 From: Philipp Hansch Date: Tue, 6 Aug 2019 20:45:36 +0200 Subject: [PATCH] Don't emit enum_variant_names if remainder starts with a numeric As [per the reference](https://doc.rust-lang.org/reference/identifiers.html), identifiers must start with a letter. So we don't suggest a better variant naming in these cases. Fixes #739 --- clippy_lints/src/enum_variants.rs | 4 ++++ tests/ui/enum_variants.rs | 15 ++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/clippy_lints/src/enum_variants.rs b/clippy_lints/src/enum_variants.rs index 782d80a7b64..1cc3bda3ba3 100644 --- a/clippy_lints/src/enum_variants.rs +++ b/clippy_lints/src/enum_variants.rs @@ -160,6 +160,7 @@ fn check_variant( let name = var2str(var); if partial_match(item_name, &name) == item_name_chars && name.chars().nth(item_name_chars).map_or(false, |c| !c.is_lowercase()) + && name.chars().nth(item_name_chars + 1).map_or(false, |c| !c.is_numeric()) { span_lint(cx, lint, var.span, "Variant name starts with the enum's name"); } @@ -178,6 +179,9 @@ fn check_variant( let pre_camel = camel_case::until(pre); pre = &pre[..pre_camel]; while let Some((next, last)) = name[pre.len()..].chars().zip(pre.chars().rev()).next() { + if next.is_numeric() { + return; + } if next.is_lowercase() { let last = pre.len() - last.len_utf8(); let last_camel = camel_case::until(&pre[..last]); diff --git a/tests/ui/enum_variants.rs b/tests/ui/enum_variants.rs index f3bbd3d9626..01774a2a984 100644 --- a/tests/ui/enum_variants.rs +++ b/tests/ui/enum_variants.rs @@ -1,5 +1,5 @@ #![feature(non_ascii_idents)] -#![warn(clippy::all, clippy::pub_enum_variant_names)] +#![warn(clippy::enum_variant_names, clippy::pub_enum_variant_names)] #![allow(non_camel_case_types)] enum FakeCallType { @@ -120,4 +120,17 @@ enum N { Float, } +// should not lint +enum Peek { + Peek1, + Peek2, + Peek3, +} + +// should not lint +pub enum NetworkLayer { + Layer2, + Layer3, +} + fn main() {} -- 2.44.0