Unnamed repository; edit this file 'description' to name the repository.
sema parse_or_expand
Jake Heinz 2021-11-27
parent 0447be7 · commit a69af9d
-rw-r--r--crates/hir/src/semantics.rs10
-rw-r--r--crates/ide_db/src/items_locator.rs3
2 files changed, 11 insertions, 2 deletions
diff --git a/crates/hir/src/semantics.rs b/crates/hir/src/semantics.rs
index 281e6c65dc..27ba42ce1a 100644
--- a/crates/hir/src/semantics.rs
+++ b/crates/hir/src/semantics.rs
@@ -143,6 +143,10 @@ impl<'db, DB: HirDatabase> Semantics<'db, DB> {
self.imp.parse(file_id)
}
+ pub fn parse_or_expand(&self, file_id: HirFileId) -> Option<SyntaxNode> {
+ self.imp.parse_or_expand(file_id)
+ }
+
pub fn expand(&self, macro_call: &ast::MacroCall) -> Option<SyntaxNode> {
self.imp.expand(macro_call)
}
@@ -416,6 +420,12 @@ impl<'db> SemanticsImpl<'db> {
tree
}
+ fn parse_or_expand(&self, file_id: HirFileId) -> Option<SyntaxNode> {
+ let node = self.db.parse_or_expand(file_id)?;
+ self.cache(node.clone(), file_id);
+ Some(node)
+ }
+
fn expand(&self, macro_call: &ast::MacroCall) -> Option<SyntaxNode> {
let sa = self.analyze(macro_call.syntax());
let file_id = sa.expand(self.db, InFile::new(sa.file_id, macro_call))?;
diff --git a/crates/ide_db/src/items_locator.rs b/crates/ide_db/src/items_locator.rs
index 33bb14adde..788cfdc039 100644
--- a/crates/ide_db/src/items_locator.rs
+++ b/crates/ide_db/src/items_locator.rs
@@ -4,7 +4,6 @@
//! are located in different caches, with different APIs.
use either::Either;
use hir::{
- db::AstDatabase,
import_map::{self, ImportKind},
AsAssocItem, Crate, ItemInNs, Semantics,
};
@@ -136,7 +135,7 @@ fn get_name_definition(
let _p = profile::span("get_name_definition");
let file_id = import_candidate.file_id;
- let candidate_node = import_candidate.ptr.to_node(&sema.db.parse_or_expand(file_id)?);
+ let candidate_node = import_candidate.ptr.to_node(&sema.parse_or_expand(file_id)?);
let candidate_name_node = if candidate_node.kind() != NAME {
candidate_node.children().find(|it| it.kind() == NAME)?
} else {