aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2018-11-27 13:30:02 +0000
committerAleksey Kladov <[email protected]>2018-11-27 15:25:35 +0000
commit5b0e347f89be317d21fd894c0ccf4abee5645429 (patch)
tree571bc8be565fd37aa9f1bcd3f6e4aceeced273c2 /crates
parent6bb06addf8d5100cd1125c40d3dfa5f7613b42c1 (diff)
Make resolve_path cancelable
Diffstat (limited to 'crates')
-rw-r--r--crates/ra_analysis/src/completion/reference_completion.rs2
-rw-r--r--crates/ra_analysis/src/descriptors/module/mod.rs10
2 files changed, 10 insertions, 2 deletions
diff --git a/crates/ra_analysis/src/completion/reference_completion.rs b/crates/ra_analysis/src/completion/reference_completion.rs
index 1faa70a18..41df881b3 100644
--- a/crates/ra_analysis/src/completion/reference_completion.rs
+++ b/crates/ra_analysis/src/completion/reference_completion.rs
@@ -157,7 +157,7 @@ fn complete_path(
157 return Ok(()); 157 return Ok(());
158 } 158 }
159 path.segments.pop(); 159 path.segments.pop();
160 let target_module = match module.resolve_path(path) { 160 let target_module = match module.resolve_path(path)? {
161 None => return Ok(()), 161 None => return Ok(()),
162 Some(it) => it, 162 Some(it) => it,
163 }; 163 };
diff --git a/crates/ra_analysis/src/descriptors/module/mod.rs b/crates/ra_analysis/src/descriptors/module/mod.rs
index a6eaec178..f5238e239 100644
--- a/crates/ra_analysis/src/descriptors/module/mod.rs
+++ b/crates/ra_analysis/src/descriptors/module/mod.rs
@@ -133,7 +133,15 @@ impl ModuleDescriptor {
133 Ok(res) 133 Ok(res)
134 } 134 }
135 135
136 pub(crate) fn resolve_path(&self, path: Path) -> Option<ModuleDescriptor> { 136 pub(crate) fn resolve_path(&self, path: Path) -> Cancelable<Option<ModuleDescriptor>> {
137 let res = match self.do_resolve_path(path) {
138 None => return Ok(None),
139 Some(it) => it,
140 };
141 Ok(Some(res))
142 }
143
144 fn do_resolve_path(&self, path: Path) -> Option<ModuleDescriptor> {
137 let mut curr = match path.kind { 145 let mut curr = match path.kind {
138 PathKind::Crate => self.crate_root(), 146 PathKind::Crate => self.crate_root(),
139 PathKind::Self_ | PathKind::Plain => self.clone(), 147 PathKind::Self_ | PathKind::Plain => self.clone(),