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.rs30
1 files changed, 21 insertions, 9 deletions
diff --git a/crates/ide/src/inlay_hints/implicit_drop.rs b/crates/ide/src/inlay_hints/implicit_drop.rs
index 31f0c79037..7f901db28d 100644
--- a/crates/ide/src/inlay_hints/implicit_drop.rs
+++ b/crates/ide/src/inlay_hints/implicit_drop.rs
@@ -10,11 +10,11 @@ use hir::{
mir::{MirSpan, TerminatorKind},
ChalkTyInterner, DefWithBody, Semantics,
};
-use ide_db::{base_db::FileRange, RootDatabase};
+use ide_db::{FileRange, RootDatabase};
use syntax::{
ast::{self, AstNode},
- match_ast,
+ match_ast, ToSmolStr,
};
use crate::{InlayHint, InlayHintLabel, InlayHintPosition, InlayHintsConfig, InlayKind};
@@ -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,21 +73,34 @@ 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 = &hir.bindings[*binding];
- let binding_source = binding
- .definitions
+ 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()?, range: d.value.text_range() })
+ Some(FileRange {
+ file_id: d.file_id.file_id()?.into(),
+ range: d.value.text_range(),
+ })
});
- let name = binding.name.to_smol_str();
+ let binding = &hir.bindings[*binding];
+ let name = binding.name.display_no_db().to_smolstr();
if name.starts_with("<ra@") {
continue; // Ignore desugared variables
}