diff options
Diffstat (limited to 'crates')
-rw-r--r-- | crates/ra_hir/src/code_model_api.rs | 4 | ||||
-rw-r--r-- | crates/ra_hir/src/code_model_impl/module.rs | 33 | ||||
-rw-r--r-- | crates/ra_hir/src/db.rs | 2 | ||||
-rw-r--r-- | crates/ra_hir/src/nameres.rs | 42 | ||||
-rw-r--r-- | crates/ra_hir/src/nameres/tests.rs | 12 | ||||
-rw-r--r-- | crates/ra_hir/src/query_definitions.rs | 11 | ||||
-rw-r--r-- | crates/ra_hir/src/ty.rs | 6 | ||||
-rw-r--r-- | crates/ra_ide_api/src/completion/complete_path.rs | 4 | ||||
-rw-r--r-- | crates/ra_ide_api/src/completion/complete_scope.rs | 2 | ||||
-rw-r--r-- | crates/ra_ide_api/src/goto_definition.rs | 2 |
10 files changed, 52 insertions, 66 deletions
diff --git a/crates/ra_hir/src/code_model_api.rs b/crates/ra_hir/src/code_model_api.rs index 4d7925ac4..7ccd29e2f 100644 --- a/crates/ra_hir/src/code_model_api.rs +++ b/crates/ra_hir/src/code_model_api.rs | |||
@@ -134,11 +134,11 @@ impl Module { | |||
134 | } | 134 | } |
135 | 135 | ||
136 | /// Returns a `ModuleScope`: a set of items, visible in this module. | 136 | /// Returns a `ModuleScope`: a set of items, visible in this module. |
137 | pub fn scope(&self, db: &impl HirDatabase) -> Cancelable<ModuleScope> { | 137 | pub fn scope(&self, db: &impl HirDatabase) -> ModuleScope { |
138 | self.scope_impl(db) | 138 | self.scope_impl(db) |
139 | } | 139 | } |
140 | 140 | ||
141 | pub fn resolve_path(&self, db: &impl HirDatabase, path: &Path) -> Cancelable<PerNs<DefId>> { | 141 | pub fn resolve_path(&self, db: &impl HirDatabase, path: &Path) -> PerNs<DefId> { |
142 | self.resolve_path_impl(db, path) | 142 | self.resolve_path_impl(db, path) |
143 | } | 143 | } |
144 | 144 | ||
diff --git a/crates/ra_hir/src/code_model_impl/module.rs b/crates/ra_hir/src/code_model_impl/module.rs index 331b0500e..04301ae53 100644 --- a/crates/ra_hir/src/code_model_impl/module.rs +++ b/crates/ra_hir/src/code_model_impl/module.rs | |||
@@ -114,18 +114,13 @@ impl Module { | |||
114 | } | 114 | } |
115 | 115 | ||
116 | /// Returns a `ModuleScope`: a set of items, visible in this module. | 116 | /// Returns a `ModuleScope`: a set of items, visible in this module. |
117 | pub fn scope_impl(&self, db: &impl HirDatabase) -> Cancelable<ModuleScope> { | 117 | pub fn scope_impl(&self, db: &impl HirDatabase) -> ModuleScope { |
118 | let loc = self.def_id.loc(db); | 118 | let loc = self.def_id.loc(db); |
119 | let item_map = db.item_map(loc.source_root_id)?; | 119 | let item_map = db.item_map(loc.source_root_id); |
120 | let res = item_map.per_module[&loc.module_id].clone(); | 120 | item_map.per_module[&loc.module_id].clone() |
121 | Ok(res) | ||
122 | } | 121 | } |
123 | 122 | ||
124 | pub fn resolve_path_impl( | 123 | pub fn resolve_path_impl(&self, db: &impl HirDatabase, path: &Path) -> PerNs<DefId> { |
125 | &self, | ||
126 | db: &impl HirDatabase, | ||
127 | path: &Path, | ||
128 | ) -> Cancelable<PerNs<DefId>> { | ||
129 | let mut curr_per_ns = PerNs::types( | 124 | let mut curr_per_ns = PerNs::types( |
130 | match path.kind { | 125 | match path.kind { |
131 | PathKind::Crate => self.crate_root(db), | 126 | PathKind::Crate => self.crate_root(db), |
@@ -134,7 +129,7 @@ impl Module { | |||
134 | if let Some(p) = self.parent(db) { | 129 | if let Some(p) = self.parent(db) { |
135 | p | 130 | p |
136 | } else { | 131 | } else { |
137 | return Ok(PerNs::none()); | 132 | return PerNs::none(); |
138 | } | 133 | } |
139 | } | 134 | } |
140 | } | 135 | } |
@@ -146,7 +141,7 @@ impl Module { | |||
146 | let curr = if let Some(r) = curr_per_ns.as_ref().take_types() { | 141 | let curr = if let Some(r) = curr_per_ns.as_ref().take_types() { |
147 | r | 142 | r |
148 | } else { | 143 | } else { |
149 | return Ok(PerNs::none()); | 144 | return PerNs::none(); |
150 | }; | 145 | }; |
151 | let module = match curr.resolve(db) { | 146 | let module = match curr.resolve(db) { |
152 | Def::Module(it) => it, | 147 | Def::Module(it) => it, |
@@ -157,28 +152,28 @@ impl Module { | |||
157 | e.variants(db).into_iter().find(|(n, _variant)| n == name); | 152 | e.variants(db).into_iter().find(|(n, _variant)| n == name); |
158 | 153 | ||
159 | if let Some((_n, variant)) = matching_variant { | 154 | if let Some((_n, variant)) = matching_variant { |
160 | return Ok(PerNs::both(variant.def_id(), e.def_id())); | 155 | return PerNs::both(variant.def_id(), e.def_id()); |
161 | } else { | 156 | } else { |
162 | return Ok(PerNs::none()); | 157 | return PerNs::none(); |
163 | } | 158 | } |
164 | } else if segments.len() == idx { | 159 | } else if segments.len() == idx { |
165 | // enum | 160 | // enum |
166 | return Ok(PerNs::types(e.def_id())); | 161 | return PerNs::types(e.def_id()); |
167 | } else { | 162 | } else { |
168 | // malformed enum? | 163 | // malformed enum? |
169 | return Ok(PerNs::none()); | 164 | return PerNs::none(); |
170 | } | 165 | } |
171 | } | 166 | } |
172 | _ => return Ok(PerNs::none()), | 167 | _ => return PerNs::none(), |
173 | }; | 168 | }; |
174 | let scope = module.scope(db)?; | 169 | let scope = module.scope(db); |
175 | curr_per_ns = if let Some(r) = scope.get(&name) { | 170 | curr_per_ns = if let Some(r) = scope.get(&name) { |
176 | r.def_id | 171 | r.def_id |
177 | } else { | 172 | } else { |
178 | return Ok(PerNs::none()); | 173 | return PerNs::none(); |
179 | }; | 174 | }; |
180 | } | 175 | } |
181 | Ok(curr_per_ns) | 176 | curr_per_ns |
182 | } | 177 | } |
183 | 178 | ||
184 | pub fn problems_impl( | 179 | pub fn problems_impl( |
diff --git a/crates/ra_hir/src/db.rs b/crates/ra_hir/src/db.rs index d20c03f43..1466c3438 100644 --- a/crates/ra_hir/src/db.rs +++ b/crates/ra_hir/src/db.rs | |||
@@ -87,7 +87,7 @@ pub trait HirDatabase: SyntaxDatabase | |||
87 | use fn query_definitions::input_module_items; | 87 | use fn query_definitions::input_module_items; |
88 | } | 88 | } |
89 | 89 | ||
90 | fn item_map(source_root_id: SourceRootId) -> Cancelable<Arc<ItemMap>> { | 90 | fn item_map(source_root_id: SourceRootId) -> Arc<ItemMap> { |
91 | type ItemMapQuery; | 91 | type ItemMapQuery; |
92 | use fn query_definitions::item_map; | 92 | use fn query_definitions::item_map; |
93 | } | 93 | } |
diff --git a/crates/ra_hir/src/nameres.rs b/crates/ra_hir/src/nameres.rs index e51cbe786..484f668d0 100644 --- a/crates/ra_hir/src/nameres.rs +++ b/crates/ra_hir/src/nameres.rs | |||
@@ -22,7 +22,7 @@ use ra_syntax::{ | |||
22 | SyntaxKind::{self, *}, | 22 | SyntaxKind::{self, *}, |
23 | ast::{self, AstNode} | 23 | ast::{self, AstNode} |
24 | }; | 24 | }; |
25 | use ra_db::{SourceRootId, Cancelable, FileId}; | 25 | use ra_db::{SourceRootId, FileId}; |
26 | 26 | ||
27 | use crate::{ | 27 | use crate::{ |
28 | HirFileId, | 28 | HirFileId, |
@@ -319,30 +319,26 @@ where | |||
319 | } | 319 | } |
320 | } | 320 | } |
321 | 321 | ||
322 | pub(crate) fn resolve(mut self) -> Cancelable<ItemMap> { | 322 | pub(crate) fn resolve(mut self) -> ItemMap { |
323 | for (&module_id, items) in self.input.iter() { | 323 | for (&module_id, items) in self.input.iter() { |
324 | self.populate_module(module_id, Arc::clone(items))?; | 324 | self.populate_module(module_id, Arc::clone(items)); |
325 | } | 325 | } |
326 | 326 | ||
327 | loop { | 327 | loop { |
328 | let processed_imports_count = self.processed_imports.len(); | 328 | let processed_imports_count = self.processed_imports.len(); |
329 | for &module_id in self.input.keys() { | 329 | for &module_id in self.input.keys() { |
330 | self.db.check_canceled(); | 330 | self.db.check_canceled(); |
331 | self.resolve_imports(module_id)?; | 331 | self.resolve_imports(module_id); |
332 | } | 332 | } |
333 | if processed_imports_count == self.processed_imports.len() { | 333 | if processed_imports_count == self.processed_imports.len() { |
334 | // no new imports resolved | 334 | // no new imports resolved |
335 | break; | 335 | break; |
336 | } | 336 | } |
337 | } | 337 | } |
338 | Ok(self.result) | 338 | self.result |
339 | } | 339 | } |
340 | 340 | ||
341 | fn populate_module( | 341 | fn populate_module(&mut self, module_id: ModuleId, input: Arc<InputModuleItems>) { |
342 | &mut self, | ||
343 | module_id: ModuleId, | ||
344 | input: Arc<InputModuleItems>, | ||
345 | ) -> Cancelable<()> { | ||
346 | let mut module_items = ModuleScope::default(); | 342 | let mut module_items = ModuleScope::default(); |
347 | 343 | ||
348 | // Populate extern crates prelude | 344 | // Populate extern crates prelude |
@@ -415,7 +411,6 @@ where | |||
415 | } | 411 | } |
416 | 412 | ||
417 | self.result.per_module.insert(module_id, module_items); | 413 | self.result.per_module.insert(module_id, module_items); |
418 | Ok(()) | ||
419 | } | 414 | } |
420 | 415 | ||
421 | fn add_module_item(&self, module_items: &mut ModuleScope, name: Name, def_id: PerNs<DefId>) { | 416 | fn add_module_item(&self, module_items: &mut ModuleScope, name: Name, def_id: PerNs<DefId>) { |
@@ -426,24 +421,23 @@ where | |||
426 | module_items.items.insert(name, resolution); | 421 | module_items.items.insert(name, resolution); |
427 | } | 422 | } |
428 | 423 | ||
429 | fn resolve_imports(&mut self, module_id: ModuleId) -> Cancelable<()> { | 424 | fn resolve_imports(&mut self, module_id: ModuleId) { |
430 | for (i, import) in self.input[&module_id].imports.iter().enumerate() { | 425 | for (i, import) in self.input[&module_id].imports.iter().enumerate() { |
431 | if self.processed_imports.contains(&(module_id, i)) { | 426 | if self.processed_imports.contains(&(module_id, i)) { |
432 | // already done | 427 | // already done |
433 | continue; | 428 | continue; |
434 | } | 429 | } |
435 | if self.resolve_import(module_id, import)? { | 430 | if self.resolve_import(module_id, import) { |
436 | log::debug!("import {:?} resolved (or definite error)", import); | 431 | log::debug!("import {:?} resolved (or definite error)", import); |
437 | self.processed_imports.insert((module_id, i)); | 432 | self.processed_imports.insert((module_id, i)); |
438 | } | 433 | } |
439 | } | 434 | } |
440 | Ok(()) | ||
441 | } | 435 | } |
442 | 436 | ||
443 | fn resolve_import(&mut self, module_id: ModuleId, import: &Import) -> Cancelable<bool> { | 437 | fn resolve_import(&mut self, module_id: ModuleId, import: &Import) -> bool { |
444 | log::debug!("resolving import: {:?}", import); | 438 | log::debug!("resolving import: {:?}", import); |
445 | let ptr = match import.kind { | 439 | let ptr = match import.kind { |
446 | ImportKind::Glob => return Ok(false), | 440 | ImportKind::Glob => return false, |
447 | ImportKind::Named(ptr) => ptr, | 441 | ImportKind::Named(ptr) => ptr, |
448 | }; | 442 | }; |
449 | 443 | ||
@@ -455,7 +449,7 @@ where | |||
455 | None => { | 449 | None => { |
456 | // TODO: error | 450 | // TODO: error |
457 | log::debug!("super path in root module"); | 451 | log::debug!("super path in root module"); |
458 | return Ok(true); // this can't suddenly resolve if we just resolve some other imports | 452 | return true; // this can't suddenly resolve if we just resolve some other imports |
459 | } | 453 | } |
460 | } | 454 | } |
461 | } | 455 | } |
@@ -469,7 +463,7 @@ where | |||
469 | Some(res) if !res.def_id.is_none() => res.def_id, | 463 | Some(res) if !res.def_id.is_none() => res.def_id, |
470 | _ => { | 464 | _ => { |
471 | log::debug!("path segment {:?} not found", name); | 465 | log::debug!("path segment {:?} not found", name); |
472 | return Ok(false); | 466 | return false; |
473 | } | 467 | } |
474 | }; | 468 | }; |
475 | 469 | ||
@@ -481,7 +475,7 @@ where | |||
481 | "path segment {:?} resolved to value only, but is not last", | 475 | "path segment {:?} resolved to value only, but is not last", |
482 | name | 476 | name |
483 | ); | 477 | ); |
484 | return Ok(false); | 478 | return false; |
485 | }; | 479 | }; |
486 | curr = match type_def_id.loc(self.db) { | 480 | curr = match type_def_id.loc(self.db) { |
487 | DefLoc { | 481 | DefLoc { |
@@ -499,7 +493,7 @@ where | |||
499 | kind: PathKind::Crate, | 493 | kind: PathKind::Crate, |
500 | }; | 494 | }; |
501 | log::debug!("resolving {:?} in other source root", path); | 495 | log::debug!("resolving {:?} in other source root", path); |
502 | let def_id = module.resolve_path(self.db, &path)?; | 496 | let def_id = module.resolve_path(self.db, &path); |
503 | if !def_id.is_none() { | 497 | if !def_id.is_none() { |
504 | let name = path.segments.last().unwrap(); | 498 | let name = path.segments.last().unwrap(); |
505 | self.update(module_id, |items| { | 499 | self.update(module_id, |items| { |
@@ -515,10 +509,10 @@ where | |||
515 | import, | 509 | import, |
516 | def_id.map(|did| did.loc(self.db)) | 510 | def_id.map(|did| did.loc(self.db)) |
517 | ); | 511 | ); |
518 | return Ok(true); | 512 | return true; |
519 | } else { | 513 | } else { |
520 | log::debug!("rest of path did not resolve in other source root"); | 514 | log::debug!("rest of path did not resolve in other source root"); |
521 | return Ok(true); | 515 | return true; |
522 | } | 516 | } |
523 | } | 517 | } |
524 | } | 518 | } |
@@ -528,7 +522,7 @@ where | |||
528 | name, | 522 | name, |
529 | type_def_id.loc(self.db) | 523 | type_def_id.loc(self.db) |
530 | ); | 524 | ); |
531 | return Ok(true); // this resolved to a non-module, so the path won't ever resolve | 525 | return true; // this resolved to a non-module, so the path won't ever resolve |
532 | } | 526 | } |
533 | } | 527 | } |
534 | } else { | 528 | } else { |
@@ -547,7 +541,7 @@ where | |||
547 | }) | 541 | }) |
548 | } | 542 | } |
549 | } | 543 | } |
550 | Ok(true) | 544 | true |
551 | } | 545 | } |
552 | 546 | ||
553 | fn update(&mut self, module_id: ModuleId, f: impl FnOnce(&mut ModuleScope)) { | 547 | fn update(&mut self, module_id: ModuleId, f: impl FnOnce(&mut ModuleScope)) { |
diff --git a/crates/ra_hir/src/nameres/tests.rs b/crates/ra_hir/src/nameres/tests.rs index ea8ab4c83..9a0474045 100644 --- a/crates/ra_hir/src/nameres/tests.rs +++ b/crates/ra_hir/src/nameres/tests.rs | |||
@@ -17,7 +17,7 @@ fn item_map(fixture: &str) -> (Arc<ItemMap>, ModuleId) { | |||
17 | let source_root = db.file_source_root(pos.file_id); | 17 | let source_root = db.file_source_root(pos.file_id); |
18 | let module = crate::source_binder::module_from_position(&db, pos).unwrap(); | 18 | let module = crate::source_binder::module_from_position(&db, pos).unwrap(); |
19 | let module_id = module.def_id.loc(&db).module_id; | 19 | let module_id = module.def_id.loc(&db).module_id; |
20 | (db.item_map(source_root).unwrap(), module_id) | 20 | (db.item_map(source_root), module_id) |
21 | } | 21 | } |
22 | 22 | ||
23 | fn check_module_item_map(map: &ItemMap, module_id: ModuleId, expected: &str) { | 23 | fn check_module_item_map(map: &ItemMap, module_id: ModuleId, expected: &str) { |
@@ -242,7 +242,7 @@ fn item_map_across_crates() { | |||
242 | let source_root = db.file_source_root(main_id); | 242 | let source_root = db.file_source_root(main_id); |
243 | let module = crate::source_binder::module_from_file_id(&db, main_id).unwrap(); | 243 | let module = crate::source_binder::module_from_file_id(&db, main_id).unwrap(); |
244 | let module_id = module.def_id.loc(&db).module_id; | 244 | let module_id = module.def_id.loc(&db).module_id; |
245 | let item_map = db.item_map(source_root).unwrap(); | 245 | let item_map = db.item_map(source_root); |
246 | 246 | ||
247 | check_module_item_map( | 247 | check_module_item_map( |
248 | &item_map, | 248 | &item_map, |
@@ -294,7 +294,7 @@ fn import_across_source_roots() { | |||
294 | 294 | ||
295 | let module = crate::source_binder::module_from_file_id(&db, main_id).unwrap(); | 295 | let module = crate::source_binder::module_from_file_id(&db, main_id).unwrap(); |
296 | let module_id = module.def_id.loc(&db).module_id; | 296 | let module_id = module.def_id.loc(&db).module_id; |
297 | let item_map = db.item_map(source_root).unwrap(); | 297 | let item_map = db.item_map(source_root); |
298 | 298 | ||
299 | check_module_item_map( | 299 | check_module_item_map( |
300 | &item_map, | 300 | &item_map, |
@@ -337,7 +337,7 @@ fn reexport_across_crates() { | |||
337 | let source_root = db.file_source_root(main_id); | 337 | let source_root = db.file_source_root(main_id); |
338 | let module = crate::source_binder::module_from_file_id(&db, main_id).unwrap(); | 338 | let module = crate::source_binder::module_from_file_id(&db, main_id).unwrap(); |
339 | let module_id = module.def_id.loc(&db).module_id; | 339 | let module_id = module.def_id.loc(&db).module_id; |
340 | let item_map = db.item_map(source_root).unwrap(); | 340 | let item_map = db.item_map(source_root); |
341 | 341 | ||
342 | check_module_item_map( | 342 | check_module_item_map( |
343 | &item_map, | 343 | &item_map, |
@@ -354,7 +354,7 @@ fn check_item_map_is_not_recomputed(initial: &str, file_change: &str) { | |||
354 | let source_root = db.file_source_root(pos.file_id); | 354 | let source_root = db.file_source_root(pos.file_id); |
355 | { | 355 | { |
356 | let events = db.log_executed(|| { | 356 | let events = db.log_executed(|| { |
357 | db.item_map(source_root).unwrap(); | 357 | db.item_map(source_root); |
358 | }); | 358 | }); |
359 | assert!(format!("{:?}", events).contains("item_map")) | 359 | assert!(format!("{:?}", events).contains("item_map")) |
360 | } | 360 | } |
@@ -363,7 +363,7 @@ fn check_item_map_is_not_recomputed(initial: &str, file_change: &str) { | |||
363 | 363 | ||
364 | { | 364 | { |
365 | let events = db.log_executed(|| { | 365 | let events = db.log_executed(|| { |
366 | db.item_map(source_root).unwrap(); | 366 | db.item_map(source_root); |
367 | }); | 367 | }); |
368 | assert!( | 368 | assert!( |
369 | !format!("{:?}", events).contains("item_map"), | 369 | !format!("{:?}", events).contains("item_map"), |
diff --git a/crates/ra_hir/src/query_definitions.rs b/crates/ra_hir/src/query_definitions.rs index 8f33ec707..24cb5c752 100644 --- a/crates/ra_hir/src/query_definitions.rs +++ b/crates/ra_hir/src/query_definitions.rs | |||
@@ -8,7 +8,7 @@ use ra_syntax::{ | |||
8 | AstNode, SyntaxNode, TreeArc, | 8 | AstNode, SyntaxNode, TreeArc, |
9 | ast::{self, ModuleItemOwner} | 9 | ast::{self, ModuleItemOwner} |
10 | }; | 10 | }; |
11 | use ra_db::{SourceRootId, Cancelable,}; | 11 | use ra_db::SourceRootId; |
12 | 12 | ||
13 | use crate::{ | 13 | use crate::{ |
14 | SourceFileItems, SourceItemId, DefId, HirFileId, ModuleSource, | 14 | SourceFileItems, SourceItemId, DefId, HirFileId, ModuleSource, |
@@ -93,10 +93,7 @@ pub(super) fn input_module_items( | |||
93 | Arc::new(res) | 93 | Arc::new(res) |
94 | } | 94 | } |
95 | 95 | ||
96 | pub(super) fn item_map( | 96 | pub(super) fn item_map(db: &impl HirDatabase, source_root: SourceRootId) -> Arc<ItemMap> { |
97 | db: &impl HirDatabase, | ||
98 | source_root: SourceRootId, | ||
99 | ) -> Cancelable<Arc<ItemMap>> { | ||
100 | let start = Instant::now(); | 97 | let start = Instant::now(); |
101 | let module_tree = db.module_tree(source_root); | 98 | let module_tree = db.module_tree(source_root); |
102 | let input = module_tree | 99 | let input = module_tree |
@@ -105,8 +102,8 @@ pub(super) fn item_map( | |||
105 | .collect::<FxHashMap<_, _>>(); | 102 | .collect::<FxHashMap<_, _>>(); |
106 | 103 | ||
107 | let resolver = Resolver::new(db, &input, source_root, module_tree); | 104 | let resolver = Resolver::new(db, &input, source_root, module_tree); |
108 | let res = resolver.resolve()?; | 105 | let res = resolver.resolve(); |
109 | let elapsed = start.elapsed(); | 106 | let elapsed = start.elapsed(); |
110 | log::info!("item_map: {:?}", elapsed); | 107 | log::info!("item_map: {:?}", elapsed); |
111 | Ok(Arc::new(res)) | 108 | Arc::new(res) |
112 | } | 109 | } |
diff --git a/crates/ra_hir/src/ty.rs b/crates/ra_hir/src/ty.rs index 54eece165..6df7820ea 100644 --- a/crates/ra_hir/src/ty.rs +++ b/crates/ra_hir/src/ty.rs | |||
@@ -349,7 +349,7 @@ impl Ty { | |||
349 | } | 349 | } |
350 | 350 | ||
351 | // Resolve in module (in type namespace) | 351 | // Resolve in module (in type namespace) |
352 | let resolved = if let Some(r) = module.resolve_path(db, path)?.take_types() { | 352 | let resolved = if let Some(r) = module.resolve_path(db, path).take_types() { |
353 | r | 353 | r |
354 | } else { | 354 | } else { |
355 | return Ok(Ty::Unknown); | 355 | return Ok(Ty::Unknown); |
@@ -860,7 +860,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
860 | }; | 860 | }; |
861 | 861 | ||
862 | // resolve in module | 862 | // resolve in module |
863 | let resolved = ctry!(self.module.resolve_path(self.db, &path)?.take_values()); | 863 | let resolved = ctry!(self.module.resolve_path(self.db, &path).take_values()); |
864 | let ty = self.db.type_for_def(resolved)?; | 864 | let ty = self.db.type_for_def(resolved)?; |
865 | let ty = self.insert_type_vars(ty); | 865 | let ty = self.insert_type_vars(ty); |
866 | Ok(Some(ty)) | 866 | Ok(Some(ty)) |
@@ -872,7 +872,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> { | |||
872 | } else { | 872 | } else { |
873 | return Ok((Ty::Unknown, None)); | 873 | return Ok((Ty::Unknown, None)); |
874 | }; | 874 | }; |
875 | let def_id = if let Some(def_id) = self.module.resolve_path(self.db, &path)?.take_types() { | 875 | let def_id = if let Some(def_id) = self.module.resolve_path(self.db, &path).take_types() { |
876 | def_id | 876 | def_id |
877 | } else { | 877 | } else { |
878 | return Ok((Ty::Unknown, None)); | 878 | return Ok((Ty::Unknown, None)); |
diff --git a/crates/ra_ide_api/src/completion/complete_path.rs b/crates/ra_ide_api/src/completion/complete_path.rs index 207a509b3..42468681a 100644 --- a/crates/ra_ide_api/src/completion/complete_path.rs +++ b/crates/ra_ide_api/src/completion/complete_path.rs | |||
@@ -8,13 +8,13 @@ pub(super) fn complete_path(acc: &mut Completions, ctx: &CompletionContext) -> C | |||
8 | (Some(path), Some(module)) => (path.clone(), module), | 8 | (Some(path), Some(module)) => (path.clone(), module), |
9 | _ => return Ok(()), | 9 | _ => return Ok(()), |
10 | }; | 10 | }; |
11 | let def_id = match module.resolve_path(ctx.db, &path)?.take_types() { | 11 | let def_id = match module.resolve_path(ctx.db, &path).take_types() { |
12 | Some(it) => it, | 12 | Some(it) => it, |
13 | None => return Ok(()), | 13 | None => return Ok(()), |
14 | }; | 14 | }; |
15 | match def_id.resolve(ctx.db) { | 15 | match def_id.resolve(ctx.db) { |
16 | hir::Def::Module(module) => { | 16 | hir::Def::Module(module) => { |
17 | let module_scope = module.scope(ctx.db)?; | 17 | let module_scope = module.scope(ctx.db); |
18 | for (name, res) in module_scope.entries() { | 18 | for (name, res) in module_scope.entries() { |
19 | CompletionItem::new(CompletionKind::Reference, name.to_string()) | 19 | CompletionItem::new(CompletionKind::Reference, name.to_string()) |
20 | .from_resolution(ctx, res) | 20 | .from_resolution(ctx, res) |
diff --git a/crates/ra_ide_api/src/completion/complete_scope.rs b/crates/ra_ide_api/src/completion/complete_scope.rs index fdb64895e..660c7d16e 100644 --- a/crates/ra_ide_api/src/completion/complete_scope.rs +++ b/crates/ra_ide_api/src/completion/complete_scope.rs | |||
@@ -19,7 +19,7 @@ pub(super) fn complete_scope(acc: &mut Completions, ctx: &CompletionContext) -> | |||
19 | complete_fn(acc, &scopes, ctx.offset); | 19 | complete_fn(acc, &scopes, ctx.offset); |
20 | } | 20 | } |
21 | 21 | ||
22 | let module_scope = module.scope(ctx.db)?; | 22 | let module_scope = module.scope(ctx.db); |
23 | let (file_id, _) = module.definition_source(ctx.db); | 23 | let (file_id, _) = module.definition_source(ctx.db); |
24 | module_scope | 24 | module_scope |
25 | .entries() | 25 | .entries() |
diff --git a/crates/ra_ide_api/src/goto_definition.rs b/crates/ra_ide_api/src/goto_definition.rs index 5d522181b..cdd8e211d 100644 --- a/crates/ra_ide_api/src/goto_definition.rs +++ b/crates/ra_ide_api/src/goto_definition.rs | |||
@@ -85,7 +85,7 @@ pub(crate) fn reference_definition( | |||
85 | .find_map(ast::Path::cast) | 85 | .find_map(ast::Path::cast) |
86 | .and_then(hir::Path::from_ast) | 86 | .and_then(hir::Path::from_ast) |
87 | { | 87 | { |
88 | let resolved = module.resolve_path(db, &path)?; | 88 | let resolved = module.resolve_path(db, &path); |
89 | if let Some(def_id) = resolved.take_types().or(resolved.take_values()) { | 89 | if let Some(def_id) = resolved.take_types().or(resolved.take_values()) { |
90 | if let Some(target) = NavigationTarget::from_def(db, def_id.resolve(db)) { | 90 | if let Some(target) = NavigationTarget::from_def(db, def_id.resolve(db)) { |
91 | return Ok(Exact(target)); | 91 | return Ok(Exact(target)); |