From 7ffc7d33082475ffd3b8768be001af5b8988a54b Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 21 Nov 2018 18:20:44 +0300 Subject: Move path completion to descriptors --- crates/ra_analysis/src/descriptors/module/mod.rs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'crates/ra_analysis/src/descriptors/module/mod.rs') diff --git a/crates/ra_analysis/src/descriptors/module/mod.rs b/crates/ra_analysis/src/descriptors/module/mod.rs index cfdffcdbc..a7e41e3db 100644 --- a/crates/ra_analysis/src/descriptors/module/mod.rs +++ b/crates/ra_analysis/src/descriptors/module/mod.rs @@ -14,11 +14,11 @@ use relative_path::RelativePathBuf; use crate::{ db::SyntaxDatabase, syntax_ptr::SyntaxPtr, FileId, FilePosition, Cancelable, - descriptors::DescriptorDatabase, + descriptors::{Path, PathKind, DescriptorDatabase}, input::SourceRootId }; -pub(crate) use self::{nameres::ModuleScope}; +pub(crate) use self::nameres::ModuleScope; /// `ModuleDescriptor` is API entry point to get all the information /// about a particular module. @@ -131,6 +131,19 @@ impl ModuleDescriptor { Ok(res) } + pub(crate) fn resolve_path(&self, path: Path) -> Option { + let mut curr = match path.kind { + PathKind::Crate => self.crate_root(), + PathKind::Self_ | PathKind::Plain => self.clone(), + PathKind::Super => self.parent()?, + }; + let segments = path.segments; + for name in segments { + curr = curr.child(&name)?; + } + Some(curr) + } + pub fn problems(&self, db: &impl DescriptorDatabase) -> Vec<(SyntaxNode, Problem)> { self.module_id.problems(&self.tree, db) } -- cgit v1.2.3