Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir/src/semantics.rs')
-rw-r--r--crates/hir/src/semantics.rs19
1 files changed, 17 insertions, 2 deletions
diff --git a/crates/hir/src/semantics.rs b/crates/hir/src/semantics.rs
index f030c1862a..c576d07a0e 100644
--- a/crates/hir/src/semantics.rs
+++ b/crates/hir/src/semantics.rs
@@ -39,8 +39,8 @@ use stdx::TupleExt;
use syntax::{
algo::skip_trivia_token,
ast::{self, HasAttrs as _, HasGenericParams},
- AstNode, AstToken, Direction, SyntaxKind, SyntaxNode, SyntaxNodePtr, SyntaxToken, TextRange,
- TextSize,
+ AstNode, AstToken, Direction, SmolStr, SyntaxKind, SyntaxNode, SyntaxNodePtr, SyntaxToken,
+ TextRange, TextSize,
};
use triomphe::Arc;
@@ -1540,6 +1540,21 @@ impl<'db> SemanticsImpl<'db> {
Some(items.iter_items().map(|(item, _)| item.into()))
}
+ pub fn resolve_mod_path_relative(
+ &self,
+ to: Module,
+ segments: impl IntoIterator<Item = SmolStr>,
+ ) -> Option<impl Iterator<Item = ItemInNs>> {
+ let items = to.id.resolver(self.db.upcast()).resolve_module_path_in_items(
+ self.db.upcast(),
+ &ModPath::from_segments(
+ hir_def::path::PathKind::Plain,
+ segments.into_iter().map(|it| Name::new(&it, SyntaxContextId::ROOT)),
+ ),
+ );
+ Some(items.iter_items().map(|(item, _)| item.into()))
+ }
+
fn resolve_variant(&self, record_lit: ast::RecordExpr) -> Option<VariantId> {
self.analyze(record_lit.syntax())?.resolve_variant(self.db, record_lit)
}