Improve cannot move out of
error message
This commit is contained in:
parent
e5a7d8f945
commit
86dd457e6a
10 changed files with 154 additions and 61 deletions
|
@ -6,7 +6,7 @@ use rustc_mir_dataflow::move_paths::{
|
|||
};
|
||||
use rustc_span::Span;
|
||||
|
||||
use crate::diagnostics::UseSpans;
|
||||
use crate::diagnostics::{DescribePlaceOpt, UseSpans};
|
||||
use crate::prefixes::PrefixSet;
|
||||
use crate::MirBorrowckCtxt;
|
||||
|
||||
|
@ -368,13 +368,31 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> {
|
|||
}
|
||||
_ => {
|
||||
let source = self.borrowed_content_source(deref_base);
|
||||
match (self.describe_place(move_place.as_ref()), source.describe_for_named_place())
|
||||
{
|
||||
(Some(place_desc), Some(source_desc)) => self.cannot_move_out_of(
|
||||
let move_place_ref = move_place.as_ref();
|
||||
match (
|
||||
self.describe_place_with_options(
|
||||
move_place_ref,
|
||||
DescribePlaceOpt {
|
||||
including_downcast: false,
|
||||
including_tuple_field: false,
|
||||
},
|
||||
),
|
||||
self.describe_name(move_place_ref),
|
||||
source.describe_for_named_place(),
|
||||
) {
|
||||
(Some(place_desc), Some(name), Some(source_desc)) => self.cannot_move_out_of(
|
||||
span,
|
||||
&format!("`{place_desc}` as enum variant `{name}` which is behind a {source_desc}"),
|
||||
),
|
||||
(Some(place_desc), Some(name), None) => self.cannot_move_out_of(
|
||||
span,
|
||||
&format!("`{place_desc}` as enum variant `{name}`"),
|
||||
),
|
||||
(Some(place_desc), _, Some(source_desc)) => self.cannot_move_out_of(
|
||||
span,
|
||||
&format!("`{place_desc}` which is behind a {source_desc}"),
|
||||
),
|
||||
(_, _) => self.cannot_move_out_of(
|
||||
(_, _, _) => self.cannot_move_out_of(
|
||||
span,
|
||||
&source.describe_for_unnamed_place(self.infcx.tcx),
|
||||
),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue