Auto merge of #11898 - clubby789:upper_case_acronyms_variants, r=Manishearth

Allow `allow`ing `upper_case_acronyms` on enum variants

Fixes #7708

changelog: [`upper_case_acronyms`]: allow `allow`ing on enum variants
This commit is contained in:
bors 2023-12-01 05:29:52 +00:00
commit d166fab544
4 changed files with 41 additions and 14 deletions

View file

@ -1,7 +1,7 @@
use clippy_utils::diagnostics::span_lint_and_sugg; use clippy_utils::diagnostics::span_lint_hir_and_then;
use itertools::Itertools; use itertools::Itertools;
use rustc_errors::Applicability; use rustc_errors::Applicability;
use rustc_hir::{Item, ItemKind}; use rustc_hir::{HirId, Item, ItemKind};
use rustc_lint::{LateContext, LateLintPass, LintContext}; use rustc_lint::{LateContext, LateLintPass, LintContext};
use rustc_middle::lint::in_external_macro; use rustc_middle::lint::in_external_macro;
use rustc_session::impl_lint_pass; use rustc_session::impl_lint_pass;
@ -77,7 +77,7 @@ fn correct_ident(ident: &str) -> String {
ident ident
} }
fn check_ident(cx: &LateContext<'_>, ident: &Ident, be_aggressive: bool) { fn check_ident(cx: &LateContext<'_>, ident: &Ident, hir_id: HirId, be_aggressive: bool) {
let span = ident.span; let span = ident.span;
let ident = ident.as_str(); let ident = ident.as_str();
let corrected = correct_ident(ident); let corrected = correct_ident(ident);
@ -89,15 +89,21 @@ fn check_ident(cx: &LateContext<'_>, ident: &Ident, be_aggressive: bool) {
// upper-case-acronyms-aggressive config option enabled // upper-case-acronyms-aggressive config option enabled
|| (be_aggressive && ident != corrected) || (be_aggressive && ident != corrected)
{ {
span_lint_and_sugg( span_lint_hir_and_then(
cx, cx,
UPPER_CASE_ACRONYMS, UPPER_CASE_ACRONYMS,
hir_id,
span, span,
&format!("name `{ident}` contains a capitalized acronym"), &format!("name `{ident}` contains a capitalized acronym"),
|diag| {
diag.span_suggestion(
span,
"consider making the acronym lowercase, except the initial letter", "consider making the acronym lowercase, except the initial letter",
corrected, corrected,
Applicability::MaybeIncorrect, Applicability::MaybeIncorrect,
); );
},
);
} }
} }
@ -111,16 +117,15 @@ impl LateLintPass<'_> for UpperCaseAcronyms {
} }
match it.kind { match it.kind {
ItemKind::TyAlias(..) | ItemKind::Struct(..) | ItemKind::Trait(..) => { ItemKind::TyAlias(..) | ItemKind::Struct(..) | ItemKind::Trait(..) => {
check_ident(cx, &it.ident, self.upper_case_acronyms_aggressive); check_ident(cx, &it.ident, it.hir_id(), self.upper_case_acronyms_aggressive);
}, },
ItemKind::Enum(ref enumdef, _) => { ItemKind::Enum(ref enumdef, _) => {
check_ident(cx, &it.ident, self.upper_case_acronyms_aggressive); check_ident(cx, &it.ident, it.hir_id(), self.upper_case_acronyms_aggressive);
// check enum variants separately because again we only want to lint on private enums and // check enum variants separately because again we only want to lint on private enums and
// the fn check_variant does not know about the vis of the enum of its variants // the fn check_variant does not know about the vis of the enum of its variants
enumdef enumdef.variants.iter().for_each(|variant| {
.variants check_ident(cx, &variant.ident, variant.hir_id, self.upper_case_acronyms_aggressive);
.iter() });
.for_each(|variant| check_ident(cx, &variant.ident, self.upper_case_acronyms_aggressive));
}, },
_ => {}, _ => {},
} }

View file

@ -59,4 +59,12 @@ enum Yaml {
Str(String), Str(String),
} }
// test for issue #7708
enum AllowOnField {
Disallow,
//~^ ERROR: name `DISALLOW` contains a capitalized acronym
#[allow(clippy::upper_case_acronyms)]
ALLOW,
}
fn main() {} fn main() {}

View file

@ -59,4 +59,12 @@ enum YAML {
Str(String), Str(String),
} }
// test for issue #7708
enum AllowOnField {
DISALLOW,
//~^ ERROR: name `DISALLOW` contains a capitalized acronym
#[allow(clippy::upper_case_acronyms)]
ALLOW,
}
fn main() {} fn main() {}

View file

@ -67,5 +67,11 @@ error: name `YAML` contains a capitalized acronym
LL | enum YAML { LL | enum YAML {
| ^^^^ help: consider making the acronym lowercase, except the initial letter: `Yaml` | ^^^^ help: consider making the acronym lowercase, except the initial letter: `Yaml`
error: aborting due to 11 previous errors error: name `DISALLOW` contains a capitalized acronym
--> $DIR/upper_case_acronyms.rs:64:5
|
LL | DISALLOW,
| ^^^^^^^^ help: consider making the acronym lowercase, except the initial letter: `Disallow`
error: aborting due to 12 previous errors