From c22455cb9efe52d42d38922bcc309d43c50cab70 Mon Sep 17 00:00:00 2001 From: Lukas Stevens Date: Sun, 26 Nov 2017 18:36:12 +0100 Subject: [PATCH 1/2] Check for word beginning in stutter lint --- clippy_lints/src/enum_variants.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/clippy_lints/src/enum_variants.rs b/clippy_lints/src/enum_variants.rs index ea7a378de22..b3dd275f668 100644 --- a/clippy_lints/src/enum_variants.rs +++ b/clippy_lints/src/enum_variants.rs @@ -264,8 +264,17 @@ impl EarlyLintPass for EnumVariantNames { let matching = partial_match(mod_camel, &item_camel); let rmatching = partial_rmatch(mod_camel, &item_camel); let nchars = mod_camel.chars().count(); + + let is_word_beginning = |c: char| { + c == '_' || c.is_uppercase() || c.is_numeric() + }; + if matching == nchars { - span_lint(cx, STUTTER, item.span, "item name starts with its containing module's name"); + match item_camel.chars().nth(nchars) { + Some(c) if is_word_beginning(c) => + span_lint(cx, STUTTER, item.span, "item name starts with its containing module's name"), + _ => () + } } if rmatching == nchars { span_lint(cx, STUTTER, item.span, "item name ends with its containing module's name"); From d55d4e5144602b11544ea5d8047d45d9cf02f98b Mon Sep 17 00:00:00 2001 From: Lukas Stevens Date: Sun, 26 Nov 2017 18:57:34 +0100 Subject: [PATCH 2/2] Update ui tests --- tests/ui/stutter.rs | 4 ++++ tests/ui/stutter.stderr | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/tests/ui/stutter.rs b/tests/ui/stutter.rs index 24612fd3b3e..761339b0a8e 100644 --- a/tests/ui/stutter.rs +++ b/tests/ui/stutter.rs @@ -9,6 +9,10 @@ mod foo { pub fn bar_foo() {} pub struct FooCake {} pub enum CakeFoo {} + pub struct Foo7Bar; + + // Should not warn + pub struct Foobar; } fn main() {} diff --git a/tests/ui/stutter.stderr b/tests/ui/stutter.stderr index 38cbcaa32f5..e6465a2bce9 100644 --- a/tests/ui/stutter.stderr +++ b/tests/ui/stutter.stderr @@ -24,3 +24,9 @@ error: item name ends with its containing module's name 11 | pub enum CakeFoo {} | ^^^^^^^^^^^^^^^^^^^ +error: item name starts with its containing module's name + --> $DIR/stutter.rs:12:5 + | +12 | pub struct Foo7Bar; + | ^^^^^^^^^^^^^^^^^^^ +