Skip to content

Commit 7ec0064

Browse files
committed
Remove AdtOrTrait
1 parent 7e986d1 commit 7ec0064

File tree

4 files changed

+39
-50
lines changed

4 files changed

+39
-50
lines changed

crates/ra_hir/src/code_model.rs

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,22 @@ impl ModuleDef {
186186

187187
module.visibility_of(db, self)
188188
}
189+
190+
pub fn name(self, db: &dyn HirDatabase) -> Option<Name> {
191+
match self {
192+
ModuleDef::Adt(it) => Some(it.name(db)),
193+
ModuleDef::Trait(it) => Some(it.name(db)),
194+
ModuleDef::Function(it) => Some(it.name(db)),
195+
ModuleDef::EnumVariant(it) => Some(it.name(db)),
196+
ModuleDef::TypeAlias(it) => Some(it.name(db)),
197+
198+
ModuleDef::Module(it) => it.name(db),
199+
ModuleDef::Const(it) => it.name(db),
200+
ModuleDef::Static(it) => it.name(db),
201+
202+
ModuleDef::BuiltinType(it) => Some(it.as_name()),
203+
}
204+
}
189205
}
190206

191207
pub use hir_def::{
@@ -1382,8 +1398,8 @@ impl Type {
13821398
}
13831399

13841400
/// Returns a flattened list of all ADTs and Traits mentioned in the type
1385-
pub fn flattened_type_items(&self, db: &dyn HirDatabase) -> Vec<AdtOrTrait> {
1386-
fn push_new_item(item: AdtOrTrait, acc: &mut Vec<AdtOrTrait>) {
1401+
pub fn flattened_type_items(&self, db: &dyn HirDatabase) -> Vec<ModuleDef> {
1402+
fn push_new_item(item: ModuleDef, acc: &mut Vec<ModuleDef>) {
13871403
if !acc.contains(&item) {
13881404
acc.push(item);
13891405
}
@@ -1392,7 +1408,7 @@ impl Type {
13921408
fn push_bounds(
13931409
db: &dyn HirDatabase,
13941410
predicates: &[GenericPredicate],
1395-
acc: &mut Vec<AdtOrTrait>,
1411+
acc: &mut Vec<ModuleDef>,
13961412
) {
13971413
for p in predicates.iter() {
13981414
match p {
@@ -1407,13 +1423,13 @@ impl Type {
14071423
}
14081424

14091425
// TypeWalk::walk does not preserve items order!
1410-
fn walk_substs(db: &dyn HirDatabase, substs: &Substs, acc: &mut Vec<AdtOrTrait>) {
1426+
fn walk_substs(db: &dyn HirDatabase, substs: &Substs, acc: &mut Vec<ModuleDef>) {
14111427
for ty in substs.iter() {
14121428
walk_type(db, ty, acc);
14131429
}
14141430
}
14151431

1416-
fn walk_type(db: &dyn HirDatabase, ty: &Ty, acc: &mut Vec<AdtOrTrait>) {
1432+
fn walk_type(db: &dyn HirDatabase, ty: &Ty, acc: &mut Vec<ModuleDef>) {
14171433
match ty.strip_references() {
14181434
Ty::Apply(ApplicationTy { ctor, parameters, .. }) => {
14191435
match ctor {
@@ -1468,7 +1484,7 @@ impl Type {
14681484
}
14691485
}
14701486

1471-
let mut res: Vec<AdtOrTrait> = Vec::new(); // not a Set to preserve the order
1487+
let mut res: Vec<ModuleDef> = Vec::new(); // not a Set to preserve the order
14721488
walk_type(db, &self.ty.value, &mut res);
14731489
res
14741490
}
@@ -1580,26 +1596,3 @@ pub trait HasVisibility {
15801596
vis.is_visible_from(db.upcast(), module.id)
15811597
}
15821598
}
1583-
1584-
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
1585-
pub enum AdtOrTrait {
1586-
Adt(Adt),
1587-
Trait(Trait),
1588-
}
1589-
impl_froms!(AdtOrTrait: Adt, Trait);
1590-
1591-
impl AdtOrTrait {
1592-
pub fn module(self, db: &dyn HirDatabase) -> Module {
1593-
match self {
1594-
AdtOrTrait::Adt(adt) => adt.module(db),
1595-
AdtOrTrait::Trait(trait_) => trait_.module(db),
1596-
}
1597-
}
1598-
1599-
pub fn name(self, db: &dyn HirDatabase) -> Name {
1600-
match self {
1601-
AdtOrTrait::Adt(adt) => adt.name(db),
1602-
AdtOrTrait::Trait(trait_) => trait_.name(db),
1603-
}
1604-
}
1605-
}

crates/ra_hir/src/lib.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@ mod has_source;
5151

5252
pub use crate::{
5353
code_model::{
54-
Adt, AdtOrTrait, AsAssocItem, AssocItem, AssocItemContainer, AttrDef, Const, Crate,
55-
CrateDependency, DefWithBody, Docs, Enum, EnumVariant, Field, FieldSource, Function,
56-
GenericDef, HasAttrs, HasVisibility, ImplDef, Local, MacroDef, Module, ModuleDef, ScopeDef,
57-
Static, Struct, Trait, Type, TypeAlias, TypeParam, Union, VariantDef, Visibility,
54+
Adt, AsAssocItem, AssocItem, AssocItemContainer, AttrDef, Const, Crate, CrateDependency,
55+
DefWithBody, Docs, Enum, EnumVariant, Field, FieldSource, Function, GenericDef, HasAttrs,
56+
HasVisibility, ImplDef, Local, MacroDef, Module, ModuleDef, ScopeDef, Static, Struct,
57+
Trait, Type, TypeAlias, TypeParam, Union, VariantDef, Visibility,
5858
},
5959
has_source::HasSource,
6060
semantics::{original_range, PathResolution, Semantics, SemanticsScope},

crates/ra_ide/src/display/navigation_target.rs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -321,15 +321,6 @@ impl ToNav for hir::Adt {
321321
}
322322
}
323323

324-
impl ToNav for hir::AdtOrTrait {
325-
fn to_nav(&self, db: &RootDatabase) -> NavigationTarget {
326-
match self {
327-
hir::AdtOrTrait::Adt(adt) => adt.to_nav(db),
328-
hir::AdtOrTrait::Trait(trait_) => trait_.to_nav(db),
329-
}
330-
}
331-
}
332-
333324
impl ToNav for hir::AssocItem {
334325
fn to_nav(&self, db: &RootDatabase) -> NavigationTarget {
335326
match self {

crates/ra_ide/src/hover.rs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use std::iter::once;
22

33
use hir::{
4-
Adt, AdtOrTrait, AsAssocItem, AssocItemContainer, Documentation, FieldSource, HasSource,
5-
HirDisplay, Module, ModuleDef, ModuleSource, Semantics,
4+
Adt, AsAssocItem, AssocItemContainer, Documentation, FieldSource, HasSource, HirDisplay,
5+
Module, ModuleDef, ModuleSource, Semantics,
66
};
77
use itertools::Itertools;
88
use ra_db::SourceDatabase;
@@ -13,7 +13,9 @@ use ra_ide_db::{
1313
use ra_syntax::{ast, match_ast, AstNode, SyntaxKind::*, SyntaxToken, TokenAtOffset};
1414

1515
use crate::{
16-
display::{macro_label, rust_code_markup, rust_code_markup_with_doc, ShortLabel, ToNav},
16+
display::{
17+
macro_label, rust_code_markup, rust_code_markup_with_doc, ShortLabel, ToNav, TryToNav,
18+
},
1719
runnables::runnable,
1820
FileId, FilePosition, NavigationTarget, RangeInfo, Runnable,
1921
};
@@ -238,9 +240,11 @@ fn goto_type_action(db: &RootDatabase, def: Definition) -> Option<HoverAction> {
238240
.ty(db)
239241
.flattened_type_items(db)
240242
.into_iter()
241-
.map(|it| HoverGotoTypeData {
242-
mod_path: adt_or_trait_mod_path(db, &it),
243-
nav: it.to_nav(db),
243+
.filter_map(|it| {
244+
Some(HoverGotoTypeData {
245+
mod_path: mod_path(db, &it)?,
246+
nav: it.try_to_nav(db)?,
247+
})
244248
})
245249
.collect_vec();
246250

@@ -294,8 +298,9 @@ fn determine_mod_path(db: &RootDatabase, module: Module, name: Option<String>) -
294298
.join("::")
295299
}
296300

297-
fn adt_or_trait_mod_path(db: &RootDatabase, item: &AdtOrTrait) -> String {
298-
determine_mod_path(db, item.module(db), Some(item.name(db).to_string()))
301+
// returns None only for ModuleDef::BuiltinType
302+
fn mod_path(db: &RootDatabase, item: &ModuleDef) -> Option<String> {
303+
Some(determine_mod_path(db, item.module(db)?, item.name(db).map(|name| name.to_string())))
299304
}
300305

301306
fn definition_mod_path(db: &RootDatabase, def: &Definition) -> Option<String> {

0 commit comments

Comments
 (0)