Skip to content

Spruce up the diagnostics of some early lints #125913

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion compiler/rustc_expand/messages.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ expand_unsupported_key_value =
key-value macro attributes are not supported

expand_var_still_repeating =
variable '{$ident}' is still repeating at this depth
variable `{$ident}` is still repeating at this depth

expand_wrong_fragment_kind =
non-{$kind} macro in {$kind} position: {$name}
12 changes: 7 additions & 5 deletions compiler/rustc_lint/messages.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -445,7 +445,8 @@ lint_macro_is_private = macro `{$ident}` is private
lint_macro_rule_never_used = rule #{$n} of macro `{$name}` is never used

lint_macro_use_deprecated =
deprecated `#[macro_use]` attribute used to import macros should be replaced at use sites with a `use` item to import the macro instead
applying the `#[macro_use]` attribute to an `extern crate` item is deprecated
.help = remove it and import macros at use sites with a `use` item instead

lint_malformed_attribute = malformed lint attribute input

Expand All @@ -456,7 +457,7 @@ lint_map_unit_fn = `Iterator::map` call that discard the iterator's values
.map_label = after this call to map, the resulting iterator is `impl Iterator<Item = ()>`, which means the only information carried by the iterator is the number of items
.suggestion = you might have meant to use `Iterator::for_each`

lint_metavariable_still_repeating = variable '{$name}' is still repeating at this depth
lint_metavariable_still_repeating = variable `{$name}` is still repeating at this depth

lint_metavariable_wrong_operator = meta-variable repeats with different Kleene operator

Expand Down Expand Up @@ -632,8 +633,8 @@ lint_pattern_in_bodiless = patterns aren't allowed in functions without bodies
lint_pattern_in_foreign = patterns aren't allowed in foreign function declarations
.label = pattern not allowed in foreign function

lint_private_extern_crate_reexport =
extern crate `{$ident}` is private, and cannot be re-exported, consider declaring with `pub`
lint_private_extern_crate_reexport = extern crate `{$ident}` is private and cannot be re-exported
.suggestion = consider making the `extern crate` item publicly accessible

lint_proc_macro_back_compat = using an old version of `{$crate_name}`
.note = older versions of the `{$crate_name}` crate will stop compiling in future versions of Rust; please update to `{$crate_name}` v{$fixed_version}, or switch to one of the `{$crate_name}` alternatives
Expand Down Expand Up @@ -847,7 +848,8 @@ lint_unused_coroutine =
}{$post} that must be used
.note = coroutines are lazy and do nothing unless resumed

lint_unused_crate_dependency = external crate `{$extern_crate}` unused in `{$local_crate}`: remove the dependency or add `use {$extern_crate} as _;`
lint_unused_crate_dependency = extern crate `{$extern_crate}` is unused in crate `{$local_crate}`
.help = remove the dependency or add `use {$extern_crate} as _;` to the crate root

