Use nicer spans for deref_into_dyn_supertrait
This commit is contained in:
parent
0d4a5c725a
commit
20f3de5ab1
3 changed files with 17 additions and 13 deletions
|
@ -3,6 +3,7 @@ use crate::{LateContext, LateLintPass, LintContext};
|
|||
use rustc_errors::DelayDm;
|
||||
use rustc_hir as hir;
|
||||
use rustc_middle::{traits::util::supertraits, ty};
|
||||
use rustc_span::sym;
|
||||
|
||||
declare_lint! {
|
||||
/// The `deref_into_dyn_supertrait` lint is output whenever there is a use of the
|
||||
|
@ -72,13 +73,19 @@ impl<'tcx> LateLintPass<'tcx> for DerefIntoDynSupertrait {
|
|||
{
|
||||
cx.struct_span_lint(
|
||||
DEREF_INTO_DYN_SUPERTRAIT,
|
||||
item.span,
|
||||
cx.tcx.def_span(item.owner_id.def_id),
|
||||
DelayDm(|| {
|
||||
format!(
|
||||
"`{t}` implements `Deref` with supertrait `{target_principal}` as output"
|
||||
"`{t}` implements `Deref` with supertrait `{target_principal}` as target"
|
||||
)
|
||||
}),
|
||||
|lint| lint,
|
||||
|lint| {
|
||||
if let Some(target_span) = impl_.items.iter().find_map(|i| (i.ident.name == sym::Target).then_some(i.span)) {
|
||||
lint.span_label(target_span, "target type is set here");
|
||||
}
|
||||
|
||||
lint
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ trait A {}
|
|||
trait B: A {}
|
||||
|
||||
impl<'a> Deref for dyn 'a + B {
|
||||
//~^ ERROR `(dyn B + 'a)` implements `Deref` with supertrait `A` as output
|
||||
//~^ ERROR `(dyn B + 'a)` implements `Deref` with supertrait `A` as target
|
||||
//~| WARN this was previously accepted by the compiler but is being phased out;
|
||||
|
||||
type Target = dyn A;
|
||||
|
|
|
@ -1,14 +1,11 @@
|
|||
error: `(dyn B + 'a)` implements `Deref` with supertrait `A` as output
|
||||
error: `(dyn B + 'a)` implements `Deref` with supertrait `A` as target
|
||||
--> $DIR/migrate-lint-deny.rs:11:1
|
||||
|
|
||||
LL | / impl<'a> Deref for dyn 'a + B {
|
||||
LL | |
|
||||
LL | |
|
||||
LL | |
|
||||
... |
|
||||
LL | | }
|
||||
LL | | }
|
||||
| |_^
|
||||
LL | impl<'a> Deref for dyn 'a + B {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
...
|
||||
LL | type Target = dyn A;
|
||||
| -------------------- target type is set here
|
||||
|
|
||||
= 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 #89460 <https://github.com/rust-lang/rust/issues/89460>
|
||||
|
|
Loading…
Add table
Reference in a new issue