about summary refs log tree commit diff
path: root/src/tools/rust-analyzer/crates/ide-ssr
diff options
context:
space:
mode:
authorjackh726 <git@jackhuey.me>2025-08-01 14:29:21 +0000
committerjackh726 <git@jackhuey.me>2025-08-09 16:08:58 +0000
commiteb2bbbb9134ae3fc4d043ea12b3546b73cd90efd (patch)
treeecfb46ef30ec9fd6fd94ecf8121ccd1e0a4bf8dc /src/tools/rust-analyzer/crates/ide-ssr
parent840d8130a13a1123886922fa1d581be3e5717a01 (diff)
downloadrust-eb2bbbb9134ae3fc4d043ea12b3546b73cd90efd.tar.gz
rust-eb2bbbb9134ae3fc4d043ea12b3546b73cd90efd.zip
Implement next trait solver
Diffstat (limited to 'src/tools/rust-analyzer/crates/ide-ssr')
-rw-r--r--src/tools/rust-analyzer/crates/ide-ssr/src/resolving.rs26
1 files changed, 15 insertions, 11 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-ssr/src/resolving.rs b/src/tools/rust-analyzer/crates/ide-ssr/src/resolving.rs
index a4e2cfbaee2..1d5f5adf2ee 100644
--- a/src/tools/rust-analyzer/crates/ide-ssr/src/resolving.rs
+++ b/src/tools/rust-analyzer/crates/ide-ssr/src/resolving.rs
@@ -1,7 +1,7 @@
 //! This module is responsible for resolving paths within rules.
 
 use hir::AsAssocItem;
-use ide_db::FxHashMap;
+use ide_db::{FxHashMap, base_db::salsa};
 use parsing::Placeholder;
 use syntax::{
     SmolStr, SyntaxKind, SyntaxNode, SyntaxToken,
@@ -48,16 +48,20 @@ impl<'db> ResolvedRule<'db> {
         resolution_scope: &ResolutionScope<'db>,
         index: usize,
     ) -> Result<ResolvedRule<'db>, SsrError> {
-        let resolver =
-            Resolver { resolution_scope, placeholders_by_stand_in: rule.placeholders_by_stand_in };
-        let resolved_template = match rule.template {
-            Some(template) => Some(resolver.resolve_pattern_tree(template)?),
-            None => None,
-        };
-        Ok(ResolvedRule {
-            pattern: resolver.resolve_pattern_tree(rule.pattern)?,
-            template: resolved_template,
-            index,
+        salsa::attach(resolution_scope.scope.db, || {
+            let resolver = Resolver {
+                resolution_scope,
+                placeholders_by_stand_in: rule.placeholders_by_stand_in,
+            };
+            let resolved_template = match rule.template {
+                Some(template) => Some(resolver.resolve_pattern_tree(template)?),
+                None => None,
+            };
+            Ok(ResolvedRule {
+                pattern: resolver.resolve_pattern_tree(rule.pattern)?,
+                template: resolved_template,
+                index,
+            })
         })
     }