Fix closure migration suggestion when the body is a macro.
This commit is contained in:
parent
eb2226b1f1
commit
945a4b18d9
@ -47,7 +47,7 @@ use rustc_middle::ty::{
|
||||
};
|
||||
use rustc_session::lint;
|
||||
use rustc_span::sym;
|
||||
use rustc_span::{MultiSpan, Span, Symbol};
|
||||
use rustc_span::{MultiSpan, Span, Symbol, DUMMY_SP};
|
||||
use rustc_trait_selection::infer::InferCtxtExt;
|
||||
|
||||
use rustc_data_structures::stable_map::FxHashMap;
|
||||
@ -644,7 +644,17 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
}
|
||||
}
|
||||
diagnostics_builder.note("for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/disjoint-capture-in-closures.html>");
|
||||
let closure_body_span = self.tcx.hir().span(body_id.hir_id);
|
||||
|
||||
let mut closure_body_span = self.tcx.hir().span(body_id.hir_id);
|
||||
|
||||
// If the body was entirely expanded from a macro
|
||||
// invocation, as the body is not contained inside the
|
||||
// closure span. In that case, we walk up the expansion
|
||||
// until we find the span before the expansion.
|
||||
while !closure_body_span.is_dummy() && !closure_span.contains(closure_body_span) {
|
||||
closure_body_span = closure_body_span.parent().unwrap_or(DUMMY_SP);
|
||||
}
|
||||
|
||||
let (sugg, app) =
|
||||
match self.tcx.sess.source_map().span_to_snippet(closure_body_span) {
|
||||
Ok(s) => {
|
||||
|
Loading…
x
Reference in New Issue
Block a user