lint_unused_def = unused {$pre}`{$def}`{$post} that must be used
.suggestion = use `let _ = ...` to ignore the resulting value
Expand Down
5 changes: 3 additions & 2 deletions compiler/rustc_lint/src/context/diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -340,8 +340,9 @@ pub(super) fn decorate_lint(sess: &Session, diagnostic: BuiltinLintDiag, diag: &
lints::MacroUseDeprecated.decorate_lint(diag);
}
BuiltinLintDiag::UnusedMacroUse => lints::UnusedMacroUse.decorate_lint(diag),
BuiltinLintDiag::PrivateExternCrateReexport(ident) => {
lints::PrivateExternCrateReexport { ident }.decorate_lint(diag);
BuiltinLintDiag::PrivateExternCrateReexport { source: ident, extern_crate_span } => {
lints::PrivateExternCrateReexport { ident, sugg: extern_crate_span.shrink_to_lo() }
.decorate_lint(diag);
}
BuiltinLintDiag::UnusedLabel => lints::UnusedLabel.decorate_lint(diag),
BuiltinLintDiag::MacroIsPrivate(ident) => {
Expand Down
4 changes: 4 additions & 0 deletions compiler/rustc_lint/src/lints.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2313,6 +2313,7 @@ pub mod unexpected_cfg_value {

#[derive(LintDiagnostic)]
#[diag(lint_macro_use_deprecated)]
#[help]
pub struct MacroUseDeprecated;

#[derive(LintDiagnostic)]
Expand All @@ -2323,6 +2324,8 @@ pub struct UnusedMacroUse;
#[diag(lint_private_extern_crate_reexport, code = E0365)]
pub struct PrivateExternCrateReexport {
pub ident: Ident,
#[suggestion(code = "pub ", style = "verbose", applicability = "maybe-incorrect")]
pub sugg: Span,
}

#[derive(LintDiagnostic)]
Expand Down Expand Up @@ -2416,6 +2419,7 @@ pub struct UnknownMacroVariable {

#[derive(LintDiagnostic)]
#[diag(lint_unused_crate_dependency)]
#[help]
pub struct UnusedCrateDependency {
pub extern_crate: Symbol,
pub local_crate: Symbol,
Expand Down
9 changes: 5 additions & 4 deletions compiler/rustc_lint_defs/src/builtin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -512,8 +512,9 @@ declare_lint! {
/// This will produce:
///
/// ```text
/// error: external crate `regex` unused in `lint_example`: remove the dependency or add `use regex as _;`
/// error: extern crate `regex` is unused in crate `lint_example`
/// |
/// = help: remove the dependency or add `use regex as _;` to the crate root
/// note: the lint level is defined here
/// --> src/lib.rs:1:9
/// |
Expand Down Expand Up @@ -2202,8 +2203,7 @@ declare_lint! {
}

declare_lint! {
/// The `macro_use_extern_crate` lint detects the use of the
/// [`macro_use` attribute].
/// The `macro_use_extern_crate` lint detects the use of the [`macro_use` attribute].
///
/// ### Example
///
Expand All @@ -2221,12 +2221,13 @@ declare_lint! {
/// This will produce:
///
/// ```text
/// error: deprecated `#[macro_use]` attribute used to import macros should be replaced at use sites with a `use` item to import the macro instead
/// error: applying the `#[macro_use]` attribute to an `extern crate` item is deprecated
/// --> src/main.rs:3:1
/// |
/// 3 | #[macro_use]
/// | ^^^^^^^^^^^^
/// |
/// = help: remove it and import macros at use sites with a `use` item instead
/// note: the lint level is defined here
/// --> src/main.rs:1:9
/// |
Expand Down
5 changes: 4 additions & 1 deletion compiler/rustc_lint_defs/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -707,7 +707,10 @@ pub enum BuiltinLintDiag {
},
MacroUseDeprecated,
UnusedMacroUse,
PrivateExternCrateReexport(Ident),
PrivateExternCrateReexport {
source: Ident,
extern_crate_span: Span,
},
UnusedLabel,
MacroIsPrivate(Ident),
UnusedMacroDefinition(Symbol),
Expand Down
24 changes: 16 additions & 8 deletions compiler/rustc_resolve/src/imports.rs
Original file line number Diff line number Diff line change
Expand Up @@ -259,13 +259,18 @@ struct UnresolvedImportError {

// Reexports of the form `pub use foo as bar;` where `foo` is `extern crate foo;`
// are permitted for backward-compatibility under a deprecation lint.
fn pub_use_of_private_extern_crate_hack(import: Import<'_>, binding: NameBinding<'_>) -> bool {
fn pub_use_of_private_extern_crate_hack(
import: Import<'_>,
binding: NameBinding<'_>,
) -> Option<NodeId> {
match (&import.kind, &binding.kind) {
(ImportKind::Single { .. }, NameBindingKind::Import { import: binding_import, .. }) => {
matches!(binding_import.kind, ImportKind::ExternCrate { .. })
&& import.expect_vis().is_public()
(ImportKind::Single { .. }, NameBindingKind::Import { import: binding_import, .. })
if let ImportKind::ExternCrate { id, .. } = binding_import.kind
&& import.expect_vis().is_public() =>
{
Some(id)
}
_ => false,
_ => None,
}
}

Expand All @@ -275,7 +280,7 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
pub(crate) fn import(&self, binding: NameBinding<'a>, import: Import<'a>) -> NameBinding<'a> {
let import_vis = import.expect_vis().to_def_id();
let vis = if binding.vis.is_at_least(import_vis, self.tcx)
|| pub_use_of_private_extern_crate_hack(import, binding)
|| pub_use_of_private_extern_crate_hack(import, binding).is_some()
{
import_vis
} else {
Expand Down Expand Up @@ -1253,12 +1258,15 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
// All namespaces must be re-exported with extra visibility for an error to occur.
if !any_successful_reexport {
let (ns, binding) = reexport_error.unwrap();
if pub_use_of_private_extern_crate_hack(import, binding) {
if let Some(extern_crate_id) = pub_use_of_private_extern_crate_hack(import, binding) {
self.lint_buffer.buffer_lint(
PUB_USE_OF_PRIVATE_EXTERN_CRATE,
import_id,
import.span,
BuiltinLintDiag::PrivateExternCrateReexport(ident),
BuiltinLintDiag::PrivateExternCrateReexport {
source: ident,
extern_crate_span: self.tcx.source_span(self.local_def_id(extern_crate_id)),
},
);
} else {
if ns == TypeNS {
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/extern-flag/no-nounused.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
//@ compile-flags: -Zunstable-options -Dunused-crate-dependencies
//@ edition:2018

fn main() { //~ ERROR external crate `somedep` unused in `no_nounused`
fn main() { //~ ERROR extern crate `somedep` is unused in crate `no_nounused`
}
3 changes: 2 additions & 1 deletion tests/ui/extern-flag/no-nounused.stderr
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
error: external crate `somedep` unused in `no_nounused`: remove the dependency or add `use somedep as _;`
error: extern crate `somedep` is unused in crate `no_nounused`
--> $DIR/no-nounused.rs:5:1
|
LL | fn main() {
| ^
|
= help: remove the dependency or add `use somedep as _;` to the crate root
= note: requested on the command line with `-D unused-crate-dependencies`

error: aborting due to 1 previous error
Expand Down
6 changes: 3 additions & 3 deletions tests/ui/macros/issue-61053-missing-repetition.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
macro_rules! foo {
() => {};
($( $i:ident = $($j:ident),+ );*) => { $( $i = $j; )* };
//~^ ERROR variable 'j' is still repeating
//~^ ERROR variable `j` is still repeating
}

macro_rules! bar {
Expand All @@ -12,12 +12,12 @@ macro_rules! bar {
macro_rules! nested {
() => {};
($( $i:ident = $($j:ident),+ );*) => { $( $i = $j; )* };
//~^ ERROR variable 'j' is still repeating
//~^ ERROR variable `j` is still repeating
}
};
( $( $i:ident = $($j:ident),+ );* ) => {
$(macro_rules! $i {
() => { $j }; //~ ERROR variable 'j' is still repeating
() => { $j }; //~ ERROR variable `j` is still repeating
})*
};
}
Expand Down
6 changes: 3 additions & 3 deletions tests/ui/macros/issue-61053-missing-repetition.stderr
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
error: variable 'j' is still repeating at this depth
error: variable `j` is still repeating at this depth
--> $DIR/issue-61053-missing-repetition.rs:5:52
|
LL | ($( $i:ident = $($j:ident),+ );*) => { $( $i = $j; )* };
Expand All @@ -12,15 +12,15 @@ note: the lint level is defined here
LL | #![deny(meta_variable_misuse)]
| ^^^^^^^^^^^^^^^^^^^^

error: variable 'j' is still repeating at this depth
error: variable `j` is still repeating at this depth
--> $DIR/issue-61053-missing-repetition.rs:14:60
|
LL | ($( $i:ident = $($j:ident),+ );*) => { $( $i = $j; )* };
| - ^^
| |
| expected repetition

error: variable 'j' is still repeating at this depth
error: variable `j` is still repeating at this depth
--> $DIR/issue-61053-missing-repetition.rs:20:21
|
LL | ( $( $i:ident = $($j:ident),+ );* ) => {
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/macros/rfc-3086-metavar-expr/syntax-errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ macro_rules! no_curly__no_rhs_dollar__no_round {
#[rustfmt::skip] // autoformatters can break a few of the error traces
macro_rules! no_curly__rhs_dollar__round {
( $( $i:ident ),* ) => { count($i) };
//~^ ERROR variable 'i' is still repeating at this depth
//~^ ERROR variable `i` is still repeating at this depth
}

#[rustfmt::skip] // autoformatters can break a few of the error traces
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/macros/rfc-3086-metavar-expr/syntax-errors.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ error: `count` can not be placed inside the inner-most repetition
LL | ( $i:ident ) => { ${ count($i) } };
| ^^^^^^^^^^^^^

error: variable 'i' is still repeating at this depth
error: variable `i` is still repeating at this depth
--> $DIR/syntax-errors.rs:37:36
|
LL | ( $( $i:ident ),* ) => { count($i) };
Expand Down
4 changes: 2 additions & 2 deletions tests/ui/parser/macro/macro-repeat.stderr
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
error: variable 'v' is still repeating at this depth
error: variable `v` is still repeating at this depth
--> $DIR/macro-repeat.rs:3:9
|
LL | $v
| ^^

error: variable 'v' is still repeating at this depth
error: variable `v` is still repeating at this depth
--> $DIR/macro-repeat.rs:3:9
|
LL | $v
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/pub/pub-reexport-priv-extern-crate.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
extern crate core;
pub use core as reexported_core; //~ ERROR `core` is private, and cannot be re-exported
pub use core as reexported_core; //~ ERROR `core` is private and cannot be re-exported
//~^ WARN this was previously accepted

mod foo1 {
Expand Down
6 changes: 5 additions & 1 deletion tests/ui/pub/pub-reexport-priv-extern-crate.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ note: the crate import `core` is defined here
LL | extern crate core;
| ^^^^^^^^^^^^^^^^^^

error[E0365]: extern crate `core` is private, and cannot be re-exported, consider declaring with `pub`
error[E0365]: extern crate `core` is private and cannot be re-exported
--> $DIR/pub-reexport-priv-extern-crate.rs:2:9
|
LL | pub use core as reexported_core;
Expand All @@ -31,6 +31,10 @@ LL | pub use core as reexported_core;
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #34537 <https://github.com/rust-lang/rust/issues/34537>
= note: `#[deny(pub_use_of_private_extern_crate)]` on by default
help: consider making the `extern crate` item publicly accessible
|
LL | pub extern crate core;
| +++

error: aborting due to 3 previous errors

Expand Down
2 changes: 1 addition & 1 deletion tests/ui/rust-2018/macro-use-warned-against.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

#![warn(macro_use_extern_crate, unused)]

#[macro_use] //~ WARN should be replaced at use sites with a `use` item
#[macro_use] //~ WARN applying the `#[macro_use]` attribute to an `extern crate` item is deprecated
extern crate macro_use_warned_against;
#[macro_use] //~ WARN unused `#[macro_use]`
extern crate macro_use_warned_against2;
Expand Down
3 changes: 2 additions & 1 deletion tests/ui/rust-2018/macro-use-warned-against.stderr
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
warning: deprecated `#[macro_use]` attribute used to import macros should be replaced at use sites with a `use` item to import the macro instead
warning: applying the `#[macro_use]` attribute to an `extern crate` item is deprecated
--> $DIR/macro-use-warned-against.rs:7:1
|
LL | #[macro_use]
| ^^^^^^^^^^^^
|
= help: remove it and import macros at use sites with a `use` item instead
note: the lint level is defined here
--> $DIR/macro-use-warned-against.rs:5:9
|
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/unused-crate-deps/deny-attr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
//@ aux-crate:bar=bar.rs

#![deny(unused_crate_dependencies)]
//~^ ERROR external crate `bar` unused in
//~^ ERROR extern crate `bar` is unused in

fn main() {}
3 changes: 2 additions & 1 deletion tests/ui/unused-crate-deps/deny-attr.stderr
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
error: external crate `bar` unused in `deny_attr`: remove the dependency or add `use bar as _;`
error: extern crate `bar` is unused in crate `deny_attr`
--> $DIR/deny-attr.rs:6:1
|
LL | #![deny(unused_crate_dependencies)]
| ^
|
= help: remove the dependency or add `use bar as _;` to the crate root
note: the lint level is defined here
--> $DIR/deny-attr.rs:6:9
|
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/unused-crate-deps/deny-cmdline.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
//@ aux-crate:bar=bar.rs

fn main() {}
//~^ ERROR external crate `bar` unused in
//~^ ERROR extern crate `bar` is unused in
3 changes: 2 additions & 1 deletion tests/ui/unused-crate-deps/deny-cmdline.stderr
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
error: external crate `bar` unused in `deny_cmdline`: remove the dependency or add `use bar as _;`
error: extern crate `bar` is unused in crate `deny_cmdline`
--> $DIR/deny-cmdline.rs:7:1
|
LL | fn main() {}
| ^
|
= help: remove the dependency or add `use bar as _;` to the crate root
= note: requested on the command line with `-D unused-crate-dependencies`

error: aborting due to 1 previous error
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/unused-crate-deps/libfib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
//@ compile-flags:--crate-type lib -Wunused-crate-dependencies

pub fn fib(n: u32) -> Vec<u32> {
//~^ WARNING external crate `bar` unused in
//~^ WARNING extern crate `bar` is unused in
let mut prev = 0;
let mut cur = 1;
let mut v = vec![];
Expand Down
3 changes: 2 additions & 1 deletion tests/ui/unused-crate-deps/libfib.stderr
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
warning: external crate `bar` unused in `libfib`: remove the dependency or add `use bar as _;`
warning: extern crate `bar` is unused in crate `libfib`
--> $DIR/libfib.rs:7:1
|
LL | pub fn fib(n: u32) -> Vec<u32> {
| ^
|
= help: remove the dependency or add `use bar as _;` to the crate root
= note: requested on the command line with `-W unused-crate-dependencies`

warning: 1 warning emitted
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/unused-crate-deps/unused-aliases.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
//@ aux-crate:barbar=bar.rs

#![warn(unused_crate_dependencies)]
//~^ WARNING external crate `barbar` unused in
//~^ WARNING extern crate `barbar` is unused in

use bar as _;

Expand Down
Loading
Loading