diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index c0b19b1e8f..fbdabcd77b 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs @@ -346,6 +346,22 @@ impl ModuleDef { } } +impl HasVisibility for ModuleDef { + fn visibility(&self, db: &dyn HirDatabase) -> Visibility { + match *self { + ModuleDef::Module(it) => it.visibility(db), + ModuleDef::Function(it) => it.visibility(db), + ModuleDef::Adt(it) => it.visibility(db), + ModuleDef::Const(it) => it.visibility(db), + ModuleDef::Static(it) => it.visibility(db), + ModuleDef::Trait(it) => it.visibility(db), + ModuleDef::TypeAlias(it) => it.visibility(db), + ModuleDef::Variant(it) => it.visibility(db), + ModuleDef::BuiltinType(_) => Visibility::Public, + } + } +} + impl Module { /// Name of this module. pub fn name(self, db: &dyn HirDatabase) -> Option { diff --git a/crates/ide_assists/src/handlers/expand_glob_import.rs b/crates/ide_assists/src/handlers/expand_glob_import.rs index 9b7a8a0fb7..aedb2f95f9 100644 --- a/crates/ide_assists/src/handlers/expand_glob_import.rs +++ b/crates/ide_assists/src/handlers/expand_glob_import.rs @@ -809,22 +809,22 @@ fn baz(bar: Bar) {} ", ); -// check_assist_not_applicable( -// expand_glob_import, -// r" -// mod foo { -// mod bar { -// pub mod baz { -// pub struct Baz; -// } -// } -// } + check_assist_not_applicable( + expand_glob_import, + r" +mod foo { + mod bar { + pub mod baz { + pub struct Baz; + } + } +} -// use foo::bar::baz::*$0; +use foo::bar::baz::*$0; -// fn qux(baz: Baz) {} -// ", -// ); +fn qux(baz: Baz) {} +", + ); } #[test] diff --git a/crates/ide_assists/src/handlers/fix_visibility.rs b/crates/ide_assists/src/handlers/fix_visibility.rs index 9e4e3f4158..08d665f8ee 100644 --- a/crates/ide_assists/src/handlers/fix_visibility.rs +++ b/crates/ide_assists/src/handlers/fix_visibility.rs @@ -46,18 +46,7 @@ fn add_vis_to_referenced_module_def(acc: &mut Assists, ctx: &AssistContext) -> O let current_module = ctx.sema.scope(path.syntax()).module()?; let target_module = def.module(ctx.db())?; - let vis = match def { - hir::ModuleDef::Module(it) => it.visibility(ctx.db()), - hir::ModuleDef::Function(it) => it.visibility(ctx.db()), - hir::ModuleDef::Adt(it) => it.visibility(ctx.db()), - hir::ModuleDef::Variant(it) => it.visibility(ctx.db()), - hir::ModuleDef::Const(it) => it.visibility(ctx.db()), - hir::ModuleDef::Static(it) => it.visibility(ctx.db()), - hir::ModuleDef::Trait(it) => it.visibility(ctx.db()), - hir::ModuleDef::TypeAlias(it) => it.visibility(ctx.db()), - hir::ModuleDef::BuiltinType(_) => return None, - }; - if vis.is_visible_from(ctx.db(), current_module.into()) { + if def.visibility(ctx.db()).is_visible_from(ctx.db(), current_module.into()) { return None; }; diff --git a/crates/ide_db/src/defs.rs b/crates/ide_db/src/defs.rs index 147c7c1e59..6b6cb14537 100644 --- a/crates/ide_db/src/defs.rs +++ b/crates/ide_db/src/defs.rs @@ -44,17 +44,7 @@ impl Definition { pub fn visibility(&self, db: &RootDatabase) -> Option { match self { Definition::Field(sf) => Some(sf.visibility(db)), - Definition::ModuleDef(def) => match def { - ModuleDef::Module(it) => Some(it.visibility(db)), - ModuleDef::Function(it) => Some(it.visibility(db)), - ModuleDef::Adt(it) => Some(it.visibility(db)), - ModuleDef::Const(it) => Some(it.visibility(db)), - ModuleDef::Static(it) => Some(it.visibility(db)), - ModuleDef::Trait(it) => Some(it.visibility(db)), - ModuleDef::TypeAlias(it) => Some(it.visibility(db)), - ModuleDef::Variant(it) => Some(it.visibility(db)), - ModuleDef::BuiltinType(_) => None, - }, + Definition::ModuleDef(def) => Some(def.visibility(db)), Definition::Macro(_) | Definition::SelfType(_) | Definition::Local(_)