mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
Migrate lint reports in typeck::check_unused to LintDiagnostic
This commit is contained in:
parent
86c6ebee8f
commit
98fb65eff9
@ -123,3 +123,11 @@ typeck_manual_implementation =
|
|||||||
.help = add `#![feature(unboxed_closures)]` to the crate attributes to enable
|
.help = add `#![feature(unboxed_closures)]` to the crate attributes to enable
|
||||||
|
|
||||||
typeck_substs_on_overridden_impl = could not resolve substs on overridden impl
|
typeck_substs_on_overridden_impl = could not resolve substs on overridden impl
|
||||||
|
|
||||||
|
typeck_unused_extern_crate =
|
||||||
|
unused extern crate
|
||||||
|
.suggestion = remove it
|
||||||
|
|
||||||
|
typeck_extern_crate_not_idiomatic =
|
||||||
|
`extern crate` is not idiomatic in the new edition
|
||||||
|
.suggestion = convert it to a `{$msg_code}`
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
use crate::errors::{ExternCrateNotIdiomatic, UnusedExternCrate};
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
||||||
use rustc_errors::Applicability;
|
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_hir::def::DefKind;
|
use rustc_hir::def::DefKind;
|
||||||
use rustc_hir::def_id::{DefId, LocalDefId};
|
use rustc_hir::def_id::{DefId, LocalDefId};
|
||||||
@ -108,9 +108,8 @@ fn unused_crates_lint(tcx: TyCtxt<'_>) {
|
|||||||
// We do this in any edition.
|
// We do this in any edition.
|
||||||
if extern_crate.warn_if_unused {
|
if extern_crate.warn_if_unused {
|
||||||
if let Some(&span) = unused_extern_crates.get(&def_id) {
|
if let Some(&span) = unused_extern_crates.get(&def_id) {
|
||||||
let id = tcx.hir().local_def_id_to_hir_id(def_id);
|
|
||||||
tcx.struct_span_lint_hir(lint, id, span, |lint| {
|
|
||||||
// Removal suggestion span needs to include attributes (Issue #54400)
|
// Removal suggestion span needs to include attributes (Issue #54400)
|
||||||
|
let id = tcx.hir().local_def_id_to_hir_id(def_id);
|
||||||
let span_with_attrs = tcx
|
let span_with_attrs = tcx
|
||||||
.hir()
|
.hir()
|
||||||
.attrs(id)
|
.attrs(id)
|
||||||
@ -118,15 +117,7 @@ fn unused_crates_lint(tcx: TyCtxt<'_>) {
|
|||||||
.map(|attr| attr.span)
|
.map(|attr| attr.span)
|
||||||
.fold(span, |acc, attr_span| acc.to(attr_span));
|
.fold(span, |acc, attr_span| acc.to(attr_span));
|
||||||
|
|
||||||
lint.build("unused extern crate")
|
tcx.emit_spanned_lint(lint, id, span, UnusedExternCrate { span: span_with_attrs });
|
||||||
.span_suggestion_short(
|
|
||||||
span_with_attrs,
|
|
||||||
"remove it",
|
|
||||||
"",
|
|
||||||
Applicability::MachineApplicable,
|
|
||||||
)
|
|
||||||
.emit();
|
|
||||||
});
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -158,23 +149,23 @@ fn unused_crates_lint(tcx: TyCtxt<'_>) {
|
|||||||
if !tcx.hir().attrs(id).is_empty() {
|
if !tcx.hir().attrs(id).is_empty() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
tcx.struct_span_lint_hir(lint, id, extern_crate.span, |lint| {
|
|
||||||
// Otherwise, we can convert it into a `use` of some kind.
|
|
||||||
let base_replacement = match extern_crate.orig_name {
|
let base_replacement = match extern_crate.orig_name {
|
||||||
Some(orig_name) => format!("use {} as {};", orig_name, item.ident.name),
|
Some(orig_name) => format!("use {} as {};", orig_name, item.ident.name),
|
||||||
None => format!("use {};", item.ident.name),
|
None => format!("use {};", item.ident.name),
|
||||||
};
|
};
|
||||||
let vis = tcx.sess.source_map().span_to_snippet(item.vis_span).unwrap_or_default();
|
let vis = tcx.sess.source_map().span_to_snippet(item.vis_span).unwrap_or_default();
|
||||||
let add_vis = |to| if vis.is_empty() { to } else { format!("{} {}", vis, to) };
|
let add_vis = |to| if vis.is_empty() { to } else { format!("{} {}", vis, to) };
|
||||||
lint.build("`extern crate` is not idiomatic in the new edition")
|
tcx.emit_spanned_lint(
|
||||||
.span_suggestion_short(
|
lint,
|
||||||
|
id,
|
||||||
extern_crate.span,
|
extern_crate.span,
|
||||||
&format!("convert it to a `{}`", add_vis("use".to_string())),
|
ExternCrateNotIdiomatic {
|
||||||
add_vis(base_replacement),
|
span: extern_crate.span,
|
||||||
Applicability::MachineApplicable,
|
msg_code: add_vis("use".to_string()),
|
||||||
)
|
suggestion_code: add_vis(base_replacement),
|
||||||
.emit();
|
},
|
||||||
})
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
//! Errors emitted by typeck.
|
//! Errors emitted by typeck.
|
||||||
use rustc_errors::{error_code, Applicability, DiagnosticBuilder, ErrorGuaranteed};
|
use rustc_errors::{error_code, Applicability, DiagnosticBuilder, ErrorGuaranteed};
|
||||||
use rustc_macros::{SessionDiagnostic, SessionSubdiagnostic};
|
use rustc_macros::{LintDiagnostic, SessionDiagnostic, SessionSubdiagnostic};
|
||||||
use rustc_middle::ty::Ty;
|
use rustc_middle::ty::Ty;
|
||||||
use rustc_session::{parse::ParseSess, SessionDiagnostic};
|
use rustc_session::{parse::ParseSess, SessionDiagnostic};
|
||||||
use rustc_span::{symbol::Ident, Span, Symbol};
|
use rustc_span::{symbol::Ident, Span, Symbol};
|
||||||
@ -324,3 +324,21 @@ pub struct SubstsOnOverriddenImpl {
|
|||||||
#[primary_span]
|
#[primary_span]
|
||||||
pub span: Span,
|
pub span: Span,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(LintDiagnostic)]
|
||||||
|
#[lint(typeck::unused_extern_crate)]
|
||||||
|
pub struct UnusedExternCrate {
|
||||||
|
#[primary_span]
|
||||||
|
#[suggestion(applicability = "machine-applicable", code = "")]
|
||||||
|
pub span: Span,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(LintDiagnostic)]
|
||||||
|
#[lint(typeck::extern_crate_not_idiomatic)]
|
||||||
|
pub struct ExternCrateNotIdiomatic {
|
||||||
|
#[primary_span]
|
||||||
|
#[suggestion(applicability = "machine-applicable", code = "{suggestion_code}")]
|
||||||
|
pub span: Span,
|
||||||
|
pub msg_code: String,
|
||||||
|
pub suggestion_code: String,
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user