about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLukas Wirth <me@lukaswirth.dev>2025-08-13 08:01:19 +0000
committerGitHub <noreply@github.com>2025-08-13 08:01:19 +0000
commit178007c0fd34722aed7a2b53d9d0a8975a830693 (patch)
tree1123ca84908db30f7a3f65c1ccc0c59cf2543ff4
parent0387ecb5d4e260c030b1086476b3c6d91ca03344 (diff)
parent4bbbe6ee2b0c3c630d605c47ba0d4215d2522240 (diff)
downloadrust-178007c0fd34722aed7a2b53d9d0a8975a830693.tar.gz
rust-178007c0fd34722aed7a2b53d9d0a8975a830693.zip
Merge pull request #20445 from rust-lang/veykril/push-twmmuyzwtxno
fix: Attach db for inlay hint compute
-rw-r--r--src/tools/rust-analyzer/crates/hir-ty/src/next_solver/interner.rs2
-rw-r--r--src/tools/rust-analyzer/crates/ide/src/inlay_hints.rs18
2 files changed, 11 insertions, 9 deletions
diff --git a/src/tools/rust-analyzer/crates/hir-ty/src/next_solver/interner.rs b/src/tools/rust-analyzer/crates/hir-ty/src/next_solver/interner.rs
index 9c1bd52065f..54fec4aefbd 100644
--- a/src/tools/rust-analyzer/crates/hir-ty/src/next_solver/interner.rs
+++ b/src/tools/rust-analyzer/crates/hir-ty/src/next_solver/interner.rs
@@ -289,7 +289,7 @@ impl<'db> DbInterner<'db> {
             krate: None,
             block: None,
         })
-        .unwrap()
+        .expect("db is expected to be attached")
     }
 
     pub fn new_with(
diff --git a/src/tools/rust-analyzer/crates/ide/src/inlay_hints.rs b/src/tools/rust-analyzer/crates/ide/src/inlay_hints.rs
index f6416fe51c3..424890fe370 100644
--- a/src/tools/rust-analyzer/crates/ide/src/inlay_hints.rs
+++ b/src/tools/rust-analyzer/crates/ide/src/inlay_hints.rs
@@ -107,14 +107,16 @@ pub(crate) fn inlay_hints(
         }
     };
     let mut preorder = file.preorder();
-    while let Some(event) = preorder.next() {
-        if matches!((&event, range_limit), (WalkEvent::Enter(node), Some(range)) if range.intersect(node.text_range()).is_none())
-        {
-            preorder.skip_subtree();
-            continue;
+    salsa::attach(sema.db, || {
+        while let Some(event) = preorder.next() {
+            if matches!((&event, range_limit), (WalkEvent::Enter(node), Some(range)) if range.intersect(node.text_range()).is_none())
+            {
+                preorder.skip_subtree();
+                continue;
+            }
+            hints(event);
         }
-        hints(event);
-    }
+    });
     if let Some(range_limit) = range_limit {
         acc.retain(|hint| range_limit.contains_range(hint.range));
     }
@@ -736,7 +738,7 @@ fn label_of_ty(
         config: &InlayHintsConfig,
         display_target: DisplayTarget,
     ) -> Result<(), HirDisplayError> {
-        let iter_item_type = salsa::attach(sema.db, || hint_iterator(sema, famous_defs, ty));
+        let iter_item_type = hint_iterator(sema, famous_defs, ty);
         match iter_item_type {
             Some((iter_trait, item, ty)) => {
                 const LABEL_START: &str = "impl ";