Skip to content

Commit

Permalink
Use nicer spans for deref_into_dyn_supertrait
Browse files Browse the repository at this point in the history
  • Loading branch information
WaffleLapkin committed Nov 23, 2022
1 parent 0d4a5c7 commit 20f3de5
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 13 deletions.
13 changes: 10 additions & 3 deletions compiler/rustc_lint/src/deref_into_dyn_supertrait.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
},
)
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/test/ui/traits/trait-upcasting/migrate-lint-deny.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
15 changes: 6 additions & 9 deletions src/test/ui/traits/trait-upcasting/migrate-lint-deny.stderr
Original file line number Diff line number Diff line change
@@ -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>
Expand Down

0 comments on commit 20f3de5

Please sign in to comment.