Skip to content

Commit

Permalink
Rollup merge of #110513 - Ezrashaw:fix-trait-const-name-lint, r=compi…
Browse files Browse the repository at this point in the history
…ler-errors

make `non_upper_case_globals` lint not report trait impls

We should not lint on trait `impl`s for `non_upper_case_globals`; the user doesn't have control over the name. This brings `non_upper_case_globals` into consistency with other `nonstandard_style` lints.
  • Loading branch information
matthiaskrgr committed Apr 19, 2023
2 parents fdd2f4b + 6256195 commit 78490ad
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 6 deletions.
15 changes: 9 additions & 6 deletions compiler/rustc_lint/src/nonstandard_style.rs
Original file line number Diff line number Diff line change
Expand Up @@ -494,6 +494,15 @@ impl<'tcx> LateLintPass<'tcx> for NonUpperCaseGlobals {
hir::ItemKind::Const(..) => {
NonUpperCaseGlobals::check_upper_case(cx, "constant", &it.ident);
}
// we only want to check inherent associated consts, trait consts
// are linted at def-site.
hir::ItemKind::Impl(hir::Impl { of_trait: None, items, .. }) => {
for it in *items {
if let hir::AssocItemKind::Const = it.kind {
NonUpperCaseGlobals::check_upper_case(cx, "associated constant", &it.ident);
}
}
}
_ => {}
}
}
Expand All @@ -504,12 +513,6 @@ impl<'tcx> LateLintPass<'tcx> for NonUpperCaseGlobals {
}
}

fn check_impl_item(&mut self, cx: &LateContext<'_>, ii: &hir::ImplItem<'_>) {
if let hir::ImplItemKind::Const(..) = ii.kind {
NonUpperCaseGlobals::check_upper_case(cx, "associated constant", &ii.ident);
}
}

fn check_pat(&mut self, cx: &LateContext<'_>, p: &hir::Pat<'_>) {
// Lint for constants that look like binding identifiers (#7526)
if let PatKind::Path(hir::QPath::Resolved(None, ref path)) = p.kind {
Expand Down
15 changes: 15 additions & 0 deletions tests/ui/lint/lint-non-uppercase-trait-assoc-const.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#![deny(non_upper_case_globals)]

trait Trait {
const item: usize;
//~^ ERROR associated constant `item` should have an upper case name [non_upper_case_globals]
}

struct Foo;

impl Trait for Foo {
const item: usize = 5;
// ^^^ there should be no error here (in the trait `impl`)
}

fn main() {}
14 changes: 14 additions & 0 deletions tests/ui/lint/lint-non-uppercase-trait-assoc-const.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
error: associated constant `item` should have an upper case name
--> $DIR/lint-non-uppercase-trait-assoc-const.rs:4:11
|
LL | const item: usize;
| ^^^^ help: convert the identifier to upper case: `ITEM`
|
note: the lint level is defined here
--> $DIR/lint-non-uppercase-trait-assoc-const.rs:1:9
|
LL | #![deny(non_upper_case_globals)]
| ^^^^^^^^^^^^^^^^^^^^^^

error: aborting due to previous error

0 comments on commit 78490ad

Please sign in to comment.