diff options
author | Paul Daniel Faria <[email protected]> | 2020-06-25 02:42:44 +0100 |
---|---|---|
committer | Paul Daniel Faria <[email protected]> | 2020-06-25 14:27:00 +0100 |
commit | 0b657ddbfe9754afce9811c70a4e61e4ea9efeaf (patch) | |
tree | 9a99332d1d2fa720fbb0da6af4122a5c4d6526f7 /crates/ra_hir_def/src/per_ns.rs | |
parent | 70d4829560b81e3f5dc8e624da702ed6d345c49c (diff) |
Revert resolution of all glob imports first, replace with tracking of glob imports and shadowing when more specific
Diffstat (limited to 'crates/ra_hir_def/src/per_ns.rs')
-rw-r--r-- | crates/ra_hir_def/src/per_ns.rs | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/crates/ra_hir_def/src/per_ns.rs b/crates/ra_hir_def/src/per_ns.rs index 74665c588..e5cbca71d 100644 --- a/crates/ra_hir_def/src/per_ns.rs +++ b/crates/ra_hir_def/src/per_ns.rs | |||
@@ -9,6 +9,7 @@ use crate::{item_scope::ItemInNs, visibility::Visibility, ModuleDefId}; | |||
9 | 9 | ||
10 | #[derive(Debug, Copy, Clone, PartialEq, Eq)] | 10 | #[derive(Debug, Copy, Clone, PartialEq, Eq)] |
11 | pub struct PerNs { | 11 | pub struct PerNs { |
12 | pub from_glob: bool, | ||
12 | pub types: Option<(ModuleDefId, Visibility)>, | 13 | pub types: Option<(ModuleDefId, Visibility)>, |
13 | pub values: Option<(ModuleDefId, Visibility)>, | 14 | pub values: Option<(ModuleDefId, Visibility)>, |
14 | pub macros: Option<(MacroDefId, Visibility)>, | 15 | pub macros: Option<(MacroDefId, Visibility)>, |
@@ -16,29 +17,29 @@ pub struct PerNs { | |||
16 | 17 | ||
17 | impl Default for PerNs { | 18 | impl Default for PerNs { |
18 | fn default() -> Self { | 19 | fn default() -> Self { |
19 | PerNs { types: None, values: None, macros: None } | 20 | PerNs { from_glob: false, types: None, values: None, macros: None } |
20 | } | 21 | } |
21 | } | 22 | } |
22 | 23 | ||
23 | impl PerNs { | 24 | impl PerNs { |
24 | pub fn none() -> PerNs { | 25 | pub fn none() -> PerNs { |
25 | PerNs { types: None, values: None, macros: None } | 26 | PerNs { from_glob: false, types: None, values: None, macros: None } |
26 | } | 27 | } |
27 | 28 | ||
28 | pub fn values(t: ModuleDefId, v: Visibility) -> PerNs { | 29 | pub fn values(t: ModuleDefId, v: Visibility) -> PerNs { |
29 | PerNs { types: None, values: Some((t, v)), macros: None } | 30 | PerNs { from_glob: false, types: None, values: Some((t, v)), macros: None } |
30 | } | 31 | } |
31 | 32 | ||
32 | pub fn types(t: ModuleDefId, v: Visibility) -> PerNs { | 33 | pub fn types(t: ModuleDefId, v: Visibility) -> PerNs { |
33 | PerNs { types: Some((t, v)), values: None, macros: None } | 34 | PerNs { from_glob: false, types: Some((t, v)), values: None, macros: None } |
34 | } | 35 | } |
35 | 36 | ||
36 | pub fn both(types: ModuleDefId, values: ModuleDefId, v: Visibility) -> PerNs { | 37 | pub fn both(types: ModuleDefId, values: ModuleDefId, v: Visibility) -> PerNs { |
37 | PerNs { types: Some((types, v)), values: Some((values, v)), macros: None } | 38 | PerNs { from_glob: false, types: Some((types, v)), values: Some((values, v)), macros: None } |
38 | } | 39 | } |
39 | 40 | ||
40 | pub fn macros(macro_: MacroDefId, v: Visibility) -> PerNs { | 41 | pub fn macros(macro_: MacroDefId, v: Visibility) -> PerNs { |
41 | PerNs { types: None, values: None, macros: Some((macro_, v)) } | 42 | PerNs { from_glob: false, types: None, values: None, macros: Some((macro_, v)) } |
42 | } | 43 | } |
43 | 44 | ||
44 | pub fn is_none(&self) -> bool { | 45 | pub fn is_none(&self) -> bool { |
@@ -63,6 +64,7 @@ impl PerNs { | |||
63 | 64 | ||
64 | pub fn filter_visibility(self, mut f: impl FnMut(Visibility) -> bool) -> PerNs { | 65 | pub fn filter_visibility(self, mut f: impl FnMut(Visibility) -> bool) -> PerNs { |
65 | PerNs { | 66 | PerNs { |
67 | from_glob: self.from_glob, | ||
66 | types: self.types.filter(|(_, v)| f(*v)), | 68 | types: self.types.filter(|(_, v)| f(*v)), |
67 | values: self.values.filter(|(_, v)| f(*v)), | 69 | values: self.values.filter(|(_, v)| f(*v)), |
68 | macros: self.macros.filter(|(_, v)| f(*v)), | 70 | macros: self.macros.filter(|(_, v)| f(*v)), |
@@ -71,6 +73,7 @@ impl PerNs { | |||
71 | 73 | ||
72 | pub fn with_visibility(self, vis: Visibility) -> PerNs { | 74 | pub fn with_visibility(self, vis: Visibility) -> PerNs { |
73 | PerNs { | 75 | PerNs { |
76 | from_glob: self.from_glob, | ||
74 | types: self.types.map(|(it, _)| (it, vis)), | 77 | types: self.types.map(|(it, _)| (it, vis)), |
75 | values: self.values.map(|(it, _)| (it, vis)), | 78 | values: self.values.map(|(it, _)| (it, vis)), |
76 | macros: self.macros.map(|(it, _)| (it, vis)), | 79 | macros: self.macros.map(|(it, _)| (it, vis)), |
@@ -79,6 +82,7 @@ impl PerNs { | |||
79 | 82 | ||
80 | pub fn or(self, other: PerNs) -> PerNs { | 83 | pub fn or(self, other: PerNs) -> PerNs { |
81 | PerNs { | 84 | PerNs { |
85 | from_glob: self.from_glob, | ||
82 | types: self.types.or(other.types), | 86 | types: self.types.or(other.types), |
83 | values: self.values.or(other.values), | 87 | values: self.values.or(other.values), |
84 | macros: self.macros.or(other.macros), | 88 | macros: self.macros.or(other.macros), |
@@ -92,4 +96,8 @@ impl PerNs { | |||
92 | .chain(self.values.map(|it| ItemInNs::Values(it.0)).into_iter()) | 96 | .chain(self.values.map(|it| ItemInNs::Values(it.0)).into_iter()) |
93 | .chain(self.macros.map(|it| ItemInNs::Macros(it.0)).into_iter()) | 97 | .chain(self.macros.map(|it| ItemInNs::Macros(it.0)).into_iter()) |
94 | } | 98 | } |
99 | |||
100 | pub fn from_glob(self, from_glob: bool) -> PerNs { | ||
101 | PerNs { from_glob, ..self } | ||
102 | } | ||
95 | } | 103 | } |