diff options
Diffstat (limited to 'crates/ra_hir_def/src/lib.rs')
-rw-r--r-- | crates/ra_hir_def/src/lib.rs | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/crates/ra_hir_def/src/lib.rs b/crates/ra_hir_def/src/lib.rs index 5325a2760..edc59e5a8 100644 --- a/crates/ra_hir_def/src/lib.rs +++ b/crates/ra_hir_def/src/lib.rs | |||
@@ -43,6 +43,7 @@ pub mod child_by_source; | |||
43 | 43 | ||
44 | pub mod visibility; | 44 | pub mod visibility; |
45 | pub mod find_path; | 45 | pub mod find_path; |
46 | pub mod import_map; | ||
46 | 47 | ||
47 | #[cfg(test)] | 48 | #[cfg(test)] |
48 | mod test_db; | 49 | mod test_db; |
@@ -416,6 +417,7 @@ pub trait AsMacroCall { | |||
416 | fn as_call_id( | 417 | fn as_call_id( |
417 | &self, | 418 | &self, |
418 | db: &dyn db::DefDatabase, | 419 | db: &dyn db::DefDatabase, |
420 | krate: CrateId, | ||
419 | resolver: impl Fn(path::ModPath) -> Option<MacroDefId>, | 421 | resolver: impl Fn(path::ModPath) -> Option<MacroDefId>, |
420 | ) -> Option<MacroCallId>; | 422 | ) -> Option<MacroCallId>; |
421 | } | 423 | } |
@@ -424,13 +426,14 @@ impl AsMacroCall for InFile<&ast::MacroCall> { | |||
424 | fn as_call_id( | 426 | fn as_call_id( |
425 | &self, | 427 | &self, |
426 | db: &dyn db::DefDatabase, | 428 | db: &dyn db::DefDatabase, |
429 | krate: CrateId, | ||
427 | resolver: impl Fn(path::ModPath) -> Option<MacroDefId>, | 430 | resolver: impl Fn(path::ModPath) -> Option<MacroDefId>, |
428 | ) -> Option<MacroCallId> { | 431 | ) -> Option<MacroCallId> { |
429 | let ast_id = AstId::new(self.file_id, db.ast_id_map(self.file_id).ast_id(self.value)); | 432 | let ast_id = AstId::new(self.file_id, db.ast_id_map(self.file_id).ast_id(self.value)); |
430 | let h = Hygiene::new(db.upcast(), self.file_id); | 433 | let h = Hygiene::new(db.upcast(), self.file_id); |
431 | let path = path::ModPath::from_src(self.value.path()?, &h)?; | 434 | let path = path::ModPath::from_src(self.value.path()?, &h)?; |
432 | 435 | ||
433 | AstIdWithPath::new(ast_id.file_id, ast_id.value, path).as_call_id(db, resolver) | 436 | AstIdWithPath::new(ast_id.file_id, ast_id.value, path).as_call_id(db, krate, resolver) |
434 | } | 437 | } |
435 | } | 438 | } |
436 | 439 | ||
@@ -451,6 +454,7 @@ impl AsMacroCall for AstIdWithPath<ast::MacroCall> { | |||
451 | fn as_call_id( | 454 | fn as_call_id( |
452 | &self, | 455 | &self, |
453 | db: &dyn db::DefDatabase, | 456 | db: &dyn db::DefDatabase, |
457 | krate: CrateId, | ||
454 | resolver: impl Fn(path::ModPath) -> Option<MacroDefId>, | 458 | resolver: impl Fn(path::ModPath) -> Option<MacroDefId>, |
455 | ) -> Option<MacroCallId> { | 459 | ) -> Option<MacroCallId> { |
456 | let def: MacroDefId = resolver(self.path.clone())?; | 460 | let def: MacroDefId = resolver(self.path.clone())?; |
@@ -460,13 +464,13 @@ impl AsMacroCall for AstIdWithPath<ast::MacroCall> { | |||
460 | let hygiene = Hygiene::new(db.upcast(), self.ast_id.file_id); | 464 | let hygiene = Hygiene::new(db.upcast(), self.ast_id.file_id); |
461 | 465 | ||
462 | Some( | 466 | Some( |
463 | expand_eager_macro(db.upcast(), macro_call, def, &|path: ast::Path| { | 467 | expand_eager_macro(db.upcast(), krate, macro_call, def, &|path: ast::Path| { |
464 | resolver(path::ModPath::from_src(path, &hygiene)?) | 468 | resolver(path::ModPath::from_src(path, &hygiene)?) |
465 | })? | 469 | })? |
466 | .into(), | 470 | .into(), |
467 | ) | 471 | ) |
468 | } else { | 472 | } else { |
469 | Some(def.as_lazy_macro(db.upcast(), MacroCallKind::FnLike(self.ast_id)).into()) | 473 | Some(def.as_lazy_macro(db.upcast(), krate, MacroCallKind::FnLike(self.ast_id)).into()) |
470 | } | 474 | } |
471 | } | 475 | } |
472 | } | 476 | } |
@@ -475,12 +479,14 @@ impl AsMacroCall for AstIdWithPath<ast::ModuleItem> { | |||
475 | fn as_call_id( | 479 | fn as_call_id( |
476 | &self, | 480 | &self, |
477 | db: &dyn db::DefDatabase, | 481 | db: &dyn db::DefDatabase, |
482 | krate: CrateId, | ||
478 | resolver: impl Fn(path::ModPath) -> Option<MacroDefId>, | 483 | resolver: impl Fn(path::ModPath) -> Option<MacroDefId>, |
479 | ) -> Option<MacroCallId> { | 484 | ) -> Option<MacroCallId> { |
480 | let def = resolver(self.path.clone())?; | 485 | let def = resolver(self.path.clone())?; |
481 | Some( | 486 | Some( |
482 | def.as_lazy_macro( | 487 | def.as_lazy_macro( |
483 | db.upcast(), | 488 | db.upcast(), |
489 | krate, | ||
484 | MacroCallKind::Attr(self.ast_id, self.path.segments.last()?.to_string()), | 490 | MacroCallKind::Attr(self.ast_id, self.path.segments.last()?.to_string()), |
485 | ) | 491 | ) |
486 | .into(), | 492 | .into(), |