Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/inlay_hints/implicit_drop.rs')
-rw-r--r--crates/ide/src/inlay_hints/implicit_drop.rs32
1 files changed, 21 insertions, 11 deletions
diff --git a/crates/ide/src/inlay_hints/implicit_drop.rs b/crates/ide/src/inlay_hints/implicit_drop.rs
index 86075bd9bb..7f901db28d 100644
--- a/crates/ide/src/inlay_hints/implicit_drop.rs
+++ b/crates/ide/src/inlay_hints/implicit_drop.rs
@@ -32,9 +32,8 @@ pub(super) fn hints(
let def = sema.to_def(def)?;
let def: DefWithBody = def.into();
- let source_map = sema.db.body_with_source_map(def.into()).1;
+ let (hir, source_map) = sema.db.body_with_source_map(def.into());
- let hir = sema.db.body(def.into());
let mir = sema.db.mir_body(def.into()).ok()?;
let local_to_binding = mir.local_to_binding_map();
@@ -74,22 +73,33 @@ pub(super) fn hints(
Ok(s) => s.value.text_range(),
Err(_) => continue,
},
+ MirSpan::BindingId(b) => {
+ match source_map
+ .patterns_for_binding(b)
+ .iter()
+ .find_map(|p| source_map.pat_syntax(*p).ok())
+ {
+ Some(s) => s.value.text_range(),
+ None => continue,
+ }
+ }
MirSpan::SelfParam => match source_map.self_param_syntax() {
Some(s) => s.value.text_range(),
None => continue,
},
MirSpan::Unknown => continue,
};
+ let binding_source = source_map
+ .patterns_for_binding(*binding)
+ .first()
+ .and_then(|d| source_map.pat_syntax(*d).ok())
+ .and_then(|d| {
+ Some(FileRange {
+ file_id: d.file_id.file_id()?.into(),
+ range: d.value.text_range(),
+ })
+ });
let binding = &hir.bindings[*binding];
- let binding_source =
- binding.definitions.first().and_then(|d| source_map.pat_syntax(*d).ok()).and_then(
- |d| {
- Some(FileRange {
- file_id: d.file_id.file_id()?.into(),
- range: d.value.text_range(),
- })
- },
- );
let name = binding.name.display_no_db().to_smolstr();
if name.starts_with("<ra@") {
continue; // Ignore desugared variables