aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def/src/nameres
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-12-22 14:08:57 +0000
committerAleksey Kladov <[email protected]>2019-12-22 14:10:19 +0000
commite69af8596262931f8e55b7f9203f65d14827e2d8 (patch)
tree0a56660b8c14cb46cee93470a1e7608136b67b5e /crates/ra_hir_def/src/nameres
parentfe38fffaa90f656abbeff7b8a167afc45cc492a9 (diff)
Refactor PerNs construction
Diffstat (limited to 'crates/ra_hir_def/src/nameres')
-rw-r--r--crates/ra_hir_def/src/nameres/collector.rs81
1 files changed, 33 insertions, 48 deletions
diff --git a/crates/ra_hir_def/src/nameres/collector.rs b/crates/ra_hir_def/src/nameres/collector.rs
index 2b194f488..b4e438257 100644
--- a/crates/ra_hir_def/src/nameres/collector.rs
+++ b/crates/ra_hir_def/src/nameres/collector.rs
@@ -714,12 +714,9 @@ where
714 modules[res].scope.define_legacy_macro(name, mac) 714 modules[res].scope.define_legacy_macro(name, mac)
715 } 715 }
716 modules[self.module_id].children.insert(name.clone(), res); 716 modules[self.module_id].children.insert(name.clone(), res);
717 let resolution = Resolution { 717 let module = ModuleId { krate: self.def_collector.def_map.krate, local_id: res };
718 def: PerNs::types( 718 let def: ModuleDefId = module.into();
719 ModuleId { krate: self.def_collector.def_map.krate, local_id: res }.into(), 719 let resolution = Resolution { def: def.into(), import: false };
720 ),
721 import: false,
722 };
723 self.def_collector.update(self.module_id, None, &[(name, resolution)]); 720 self.def_collector.update(self.module_id, None, &[(name, resolution)]);
724 res 721 res
725 } 722 }
@@ -734,63 +731,51 @@ where
734 731
735 let name = def.name.clone(); 732 let name = def.name.clone();
736 let container = ContainerId::ModuleId(module); 733 let container = ContainerId::ModuleId(module);
737 let def: PerNs = match def.kind { 734 let def: ModuleDefId = match def.kind {
738 raw::DefKind::Function(ast_id) => { 735 raw::DefKind::Function(ast_id) => FunctionLoc {
739 let def = FunctionLoc { 736 container: container.into(),
740 container: container.into(), 737 ast_id: AstId::new(self.file_id, ast_id),
741 ast_id: AstId::new(self.file_id, ast_id),
742 }
743 .intern(self.def_collector.db);
744
745 PerNs::values(def.into())
746 } 738 }
739 .intern(self.def_collector.db)
740 .into(),
747 raw::DefKind::Struct(ast_id) => { 741 raw::DefKind::Struct(ast_id) => {
748 let def = StructLoc { container, ast_id: AstId::new(self.file_id, ast_id) } 742 StructLoc { container, ast_id: AstId::new(self.file_id, ast_id) }
749 .intern(self.def_collector.db); 743 .intern(self.def_collector.db)
750 PerNs::both(def.into(), def.into()) 744 .into()
751 } 745 }
752 raw::DefKind::Union(ast_id) => { 746 raw::DefKind::Union(ast_id) => {
753 let def = UnionLoc { container, ast_id: AstId::new(self.file_id, ast_id) } 747 UnionLoc { container, ast_id: AstId::new(self.file_id, ast_id) }
754 .intern(self.def_collector.db); 748 .intern(self.def_collector.db)
755 PerNs::both(def.into(), def.into()) 749 .into()
756 } 750 }
757 raw::DefKind::Enum(ast_id) => { 751 raw::DefKind::Enum(ast_id) => {
758 let def = EnumLoc { container, ast_id: AstId::new(self.file_id, ast_id) } 752 EnumLoc { container, ast_id: AstId::new(self.file_id, ast_id) }
759 .intern(self.def_collector.db); 753 .intern(self.def_collector.db)
760 PerNs::types(def.into()) 754 .into()
761 } 755 }
762 raw::DefKind::Const(ast_id) => { 756 raw::DefKind::Const(ast_id) => {
763 let def = ConstLoc { 757 ConstLoc { container: container.into(), ast_id: AstId::new(self.file_id, ast_id) }
764 container: container.into(), 758 .intern(self.def_collector.db)
765 ast_id: AstId::new(self.file_id, ast_id), 759 .into()
766 }
767 .intern(self.def_collector.db);
768
769 PerNs::values(def.into())
770 } 760 }
771 raw::DefKind::Static(ast_id) => { 761 raw::DefKind::Static(ast_id) => {
772 let def = StaticLoc { container, ast_id: AstId::new(self.file_id, ast_id) } 762 StaticLoc { container, ast_id: AstId::new(self.file_id, ast_id) }
773 .intern(self.def_collector.db); 763 .intern(self.def_collector.db)
774 764 .into()
775 PerNs::values(def.into())
776 } 765 }
777 raw::DefKind::Trait(ast_id) => { 766 raw::DefKind::Trait(ast_id) => {
778 let def = TraitLoc { container, ast_id: AstId::new(self.file_id, ast_id) } 767 TraitLoc { container, ast_id: AstId::new(self.file_id, ast_id) }
779 .intern(self.def_collector.db); 768 .intern(self.def_collector.db)
780 769 .into()
781 PerNs::types(def.into())
782 } 770 }
783 raw::DefKind::TypeAlias(ast_id) => { 771 raw::DefKind::TypeAlias(ast_id) => TypeAliasLoc {
784 let def = TypeAliasLoc { 772 container: container.into(),
785 container: container.into(), 773 ast_id: AstId::new(self.file_id, ast_id),
786 ast_id: AstId::new(self.file_id, ast_id),
787 }
788 .intern(self.def_collector.db);
789
790 PerNs::types(def.into())
791 } 774 }
775 .intern(self.def_collector.db)
776 .into(),
792 }; 777 };
793 let resolution = Resolution { def, import: false }; 778 let resolution = Resolution { def: def.into(), import: false };
794 self.def_collector.update(self.module_id, None, &[(name, resolution)]) 779 self.def_collector.update(self.module_id, None, &[(name, resolution)])
795 } 780 }
796 781