From ca15cf422cb83c9657ab1db8a8165f486e4b7cde Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Tue, 24 Dec 2019 21:45:58 +0100 Subject: Add visibility in code model for fields --- crates/ra_hir/src/code_model.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'crates/ra_hir/src/code_model.rs') diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index 76d8f85f1..c5114742b 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs @@ -118,7 +118,7 @@ impl_froms!( BuiltinType ); -pub use hir_def::attr::Attrs; +pub use hir_def::{attr::Attrs, visibility::ResolvedVisibility}; impl Module { pub(crate) fn new(krate: Crate, crate_module_id: LocalModuleId) -> Module { @@ -255,6 +255,15 @@ impl StructField { } } +impl HasVisibility for StructField { + fn visibility(&self, db: &impl HirDatabase) -> ResolvedVisibility { + let struct_field_id: hir_def::StructFieldId = (*self).into(); + let visibility = db.visibility(struct_field_id.into()); + let parent_id: hir_def::VariantId = self.parent.into(); + visibility.resolve(db, &parent_id.resolver(db)) + } +} + #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct Struct { pub(crate) id: StructId, @@ -1041,3 +1050,11 @@ impl + Copy> Docs for T { db.documentation(def.into()) } } + +pub trait HasVisibility { + fn visibility(&self, db: &impl HirDatabase) -> ResolvedVisibility; + fn visible_from(&self, db: &impl HirDatabase, module: Module) -> bool { + let vis = self.visibility(db); + vis.visible_from(db, module.id) + } +} -- cgit v1.2.3