aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def/src/per_ns.rs
diff options
context:
space:
mode:
authorFlorian Diebold <[email protected]>2019-12-25 14:00:10 +0000
committerFlorian Diebold <[email protected]>2019-12-26 15:23:40 +0000
commit8ac25f119eb45d425370d9f7f093bc206e6c4a9f (patch)
tree7a9bcbcb2c46a549baa7a411a99cd7c9eb39423d /crates/ra_hir_def/src/per_ns.rs
parent79c90b5641d2934864c587380e4f050ab63ac029 (diff)
Keep track of visibility during def collection
Diffstat (limited to 'crates/ra_hir_def/src/per_ns.rs')
-rw-r--r--crates/ra_hir_def/src/per_ns.rs42
1 files changed, 27 insertions, 15 deletions
diff --git a/crates/ra_hir_def/src/per_ns.rs b/crates/ra_hir_def/src/per_ns.rs
index 3a5105028..16e61a6a5 100644
--- a/crates/ra_hir_def/src/per_ns.rs
+++ b/crates/ra_hir_def/src/per_ns.rs
@@ -5,13 +5,13 @@
5 5
6use hir_expand::MacroDefId; 6use hir_expand::MacroDefId;
7 7
8use crate::ModuleDefId; 8use crate::{visibility::ResolvedVisibility, ModuleDefId};
9 9
10#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] 10#[derive(Debug, Copy, Clone, PartialEq, Eq)]
11pub struct PerNs { 11pub struct PerNs {
12 pub types: Option<ModuleDefId>, 12 pub types: Option<(ModuleDefId, ResolvedVisibility)>,
13 pub values: Option<ModuleDefId>, 13 pub values: Option<(ModuleDefId, ResolvedVisibility)>,
14 pub macros: Option<MacroDefId>, 14 pub macros: Option<(MacroDefId, ResolvedVisibility)>,
15} 15}
16 16
17impl Default for PerNs { 17impl Default for PerNs {
@@ -25,20 +25,20 @@ impl PerNs {
25 PerNs { types: None, values: None, macros: None } 25 PerNs { types: None, values: None, macros: None }
26 } 26 }
27 27
28 pub fn values(t: ModuleDefId) -> PerNs { 28 pub fn values(t: ModuleDefId, v: ResolvedVisibility) -> PerNs {
29 PerNs { types: None, values: Some(t), macros: None } 29 PerNs { types: None, values: Some((t, v)), macros: None }
30 } 30 }
31 31
32 pub fn types(t: ModuleDefId) -> PerNs { 32 pub fn types(t: ModuleDefId, v: ResolvedVisibility) -> PerNs {
33 PerNs { types: Some(t), values: None, macros: None } 33 PerNs { types: Some((t, v)), values: None, macros: None }
34 } 34 }
35 35
36 pub fn both(types: ModuleDefId, values: ModuleDefId) -> PerNs { 36 pub fn both(types: ModuleDefId, values: ModuleDefId, v: ResolvedVisibility) -> PerNs {
37 PerNs { types: Some(types), values: Some(values), macros: None } 37 PerNs { types: Some((types, v)), values: Some((values, v)), macros: None }
38 } 38 }
39 39
40 pub fn macros(macro_: MacroDefId) -> PerNs { 40 pub fn macros(macro_: MacroDefId, v: ResolvedVisibility) -> PerNs {
41 PerNs { types: None, values: None, macros: Some(macro_) } 41 PerNs { types: None, values: None, macros: Some((macro_, v)) }
42 } 42 }
43 43
44 pub fn is_none(&self) -> bool { 44 pub fn is_none(&self) -> bool {
@@ -46,15 +46,27 @@ impl PerNs {
46 } 46 }
47 47
48 pub fn take_types(self) -> Option<ModuleDefId> { 48 pub fn take_types(self) -> Option<ModuleDefId> {
49 self.types.map(|it| it.0)
50 }
51
52 pub fn take_types_vis(self) -> Option<(ModuleDefId, ResolvedVisibility)> {
49 self.types 53 self.types
50 } 54 }
51 55
52 pub fn take_values(self) -> Option<ModuleDefId> { 56 pub fn take_values(self) -> Option<ModuleDefId> {
53 self.values 57 self.values.map(|it| it.0)
54 } 58 }
55 59
56 pub fn take_macros(self) -> Option<MacroDefId> { 60 pub fn take_macros(self) -> Option<MacroDefId> {
57 self.macros 61 self.macros.map(|it| it.0)
62 }
63
64 pub fn with_visibility(self, vis: ResolvedVisibility) -> PerNs {
65 PerNs {
66 types: self.types.map(|(it, _)| (it, vis)),
67 values: self.values.map(|(it, _)| (it, vis)),
68 macros: self.macros.map(|(it, _)| (it, vis)),
69 }
58 } 70 }
59 71
60 pub fn or(self, other: PerNs) -> PerNs { 72 pub fn or(self, other: PerNs) -> PerNs {