Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/lib.rs')
| -rw-r--r-- | crates/hir-def/src/lib.rs | 116 |
1 files changed, 31 insertions, 85 deletions
diff --git a/crates/hir-def/src/lib.rs b/crates/hir-def/src/lib.rs index 22c9073a58..3aaf89102f 100644 --- a/crates/hir-def/src/lib.rs +++ b/crates/hir-def/src/lib.rs @@ -15,8 +15,8 @@ extern crate rustc_parse_format; #[cfg(not(feature = "in-rust-tree"))] extern crate ra_ap_rustc_parse_format as rustc_parse_format; -extern crate ra_ap_rustc_abi as rustc_abi; pub extern crate ra_ap_rustc_abi as layout; +pub extern crate ra_ap_rustc_abi as rustc_abi; pub mod db; @@ -33,6 +33,7 @@ pub mod item_tree; pub mod builtin_derive; pub mod lang_item; +pub mod unstable_features; pub mod hir; pub use self::hir::type_ref; @@ -47,7 +48,8 @@ pub mod find_path; pub mod import_map; pub mod visibility; -use intern::{Interned, Symbol}; +use intern::Interned; +use rustc_abi::ExternAbi; use thin_vec::ThinVec; pub use crate::signatures::LocalFieldId; @@ -85,19 +87,14 @@ use crate::{ builtin_type::BuiltinType, db::DefDatabase, expr_store::ExpressionStoreSourceMap, - hir::{ - ExprId, - generics::{GenericParams, LocalLifetimeParamId, LocalTypeOrConstParamId}, - }, + hir::generics::{GenericParams, LocalLifetimeParamId, LocalTypeOrConstParamId}, nameres::{ LocalDefMap, assoc::{ImplItems, TraitItems}, block_def_map, crate_def_map, crate_local_def_map, diagnostics::DefDiagnostics, }, - signatures::{ - ConstSignature, EnumVariants, InactiveEnumVariantCode, StaticSignature, VariantFields, - }, + signatures::{EnumVariants, InactiveEnumVariantCode, VariantFields}, }; type FxIndexMap<K, V> = indexmap::IndexMap<K, V, rustc_hash::FxBuildHasher>; @@ -223,9 +220,9 @@ impl<N: AstIdNode> AstIdLoc for AssocItemLoc<N> { } macro_rules! impl_intern { - ($id:ident, $loc:ident, $intern:ident, $lookup:ident) => { + ($id:ident, $loc:ident) => { impl_intern_key!($id, $loc); - impl_intern_lookup!(DefDatabase, $id, $loc, $intern, $lookup); + impl_intern_lookup!(DefDatabase, $id, $loc); }; } @@ -252,10 +249,10 @@ macro_rules! impl_loc { } type FunctionLoc = AssocItemLoc<ast::Fn>; -impl_intern!(FunctionId, FunctionLoc, intern_function, lookup_intern_function); +impl_intern!(FunctionId, FunctionLoc); type StructLoc = ItemLoc<ast::Struct>; -impl_intern!(StructId, StructLoc, intern_struct, lookup_intern_struct); +impl_intern!(StructId, StructLoc); impl StructId { pub fn fields(self, db: &dyn DefDatabase) -> &VariantFields { @@ -272,7 +269,7 @@ impl StructId { } pub type UnionLoc = ItemLoc<ast::Union>; -impl_intern!(UnionId, UnionLoc, intern_union, lookup_intern_union); +impl_intern!(UnionId, UnionLoc); impl UnionId { pub fn fields(self, db: &dyn DefDatabase) -> &VariantFields { @@ -289,7 +286,7 @@ impl UnionId { } pub type EnumLoc = ItemLoc<ast::Enum>; -impl_intern!(EnumId, EnumLoc, intern_enum, lookup_intern_enum); +impl_intern!(EnumId, EnumLoc); impl EnumId { #[inline] @@ -307,26 +304,13 @@ impl EnumId { } type ConstLoc = AssocItemLoc<ast::Const>; -impl_intern!(ConstId, ConstLoc, intern_const, lookup_intern_const); +impl_intern!(ConstId, ConstLoc); pub type StaticLoc = AssocItemLoc<ast::Static>; -impl_intern!(StaticId, StaticLoc, intern_static, lookup_intern_static); - -/// An anonymous const expression that appears in a type position (e.g., array lengths, -/// const generic arguments like `{ N + 1 }`). Unlike named constants, these don't have -/// their own `Body` — their expressions live in the parent's signature `ExpressionStore`. -#[derive(Debug, Hash, PartialEq, Eq, Clone)] -pub struct AnonConstLoc { - /// The owner store containing this expression. - pub owner: ExpressionStoreOwnerId, - /// The ExprId within the owner's ExpressionStore that is the root - /// of this anonymous const expression. - pub expr: ExprId, -} -impl_intern!(AnonConstId, AnonConstLoc, intern_anon_const, lookup_intern_anon_const); +impl_intern!(StaticId, StaticLoc); pub type TraitLoc = ItemLoc<ast::Trait>; -impl_intern!(TraitId, TraitLoc, intern_trait, lookup_intern_trait); +impl_intern!(TraitId, TraitLoc); impl TraitId { #[inline] @@ -336,10 +320,10 @@ impl TraitId { } type TypeAliasLoc = AssocItemLoc<ast::TypeAlias>; -impl_intern!(TypeAliasId, TypeAliasLoc, intern_type_alias, lookup_intern_type_alias); +impl_intern!(TypeAliasId, TypeAliasLoc); type ImplLoc = ItemLoc<ast::Impl>; -impl_intern!(ImplId, ImplLoc, intern_impl, lookup_intern_impl); +impl_intern!(ImplId, ImplLoc); impl ImplId { #[inline] @@ -369,18 +353,16 @@ pub struct BuiltinDeriveImplId { } type UseLoc = ItemLoc<ast::Use>; -impl_intern!(UseId, UseLoc, intern_use, lookup_intern_use); +impl_intern!(UseId, UseLoc); type ExternCrateLoc = ItemLoc<ast::ExternCrate>; -impl_intern!(ExternCrateId, ExternCrateLoc, intern_extern_crate, lookup_intern_extern_crate); +impl_intern!(ExternCrateId, ExternCrateLoc); type ExternBlockLoc = ItemLoc<ast::ExternBlock>; -impl_intern!(ExternBlockId, ExternBlockLoc, intern_extern_block, lookup_intern_extern_block); +impl_intern!(ExternBlockId, ExternBlockLoc); -#[salsa::tracked] impl ExternBlockId { - #[salsa::tracked] - pub fn abi(self, db: &dyn DefDatabase) -> Option<Symbol> { + pub fn abi(self, db: &dyn DefDatabase) -> ExternAbi { signatures::extern_block_abi(db, self) } } @@ -391,7 +373,7 @@ pub struct EnumVariantLoc { pub parent: EnumId, pub index: u32, } -impl_intern!(EnumVariantId, EnumVariantLoc, intern_enum_variant, lookup_intern_enum_variant); +impl_intern!(EnumVariantId, EnumVariantLoc); impl_loc!(EnumVariantLoc, id: Variant, parent: EnumId); impl EnumVariantId { @@ -416,7 +398,7 @@ pub struct Macro2Loc { pub allow_internal_unsafe: bool, pub edition: Edition, } -impl_intern!(Macro2Id, Macro2Loc, intern_macro2, lookup_intern_macro2); +impl_intern!(Macro2Id, Macro2Loc); impl_loc!(Macro2Loc, id: MacroDef, container: ModuleId); #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] @@ -427,7 +409,7 @@ pub struct MacroRulesLoc { pub flags: MacroRulesLocFlags, pub edition: Edition, } -impl_intern!(MacroRulesId, MacroRulesLoc, intern_macro_rules, lookup_intern_macro_rules); +impl_intern!(MacroRulesId, MacroRulesLoc); impl_loc!(MacroRulesLoc, id: MacroRules, container: ModuleId); bitflags::bitflags! { @@ -455,7 +437,7 @@ pub struct ProcMacroLoc { pub kind: ProcMacroKind, pub edition: Edition, } -impl_intern!(ProcMacroId, ProcMacroLoc, intern_proc_macro, lookup_intern_proc_macro); +impl_intern!(ProcMacroId, ProcMacroLoc); impl_loc!(ProcMacroLoc, id: Fn, container: ModuleId); #[derive(Debug, Hash, PartialEq, Eq, Clone)] @@ -464,7 +446,7 @@ pub struct BlockLoc { /// The containing module. pub module: ModuleId, } -impl_intern!(BlockId, BlockLoc, intern_block, lookup_intern_block); +impl_intern!(BlockId, BlockLoc); #[salsa_macros::tracked(debug)] #[derive(PartialOrd, Ord)] @@ -720,42 +702,6 @@ impl From<DefWithBodyId> for ModuleDefId { } } -/// A constant, which might appears as a const item, an anonymous const block in expressions -/// or patterns, or as a constant in types with const generics. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)] -pub enum GeneralConstId { - ConstId(ConstId), - StaticId(StaticId), - AnonConstId(AnonConstId), -} - -impl_from!(ConstId, StaticId, AnonConstId for GeneralConstId); - -impl GeneralConstId { - pub fn generic_def(self, db: &dyn DefDatabase) -> Option<GenericDefId> { - match self { - GeneralConstId::ConstId(it) => Some(it.into()), - GeneralConstId::StaticId(it) => Some(it.into()), - GeneralConstId::AnonConstId(it) => Some(it.lookup(db).owner.generic_def(db)), - } - } - - pub fn name(self, db: &dyn DefDatabase) -> String { - match self { - GeneralConstId::StaticId(it) => { - StaticSignature::of(db, it).name.display(db, Edition::CURRENT).to_string() - } - GeneralConstId::ConstId(const_id) => { - ConstSignature::of(db, const_id).name.as_ref().map_or_else( - || "_".to_owned(), - |name| name.display(db, Edition::CURRENT).to_string(), - ) - } - GeneralConstId::AnonConstId(_) => "{anon const}".to_owned(), - } - } -} - /// The defs which have a body. #[derive(Debug, PartialOrd, Ord, Clone, Copy, PartialEq, Eq, Hash, salsa_macros::Supertype)] pub enum DefWithBodyId { @@ -777,12 +723,12 @@ impl From<EnumVariantId> for DefWithBodyId { } impl DefWithBodyId { - pub fn as_generic_def_id(self, db: &dyn DefDatabase) -> Option<GenericDefId> { + pub fn generic_def(self, db: &dyn DefDatabase) -> GenericDefId { match self { - DefWithBodyId::FunctionId(f) => Some(f.into()), - DefWithBodyId::StaticId(s) => Some(s.into()), - DefWithBodyId::ConstId(c) => Some(c.into()), - DefWithBodyId::VariantId(c) => Some(c.lookup(db).parent.into()), + DefWithBodyId::FunctionId(f) => f.into(), + DefWithBodyId::StaticId(s) => s.into(), + DefWithBodyId::ConstId(c) => c.into(), + DefWithBodyId::VariantId(c) => c.lookup(db).parent.into(), } } } |