aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def/src/per_ns.rs
diff options
context:
space:
mode:
authorPaul Daniel Faria <[email protected]>2020-06-25 02:42:44 +0100
committerPaul Daniel Faria <[email protected]>2020-06-25 14:27:00 +0100
commit0b657ddbfe9754afce9811c70a4e61e4ea9efeaf (patch)
tree9a99332d1d2fa720fbb0da6af4122a5c4d6526f7 /crates/ra_hir_def/src/per_ns.rs
parent70d4829560b81e3f5dc8e624da702ed6d345c49c (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.rs20
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)]
11pub struct PerNs { 11pub 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
17impl Default for PerNs { 18impl 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
23impl PerNs { 24impl 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}