diff options
author | Jonas Schievink <[email protected]> | 2020-06-24 14:36:18 +0100 |
---|---|---|
committer | Jonas Schievink <[email protected]> | 2020-06-24 15:54:20 +0100 |
commit | 43cad21623bc5de59598a565097be9c7d8642818 (patch) | |
tree | 5c467e4497824e0c67659311da7641ded7164a97 /crates/ra_hir_def/src/nameres | |
parent | 16fd4dabb754b017237127e70ef1e2b409c4f9b6 (diff) |
Don't allocate common visibilities
Diffstat (limited to 'crates/ra_hir_def/src/nameres')
-rw-r--r-- | crates/ra_hir_def/src/nameres/collector.rs | 52 |
1 files changed, 28 insertions, 24 deletions
diff --git a/crates/ra_hir_def/src/nameres/collector.rs b/crates/ra_hir_def/src/nameres/collector.rs index 40aff830f..94da700ad 100644 --- a/crates/ra_hir_def/src/nameres/collector.rs +++ b/crates/ra_hir_def/src/nameres/collector.rs | |||
@@ -20,7 +20,9 @@ use test_utils::mark; | |||
20 | use crate::{ | 20 | use crate::{ |
21 | attr::Attrs, | 21 | attr::Attrs, |
22 | db::DefDatabase, | 22 | db::DefDatabase, |
23 | item_tree::{self, ItemTree, ItemTreeId, MacroCall, Mod, ModItem, ModKind, StructDefKind}, | 23 | item_tree::{ |
24 | self, FileItemTreeId, ItemTree, ItemTreeId, MacroCall, Mod, ModItem, ModKind, StructDefKind, | ||
25 | }, | ||
24 | nameres::{ | 26 | nameres::{ |
25 | diagnostics::DefDiagnostic, mod_resolution::ModDir, path_resolution::ReachedFixedPoint, | 27 | diagnostics::DefDiagnostic, mod_resolution::ModDir, path_resolution::ReachedFixedPoint, |
26 | BuiltinShadowMode, CrateDefMap, ModuleData, ModuleOrigin, ResolveMode, | 28 | BuiltinShadowMode, CrateDefMap, ModuleData, ModuleOrigin, ResolveMode, |
@@ -114,26 +116,28 @@ struct Import { | |||
114 | pub is_macro_use: bool, | 116 | pub is_macro_use: bool, |
115 | } | 117 | } |
116 | 118 | ||
117 | impl From<item_tree::Import> for Import { | 119 | impl Import { |
118 | fn from(it: item_tree::Import) -> Self { | 120 | fn from_use(tree: &ItemTree, id: FileItemTreeId<item_tree::Import>) -> Self { |
121 | let it = &tree[id]; | ||
122 | let visibility = &tree[it.visibility]; | ||
119 | Self { | 123 | Self { |
120 | path: it.path, | 124 | path: it.path.clone(), |
121 | alias: it.alias, | 125 | alias: it.alias.clone(), |
122 | visibility: it.visibility, | 126 | visibility: visibility.clone(), |
123 | is_glob: it.is_glob, | 127 | is_glob: it.is_glob, |
124 | is_prelude: it.is_prelude, | 128 | is_prelude: it.is_prelude, |
125 | is_extern_crate: false, | 129 | is_extern_crate: false, |
126 | is_macro_use: false, | 130 | is_macro_use: false, |
127 | } | 131 | } |
128 | } | 132 | } |
129 | } | ||
130 | 133 | ||
131 | impl From<item_tree::ExternCrate> for Import { | 134 | fn from_extern_crate(tree: &ItemTree, id: FileItemTreeId<item_tree::ExternCrate>) -> Self { |
132 | fn from(it: item_tree::ExternCrate) -> Self { | 135 | let it = &tree[id]; |
136 | let visibility = &tree[it.visibility]; | ||
133 | Self { | 137 | Self { |
134 | path: it.path, | 138 | path: it.path.clone(), |
135 | alias: it.alias, | 139 | alias: it.alias.clone(), |
136 | visibility: it.visibility, | 140 | visibility: visibility.clone(), |
137 | is_glob: false, | 141 | is_glob: false, |
138 | is_prelude: false, | 142 | is_prelude: false, |
139 | is_extern_crate: true, | 143 | is_extern_crate: true, |
@@ -761,14 +765,14 @@ impl ModCollector<'_, '_> { | |||
761 | ModItem::Import(import_id) => { | 765 | ModItem::Import(import_id) => { |
762 | self.def_collector.unresolved_imports.push(ImportDirective { | 766 | self.def_collector.unresolved_imports.push(ImportDirective { |
763 | module_id: self.module_id, | 767 | module_id: self.module_id, |
764 | import: self.item_tree[import_id].clone().into(), | 768 | import: Import::from_use(&self.item_tree, import_id), |
765 | status: PartialResolvedImport::Unresolved, | 769 | status: PartialResolvedImport::Unresolved, |
766 | }) | 770 | }) |
767 | } | 771 | } |
768 | ModItem::ExternCrate(import_id) => { | 772 | ModItem::ExternCrate(import_id) => { |
769 | self.def_collector.unresolved_imports.push(ImportDirective { | 773 | self.def_collector.unresolved_imports.push(ImportDirective { |
770 | module_id: self.module_id, | 774 | module_id: self.module_id, |
771 | import: self.item_tree[import_id].clone().into(), | 775 | import: Import::from_extern_crate(&self.item_tree, import_id), |
772 | status: PartialResolvedImport::Unresolved, | 776 | status: PartialResolvedImport::Unresolved, |
773 | }) | 777 | }) |
774 | } | 778 | } |
@@ -795,7 +799,7 @@ impl ModCollector<'_, '_> { | |||
795 | .intern(self.def_collector.db) | 799 | .intern(self.def_collector.db) |
796 | .into(), | 800 | .into(), |
797 | name: &func.name, | 801 | name: &func.name, |
798 | visibility: &func.visibility, | 802 | visibility: &self.item_tree[func.visibility], |
799 | has_constructor: false, | 803 | has_constructor: false, |
800 | }); | 804 | }); |
801 | } | 805 | } |
@@ -812,7 +816,7 @@ impl ModCollector<'_, '_> { | |||
812 | .intern(self.def_collector.db) | 816 | .intern(self.def_collector.db) |
813 | .into(), | 817 | .into(), |
814 | name: &it.name, | 818 | name: &it.name, |
815 | visibility: &it.visibility, | 819 | visibility: &self.item_tree[it.visibility], |
816 | has_constructor: it.kind != StructDefKind::Record, | 820 | has_constructor: it.kind != StructDefKind::Record, |
817 | }); | 821 | }); |
818 | } | 822 | } |
@@ -829,7 +833,7 @@ impl ModCollector<'_, '_> { | |||
829 | .intern(self.def_collector.db) | 833 | .intern(self.def_collector.db) |
830 | .into(), | 834 | .into(), |
831 | name: &it.name, | 835 | name: &it.name, |
832 | visibility: &it.visibility, | 836 | visibility: &self.item_tree[it.visibility], |
833 | has_constructor: false, | 837 | has_constructor: false, |
834 | }); | 838 | }); |
835 | } | 839 | } |
@@ -846,7 +850,7 @@ impl ModCollector<'_, '_> { | |||
846 | .intern(self.def_collector.db) | 850 | .intern(self.def_collector.db) |
847 | .into(), | 851 | .into(), |
848 | name: &it.name, | 852 | name: &it.name, |
849 | visibility: &it.visibility, | 853 | visibility: &self.item_tree[it.visibility], |
850 | has_constructor: false, | 854 | has_constructor: false, |
851 | }); | 855 | }); |
852 | } | 856 | } |
@@ -862,7 +866,7 @@ impl ModCollector<'_, '_> { | |||
862 | .intern(self.def_collector.db) | 866 | .intern(self.def_collector.db) |
863 | .into(), | 867 | .into(), |
864 | name, | 868 | name, |
865 | visibility: &it.visibility, | 869 | visibility: &self.item_tree[it.visibility], |
866 | has_constructor: false, | 870 | has_constructor: false, |
867 | }); | 871 | }); |
868 | } | 872 | } |
@@ -875,7 +879,7 @@ impl ModCollector<'_, '_> { | |||
875 | .intern(self.def_collector.db) | 879 | .intern(self.def_collector.db) |
876 | .into(), | 880 | .into(), |
877 | name: &it.name, | 881 | name: &it.name, |
878 | visibility: &it.visibility, | 882 | visibility: &self.item_tree[it.visibility], |
879 | has_constructor: false, | 883 | has_constructor: false, |
880 | }); | 884 | }); |
881 | } | 885 | } |
@@ -887,7 +891,7 @@ impl ModCollector<'_, '_> { | |||
887 | .intern(self.def_collector.db) | 891 | .intern(self.def_collector.db) |
888 | .into(), | 892 | .into(), |
889 | name: &it.name, | 893 | name: &it.name, |
890 | visibility: &it.visibility, | 894 | visibility: &self.item_tree[it.visibility], |
891 | has_constructor: false, | 895 | has_constructor: false, |
892 | }); | 896 | }); |
893 | } | 897 | } |
@@ -902,7 +906,7 @@ impl ModCollector<'_, '_> { | |||
902 | .intern(self.def_collector.db) | 906 | .intern(self.def_collector.db) |
903 | .into(), | 907 | .into(), |
904 | name: &it.name, | 908 | name: &it.name, |
905 | visibility: &it.visibility, | 909 | visibility: &self.item_tree[it.visibility], |
906 | has_constructor: false, | 910 | has_constructor: false, |
907 | }); | 911 | }); |
908 | } | 912 | } |
@@ -935,7 +939,7 @@ impl ModCollector<'_, '_> { | |||
935 | module.name.clone(), | 939 | module.name.clone(), |
936 | AstId::new(self.file_id, module.ast_id), | 940 | AstId::new(self.file_id, module.ast_id), |
937 | None, | 941 | None, |
938 | &module.visibility, | 942 | &self.item_tree[module.visibility], |
939 | ); | 943 | ); |
940 | 944 | ||
941 | ModCollector { | 945 | ModCollector { |
@@ -965,7 +969,7 @@ impl ModCollector<'_, '_> { | |||
965 | module.name.clone(), | 969 | module.name.clone(), |
966 | ast_id, | 970 | ast_id, |
967 | Some((file_id, is_mod_rs)), | 971 | Some((file_id, is_mod_rs)), |
968 | &module.visibility, | 972 | &self.item_tree[module.visibility], |
969 | ); | 973 | ); |
970 | let item_tree = self.def_collector.db.item_tree(file_id.into()); | 974 | let item_tree = self.def_collector.db.item_tree(file_id.into()); |
971 | ModCollector { | 975 | ModCollector { |