mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-28 10:39:45 +00:00
Merge Trait and TraitAlias handling
This commit is contained in:
parent
a9450ebba3
commit
82f174fbd9
74 changed files with 68 additions and 577 deletions
|
|
@ -554,7 +554,6 @@ impl AttrsWithOwner {
|
|||
AdtId::UnionId(it) => attrs_from_ast_id_loc(db, it),
|
||||
},
|
||||
AttrDefId::TraitId(it) => attrs_from_ast_id_loc(db, it),
|
||||
AttrDefId::TraitAliasId(it) => attrs_from_ast_id_loc(db, it),
|
||||
AttrDefId::MacroId(it) => match it {
|
||||
MacroId::Macro2Id(it) => attrs_from_ast_id_loc(db, it),
|
||||
MacroId::MacroRulesId(it) => attrs_from_ast_id_loc(db, it),
|
||||
|
|
@ -659,7 +658,6 @@ impl AttrsWithOwner {
|
|||
AttrDefId::StaticId(id) => any_has_attrs(db, id),
|
||||
AttrDefId::ConstId(id) => any_has_attrs(db, id),
|
||||
AttrDefId::TraitId(id) => any_has_attrs(db, id),
|
||||
AttrDefId::TraitAliasId(id) => any_has_attrs(db, id),
|
||||
AttrDefId::TypeAliasId(id) => any_has_attrs(db, id),
|
||||
AttrDefId::MacroId(id) => match id {
|
||||
MacroId::Macro2Id(id) => any_has_attrs(db, id),
|
||||
|
|
|
|||
|
|
@ -15,8 +15,8 @@ use crate::{
|
|||
EnumVariantId, EnumVariantLoc, ExternBlockId, ExternBlockLoc, ExternCrateId, ExternCrateLoc,
|
||||
FunctionId, FunctionLoc, GenericDefId, ImplId, ImplLoc, LocalFieldId, Macro2Id, Macro2Loc,
|
||||
MacroExpander, MacroId, MacroRulesId, MacroRulesLoc, MacroRulesLocFlags, ProcMacroId,
|
||||
ProcMacroLoc, StaticId, StaticLoc, StructId, StructLoc, TraitAliasId, TraitAliasLoc, TraitId,
|
||||
TraitLoc, TypeAliasId, TypeAliasLoc, UnionId, UnionLoc, UseId, UseLoc, VariantId,
|
||||
ProcMacroLoc, StaticId, StaticLoc, StructId, StructLoc, TraitId, TraitLoc, TypeAliasId,
|
||||
TypeAliasLoc, UnionId, UnionLoc, UseId, UseLoc, VariantId,
|
||||
attr::{Attrs, AttrsWithOwner},
|
||||
expr_store::{
|
||||
Body, BodySourceMap, ExpressionStore, ExpressionStoreSourceMap, scope::ExprScopes,
|
||||
|
|
@ -28,7 +28,7 @@ use crate::{
|
|||
nameres::crate_def_map,
|
||||
signatures::{
|
||||
ConstSignature, EnumSignature, FunctionSignature, ImplSignature, StaticSignature,
|
||||
StructSignature, TraitAliasSignature, TraitSignature, TypeAliasSignature, UnionSignature,
|
||||
StructSignature, TraitSignature, TypeAliasSignature, UnionSignature,
|
||||
},
|
||||
tt,
|
||||
visibility::{self, Visibility},
|
||||
|
|
@ -69,9 +69,6 @@ pub trait InternDatabase: RootQueryDb {
|
|||
#[salsa::interned]
|
||||
fn intern_trait(&self, loc: TraitLoc) -> TraitId;
|
||||
|
||||
#[salsa::interned]
|
||||
fn intern_trait_alias(&self, loc: TraitAliasLoc) -> TraitAliasId;
|
||||
|
||||
#[salsa::interned]
|
||||
fn intern_type_alias(&self, loc: TypeAliasLoc) -> TypeAliasId;
|
||||
|
||||
|
|
@ -152,11 +149,6 @@ pub trait DefDatabase: InternDatabase + ExpandDatabase + SourceDatabase {
|
|||
self.function_signature_with_source_map(e).0
|
||||
}
|
||||
|
||||
#[salsa::tracked]
|
||||
fn trait_alias_signature(&self, e: TraitAliasId) -> Arc<TraitAliasSignature> {
|
||||
self.trait_alias_signature_with_source_map(e).0
|
||||
}
|
||||
|
||||
#[salsa::tracked]
|
||||
fn type_alias_signature(&self, e: TypeAliasId) -> Arc<TypeAliasSignature> {
|
||||
self.type_alias_signature_with_source_map(e).0
|
||||
|
|
@ -210,12 +202,6 @@ pub trait DefDatabase: InternDatabase + ExpandDatabase + SourceDatabase {
|
|||
e: FunctionId,
|
||||
) -> (Arc<FunctionSignature>, Arc<ExpressionStoreSourceMap>);
|
||||
|
||||
#[salsa::invoke(TraitAliasSignature::query)]
|
||||
fn trait_alias_signature_with_source_map(
|
||||
&self,
|
||||
e: TraitAliasId,
|
||||
) -> (Arc<TraitAliasSignature>, Arc<ExpressionStoreSourceMap>);
|
||||
|
||||
#[salsa::invoke(TypeAliasSignature::query)]
|
||||
fn type_alias_signature_with_source_map(
|
||||
&self,
|
||||
|
|
|
|||
|
|
@ -33,8 +33,8 @@ pub mod keys {
|
|||
|
||||
use crate::{
|
||||
BlockId, ConstId, EnumId, EnumVariantId, ExternBlockId, ExternCrateId, FieldId, FunctionId,
|
||||
ImplId, LifetimeParamId, Macro2Id, MacroRulesId, ProcMacroId, StaticId, StructId,
|
||||
TraitAliasId, TraitId, TypeAliasId, TypeOrConstParamId, UnionId, UseId,
|
||||
ImplId, LifetimeParamId, Macro2Id, MacroRulesId, ProcMacroId, StaticId, StructId, TraitId,
|
||||
TypeAliasId, TypeOrConstParamId, UnionId, UseId,
|
||||
dyn_map::{DynMap, Policy},
|
||||
};
|
||||
|
||||
|
|
@ -48,7 +48,6 @@ pub mod keys {
|
|||
pub const IMPL: Key<ast::Impl, ImplId> = Key::new();
|
||||
pub const EXTERN_BLOCK: Key<ast::ExternBlock, ExternBlockId> = Key::new();
|
||||
pub const TRAIT: Key<ast::Trait, TraitId> = Key::new();
|
||||
pub const TRAIT_ALIAS: Key<ast::TraitAlias, TraitAliasId> = Key::new();
|
||||
pub const STRUCT: Key<ast::Struct, StructId> = Key::new();
|
||||
pub const UNION: Key<ast::Union, UnionId> = Key::new();
|
||||
pub const ENUM: Key<ast::Enum, EnumId> = Key::new();
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ use tt::TextRange;
|
|||
|
||||
use crate::{
|
||||
AdtId, BlockId, BlockLoc, DefWithBodyId, FunctionId, GenericDefId, ImplId, MacroId,
|
||||
ModuleDefId, ModuleId, TraitAliasId, TraitId, TypeAliasId, UnresolvedMacro,
|
||||
ModuleDefId, ModuleId, TraitId, TypeAliasId, UnresolvedMacro,
|
||||
builtin_type::BuiltinUint,
|
||||
db::DefDatabase,
|
||||
expr_store::{
|
||||
|
|
@ -252,28 +252,6 @@ pub(crate) fn lower_trait(
|
|||
(store, source_map, params)
|
||||
}
|
||||
|
||||
pub(crate) fn lower_trait_alias(
|
||||
db: &dyn DefDatabase,
|
||||
module: ModuleId,
|
||||
trait_syntax: InFile<ast::TraitAlias>,
|
||||
trait_id: TraitAliasId,
|
||||
) -> (ExpressionStore, ExpressionStoreSourceMap, Arc<GenericParams>) {
|
||||
let mut expr_collector = ExprCollector::new(db, module, trait_syntax.file_id);
|
||||
let mut collector = generics::GenericParamsCollector::with_self_param(
|
||||
&mut expr_collector,
|
||||
trait_id.into(),
|
||||
trait_syntax.value.type_bound_list(),
|
||||
);
|
||||
collector.lower(
|
||||
&mut expr_collector,
|
||||
trait_syntax.value.generic_param_list(),
|
||||
trait_syntax.value.where_clause(),
|
||||
);
|
||||
let params = collector.finish();
|
||||
let (store, source_map) = expr_collector.store.finish();
|
||||
(store, source_map, params)
|
||||
}
|
||||
|
||||
pub(crate) fn lower_type_alias(
|
||||
db: &dyn DefDatabase,
|
||||
module: ModuleId,
|
||||
|
|
|
|||
|
|
@ -183,7 +183,6 @@ pub fn print_signature(db: &dyn DefDatabase, owner: GenericDefId, edition: Editi
|
|||
}
|
||||
GenericDefId::ImplId(id) => format!("unimplemented {id:?}"),
|
||||
GenericDefId::StaticId(id) => format!("unimplemented {id:?}"),
|
||||
GenericDefId::TraitAliasId(id) => format!("unimplemented {id:?}"),
|
||||
GenericDefId::TraitId(id) => format!("unimplemented {id:?}"),
|
||||
GenericDefId::TypeAliasId(id) => format!("unimplemented {id:?}"),
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ fn lower_and_print(#[rust_analyzer::rust_fixture] ra_fixture: &str, expect: Expe
|
|||
ModuleDefId::ConstId(id) => id.into(),
|
||||
ModuleDefId::StaticId(id) => id.into(),
|
||||
ModuleDefId::TraitId(id) => id.into(),
|
||||
ModuleDefId::TraitAliasId(id) => id.into(),
|
||||
ModuleDefId::TypeAliasId(id) => id.into(),
|
||||
ModuleDefId::EnumVariantId(_) => continue,
|
||||
ModuleDefId::BuiltinType(_) => continue,
|
||||
|
|
@ -51,7 +50,6 @@ fn lower_and_print(#[rust_analyzer::rust_fixture] ra_fixture: &str, expect: Expe
|
|||
|
||||
GenericDefId::ImplId(_id) => (),
|
||||
GenericDefId::StaticId(_id) => (),
|
||||
GenericDefId::TraitAliasId(_id) => (),
|
||||
GenericDefId::TraitId(_id) => (),
|
||||
GenericDefId::TypeAliasId(_id) => (),
|
||||
}
|
||||
|
|
|
|||
|
|
@ -203,9 +203,6 @@ impl GenericParams {
|
|||
}
|
||||
GenericDefId::ImplId(impl_id) => db.impl_signature(impl_id).generic_params.clone(),
|
||||
GenericDefId::StaticId(_) => EMPTY.clone(),
|
||||
GenericDefId::TraitAliasId(trait_alias_id) => {
|
||||
db.trait_alias_signature(trait_alias_id).generic_params.clone()
|
||||
}
|
||||
GenericDefId::TraitId(trait_id) => db.trait_signature(trait_id).generic_params.clone(),
|
||||
GenericDefId::TypeAliasId(type_alias_id) => {
|
||||
db.type_alias_signature(type_alias_id).generic_params.clone()
|
||||
|
|
@ -246,10 +243,6 @@ impl GenericParams {
|
|||
let sig = db.static_signature(id);
|
||||
(EMPTY.clone(), sig.store.clone())
|
||||
}
|
||||
GenericDefId::TraitAliasId(id) => {
|
||||
let sig = db.trait_alias_signature(id);
|
||||
(sig.generic_params.clone(), sig.store.clone())
|
||||
}
|
||||
GenericDefId::TraitId(id) => {
|
||||
let sig = db.trait_signature(id);
|
||||
(sig.generic_params.clone(), sig.store.clone())
|
||||
|
|
@ -294,10 +287,6 @@ impl GenericParams {
|
|||
let (sig, sm) = db.static_signature_with_source_map(id);
|
||||
(EMPTY.clone(), sig.store.clone(), sm)
|
||||
}
|
||||
GenericDefId::TraitAliasId(id) => {
|
||||
let (sig, sm) = db.trait_alias_signature_with_source_map(id);
|
||||
(sig.generic_params.clone(), sig.store.clone(), sm)
|
||||
}
|
||||
GenericDefId::TraitId(id) => {
|
||||
let (sig, sm) = db.trait_signature_with_source_map(id);
|
||||
(sig.generic_params.clone(), sig.store.clone(), sm)
|
||||
|
|
|
|||
|
|
@ -872,7 +872,6 @@ impl PerNs {
|
|||
PerNs::values(def, v, import.and_then(ImportOrExternCrate::import_or_glob))
|
||||
}
|
||||
ModuleDefId::TraitId(_) => PerNs::types(def, v, import),
|
||||
ModuleDefId::TraitAliasId(_) => PerNs::types(def, v, import),
|
||||
ModuleDefId::TypeAliasId(_) => PerNs::types(def, v, import),
|
||||
ModuleDefId::BuiltinType(_) => PerNs::types(def, v, import),
|
||||
ModuleDefId::MacroId(mac) => PerNs::macros(mac, v, import),
|
||||
|
|
|
|||
|
|
@ -276,7 +276,6 @@ enum SmallModItem {
|
|||
Static(Static),
|
||||
Struct(Struct),
|
||||
Trait(Trait),
|
||||
TraitAlias(TraitAlias),
|
||||
TypeAlias(TypeAlias),
|
||||
Union(Union),
|
||||
}
|
||||
|
|
@ -404,7 +403,6 @@ ModItemId ->
|
|||
Static in small_data -> ast::Static,
|
||||
Struct in small_data -> ast::Struct,
|
||||
Trait in small_data -> ast::Trait,
|
||||
TraitAlias in small_data -> ast::TraitAlias,
|
||||
TypeAlias in small_data -> ast::TypeAlias,
|
||||
Union in small_data -> ast::Union,
|
||||
Use in big_data -> ast::Use,
|
||||
|
|
@ -583,12 +581,6 @@ pub struct Trait {
|
|||
pub(crate) visibility: RawVisibilityId,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq)]
|
||||
pub struct TraitAlias {
|
||||
pub name: Name,
|
||||
pub(crate) visibility: RawVisibilityId,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq)]
|
||||
pub struct Impl {}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ use crate::{
|
|||
BigModItem, Const, Enum, ExternBlock, ExternCrate, FieldsShape, Function, Impl,
|
||||
ImportAlias, Interned, ItemTree, ItemTreeAstId, Macro2, MacroCall, MacroRules, Mod,
|
||||
ModItemId, ModKind, ModPath, RawAttrs, RawVisibility, RawVisibilityId, SmallModItem,
|
||||
Static, Struct, StructKind, Trait, TraitAlias, TypeAlias, Union, Use, UseTree, UseTreeKind,
|
||||
Static, Struct, StructKind, Trait, TypeAlias, Union, Use, UseTree, UseTreeKind,
|
||||
VisibilityExplicitness,
|
||||
},
|
||||
};
|
||||
|
|
@ -134,7 +134,6 @@ impl<'a> Ctx<'a> {
|
|||
ast::Item::Const(ast) => self.lower_const(ast).into(),
|
||||
ast::Item::Module(ast) => self.lower_module(ast)?.into(),
|
||||
ast::Item::Trait(ast) => self.lower_trait(ast)?.into(),
|
||||
ast::Item::TraitAlias(ast) => self.lower_trait_alias(ast)?.into(),
|
||||
ast::Item::Impl(ast) => self.lower_impl(ast).into(),
|
||||
ast::Item::Use(ast) => self.lower_use(ast)?.into(),
|
||||
ast::Item::ExternCrate(ast) => self.lower_extern_crate(ast)?.into(),
|
||||
|
|
@ -267,19 +266,6 @@ impl<'a> Ctx<'a> {
|
|||
Some(ast_id)
|
||||
}
|
||||
|
||||
fn lower_trait_alias(
|
||||
&mut self,
|
||||
trait_alias_def: &ast::TraitAlias,
|
||||
) -> Option<ItemTreeAstId<TraitAlias>> {
|
||||
let name = trait_alias_def.name()?.as_name();
|
||||
let visibility = self.lower_visibility(trait_alias_def);
|
||||
let ast_id = self.source_ast_id_map.ast_id(trait_alias_def);
|
||||
|
||||
let alias = TraitAlias { name, visibility };
|
||||
self.tree.small_data.insert(ast_id.upcast(), SmallModItem::TraitAlias(alias));
|
||||
Some(ast_id)
|
||||
}
|
||||
|
||||
fn lower_impl(&mut self, impl_def: &ast::Impl) -> ItemTreeAstId<Impl> {
|
||||
let ast_id = self.source_ast_id_map.ast_id(impl_def);
|
||||
// Note that trait impls don't get implicit `Self` unlike traits, because here they are a
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ use crate::{
|
|||
item_tree::{
|
||||
Const, DefDatabase, Enum, ExternBlock, ExternCrate, FieldsShape, Function, Impl, ItemTree,
|
||||
Macro2, MacroCall, MacroRules, Mod, ModItemId, ModKind, RawAttrs, RawVisibilityId, Static,
|
||||
Struct, Trait, TraitAlias, TypeAlias, Union, Use, UseTree, UseTreeKind,
|
||||
Struct, Trait, TypeAlias, Union, Use, UseTree, UseTreeKind,
|
||||
},
|
||||
visibility::RawVisibility,
|
||||
};
|
||||
|
|
@ -250,12 +250,6 @@ impl Printer<'_> {
|
|||
self.print_visibility(*visibility);
|
||||
w!(self, "trait {} {{ ... }}", name.display(self.db, self.edition));
|
||||
}
|
||||
ModItemId::TraitAlias(ast_id) => {
|
||||
let TraitAlias { name, visibility } = &self.tree[ast_id];
|
||||
self.print_ast_id(ast_id.erase());
|
||||
self.print_visibility(*visibility);
|
||||
wln!(self, "trait {} = ..;", name.display(self.db, self.edition));
|
||||
}
|
||||
ModItemId::Impl(ast_id) => {
|
||||
let Impl {} = &self.tree[ast_id];
|
||||
self.print_ast_id(ast_id.erase());
|
||||
|
|
|
|||
|
|
@ -318,9 +318,6 @@ impl TraitId {
|
|||
}
|
||||
}
|
||||
|
||||
pub type TraitAliasLoc = ItemLoc<ast::TraitAlias>;
|
||||
impl_intern!(TraitAliasId, TraitAliasLoc, intern_trait_alias, lookup_intern_trait_alias);
|
||||
|
||||
type TypeAliasLoc = AssocItemLoc<ast::TypeAlias>;
|
||||
impl_intern!(TypeAliasId, TypeAliasLoc, intern_type_alias, lookup_intern_type_alias);
|
||||
|
||||
|
|
@ -742,7 +739,6 @@ pub enum ModuleDefId {
|
|||
ConstId(ConstId),
|
||||
StaticId(StaticId),
|
||||
TraitId(TraitId),
|
||||
TraitAliasId(TraitAliasId),
|
||||
TypeAliasId(TypeAliasId),
|
||||
BuiltinType(BuiltinType),
|
||||
MacroId(MacroId),
|
||||
|
|
@ -756,7 +752,6 @@ impl_from!(
|
|||
ConstId,
|
||||
StaticId,
|
||||
TraitId,
|
||||
TraitAliasId,
|
||||
TypeAliasId,
|
||||
BuiltinType
|
||||
for ModuleDefId
|
||||
|
|
@ -862,7 +857,6 @@ pub enum GenericDefId {
|
|||
// More importantly, this completes the set of items that contain type references
|
||||
// which is to be used by the signature expression store in the future.
|
||||
StaticId(StaticId),
|
||||
TraitAliasId(TraitAliasId),
|
||||
TraitId(TraitId),
|
||||
TypeAliasId(TypeAliasId),
|
||||
}
|
||||
|
|
@ -872,7 +866,6 @@ impl_from!(
|
|||
FunctionId,
|
||||
ImplId,
|
||||
StaticId,
|
||||
TraitAliasId,
|
||||
TraitId,
|
||||
TypeAliasId
|
||||
for GenericDefId
|
||||
|
|
@ -902,7 +895,6 @@ impl GenericDefId {
|
|||
GenericDefId::AdtId(AdtId::UnionId(it)) => file_id_and_params_of_item_loc(db, it),
|
||||
GenericDefId::AdtId(AdtId::EnumId(it)) => file_id_and_params_of_item_loc(db, it),
|
||||
GenericDefId::TraitId(it) => file_id_and_params_of_item_loc(db, it),
|
||||
GenericDefId::TraitAliasId(it) => file_id_and_params_of_item_loc(db, it),
|
||||
GenericDefId::ImplId(it) => file_id_and_params_of_item_loc(db, it),
|
||||
GenericDefId::ConstId(it) => (it.lookup(db).id.file_id, None),
|
||||
GenericDefId::StaticId(it) => (it.lookup(db).id.file_id, None),
|
||||
|
|
@ -978,7 +970,6 @@ pub enum AttrDefId {
|
|||
StaticId(StaticId),
|
||||
ConstId(ConstId),
|
||||
TraitId(TraitId),
|
||||
TraitAliasId(TraitAliasId),
|
||||
TypeAliasId(TypeAliasId),
|
||||
MacroId(MacroId),
|
||||
ImplId(ImplId),
|
||||
|
|
@ -997,7 +988,6 @@ impl_from!(
|
|||
ConstId,
|
||||
FunctionId,
|
||||
TraitId,
|
||||
TraitAliasId,
|
||||
TypeAliasId,
|
||||
MacroId(Macro2Id, MacroRulesId, ProcMacroId),
|
||||
ImplId,
|
||||
|
|
@ -1020,7 +1010,6 @@ impl TryFrom<ModuleDefId> for AttrDefId {
|
|||
ModuleDefId::StaticId(it) => Ok(it.into()),
|
||||
ModuleDefId::TraitId(it) => Ok(it.into()),
|
||||
ModuleDefId::TypeAliasId(it) => Ok(it.into()),
|
||||
ModuleDefId::TraitAliasId(id) => Ok(id.into()),
|
||||
ModuleDefId::MacroId(id) => Ok(id.into()),
|
||||
ModuleDefId::BuiltinType(_) => Err(()),
|
||||
}
|
||||
|
|
@ -1266,7 +1255,6 @@ impl HasModule for GenericDefId {
|
|||
GenericDefId::FunctionId(it) => it.module(db),
|
||||
GenericDefId::AdtId(it) => it.module(db),
|
||||
GenericDefId::TraitId(it) => it.module(db),
|
||||
GenericDefId::TraitAliasId(it) => it.module(db),
|
||||
GenericDefId::TypeAliasId(it) => it.module(db),
|
||||
GenericDefId::ImplId(it) => it.module(db),
|
||||
GenericDefId::ConstId(it) => it.module(db),
|
||||
|
|
@ -1286,7 +1274,6 @@ impl HasModule for AttrDefId {
|
|||
AttrDefId::StaticId(it) => it.module(db),
|
||||
AttrDefId::ConstId(it) => it.module(db),
|
||||
AttrDefId::TraitId(it) => it.module(db),
|
||||
AttrDefId::TraitAliasId(it) => it.module(db),
|
||||
AttrDefId::TypeAliasId(it) => it.module(db),
|
||||
AttrDefId::ImplId(it) => it.module(db),
|
||||
AttrDefId::ExternBlockId(it) => it.module(db),
|
||||
|
|
@ -1316,7 +1303,6 @@ impl ModuleDefId {
|
|||
ModuleDefId::ConstId(id) => id.module(db),
|
||||
ModuleDefId::StaticId(id) => id.module(db),
|
||||
ModuleDefId::TraitId(id) => id.module(db),
|
||||
ModuleDefId::TraitAliasId(id) => id.module(db),
|
||||
ModuleDefId::TypeAliasId(id) => id.module(db),
|
||||
ModuleDefId::MacroId(id) => id.module(db),
|
||||
ModuleDefId::BuiltinType(_) => return None,
|
||||
|
|
|
|||
|
|
@ -51,10 +51,18 @@ impl TraitItems {
|
|||
tr: TraitId,
|
||||
) -> (TraitItems, DefDiagnostics) {
|
||||
let ItemLoc { container: module_id, id: ast_id } = tr.lookup(db);
|
||||
let ast_id_map = db.ast_id_map(ast_id.file_id);
|
||||
let source = ast_id.with_value(ast_id_map.get(ast_id.value)).to_node(db);
|
||||
if source.eq_token().is_some() {
|
||||
// FIXME(trait-alias) probably needs special handling here
|
||||
return (
|
||||
TraitItems { macro_calls: ThinVec::new(), items: Box::default() },
|
||||
DefDiagnostics::new(vec![]),
|
||||
);
|
||||
}
|
||||
|
||||
let collector =
|
||||
AssocItemCollector::new(db, module_id, ItemContainerId::TraitId(tr), ast_id.file_id);
|
||||
let source = ast_id.with_value(collector.ast_id_map.get(ast_id.value)).to_node(db);
|
||||
let (items, macro_calls, diagnostics) = collector.collect(source.assoc_item_list());
|
||||
|
||||
(TraitItems { macro_calls, items }, DefDiagnostics::new(diagnostics))
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ use crate::{
|
|||
ExternCrateId, ExternCrateLoc, FunctionId, FunctionLoc, ImplLoc, Intern, ItemContainerId,
|
||||
LocalModuleId, Lookup, Macro2Id, Macro2Loc, MacroExpander, MacroId, MacroRulesId,
|
||||
MacroRulesLoc, MacroRulesLocFlags, ModuleDefId, ModuleId, ProcMacroId, ProcMacroLoc, StaticLoc,
|
||||
StructLoc, TraitAliasLoc, TraitLoc, TypeAliasLoc, UnionLoc, UnresolvedMacro, UseId, UseLoc,
|
||||
StructLoc, TraitLoc, TypeAliasLoc, UnionLoc, UnresolvedMacro, UseId, UseLoc,
|
||||
attr::Attrs,
|
||||
db::DefDatabase,
|
||||
item_scope::{GlobId, ImportId, ImportOrExternCrate, PerNsGlobImports},
|
||||
|
|
@ -1954,20 +1954,6 @@ impl ModCollector<'_, '_> {
|
|||
false,
|
||||
);
|
||||
}
|
||||
ModItemId::TraitAlias(id) => {
|
||||
let it = &self.item_tree[id];
|
||||
|
||||
let vis = resolve_vis(def_map, local_def_map, &self.item_tree[it.visibility]);
|
||||
update_def(
|
||||
self.def_collector,
|
||||
TraitAliasLoc { container: module, id: InFile::new(self.file_id(), id) }
|
||||
.intern(db)
|
||||
.into(),
|
||||
&it.name,
|
||||
vis,
|
||||
false,
|
||||
);
|
||||
}
|
||||
ModItemId::TypeAlias(id) => {
|
||||
let it = &self.item_tree[id];
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ use crate::{
|
|||
EnumVariantId, ExternBlockId, ExternCrateId, FunctionId, FxIndexMap, GenericDefId,
|
||||
GenericParamId, HasModule, ImplId, ItemContainerId, LifetimeParamId, LocalModuleId, Lookup,
|
||||
Macro2Id, MacroId, MacroRulesId, ModuleDefId, ModuleId, ProcMacroId, StaticId, StructId,
|
||||
TraitAliasId, TraitId, TypeAliasId, TypeOrConstParamId, TypeParamId, UseId, VariantId,
|
||||
TraitId, TypeAliasId, TypeOrConstParamId, TypeParamId, UseId, VariantId,
|
||||
builtin_type::BuiltinType,
|
||||
db::DefDatabase,
|
||||
expr_store::{
|
||||
|
|
@ -105,7 +105,6 @@ pub enum TypeNs {
|
|||
TypeAliasId(TypeAliasId),
|
||||
BuiltinType(BuiltinType),
|
||||
TraitId(TraitId),
|
||||
TraitAliasId(TraitAliasId),
|
||||
|
||||
ModuleId(ModuleId),
|
||||
}
|
||||
|
|
@ -1150,7 +1149,6 @@ impl<'db> ModuleItemMap<'db> {
|
|||
let ty = match def.def {
|
||||
ModuleDefId::AdtId(it) => TypeNs::AdtId(it),
|
||||
ModuleDefId::TraitId(it) => TypeNs::TraitId(it),
|
||||
ModuleDefId::TraitAliasId(it) => TypeNs::TraitAliasId(it),
|
||||
ModuleDefId::TypeAliasId(it) => TypeNs::TypeAliasId(it),
|
||||
ModuleDefId::BuiltinType(it) => TypeNs::BuiltinType(it),
|
||||
|
||||
|
|
@ -1195,7 +1193,6 @@ fn to_value_ns(per_ns: PerNs) -> Option<(ValueNs, Option<ImportOrGlob>)> {
|
|||
|
||||
ModuleDefId::AdtId(AdtId::EnumId(_) | AdtId::UnionId(_))
|
||||
| ModuleDefId::TraitId(_)
|
||||
| ModuleDefId::TraitAliasId(_)
|
||||
| ModuleDefId::TypeAliasId(_)
|
||||
| ModuleDefId::BuiltinType(_)
|
||||
| ModuleDefId::MacroId(_)
|
||||
|
|
@ -1214,7 +1211,6 @@ fn to_type_ns(per_ns: PerNs) -> Option<(TypeNs, Option<ImportOrExternCrate>)> {
|
|||
ModuleDefId::BuiltinType(it) => TypeNs::BuiltinType(it),
|
||||
|
||||
ModuleDefId::TraitId(it) => TypeNs::TraitId(it),
|
||||
ModuleDefId::TraitAliasId(it) => TypeNs::TraitAliasId(it),
|
||||
|
||||
ModuleDefId::ModuleId(it) => TypeNs::ModuleId(it),
|
||||
|
||||
|
|
@ -1320,12 +1316,6 @@ impl HasResolver for TraitId {
|
|||
}
|
||||
}
|
||||
|
||||
impl HasResolver for TraitAliasId {
|
||||
fn resolver(self, db: &dyn DefDatabase) -> Resolver<'_> {
|
||||
lookup_resolver(db, self).push_generic_params_scope(db, self.into())
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Into<AdtId> + Copy> HasResolver for T {
|
||||
fn resolver(self, db: &dyn DefDatabase) -> Resolver<'_> {
|
||||
let def = self.into();
|
||||
|
|
@ -1410,7 +1400,6 @@ impl HasResolver for GenericDefId {
|
|||
GenericDefId::FunctionId(inner) => inner.resolver(db),
|
||||
GenericDefId::AdtId(adt) => adt.resolver(db),
|
||||
GenericDefId::TraitId(inner) => inner.resolver(db),
|
||||
GenericDefId::TraitAliasId(inner) => inner.resolver(db),
|
||||
GenericDefId::TypeAliasId(inner) => inner.resolver(db),
|
||||
GenericDefId::ImplId(inner) => inner.resolver(db),
|
||||
GenericDefId::ConstId(inner) => inner.resolver(db),
|
||||
|
|
|
|||
|
|
@ -20,15 +20,13 @@ use triomphe::Arc;
|
|||
|
||||
use crate::{
|
||||
ConstId, EnumId, EnumVariantId, EnumVariantLoc, ExternBlockId, FunctionId, HasModule, ImplId,
|
||||
ItemContainerId, ModuleId, StaticId, StructId, TraitAliasId, TraitId, TypeAliasId, UnionId,
|
||||
VariantId,
|
||||
ItemContainerId, ModuleId, StaticId, StructId, TraitId, TypeAliasId, UnionId, VariantId,
|
||||
attr::Attrs,
|
||||
db::DefDatabase,
|
||||
expr_store::{
|
||||
ExpressionStore, ExpressionStoreSourceMap,
|
||||
lower::{
|
||||
ExprCollector, lower_function, lower_generic_params, lower_trait, lower_trait_alias,
|
||||
lower_type_alias,
|
||||
ExprCollector, lower_function, lower_generic_params, lower_trait, lower_type_alias,
|
||||
},
|
||||
},
|
||||
hir::{ExprId, PatId, generics::GenericParams},
|
||||
|
|
@ -469,31 +467,6 @@ impl TraitSignature {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Eq)]
|
||||
pub struct TraitAliasSignature {
|
||||
pub name: Name,
|
||||
pub generic_params: Arc<GenericParams>,
|
||||
pub store: Arc<ExpressionStore>,
|
||||
}
|
||||
|
||||
impl TraitAliasSignature {
|
||||
pub fn query(
|
||||
db: &dyn DefDatabase,
|
||||
id: TraitAliasId,
|
||||
) -> (Arc<Self>, Arc<ExpressionStoreSourceMap>) {
|
||||
let loc = id.lookup(db);
|
||||
|
||||
let source = loc.source(db);
|
||||
let name = as_name_opt(source.value.name());
|
||||
let (store, source_map, generic_params) = lower_trait_alias(db, loc.container, source, id);
|
||||
|
||||
(
|
||||
Arc::new(TraitAliasSignature { generic_params, store: Arc::new(store), name }),
|
||||
Arc::new(source_map),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
bitflags! {
|
||||
#[derive(Debug, Clone, Copy, Eq, PartialEq, Default)]
|
||||
pub struct FnFlags: u16 {
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ impl HasChildSource<la_arena::Idx<ast::UseTree>> for UseId {
|
|||
}
|
||||
|
||||
impl HasChildSource<LocalTypeOrConstParamId> for GenericDefId {
|
||||
type Value = Either<ast::TypeOrConstParam, ast::TraitOrAlias>;
|
||||
type Value = Either<ast::TypeOrConstParam, ast::Trait>;
|
||||
fn child_source(
|
||||
&self,
|
||||
db: &dyn DefDatabase,
|
||||
|
|
@ -89,12 +89,7 @@ impl HasChildSource<LocalTypeOrConstParamId> for GenericDefId {
|
|||
GenericDefId::TraitId(id) => {
|
||||
let trait_ref = id.lookup(db).source(db).value;
|
||||
let idx = idx_iter.next().unwrap();
|
||||
params.insert(idx, Either::Right(ast::TraitOrAlias::Trait(trait_ref)));
|
||||
}
|
||||
GenericDefId::TraitAliasId(id) => {
|
||||
let alias = id.lookup(db).source(db).value;
|
||||
let idx = idx_iter.next().unwrap();
|
||||
params.insert(idx, Either::Right(ast::TraitOrAlias::TraitAlias(alias)));
|
||||
params.insert(idx, Either::Right(trait_ref));
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue