From 7ec0064409f90334f6b0dd61e572a65702702985 Mon Sep 17 00:00:00 2001 From: vsrs Date: Thu, 11 Jun 2020 14:41:42 +0300 Subject: Remove AdtOrTrait --- crates/ra_hir/src/code_model.rs | 51 ++++++++++++++++++----------------------- crates/ra_hir/src/lib.rs | 8 +++---- 2 files changed, 26 insertions(+), 33 deletions(-) (limited to 'crates/ra_hir/src') diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs index 64b9a4cc3..5137a16e6 100644 --- a/crates/ra_hir/src/code_model.rs +++ b/crates/ra_hir/src/code_model.rs @@ -186,6 +186,22 @@ impl ModuleDef { module.visibility_of(db, self) } + + pub fn name(self, db: &dyn HirDatabase) -> Option { + match self { + ModuleDef::Adt(it) => Some(it.name(db)), + ModuleDef::Trait(it) => Some(it.name(db)), + ModuleDef::Function(it) => Some(it.name(db)), + ModuleDef::EnumVariant(it) => Some(it.name(db)), + ModuleDef::TypeAlias(it) => Some(it.name(db)), + + ModuleDef::Module(it) => it.name(db), + ModuleDef::Const(it) => it.name(db), + ModuleDef::Static(it) => it.name(db), + + ModuleDef::BuiltinType(it) => Some(it.as_name()), + } + } } pub use hir_def::{ @@ -1382,8 +1398,8 @@ impl Type { } /// Returns a flattened list of all ADTs and Traits mentioned in the type - pub fn flattened_type_items(&self, db: &dyn HirDatabase) -> Vec { - fn push_new_item(item: AdtOrTrait, acc: &mut Vec) { + pub fn flattened_type_items(&self, db: &dyn HirDatabase) -> Vec { + fn push_new_item(item: ModuleDef, acc: &mut Vec) { if !acc.contains(&item) { acc.push(item); } @@ -1392,7 +1408,7 @@ impl Type { fn push_bounds( db: &dyn HirDatabase, predicates: &[GenericPredicate], - acc: &mut Vec, + acc: &mut Vec, ) { for p in predicates.iter() { match p { @@ -1407,13 +1423,13 @@ impl Type { } // TypeWalk::walk does not preserve items order! - fn walk_substs(db: &dyn HirDatabase, substs: &Substs, acc: &mut Vec) { + fn walk_substs(db: &dyn HirDatabase, substs: &Substs, acc: &mut Vec) { for ty in substs.iter() { walk_type(db, ty, acc); } } - fn walk_type(db: &dyn HirDatabase, ty: &Ty, acc: &mut Vec) { + fn walk_type(db: &dyn HirDatabase, ty: &Ty, acc: &mut Vec) { match ty.strip_references() { Ty::Apply(ApplicationTy { ctor, parameters, .. }) => { match ctor { @@ -1468,7 +1484,7 @@ impl Type { } } - let mut res: Vec = Vec::new(); // not a Set to preserve the order + let mut res: Vec = Vec::new(); // not a Set to preserve the order walk_type(db, &self.ty.value, &mut res); res } @@ -1580,26 +1596,3 @@ pub trait HasVisibility { vis.is_visible_from(db.upcast(), module.id) } } - -#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] -pub enum AdtOrTrait { - Adt(Adt), - Trait(Trait), -} -impl_froms!(AdtOrTrait: Adt, Trait); - -impl AdtOrTrait { - pub fn module(self, db: &dyn HirDatabase) -> Module { - match self { - AdtOrTrait::Adt(adt) => adt.module(db), - AdtOrTrait::Trait(trait_) => trait_.module(db), - } - } - - pub fn name(self, db: &dyn HirDatabase) -> Name { - match self { - AdtOrTrait::Adt(adt) => adt.name(db), - AdtOrTrait::Trait(trait_) => trait_.name(db), - } - } -} diff --git a/crates/ra_hir/src/lib.rs b/crates/ra_hir/src/lib.rs index eded039e4..3364a822f 100644 --- a/crates/ra_hir/src/lib.rs +++ b/crates/ra_hir/src/lib.rs @@ -51,10 +51,10 @@ mod has_source; pub use crate::{ code_model::{ - Adt, AdtOrTrait, AsAssocItem, AssocItem, AssocItemContainer, AttrDef, Const, Crate, - CrateDependency, DefWithBody, Docs, Enum, EnumVariant, Field, FieldSource, Function, - GenericDef, HasAttrs, HasVisibility, ImplDef, Local, MacroDef, Module, ModuleDef, ScopeDef, - Static, Struct, Trait, Type, TypeAlias, TypeParam, Union, VariantDef, Visibility, + Adt, AsAssocItem, AssocItem, AssocItemContainer, AttrDef, Const, Crate, CrateDependency, + DefWithBody, Docs, Enum, EnumVariant, Field, FieldSource, Function, GenericDef, HasAttrs, + HasVisibility, ImplDef, Local, MacroDef, Module, ModuleDef, ScopeDef, Static, Struct, + Trait, Type, TypeAlias, TypeParam, Union, VariantDef, Visibility, }, has_source::HasSource, semantics::{original_range, PathResolution, Semantics, SemanticsScope}, -- cgit v1.2.3