mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-27 18:57:42 +03:00
Remove more BuiltinLintDiag in rustc_resolve
This commit is contained in:
@@ -87,18 +87,6 @@ fn into_diag(self, dcx: DiagCtxtHandle<'a>, level: Level) -> Diag<'a, ()> {
|
||||
}
|
||||
.into_diag(dcx, level)
|
||||
}
|
||||
BuiltinLintDiag::RedundantImport(spans, ident) => {
|
||||
let subs = spans
|
||||
.into_iter()
|
||||
.map(|(span, is_imported)| match (span.is_dummy(), is_imported) {
|
||||
(false, true) => lints::RedundantImportSub::ImportedHere { span, ident },
|
||||
(false, false) => lints::RedundantImportSub::DefinedHere { span, ident },
|
||||
(true, true) => lints::RedundantImportSub::ImportedPrelude { span, ident },
|
||||
(true, false) => lints::RedundantImportSub::DefinedPrelude { span, ident },
|
||||
})
|
||||
.collect();
|
||||
lints::RedundantImport { subs, ident }.into_diag(dcx, level)
|
||||
}
|
||||
BuiltinLintDiag::SingleUseLifetime {
|
||||
param_span,
|
||||
use_span,
|
||||
@@ -164,49 +152,6 @@ fn into_diag(self, dcx: DiagCtxtHandle<'a>, level: Level) -> Diag<'a, ()> {
|
||||
}
|
||||
.into_diag(dcx, level)
|
||||
}
|
||||
BuiltinLintDiag::AmbiguousGlobReexports {
|
||||
name,
|
||||
namespace,
|
||||
first_reexport_span,
|
||||
duplicate_reexport_span,
|
||||
} => lints::AmbiguousGlobReexports {
|
||||
first_reexport: first_reexport_span,
|
||||
duplicate_reexport: duplicate_reexport_span,
|
||||
name,
|
||||
namespace,
|
||||
}
|
||||
.into_diag(dcx, level),
|
||||
BuiltinLintDiag::HiddenGlobReexports {
|
||||
name,
|
||||
namespace,
|
||||
glob_reexport_span,
|
||||
private_item_span,
|
||||
} => lints::HiddenGlobReexports {
|
||||
glob_reexport: glob_reexport_span,
|
||||
private_item: private_item_span,
|
||||
|
||||
name,
|
||||
namespace,
|
||||
}
|
||||
.into_diag(dcx, level),
|
||||
BuiltinLintDiag::UnusedQualifications { removal_span } => {
|
||||
lints::UnusedQualifications { removal_span }.into_diag(dcx, level)
|
||||
}
|
||||
BuiltinLintDiag::AssociatedConstElidedLifetime {
|
||||
elided,
|
||||
span: lt_span,
|
||||
lifetimes_in_scope,
|
||||
} => {
|
||||
let lt_span = if elided { lt_span.shrink_to_hi() } else { lt_span };
|
||||
let code = if elided { "'static " } else { "'static" };
|
||||
lints::AssociatedConstElidedLifetime {
|
||||
span: lt_span,
|
||||
code,
|
||||
elided,
|
||||
lifetimes_in_scope,
|
||||
}
|
||||
.into_diag(dcx, level)
|
||||
}
|
||||
|
||||
BuiltinLintDiag::UnusedCrateDependency { extern_crate, local_crate } => {
|
||||
lints::UnusedCrateDependency { extern_crate, local_crate }.into_diag(dcx, level)
|
||||
|
||||
@@ -6,8 +6,7 @@
|
||||
use rustc_errors::formatting::DiagMessageAddArg;
|
||||
use rustc_errors::{
|
||||
Applicability, Diag, DiagArgValue, DiagCtxtHandle, DiagMessage, DiagStyledString, Diagnostic,
|
||||
ElidedLifetimeInPathSubdiag, EmissionGuarantee, Level, MultiSpan, Subdiagnostic,
|
||||
SuggestionStyle, msg,
|
||||
ElidedLifetimeInPathSubdiag, EmissionGuarantee, Level, Subdiagnostic, SuggestionStyle, msg,
|
||||
};
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def_id::DefId;
|
||||
@@ -3089,42 +3088,6 @@ pub(crate) enum UnusedImportsSugg {
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag("the item `{$ident}` is imported redundantly")]
|
||||
pub(crate) struct RedundantImport {
|
||||
#[subdiagnostic]
|
||||
pub subs: Vec<RedundantImportSub>,
|
||||
pub ident: Ident,
|
||||
}
|
||||
|
||||
#[derive(Subdiagnostic)]
|
||||
pub(crate) enum RedundantImportSub {
|
||||
#[label("the item `{$ident}` is already imported here")]
|
||||
ImportedHere {
|
||||
#[primary_span]
|
||||
span: Span,
|
||||
ident: Ident,
|
||||
},
|
||||
#[label("the item `{$ident}` is already defined here")]
|
||||
DefinedHere {
|
||||
#[primary_span]
|
||||
span: Span,
|
||||
ident: Ident,
|
||||
},
|
||||
#[label("the item `{$ident}` is already imported by the extern prelude")]
|
||||
ImportedPrelude {
|
||||
#[primary_span]
|
||||
span: Span,
|
||||
ident: Ident,
|
||||
},
|
||||
#[label("the item `{$ident}` is already defined by the extern prelude")]
|
||||
DefinedPrelude {
|
||||
#[primary_span]
|
||||
span: Span,
|
||||
ident: Ident,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag("lifetime parameter `{$ident}` only used once")]
|
||||
pub(crate) struct SingleUseLifetime {
|
||||
@@ -3168,66 +3131,6 @@ pub(crate) struct NamedArgumentUsedPositionally {
|
||||
pub named_arg_name: String,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag("ambiguous glob re-exports")]
|
||||
pub(crate) struct AmbiguousGlobReexports {
|
||||
#[label("the name `{$name}` in the {$namespace} namespace is first re-exported here")]
|
||||
pub first_reexport: Span,
|
||||
#[label("but the name `{$name}` in the {$namespace} namespace is also re-exported here")]
|
||||
pub duplicate_reexport: Span,
|
||||
|
||||
pub name: String,
|
||||
pub namespace: String,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag("private item shadows public glob re-export")]
|
||||
pub(crate) struct HiddenGlobReexports {
|
||||
#[note(
|
||||
"the name `{$name}` in the {$namespace} namespace is supposed to be publicly re-exported here"
|
||||
)]
|
||||
pub glob_reexport: Span,
|
||||
#[note("but the private item here shadows it")]
|
||||
pub private_item: Span,
|
||||
|
||||
pub name: String,
|
||||
pub namespace: String,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag("unnecessary qualification")]
|
||||
pub(crate) struct UnusedQualifications {
|
||||
#[suggestion(
|
||||
"remove the unnecessary path segments",
|
||||
style = "verbose",
|
||||
code = "",
|
||||
applicability = "machine-applicable"
|
||||
)]
|
||||
pub removal_span: Span,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(
|
||||
"{$elided ->
|
||||
[true] `&` without an explicit lifetime name cannot be used here
|
||||
*[false] `'_` cannot be used here
|
||||
}"
|
||||
)]
|
||||
pub(crate) struct AssociatedConstElidedLifetime {
|
||||
#[suggestion(
|
||||
"use the `'static` lifetime",
|
||||
style = "verbose",
|
||||
code = "{code}",
|
||||
applicability = "machine-applicable"
|
||||
)]
|
||||
pub span: Span,
|
||||
|
||||
pub code: &'static str,
|
||||
pub elided: bool,
|
||||
#[note("cannot automatically infer `'static` because of other lifetimes in scope")]
|
||||
pub lifetimes_in_scope: MultiSpan,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag("creating a {$shared_label}reference to mutable static")]
|
||||
pub(crate) struct RefOfMutStatic<'a> {
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
use rustc_data_structures::stable_hasher::{
|
||||
HashStable, StableCompare, StableHasher, ToStableHashKey,
|
||||
};
|
||||
use rustc_error_messages::{DiagArgValue, IntoDiagArg, MultiSpan};
|
||||
use rustc_error_messages::{DiagArgValue, IntoDiagArg};
|
||||
use rustc_hir_id::{HashStableContext, HirId, ItemLocalId};
|
||||
use rustc_macros::{Decodable, Encodable, HashStable_Generic};
|
||||
use rustc_span::def_id::DefPathHash;
|
||||
@@ -665,7 +665,6 @@ pub enum BuiltinLintDiag {
|
||||
test_module_span: Option<Span>,
|
||||
span_snippets: Vec<String>,
|
||||
},
|
||||
RedundantImport(Vec<(Span, bool)>, Ident),
|
||||
SingleUseLifetime {
|
||||
/// Span of the parameter which declares this lifetime.
|
||||
param_span: Span,
|
||||
@@ -691,35 +690,6 @@ pub enum BuiltinLintDiag {
|
||||
/// Indicates if the named argument is used as a width/precision for formatting
|
||||
is_formatting_arg: bool,
|
||||
},
|
||||
AmbiguousGlobReexports {
|
||||
/// The name for which collision(s) have occurred.
|
||||
name: String,
|
||||
/// The name space for which the collision(s) occurred in.
|
||||
namespace: String,
|
||||
/// Span where the name is first re-exported.
|
||||
first_reexport_span: Span,
|
||||
/// Span where the same name is also re-exported.
|
||||
duplicate_reexport_span: Span,
|
||||
},
|
||||
HiddenGlobReexports {
|
||||
/// The name of the local binding which shadows the glob re-export.
|
||||
name: String,
|
||||
/// The namespace for which the shadowing occurred in.
|
||||
namespace: String,
|
||||
/// The glob reexport that is shadowed by the local binding.
|
||||
glob_reexport_span: Span,
|
||||
/// The local binding that shadows the glob reexport.
|
||||
private_item_span: Span,
|
||||
},
|
||||
UnusedQualifications {
|
||||
/// The span of the unnecessarily-qualified path to remove.
|
||||
removal_span: Span,
|
||||
},
|
||||
AssociatedConstElidedLifetime {
|
||||
elided: bool,
|
||||
span: Span,
|
||||
lifetimes_in_scope: MultiSpan,
|
||||
},
|
||||
UnusedCrateDependency {
|
||||
extern_crate: Symbol,
|
||||
local_crate: Symbol,
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
use rustc_span::{DUMMY_SP, Ident, Span, kw};
|
||||
|
||||
use crate::imports::{Import, ImportKind};
|
||||
use crate::{DeclKind, IdentKey, LateDecl, Resolver, module_to_string};
|
||||
use crate::{DeclKind, IdentKey, LateDecl, Resolver, errors, module_to_string};
|
||||
|
||||
struct UnusedImport {
|
||||
use_tree: ast::UseTree,
|
||||
@@ -554,7 +554,7 @@ pub(crate) fn check_unused(&mut self, krate: &ast::Crate) {
|
||||
UNUSED_QUALIFICATIONS,
|
||||
unn_qua.node_id,
|
||||
unn_qua.path_span,
|
||||
BuiltinLintDiag::UnusedQualifications { removal_span: unn_qua.removal_span },
|
||||
errors::UnusedQualifications { removal_span: unn_qua.removal_span },
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -1592,3 +1592,99 @@ pub(crate) struct UnusedLifetime {
|
||||
|
||||
pub ident: Ident,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag("ambiguous glob re-exports")]
|
||||
pub(crate) struct AmbiguousGlobReexports {
|
||||
#[label("the name `{$name}` in the {$namespace} namespace is first re-exported here")]
|
||||
pub first_reexport: Span,
|
||||
#[label("but the name `{$name}` in the {$namespace} namespace is also re-exported here")]
|
||||
pub duplicate_reexport: Span,
|
||||
|
||||
pub name: String,
|
||||
pub namespace: String,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag("private item shadows public glob re-export")]
|
||||
pub(crate) struct HiddenGlobReexports {
|
||||
#[note(
|
||||
"the name `{$name}` in the {$namespace} namespace is supposed to be publicly re-exported here"
|
||||
)]
|
||||
pub glob_reexport: Span,
|
||||
#[note("but the private item here shadows it")]
|
||||
pub private_item: Span,
|
||||
|
||||
pub name: String,
|
||||
pub namespace: String,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag("the item `{$ident}` is imported redundantly")]
|
||||
pub(crate) struct RedundantImport {
|
||||
#[subdiagnostic]
|
||||
pub subs: Vec<RedundantImportSub>,
|
||||
pub ident: Ident,
|
||||
}
|
||||
|
||||
#[derive(Subdiagnostic)]
|
||||
pub(crate) enum RedundantImportSub {
|
||||
#[label("the item `{$ident}` is already imported here")]
|
||||
ImportedHere {
|
||||
#[primary_span]
|
||||
span: Span,
|
||||
ident: Ident,
|
||||
},
|
||||
#[label("the item `{$ident}` is already defined here")]
|
||||
DefinedHere {
|
||||
#[primary_span]
|
||||
span: Span,
|
||||
ident: Ident,
|
||||
},
|
||||
#[label("the item `{$ident}` is already imported by the extern prelude")]
|
||||
ImportedPrelude {
|
||||
#[primary_span]
|
||||
span: Span,
|
||||
ident: Ident,
|
||||
},
|
||||
#[label("the item `{$ident}` is already defined by the extern prelude")]
|
||||
DefinedPrelude {
|
||||
#[primary_span]
|
||||
span: Span,
|
||||
ident: Ident,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag("unnecessary qualification")]
|
||||
pub(crate) struct UnusedQualifications {
|
||||
#[suggestion(
|
||||
"remove the unnecessary path segments",
|
||||
style = "verbose",
|
||||
code = "",
|
||||
applicability = "machine-applicable"
|
||||
)]
|
||||
pub removal_span: Span,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(
|
||||
"{$elided ->
|
||||
[true] `&` without an explicit lifetime name cannot be used here
|
||||
*[false] `'_` cannot be used here
|
||||
}"
|
||||
)]
|
||||
pub(crate) struct AssociatedConstElidedLifetime {
|
||||
#[suggestion(
|
||||
"use the `'static` lifetime",
|
||||
style = "verbose",
|
||||
code = "{code}",
|
||||
applicability = "machine-applicable"
|
||||
)]
|
||||
pub span: Span,
|
||||
|
||||
pub code: &'static str,
|
||||
pub elided: bool,
|
||||
#[note("cannot automatically infer `'static` because of other lifetimes in scope")]
|
||||
pub lifetimes_in_scope: MultiSpan,
|
||||
}
|
||||
|
||||
@@ -6,13 +6,12 @@
|
||||
use rustc_data_structures::fx::{FxHashSet, FxIndexSet};
|
||||
use rustc_data_structures::intern::Interned;
|
||||
use rustc_errors::codes::*;
|
||||
use rustc_errors::{Applicability, MultiSpan, pluralize, struct_span_code_err};
|
||||
use rustc_errors::{Applicability, Diagnostic, MultiSpan, pluralize, struct_span_code_err};
|
||||
use rustc_hir::def::{self, DefKind, PartialRes};
|
||||
use rustc_hir::def_id::{DefId, LocalDefIdMap};
|
||||
use rustc_middle::metadata::{AmbigModChild, ModChild, Reexport};
|
||||
use rustc_middle::span_bug;
|
||||
use rustc_middle::ty::Visibility;
|
||||
use rustc_session::lint::BuiltinLintDiag;
|
||||
use rustc_session::lint::builtin::{
|
||||
AMBIGUOUS_GLOB_REEXPORTS, EXPORTED_PRIVATE_DEPENDENCIES, HIDDEN_GLOB_REEXPORTS,
|
||||
PUB_USE_OF_PRIVATE_EXTERN_CRATE, REDUNDANT_IMPORTS, UNUSED_IMPORTS,
|
||||
@@ -26,9 +25,10 @@
|
||||
use crate::Namespace::{self, *};
|
||||
use crate::diagnostics::{DiagMode, Suggestion, import_candidates};
|
||||
use crate::errors::{
|
||||
CannotBeReexportedCratePublic, CannotBeReexportedCratePublicNS, CannotBeReexportedPrivate,
|
||||
CannotBeReexportedPrivateNS, CannotDetermineImportResolution, CannotGlobImportAllCrates,
|
||||
ConsiderAddingMacroExport, ConsiderMarkingAsPub, ConsiderMarkingAsPubCrate,
|
||||
self, CannotBeReexportedCratePublic, CannotBeReexportedCratePublicNS,
|
||||
CannotBeReexportedPrivate, CannotBeReexportedPrivateNS, CannotDetermineImportResolution,
|
||||
CannotGlobImportAllCrates, ConsiderAddingMacroExport, ConsiderMarkingAsPub,
|
||||
ConsiderMarkingAsPubCrate,
|
||||
};
|
||||
use crate::ref_mut::CmCell;
|
||||
use crate::{
|
||||
@@ -721,11 +721,11 @@ pub(crate) fn lint_reexports(&mut self, exported_ambiguities: FxHashSet<Decl<'ra
|
||||
AMBIGUOUS_GLOB_REEXPORTS,
|
||||
import.root_id,
|
||||
import.root_span,
|
||||
BuiltinLintDiag::AmbiguousGlobReexports {
|
||||
errors::AmbiguousGlobReexports {
|
||||
name: key.ident.name.to_string(),
|
||||
namespace: key.ns.descr().to_string(),
|
||||
first_reexport_span: import.root_span,
|
||||
duplicate_reexport_span: amb_binding.span,
|
||||
first_reexport: import.root_span,
|
||||
duplicate_reexport: amb_binding.span,
|
||||
},
|
||||
);
|
||||
}
|
||||
@@ -753,11 +753,11 @@ pub(crate) fn lint_reexports(&mut self, exported_ambiguities: FxHashSet<Decl<'ra
|
||||
HIDDEN_GLOB_REEXPORTS,
|
||||
binding_id,
|
||||
binding.span,
|
||||
BuiltinLintDiag::HiddenGlobReexports {
|
||||
errors::HiddenGlobReexports {
|
||||
name: key.ident.name.to_string(),
|
||||
namespace: key.ns.descr().to_owned(),
|
||||
glob_reexport_span: glob_decl.span,
|
||||
private_item_span: binding.span,
|
||||
glob_reexport: glob_decl.span,
|
||||
private_item: binding.span,
|
||||
},
|
||||
);
|
||||
}
|
||||
@@ -1535,11 +1535,31 @@ pub(crate) fn check_for_redundant_imports(&mut self, import: Import<'ra>) -> boo
|
||||
let mut redundant_spans: Vec<_> = redundant_span.present_items().collect();
|
||||
redundant_spans.sort();
|
||||
redundant_spans.dedup();
|
||||
self.lint_buffer.buffer_lint(
|
||||
self.lint_buffer.dyn_buffer_lint(
|
||||
REDUNDANT_IMPORTS,
|
||||
id,
|
||||
import.span,
|
||||
BuiltinLintDiag::RedundantImport(redundant_spans, source),
|
||||
move |dcx, level| {
|
||||
let ident = source;
|
||||
let subs = redundant_spans
|
||||
.into_iter()
|
||||
.map(|(span, is_imported)| match (span.is_dummy(), is_imported) {
|
||||
(false, true) => {
|
||||
errors::RedundantImportSub::ImportedHere { span, ident }
|
||||
}
|
||||
(false, false) => {
|
||||
errors::RedundantImportSub::DefinedHere { span, ident }
|
||||
}
|
||||
(true, true) => {
|
||||
errors::RedundantImportSub::ImportedPrelude { span, ident }
|
||||
}
|
||||
(true, false) => {
|
||||
errors::RedundantImportSub::DefinedPrelude { span, ident }
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
errors::RedundantImport { subs, ident }.into_diag(dcx, level)
|
||||
},
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1882,13 +1882,21 @@ fn resolve_anonymous_lifetime(
|
||||
);
|
||||
return;
|
||||
} else if emit_lint {
|
||||
let lt_span = if elided {
|
||||
lifetime.ident.span.shrink_to_hi()
|
||||
} else {
|
||||
lifetime.ident.span
|
||||
};
|
||||
let code = if elided { "'static " } else { "'static" };
|
||||
|
||||
self.r.lint_buffer.buffer_lint(
|
||||
lint::builtin::ELIDED_LIFETIMES_IN_ASSOCIATED_CONSTANT,
|
||||
node_id,
|
||||
lifetime.ident.span,
|
||||
lint::BuiltinLintDiag::AssociatedConstElidedLifetime {
|
||||
crate::errors::AssociatedConstElidedLifetime {
|
||||
elided,
|
||||
span: lifetime.ident.span,
|
||||
code,
|
||||
span: lt_span,
|
||||
lifetimes_in_scope: lifetimes_in_scope.into(),
|
||||
},
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user