mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-23 13:13:34 +00:00
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:
commit
d166fab544
4 changed files with 41 additions and 14 deletions
|
@ -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));
|
|
||||||
},
|
},
|
||||||
_ => {},
|
_ => {},
|
||||||
}
|
}
|
||||||
|
|
|
@ -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() {}
|
||||||
|
|
|
@ -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() {}
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue