Make resolve_path cancelable

This commit is contained in:
Aleksey Kladov 2018-11-27 16:30:02 +03:00
parent 6bb06addf8
commit 5b0e347f89
2 changed files with 10 additions and 2 deletions

View file

@ -157,7 +157,7 @@ fn complete_path(
return Ok(());
}
path.segments.pop();
let target_module = match module.resolve_path(path) {
let target_module = match module.resolve_path(path)? {
None => return Ok(()),
Some(it) => it,
};

View file

@ -133,7 +133,15 @@ impl ModuleDescriptor {
Ok(res)
}
pub(crate) fn resolve_path(&self, path: Path) -> Option<ModuleDescriptor> {
pub(crate) fn resolve_path(&self, path: Path) -> Cancelable<Option<ModuleDescriptor>> {
let res = match self.do_resolve_path(path) {
None => return Ok(None),
Some(it) => it,
};
Ok(Some(res))
}
fn do_resolve_path(&self, path: Path) -> Option<ModuleDescriptor> {
let mut curr = match path.kind {
PathKind::Crate => self.crate_root(),
PathKind::Self_ | PathKind::Plain => self.clone(),