Skip to content

Commit

Permalink
Don't emit enum_variant_names if remainder starts with a numeric
Browse files Browse the repository at this point in the history
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 rust-lang#739
  • Loading branch information
phansch committed Aug 6, 2019
1 parent ea26a95 commit 0a988c6
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
4 changes: 4 additions & 0 deletions clippy_lints/src/enum_variants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}
Expand All @@ -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]);
Expand Down
15 changes: 14 additions & 1 deletion tests/ui/enum_variants.rs
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down Expand Up @@ -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() {}

0 comments on commit 0a988c6

Please sign in to comment.