move adt to adt

This commit is contained in:
Aleksey Kladov 2019-01-25 01:53:07 +03:00
parent a03c109f50
commit 31d3a56b18
3 changed files with 23 additions and 24 deletions

View File

@ -3,17 +3,32 @@
use std::sync::Arc;
use ra_syntax::{
ast::{self, NameOwner, StructFlavor}
};
use ra_syntax::ast::{self, NameOwner, StructFlavor};
use crate::{
Name, AsName, Struct, Enum, EnumVariant,
Name, AsName, Struct, Enum, EnumVariant, Crate,
HirDatabase,
type_ref::TypeRef,
ids::LocationCtx,
};
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum AdtDef {
Struct(Struct),
Enum(Enum),
}
impl_froms!(AdtDef: Struct, Enum);
impl AdtDef {
pub(crate) fn krate(self, db: &impl HirDatabase) -> Option<Crate> {
match self {
AdtDef::Struct(s) => s.module(db),
AdtDef::Enum(e) => e.module(db),
}
.krate(db)
}
}
impl Struct {
pub(crate) fn variant_data(&self, db: &impl HirDatabase) -> Arc<VariantData> {
db.struct_data((*self).into()).variant_data.clone()

View File

@ -55,10 +55,11 @@ pub use self::{
ids::{HirFileId, MacroCallId, MacroCallLoc, HirInterner},
macros::{MacroDef, MacroInput, MacroExpansion},
nameres::{ItemMap, PerNs, Namespace, Resolution},
ty::{Ty, AdtDef},
ty::Ty,
impl_block::{ImplBlock, ImplItem},
code_model_impl::function::{FnScopes, ScopesWithSyntaxMapping},
docs::{Docs, Documentation}
docs::{Docs, Documentation},
adt::AdtDef,
};
pub use self::code_model_api::{

View File

@ -31,7 +31,7 @@ use rustc_hash::FxHashMap;
use crate::{
Module, Function, Struct, StructField, Enum, EnumVariant, Path, Name, ImplBlock,
FnSignature, FnScopes, ModuleDef, Crate,
FnSignature, FnScopes, ModuleDef, AdtDef,
db::HirDatabase,
type_ref::{TypeRef, Mutability},
name::KnownName,
@ -162,23 +162,6 @@ impl Substs {
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum AdtDef {
Struct(Struct),
Enum(Enum),
}
impl_froms!(AdtDef: Struct, Enum);
impl AdtDef {
fn krate(self, db: &impl HirDatabase) -> Option<Crate> {
match self {
AdtDef::Struct(s) => s.module(db),
AdtDef::Enum(e) => e.module(db),
}
.krate(db)
}
}
/// A type. This is based on the `TyKind` enum in rustc (librustc/ty/sty.rs).
///
/// This should be cheap to clone.