Skip to content

Commit 3d66aa0

Browse files
committed
New definition_visibility method
1 parent 753e1e6 commit 3d66aa0

File tree

2 files changed

+22
-13
lines changed

2 files changed

+22
-13
lines changed

crates/ra_hir/src/code_model.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,26 @@ impl ModuleDef {
148148
ModuleDef::BuiltinType(_) => None,
149149
}
150150
}
151+
152+
pub fn definition_visibility(&self, db: &dyn HirDatabase) -> Option<Visibility> {
153+
let module = match self {
154+
ModuleDef::Module(it) => it.parent(db)?,
155+
ModuleDef::Function(it) => return Some(it.visibility(db)),
156+
ModuleDef::Adt(it) => it.module(db),
157+
ModuleDef::EnumVariant(it) => {
158+
let parent = it.parent_enum(db);
159+
let module = it.module(db);
160+
return module.visibility_of(db, &ModuleDef::Adt(Adt::Enum(parent)));
161+
}
162+
ModuleDef::Const(it) => return Some(it.visibility(db)),
163+
ModuleDef::Static(it) => it.module(db),
164+
ModuleDef::Trait(it) => it.module(db),
165+
ModuleDef::TypeAlias(it) => return Some(it.visibility(db)),
166+
ModuleDef::BuiltinType(_) => return None,
167+
};
168+
169+
module.visibility_of(db, self)
170+
}
151171
}
152172

153173
pub use hir_def::{

crates/ra_ide_db/src/defs.rs

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
// FIXME: this badly needs rename/rewrite (matklad, 2020-02-06).
77

88
use hir::{
9-
Adt, Field, HasVisibility, ImplDef, Local, MacroDef, Module, ModuleDef, Name, PathResolution,
9+
Field, HasVisibility, ImplDef, Local, MacroDef, Module, ModuleDef, Name, PathResolution,
1010
Semantics, TypeParam, Visibility,
1111
};
1212
use ra_prof::profile;
@@ -42,21 +42,10 @@ impl Definition {
4242
}
4343

4444
pub fn visibility(&self, db: &RootDatabase) -> Option<Visibility> {
45-
let module = self.module(db);
46-
4745
match self {
4846
Definition::Macro(_) => None,
4947
Definition::Field(sf) => Some(sf.visibility(db)),
50-
Definition::ModuleDef(def) => match def {
51-
ModuleDef::EnumVariant(id) => {
52-
let parent = id.parent_enum(db);
53-
module?.visibility_of(db, &ModuleDef::Adt(Adt::Enum(parent)))
54-
}
55-
ModuleDef::Function(f) => Some(f.visibility(db)),
56-
ModuleDef::Const(c) => Some(c.visibility(db)),
57-
ModuleDef::TypeAlias(t) => Some(t.visibility(db)),
58-
_ => module?.visibility_of(db, def),
59-
},
48+
Definition::ModuleDef(def) => def.definition_visibility(db),
6049
Definition::SelfType(_) => None,
6150
Definition::Local(_) => None,
6251
Definition::TypeParam(_) => None,

0 commit comments

Comments
 (0)