mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-08-15 16:11:01 +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));
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
|
|
@ -273,7 +273,7 @@ impl Generics {
|
|||
|
||||
pub(crate) fn trait_self_param_idx(db: &dyn DefDatabase, def: GenericDefId) -> Option<usize> {
|
||||
match def {
|
||||
GenericDefId::TraitId(_) | GenericDefId::TraitAliasId(_) => {
|
||||
GenericDefId::TraitId(_) => {
|
||||
let params = db.generic_params(def);
|
||||
params.trait_self_param().map(|idx| idx.into_raw().into_u32() as usize)
|
||||
}
|
||||
|
@ -295,8 +295,7 @@ pub(crate) fn parent_generic_def(db: &dyn DefDatabase, def: GenericDefId) -> Opt
|
|||
GenericDefId::StaticId(_)
|
||||
| GenericDefId::AdtId(_)
|
||||
| GenericDefId::TraitId(_)
|
||||
| GenericDefId::ImplId(_)
|
||||
| GenericDefId::TraitAliasId(_) => return None,
|
||||
| GenericDefId::ImplId(_) => return None,
|
||||
};
|
||||
|
||||
match container {
|
||||
|
|
|
@ -1790,7 +1790,6 @@ impl<'db> InferenceContext<'db> {
|
|||
TypeNs::AdtId(AdtId::EnumId(_))
|
||||
| TypeNs::BuiltinType(_)
|
||||
| TypeNs::TraitId(_)
|
||||
| TypeNs::TraitAliasId(_)
|
||||
| TypeNs::ModuleId(_) => {
|
||||
// FIXME diagnostic
|
||||
(self.err_ty(), None)
|
||||
|
|
|
@ -220,10 +220,6 @@ impl<'a, 'b> PathLoweringContext<'a, 'b> {
|
|||
};
|
||||
return (ty, None);
|
||||
}
|
||||
TypeNs::TraitAliasId(_) => {
|
||||
// FIXME(trait_alias): Implement trait alias.
|
||||
return (TyKind::Error.intern(Interner), None);
|
||||
}
|
||||
TypeNs::GenericParam(param_id) => match self.ctx.type_param_mode {
|
||||
ParamLoweringMode::Placeholder => {
|
||||
TyKind::Placeholder(to_placeholder_idx(self.ctx.db, param_id.into()))
|
||||
|
@ -311,8 +307,7 @@ impl<'a, 'b> PathLoweringContext<'a, 'b> {
|
|||
TypeNs::AdtId(_)
|
||||
| TypeNs::EnumVariantId(_)
|
||||
| TypeNs::TypeAliasId(_)
|
||||
| TypeNs::TraitId(_)
|
||||
| TypeNs::TraitAliasId(_) => {}
|
||||
| TypeNs::TraitId(_) => {}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ mod never_type;
|
|||
mod patterns;
|
||||
mod regression;
|
||||
mod simple;
|
||||
mod trait_aliases;
|
||||
mod traits;
|
||||
mod type_alias_impl_traits;
|
||||
|
||||
|
|
|
@ -990,7 +990,6 @@ struct FixedPoint<T, U, V>(&'static FixedPoint<(), T, U>, V);
|
|||
ModuleDefId::AdtId(it) => it.into(),
|
||||
ModuleDefId::ConstId(it) => it.into(),
|
||||
ModuleDefId::TraitId(it) => it.into(),
|
||||
ModuleDefId::TraitAliasId(it) => it.into(),
|
||||
ModuleDefId::TypeAliasId(it) => it.into(),
|
||||
_ => return,
|
||||
})
|
||||
|
@ -1021,10 +1020,6 @@ struct FixedPoint<T, U, V>(&'static FixedPoint<(), T, U>, V);
|
|||
let loc = it.lookup(&db);
|
||||
loc.source(&db).value.name().unwrap()
|
||||
}
|
||||
GenericDefId::TraitAliasId(it) => {
|
||||
let loc = it.lookup(&db);
|
||||
loc.source(&db).value.name().unwrap()
|
||||
}
|
||||
GenericDefId::TypeAliasId(it) => {
|
||||
let loc = it.lookup(&db);
|
||||
loc.source(&db).value.name().unwrap()
|
||||
|
|
|
@ -19,7 +19,7 @@ use hir_ty::{db::HirDatabase, method_resolution};
|
|||
use crate::{
|
||||
Adt, AsAssocItem, AssocItem, BuiltinType, Const, ConstParam, DocLinkDef, Enum, ExternCrateDecl,
|
||||
Field, Function, GenericParam, HasCrate, Impl, LifetimeParam, Macro, Module, ModuleDef, Static,
|
||||
Struct, Trait, TraitAlias, Type, TypeAlias, TypeParam, Union, Variant, VariantDef,
|
||||
Struct, Trait, Type, TypeAlias, TypeParam, Union, Variant, VariantDef,
|
||||
};
|
||||
|
||||
pub trait HasAttrs {
|
||||
|
@ -48,7 +48,6 @@ impl_has_attrs![
|
|||
(Static, StaticId),
|
||||
(Const, ConstId),
|
||||
(Trait, TraitId),
|
||||
(TraitAlias, TraitAliasId),
|
||||
(TypeAlias, TypeAliasId),
|
||||
(Macro, MacroId),
|
||||
(Function, FunctionId),
|
||||
|
@ -137,7 +136,6 @@ fn resolve_doc_path_on_(
|
|||
AttrDefId::StaticId(it) => it.resolver(db),
|
||||
AttrDefId::ConstId(it) => it.resolver(db),
|
||||
AttrDefId::TraitId(it) => it.resolver(db),
|
||||
AttrDefId::TraitAliasId(it) => it.resolver(db),
|
||||
AttrDefId::TypeAliasId(it) => it.resolver(db),
|
||||
AttrDefId::ImplId(it) => it.resolver(db),
|
||||
AttrDefId::ExternBlockId(it) => it.resolver(db),
|
||||
|
@ -216,10 +214,6 @@ fn resolve_assoc_or_field(
|
|||
DocLinkDef::ModuleDef(def)
|
||||
});
|
||||
}
|
||||
TypeNs::TraitAliasId(_) => {
|
||||
// XXX: Do these get resolved?
|
||||
return None;
|
||||
}
|
||||
TypeNs::ModuleId(_) => {
|
||||
return None;
|
||||
}
|
||||
|
|
|
@ -23,8 +23,8 @@ use itertools::Itertools;
|
|||
use crate::{
|
||||
Adt, AsAssocItem, AssocItem, AssocItemContainer, Const, ConstParam, Crate, Enum,
|
||||
ExternCrateDecl, Field, Function, GenericParam, HasCrate, HasVisibility, Impl, LifetimeParam,
|
||||
Macro, Module, SelfParam, Static, Struct, StructKind, Trait, TraitAlias, TraitRef, TupleField,
|
||||
TyBuilder, Type, TypeAlias, TypeOrConstParam, TypeParam, Union, Variant,
|
||||
Macro, Module, SelfParam, Static, Struct, StructKind, Trait, TraitRef, TupleField, TyBuilder,
|
||||
Type, TypeAlias, TypeOrConstParam, TypeParam, Union, Variant,
|
||||
};
|
||||
|
||||
impl HirDisplay for Function {
|
||||
|
@ -751,6 +751,7 @@ impl HirDisplay for TraitRef<'_> {
|
|||
|
||||
impl HirDisplay for Trait {
|
||||
fn hir_fmt(&self, f: &mut HirFormatter<'_>) -> Result<(), HirDisplayError> {
|
||||
// FIXME(trait-alias) needs special handling to print the equal sign
|
||||
write_trait_header(self, f)?;
|
||||
let def_id = GenericDefId::TraitId(self.id);
|
||||
let has_where_clause = write_where_clause(def_id, f)?;
|
||||
|
@ -802,22 +803,6 @@ fn write_trait_header(trait_: &Trait, f: &mut HirFormatter<'_>) -> Result<(), Hi
|
|||
Ok(())
|
||||
}
|
||||
|
||||
impl HirDisplay for TraitAlias {
|
||||
fn hir_fmt(&self, f: &mut HirFormatter<'_>) -> Result<(), HirDisplayError> {
|
||||
write_visibility(self.module(f.db).id, self.visibility(f.db), f)?;
|
||||
let data = f.db.trait_alias_signature(self.id);
|
||||
write!(f, "trait {}", data.name.display(f.db, f.edition()))?;
|
||||
let def_id = GenericDefId::TraitAliasId(self.id);
|
||||
write_generic_params(def_id, f)?;
|
||||
f.write_str(" = ")?;
|
||||
// FIXME: Currently we lower every bounds in a trait alias as a trait bound on `Self` i.e.
|
||||
// `trait Foo = Bar` is stored and displayed as `trait Foo = where Self: Bar`, which might
|
||||
// be less readable.
|
||||
write_where_clause(def_id, f)?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl HirDisplay for TypeAlias {
|
||||
fn hir_fmt(&self, f: &mut HirFormatter<'_>) -> Result<(), HirDisplayError> {
|
||||
write_visibility(self.module(f.db).id, self.visibility(f.db), f)?;
|
||||
|
|
|
@ -37,7 +37,6 @@ from_id![
|
|||
(hir_def::EnumId, crate::Enum),
|
||||
(hir_def::TypeAliasId, crate::TypeAlias),
|
||||
(hir_def::TraitId, crate::Trait),
|
||||
(hir_def::TraitAliasId, crate::TraitAlias),
|
||||
(hir_def::StaticId, crate::Static),
|
||||
(hir_def::ConstId, crate::Const),
|
||||
(hir_def::FunctionId, crate::Function),
|
||||
|
@ -113,7 +112,6 @@ impl From<ModuleDefId> for ModuleDef {
|
|||
ModuleDefId::ConstId(it) => ModuleDef::Const(it.into()),
|
||||
ModuleDefId::StaticId(it) => ModuleDef::Static(it.into()),
|
||||
ModuleDefId::TraitId(it) => ModuleDef::Trait(it.into()),
|
||||
ModuleDefId::TraitAliasId(it) => ModuleDef::TraitAlias(it.into()),
|
||||
ModuleDefId::TypeAliasId(it) => ModuleDef::TypeAlias(it.into()),
|
||||
ModuleDefId::BuiltinType(it) => ModuleDef::BuiltinType(it.into()),
|
||||
ModuleDefId::MacroId(it) => ModuleDef::Macro(it.into()),
|
||||
|
@ -131,7 +129,6 @@ impl From<ModuleDef> for ModuleDefId {
|
|||
ModuleDef::Const(it) => ModuleDefId::ConstId(it.into()),
|
||||
ModuleDef::Static(it) => ModuleDefId::StaticId(it.into()),
|
||||
ModuleDef::Trait(it) => ModuleDefId::TraitId(it.into()),
|
||||
ModuleDef::TraitAlias(it) => ModuleDefId::TraitAliasId(it.into()),
|
||||
ModuleDef::TypeAlias(it) => ModuleDefId::TypeAliasId(it.into()),
|
||||
ModuleDef::BuiltinType(it) => ModuleDefId::BuiltinType(it.into()),
|
||||
ModuleDef::Macro(it) => ModuleDefId::MacroId(it.into()),
|
||||
|
@ -177,7 +174,6 @@ impl From<GenericDef> for GenericDefId {
|
|||
GenericDef::Function(it) => GenericDefId::FunctionId(it.id),
|
||||
GenericDef::Adt(it) => GenericDefId::AdtId(it.into()),
|
||||
GenericDef::Trait(it) => GenericDefId::TraitId(it.id),
|
||||
GenericDef::TraitAlias(it) => GenericDefId::TraitAliasId(it.id),
|
||||
GenericDef::TypeAlias(it) => GenericDefId::TypeAliasId(it.id),
|
||||
GenericDef::Impl(it) => GenericDefId::ImplId(it.id),
|
||||
GenericDef::Const(it) => GenericDefId::ConstId(it.id),
|
||||
|
@ -192,7 +188,6 @@ impl From<GenericDefId> for GenericDef {
|
|||
GenericDefId::FunctionId(it) => GenericDef::Function(it.into()),
|
||||
GenericDefId::AdtId(it) => GenericDef::Adt(it.into()),
|
||||
GenericDefId::TraitId(it) => GenericDef::Trait(it.into()),
|
||||
GenericDefId::TraitAliasId(it) => GenericDef::TraitAlias(it.into()),
|
||||
GenericDefId::TypeAliasId(it) => GenericDef::TypeAlias(it.into()),
|
||||
GenericDefId::ImplId(it) => GenericDef::Impl(it.into()),
|
||||
GenericDefId::ConstId(it) => GenericDef::Const(it.into()),
|
||||
|
|
|
@ -14,8 +14,7 @@ use tt::TextRange;
|
|||
use crate::{
|
||||
Adt, Callee, Const, Enum, ExternCrateDecl, Field, FieldSource, Function, Impl,
|
||||
InlineAsmOperand, Label, LifetimeParam, LocalSource, Macro, Module, Param, SelfParam, Static,
|
||||
Struct, Trait, TraitAlias, TypeAlias, TypeOrConstParam, Union, Variant, VariantDef,
|
||||
db::HirDatabase,
|
||||
Struct, Trait, TypeAlias, TypeOrConstParam, Union, Variant, VariantDef, db::HirDatabase,
|
||||
};
|
||||
|
||||
pub trait HasSource {
|
||||
|
@ -168,12 +167,6 @@ impl HasSource for Trait {
|
|||
Some(self.id.lookup(db).source(db))
|
||||
}
|
||||
}
|
||||
impl HasSource for TraitAlias {
|
||||
type Ast = ast::TraitAlias;
|
||||
fn source(self, db: &dyn HirDatabase) -> Option<InFile<Self::Ast>> {
|
||||
Some(self.id.lookup(db).source(db))
|
||||
}
|
||||
}
|
||||
impl HasSource for TypeAlias {
|
||||
type Ast = ast::TypeAlias;
|
||||
fn source(self, db: &dyn HirDatabase) -> Option<InFile<Self::Ast>> {
|
||||
|
@ -202,7 +195,7 @@ impl HasSource for Impl {
|
|||
}
|
||||
|
||||
impl HasSource for TypeOrConstParam {
|
||||
type Ast = Either<ast::TypeOrConstParam, ast::TraitOrAlias>;
|
||||
type Ast = Either<ast::TypeOrConstParam, ast::Trait>;
|
||||
fn source(self, db: &dyn HirDatabase) -> Option<InFile<Self::Ast>> {
|
||||
let child_source = self.id.parent.child_source(db);
|
||||
child_source.map(|it| it.get(self.id.local_id).cloned()).transpose()
|
||||
|
|
|
@ -52,7 +52,7 @@ use hir_def::{
|
|||
CrateRootModuleId, DefWithBodyId, EnumId, EnumVariantId, ExternBlockId, ExternCrateId,
|
||||
FunctionId, GenericDefId, GenericParamId, HasModule, ImplId, ItemContainerId, LifetimeParamId,
|
||||
LocalFieldId, Lookup, MacroExpander, MacroId, ModuleId, StaticId, StructId, SyntheticSyntax,
|
||||
TraitAliasId, TupleId, TypeAliasId, TypeOrConstParamId, TypeParamId, UnionId,
|
||||
TupleId, TypeAliasId, TypeOrConstParamId, TypeParamId, UnionId,
|
||||
expr_store::{ExpressionStoreDiagnostics, ExpressionStoreSourceMap},
|
||||
hir::{
|
||||
BindingAnnotation, BindingId, Expr, ExprId, ExprOrPatId, LabelId, Pat,
|
||||
|
@ -333,7 +333,6 @@ pub enum ModuleDef {
|
|||
Const(Const),
|
||||
Static(Static),
|
||||
Trait(Trait),
|
||||
TraitAlias(TraitAlias),
|
||||
TypeAlias(TypeAlias),
|
||||
BuiltinType(BuiltinType),
|
||||
Macro(Macro),
|
||||
|
@ -346,7 +345,6 @@ impl_from!(
|
|||
Const,
|
||||
Static,
|
||||
Trait,
|
||||
TraitAlias,
|
||||
TypeAlias,
|
||||
BuiltinType,
|
||||
Macro
|
||||
|
@ -373,7 +371,6 @@ impl ModuleDef {
|
|||
ModuleDef::Const(it) => Some(it.module(db)),
|
||||
ModuleDef::Static(it) => Some(it.module(db)),
|
||||
ModuleDef::Trait(it) => Some(it.module(db)),
|
||||
ModuleDef::TraitAlias(it) => Some(it.module(db)),
|
||||
ModuleDef::TypeAlias(it) => Some(it.module(db)),
|
||||
ModuleDef::Macro(it) => Some(it.module(db)),
|
||||
ModuleDef::BuiltinType(_) => None,
|
||||
|
@ -402,7 +399,6 @@ impl ModuleDef {
|
|||
ModuleDef::Const(it) => it.name(db)?,
|
||||
ModuleDef::Adt(it) => it.name(db),
|
||||
ModuleDef::Trait(it) => it.name(db),
|
||||
ModuleDef::TraitAlias(it) => it.name(db),
|
||||
ModuleDef::Function(it) => it.name(db),
|
||||
ModuleDef::Variant(it) => it.name(db),
|
||||
ModuleDef::TypeAlias(it) => it.name(db),
|
||||
|
@ -425,7 +421,6 @@ impl ModuleDef {
|
|||
Adt::Union(it) => it.id.into(),
|
||||
},
|
||||
ModuleDef::Trait(it) => it.id.into(),
|
||||
ModuleDef::TraitAlias(it) => it.id.into(),
|
||||
ModuleDef::Function(it) => it.id.into(),
|
||||
ModuleDef::TypeAlias(it) => it.id.into(),
|
||||
ModuleDef::Module(it) => it.id.into(),
|
||||
|
@ -465,7 +460,6 @@ impl ModuleDef {
|
|||
ModuleDef::Module(_)
|
||||
| ModuleDef::Adt(_)
|
||||
| ModuleDef::Trait(_)
|
||||
| ModuleDef::TraitAlias(_)
|
||||
| ModuleDef::TypeAlias(_)
|
||||
| ModuleDef::Macro(_)
|
||||
| ModuleDef::BuiltinType(_) => None,
|
||||
|
@ -478,7 +472,6 @@ impl ModuleDef {
|
|||
ModuleDef::Function(it) => Some(it.into()),
|
||||
ModuleDef::Adt(it) => Some(it.into()),
|
||||
ModuleDef::Trait(it) => Some(it.into()),
|
||||
ModuleDef::TraitAlias(it) => Some(it.into()),
|
||||
ModuleDef::TypeAlias(it) => Some(it.into()),
|
||||
ModuleDef::Module(_)
|
||||
| ModuleDef::Variant(_)
|
||||
|
@ -498,7 +491,6 @@ impl ModuleDef {
|
|||
ModuleDef::Const(it) => it.attrs(db),
|
||||
ModuleDef::Static(it) => it.attrs(db),
|
||||
ModuleDef::Trait(it) => it.attrs(db),
|
||||
ModuleDef::TraitAlias(it) => it.attrs(db),
|
||||
ModuleDef::TypeAlias(it) => it.attrs(db),
|
||||
ModuleDef::Macro(it) => it.attrs(db),
|
||||
ModuleDef::BuiltinType(_) => return None,
|
||||
|
@ -524,7 +516,6 @@ impl HasVisibility for ModuleDef {
|
|||
ModuleDef::Const(it) => it.visibility(db),
|
||||
ModuleDef::Static(it) => it.visibility(db),
|
||||
ModuleDef::Trait(it) => it.visibility(db),
|
||||
ModuleDef::TraitAlias(it) => it.visibility(db),
|
||||
ModuleDef::TypeAlias(it) => it.visibility(db),
|
||||
ModuleDef::Variant(it) => it.visibility(db),
|
||||
ModuleDef::Macro(it) => it.visibility(db),
|
||||
|
@ -3045,29 +3036,6 @@ impl HasVisibility for Trait {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub struct TraitAlias {
|
||||
pub(crate) id: TraitAliasId,
|
||||
}
|
||||
|
||||
impl TraitAlias {
|
||||
pub fn module(self, db: &dyn HirDatabase) -> Module {
|
||||
Module { id: self.id.lookup(db).container }
|
||||
}
|
||||
|
||||
pub fn name(self, db: &dyn HirDatabase) -> Name {
|
||||
db.trait_alias_signature(self.id).name.clone()
|
||||
}
|
||||
}
|
||||
|
||||
impl HasVisibility for TraitAlias {
|
||||
fn visibility(&self, db: &dyn HirDatabase) -> Visibility {
|
||||
let loc = self.id.lookup(db);
|
||||
let source = loc.source(db);
|
||||
visibility_from_ast(db, self.id, source.map(|src| src.visibility()))
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub struct TypeAlias {
|
||||
pub(crate) id: TypeAliasId,
|
||||
|
@ -3690,7 +3658,6 @@ pub enum GenericDef {
|
|||
Function(Function),
|
||||
Adt(Adt),
|
||||
Trait(Trait),
|
||||
TraitAlias(TraitAlias),
|
||||
TypeAlias(TypeAlias),
|
||||
Impl(Impl),
|
||||
// consts can have type parameters from their parents (i.e. associated consts of traits)
|
||||
|
@ -3701,7 +3668,6 @@ impl_from!(
|
|||
Function,
|
||||
Adt(Struct, Enum, Union),
|
||||
Trait,
|
||||
TraitAlias,
|
||||
TypeAlias,
|
||||
Impl,
|
||||
Const,
|
||||
|
@ -3751,7 +3717,6 @@ impl GenericDef {
|
|||
GenericDef::Function(it) => it.id.into(),
|
||||
GenericDef::Adt(it) => it.into(),
|
||||
GenericDef::Trait(it) => it.id.into(),
|
||||
GenericDef::TraitAlias(it) => it.id.into(),
|
||||
GenericDef::TypeAlias(it) => it.id.into(),
|
||||
GenericDef::Impl(it) => it.id.into(),
|
||||
GenericDef::Const(it) => it.id.into(),
|
||||
|
@ -3776,7 +3741,6 @@ impl GenericDef {
|
|||
GenericDefId::FunctionId(it) => db.function_signature_with_source_map(it).1,
|
||||
GenericDefId::ImplId(it) => db.impl_signature_with_source_map(it).1,
|
||||
GenericDefId::StaticId(_) => return,
|
||||
GenericDefId::TraitAliasId(it) => db.trait_alias_signature_with_source_map(it).1,
|
||||
GenericDefId::TraitId(it) => db.trait_signature_with_source_map(it).1,
|
||||
GenericDefId::TypeAliasId(it) => db.type_alias_signature_with_source_map(it).1,
|
||||
};
|
||||
|
@ -3813,7 +3777,6 @@ impl GenericDef {
|
|||
GenericDef::Adt(Adt::Enum(_)) => "enum",
|
||||
GenericDef::Adt(Adt::Union(_)) => "union",
|
||||
GenericDef::Trait(_) => "trait",
|
||||
GenericDef::TraitAlias(_) => "trait alias",
|
||||
GenericDef::TypeAlias(_) => "type alias",
|
||||
GenericDef::Impl(_) => "impl",
|
||||
GenericDef::Const(_) => "constant",
|
||||
|
@ -6401,12 +6364,6 @@ impl HasCrate for Trait {
|
|||
}
|
||||
}
|
||||
|
||||
impl HasCrate for TraitAlias {
|
||||
fn krate(&self, db: &dyn HirDatabase) -> Crate {
|
||||
self.module(db).krate()
|
||||
}
|
||||
}
|
||||
|
||||
impl HasCrate for Static {
|
||||
fn krate(&self, db: &dyn HirDatabase) -> Crate {
|
||||
self.module(db).krate()
|
||||
|
@ -6500,12 +6457,6 @@ impl HasContainer for Trait {
|
|||
}
|
||||
}
|
||||
|
||||
impl HasContainer for TraitAlias {
|
||||
fn container(&self, db: &dyn HirDatabase) -> ItemContainer {
|
||||
ItemContainer::Module(Module { id: self.id.lookup(db).container })
|
||||
}
|
||||
}
|
||||
|
||||
impl HasContainer for ExternBlock {
|
||||
fn container(&self, db: &dyn HirDatabase) -> ItemContainer {
|
||||
ItemContainer::Module(Module { id: self.id.lookup(db).container })
|
||||
|
|
|
@ -46,8 +46,8 @@ use crate::{
|
|||
Adjust, Adjustment, Adt, AutoBorrow, BindingMode, BuiltinAttr, Callable, Const, ConstParam,
|
||||
Crate, DefWithBody, DeriveHelper, Enum, Field, Function, GenericSubstitution, HasSource, Impl,
|
||||
InFile, InlineAsmOperand, ItemInNs, Label, LifetimeParam, Local, Macro, Module, ModuleDef,
|
||||
Name, OverloadedDeref, ScopeDef, Static, Struct, ToolModule, Trait, TraitAlias, TupleField,
|
||||
Type, TypeAlias, TypeParam, Union, Variant, VariantDef,
|
||||
Name, OverloadedDeref, ScopeDef, Static, Struct, ToolModule, Trait, TupleField, Type,
|
||||
TypeAlias, TypeParam, Union, Variant, VariantDef,
|
||||
db::HirDatabase,
|
||||
semantics::source_to_def::{ChildContainer, SourceToDefCache, SourceToDefCtx},
|
||||
source_analyzer::{SourceAnalyzer, name_hygiene, resolve_hir_path},
|
||||
|
@ -85,8 +85,7 @@ impl PathResolution {
|
|||
| ModuleDef::Function(_)
|
||||
| ModuleDef::Module(_)
|
||||
| ModuleDef::Static(_)
|
||||
| ModuleDef::Trait(_)
|
||||
| ModuleDef::TraitAlias(_),
|
||||
| ModuleDef::Trait(_),
|
||||
) => None,
|
||||
PathResolution::Def(ModuleDef::TypeAlias(alias)) => {
|
||||
Some(TypeNs::TypeAliasId((*alias).into()))
|
||||
|
@ -343,10 +342,6 @@ impl<DB: HirDatabase + ?Sized> Semantics<'_, DB> {
|
|||
self.imp.to_def(s)
|
||||
}
|
||||
|
||||
pub fn to_trait_alias_def(&self, t: &ast::TraitAlias) -> Option<TraitAlias> {
|
||||
self.imp.to_def(t)
|
||||
}
|
||||
|
||||
pub fn to_trait_def(&self, t: &ast::Trait) -> Option<Trait> {
|
||||
self.imp.to_def(t)
|
||||
}
|
||||
|
@ -2138,7 +2133,6 @@ to_def_impls![
|
|||
(crate::Enum, ast::Enum, enum_to_def),
|
||||
(crate::Union, ast::Union, union_to_def),
|
||||
(crate::Trait, ast::Trait, trait_to_def),
|
||||
(crate::TraitAlias, ast::TraitAlias, trait_alias_to_def),
|
||||
(crate::Impl, ast::Impl, impl_to_def),
|
||||
(crate::TypeAlias, ast::TypeAlias, type_alias_to_def),
|
||||
(crate::Const, ast::Const, const_to_def),
|
||||
|
|
|
@ -154,9 +154,6 @@ impl ChildBySource for ItemScope {
|
|||
}
|
||||
ModuleDefId::StaticId(id) => insert_item_loc(db, map, file_id, id, keys::STATIC),
|
||||
ModuleDefId::TraitId(id) => insert_item_loc(db, map, file_id, id, keys::TRAIT),
|
||||
ModuleDefId::TraitAliasId(id) => {
|
||||
insert_item_loc(db, map, file_id, id, keys::TRAIT_ALIAS)
|
||||
}
|
||||
ModuleDefId::AdtId(adt) => match adt {
|
||||
AdtId::StructId(id) => insert_item_loc(db, map, file_id, id, keys::STRUCT),
|
||||
AdtId::UnionId(id) => insert_item_loc(db, map, file_id, id, keys::UNION),
|
||||
|
|
|
@ -89,8 +89,8 @@ use either::Either;
|
|||
use hir_def::{
|
||||
AdtId, BlockId, ConstId, ConstParamId, DefWithBodyId, EnumId, EnumVariantId, ExternBlockId,
|
||||
ExternCrateId, FieldId, FunctionId, GenericDefId, GenericParamId, ImplId, LifetimeParamId,
|
||||
Lookup, MacroId, ModuleId, StaticId, StructId, TraitAliasId, TraitId, TypeAliasId, TypeParamId,
|
||||
UnionId, UseId, VariantId,
|
||||
Lookup, MacroId, ModuleId, StaticId, StructId, TraitId, TypeAliasId, TypeParamId, UnionId,
|
||||
UseId, VariantId,
|
||||
dyn_map::{
|
||||
DynMap,
|
||||
keys::{self, Key},
|
||||
|
@ -252,12 +252,6 @@ impl SourceToDefCtx<'_, '_> {
|
|||
pub(super) fn trait_to_def(&mut self, src: InFile<&ast::Trait>) -> Option<TraitId> {
|
||||
self.to_def(src, keys::TRAIT)
|
||||
}
|
||||
pub(super) fn trait_alias_to_def(
|
||||
&mut self,
|
||||
src: InFile<&ast::TraitAlias>,
|
||||
) -> Option<TraitAliasId> {
|
||||
self.to_def(src, keys::TRAIT_ALIAS)
|
||||
}
|
||||
pub(super) fn impl_to_def(&mut self, src: InFile<&ast::Impl>) -> Option<ImplId> {
|
||||
self.to_def(src, keys::IMPL)
|
||||
}
|
||||
|
@ -555,9 +549,6 @@ impl SourceToDefCtx<'_, '_> {
|
|||
}
|
||||
ast::Item::Enum(it) => this.enum_to_def(InFile::new(file_id, it)).map(Into::into),
|
||||
ast::Item::Trait(it) => this.trait_to_def(InFile::new(file_id, it)).map(Into::into),
|
||||
ast::Item::TraitAlias(it) => {
|
||||
this.trait_alias_to_def(InFile::new(file_id, it)).map(Into::into)
|
||||
}
|
||||
ast::Item::TypeAlias(it) => {
|
||||
this.type_alias_to_def(InFile::new(file_id, it)).map(Into::into)
|
||||
}
|
||||
|
@ -636,9 +627,6 @@ impl SourceToDefCtx<'_, '_> {
|
|||
ast::Item::TypeAlias(it) => ChildContainer::GenericDefId(
|
||||
self.type_alias_to_def(container.with_value(it))?.into(),
|
||||
),
|
||||
ast::Item::TraitAlias(it) => ChildContainer::GenericDefId(
|
||||
self.trait_alias_to_def(container.with_value(it))?.into(),
|
||||
),
|
||||
ast::Item::Struct(it) => {
|
||||
let def = self.struct_to_def(container.with_value(it))?;
|
||||
let is_in_body = it.field_list().is_some_and(|it| {
|
||||
|
|
|
@ -10,7 +10,7 @@ use std::iter::{self, once};
|
|||
use crate::{
|
||||
Adt, AssocItem, BindingMode, BuiltinAttr, BuiltinType, Callable, Const, DeriveHelper, Field,
|
||||
Function, GenericSubstitution, Local, Macro, ModuleDef, Static, Struct, ToolModule, Trait,
|
||||
TraitAlias, TupleField, Type, TypeAlias, Variant,
|
||||
TupleField, Type, TypeAlias, Variant,
|
||||
db::HirDatabase,
|
||||
semantics::{PathResolution, PathResolutionPerNs},
|
||||
};
|
||||
|
@ -1587,7 +1587,6 @@ fn resolve_hir_path_(
|
|||
TypeNs::TypeAliasId(it) => PathResolution::Def(TypeAlias::from(it).into()),
|
||||
TypeNs::BuiltinType(it) => PathResolution::Def(BuiltinType::from(it).into()),
|
||||
TypeNs::TraitId(it) => PathResolution::Def(Trait::from(it).into()),
|
||||
TypeNs::TraitAliasId(it) => PathResolution::Def(TraitAlias::from(it).into()),
|
||||
TypeNs::ModuleId(it) => PathResolution::Def(ModuleDef::Module(it.into())),
|
||||
};
|
||||
match unresolved {
|
||||
|
@ -1737,7 +1736,6 @@ fn resolve_hir_path_qualifier(
|
|||
TypeNs::TypeAliasId(it) => PathResolution::Def(TypeAlias::from(it).into()),
|
||||
TypeNs::BuiltinType(it) => PathResolution::Def(BuiltinType::from(it).into()),
|
||||
TypeNs::TraitId(it) => PathResolution::Def(Trait::from(it).into()),
|
||||
TypeNs::TraitAliasId(it) => PathResolution::Def(TraitAlias::from(it).into()),
|
||||
TypeNs::ModuleId(it) => PathResolution::Def(ModuleDef::Module(it.into())),
|
||||
};
|
||||
match unresolved {
|
||||
|
|
|
@ -148,9 +148,6 @@ impl<'a> SymbolCollector<'a> {
|
|||
let trait_do_not_complete = this.push_decl(id, name, false, None);
|
||||
this.collect_from_trait(id, trait_do_not_complete);
|
||||
}
|
||||
ModuleDefId::TraitAliasId(id) => {
|
||||
this.push_decl(id, name, false, None);
|
||||
}
|
||||
ModuleDefId::TypeAliasId(id) => {
|
||||
this.push_decl(id, name, false, None);
|
||||
}
|
||||
|
|
|
@ -613,7 +613,6 @@ impl Module {
|
|||
| Definition::Const(_)
|
||||
| Definition::Static(_)
|
||||
| Definition::Trait(_)
|
||||
| Definition::TraitAlias(_)
|
||||
| Definition::TypeAlias(_)
|
||||
);
|
||||
|
||||
|
|
|
@ -136,10 +136,6 @@ fn target_data_for_def(
|
|||
target_name = Some(t.name(db));
|
||||
offset_target_and_file_id(db, t)?
|
||||
}
|
||||
hir::ModuleDef::TraitAlias(t) => {
|
||||
target_name = Some(t.name(db));
|
||||
offset_target_and_file_id(db, t)?
|
||||
}
|
||||
hir::ModuleDef::TypeAlias(t) => {
|
||||
target_name = Some(t.name(db));
|
||||
offset_target_and_file_id(db, t)?
|
||||
|
|
|
@ -55,7 +55,6 @@ pub(crate) fn move_bounds_to_where_clause(
|
|||
match parent {
|
||||
ast::Fn(it) => it.get_or_create_where_clause(),
|
||||
ast::Trait(it) => it.get_or_create_where_clause(),
|
||||
ast::TraitAlias(it) => it.get_or_create_where_clause(),
|
||||
ast::Impl(it) => it.get_or_create_where_clause(),
|
||||
ast::Enum(it) => it.get_or_create_where_clause(),
|
||||
ast::Struct(it) => it.get_or_create_where_clause(),
|
||||
|
|
|
@ -37,9 +37,7 @@ pub(crate) fn complete_type_path(
|
|||
true
|
||||
}
|
||||
// Type things are fine
|
||||
ScopeDef::ModuleDef(
|
||||
BuiltinType(_) | Adt(_) | Module(_) | Trait(_) | TraitAlias(_) | TypeAlias(_),
|
||||
)
|
||||
ScopeDef::ModuleDef(BuiltinType(_) | Adt(_) | Module(_) | Trait(_) | TypeAlias(_))
|
||||
| ScopeDef::AdtSelfType(_)
|
||||
| ScopeDef::Unknown
|
||||
| ScopeDef::GenericParam(TypeParam(_)) => location.complete_types(),
|
||||
|
|
|
@ -525,7 +525,6 @@ impl CompletionContext<'_> {
|
|||
hir::ModuleDef::Const(it) => self.is_visible(it),
|
||||
hir::ModuleDef::Static(it) => self.is_visible(it),
|
||||
hir::ModuleDef::Trait(it) => self.is_visible(it),
|
||||
hir::ModuleDef::TraitAlias(it) => self.is_visible(it),
|
||||
hir::ModuleDef::TypeAlias(it) => self.is_visible(it),
|
||||
hir::ModuleDef::Macro(it) => self.is_visible(it),
|
||||
hir::ModuleDef::BuiltinType(_) => Visible::Yes,
|
||||
|
|
|
@ -1037,9 +1037,6 @@ fn classify_name_ref<'db>(
|
|||
sema.source(trait_)?.value.generic_param_list()
|
||||
}
|
||||
}
|
||||
hir::ModuleDef::TraitAlias(trait_) => {
|
||||
sema.source(trait_)?.value.generic_param_list()
|
||||
}
|
||||
hir::ModuleDef::TypeAlias(ty_) => {
|
||||
sema.source(ty_)?.value.generic_param_list()
|
||||
}
|
||||
|
|
|
@ -399,7 +399,6 @@ impl CompletionItemKind {
|
|||
SymbolKind::Struct => "st",
|
||||
SymbolKind::ToolModule => "tm",
|
||||
SymbolKind::Trait => "tt",
|
||||
SymbolKind::TraitAlias => "tr",
|
||||
SymbolKind::TypeAlias => "ta",
|
||||
SymbolKind::TypeParam => "tp",
|
||||
SymbolKind::Union => "un",
|
||||
|
|
|
@ -486,10 +486,7 @@ fn render_resolution_path(
|
|||
| ScopeDef::Label(_)
|
||||
| ScopeDef::Unknown
|
||||
| ScopeDef::ModuleDef(
|
||||
ModuleDef::Trait(_)
|
||||
| ModuleDef::TraitAlias(_)
|
||||
| ModuleDef::Module(_)
|
||||
| ModuleDef::TypeAlias(_),
|
||||
ModuleDef::Trait(_) | ModuleDef::Module(_) | ModuleDef::TypeAlias(_),
|
||||
) => (),
|
||||
};
|
||||
|
||||
|
@ -542,9 +539,6 @@ fn res_to_kind(resolution: ScopeDef) -> CompletionItemKind {
|
|||
ScopeDef::ModuleDef(Const(..)) => CompletionItemKind::SymbolKind(SymbolKind::Const),
|
||||
ScopeDef::ModuleDef(Static(..)) => CompletionItemKind::SymbolKind(SymbolKind::Static),
|
||||
ScopeDef::ModuleDef(Trait(..)) => CompletionItemKind::SymbolKind(SymbolKind::Trait),
|
||||
ScopeDef::ModuleDef(TraitAlias(..)) => {
|
||||
CompletionItemKind::SymbolKind(SymbolKind::TraitAlias)
|
||||
}
|
||||
ScopeDef::ModuleDef(TypeAlias(..)) => CompletionItemKind::SymbolKind(SymbolKind::TypeAlias),
|
||||
ScopeDef::ModuleDef(BuiltinType(..)) => CompletionItemKind::BuiltinType,
|
||||
ScopeDef::GenericParam(param) => CompletionItemKind::SymbolKind(match param {
|
||||
|
|
|
@ -125,7 +125,6 @@ pub fn generic_def_for_node(
|
|||
hir::PathResolution::Def(hir::ModuleDef::Adt(it)) => it.into(),
|
||||
hir::PathResolution::Def(hir::ModuleDef::Function(it)) => it.into(),
|
||||
hir::PathResolution::Def(hir::ModuleDef::Trait(it)) => it.into(),
|
||||
hir::PathResolution::Def(hir::ModuleDef::TraitAlias(it)) => it.into(),
|
||||
hir::PathResolution::Def(hir::ModuleDef::TypeAlias(it)) => it.into(),
|
||||
hir::PathResolution::Def(hir::ModuleDef::Variant(it)) => {
|
||||
variant = Some(it);
|
||||
|
|
|
@ -16,7 +16,7 @@ use hir::{
|
|||
ExternCrateDecl, Field, Function, GenericDef, GenericParam, GenericSubstitution, HasContainer,
|
||||
HasVisibility, HirDisplay, Impl, InlineAsmOperand, ItemContainer, Label, Local, Macro, Module,
|
||||
ModuleDef, Name, PathResolution, Semantics, Static, StaticLifetime, Struct, ToolModule, Trait,
|
||||
TraitAlias, TupleField, TypeAlias, Variant, VariantDef, Visibility,
|
||||
TupleField, TypeAlias, Variant, VariantDef, Visibility,
|
||||
};
|
||||
use span::Edition;
|
||||
use stdx::{format_to, impl_from};
|
||||
|
@ -40,7 +40,6 @@ pub enum Definition {
|
|||
Const(Const),
|
||||
Static(Static),
|
||||
Trait(Trait),
|
||||
TraitAlias(TraitAlias),
|
||||
TypeAlias(TypeAlias),
|
||||
SelfType(Impl),
|
||||
GenericParam(GenericParam),
|
||||
|
@ -83,7 +82,6 @@ impl Definition {
|
|||
Definition::Const(it) => it.module(db),
|
||||
Definition::Static(it) => it.module(db),
|
||||
Definition::Trait(it) => it.module(db),
|
||||
Definition::TraitAlias(it) => it.module(db),
|
||||
Definition::TypeAlias(it) => it.module(db),
|
||||
Definition::Variant(it) => it.module(db),
|
||||
Definition::SelfType(it) => it.module(db),
|
||||
|
@ -122,7 +120,6 @@ impl Definition {
|
|||
Definition::Const(it) => container_to_definition(it.container(db)),
|
||||
Definition::Static(it) => container_to_definition(it.container(db)),
|
||||
Definition::Trait(it) => container_to_definition(it.container(db)),
|
||||
Definition::TraitAlias(it) => container_to_definition(it.container(db)),
|
||||
Definition::TypeAlias(it) => container_to_definition(it.container(db)),
|
||||
Definition::Variant(it) => Some(Adt::Enum(it.parent_enum(db)).into()),
|
||||
Definition::SelfType(it) => Some(it.module(db).into()),
|
||||
|
@ -151,7 +148,6 @@ impl Definition {
|
|||
Definition::Const(it) => it.visibility(db),
|
||||
Definition::Static(it) => it.visibility(db),
|
||||
Definition::Trait(it) => it.visibility(db),
|
||||
Definition::TraitAlias(it) => it.visibility(db),
|
||||
Definition::TypeAlias(it) => it.visibility(db),
|
||||
Definition::Variant(it) => it.visibility(db),
|
||||
Definition::ExternCrateDecl(it) => it.visibility(db),
|
||||
|
@ -185,7 +181,6 @@ impl Definition {
|
|||
Definition::Const(it) => it.name(db)?,
|
||||
Definition::Static(it) => it.name(db),
|
||||
Definition::Trait(it) => it.name(db),
|
||||
Definition::TraitAlias(it) => it.name(db),
|
||||
Definition::TypeAlias(it) => it.name(db),
|
||||
Definition::BuiltinType(it) => it.name(),
|
||||
Definition::TupleField(it) => it.name(),
|
||||
|
@ -230,7 +225,6 @@ impl Definition {
|
|||
Definition::Const(it) => it.docs_with_rangemap(db),
|
||||
Definition::Static(it) => it.docs_with_rangemap(db),
|
||||
Definition::Trait(it) => it.docs_with_rangemap(db),
|
||||
Definition::TraitAlias(it) => it.docs_with_rangemap(db),
|
||||
Definition::TypeAlias(it) => {
|
||||
it.docs_with_rangemap(db).or_else(|| {
|
||||
// docs are missing, try to fall back to the docs of the aliased item.
|
||||
|
@ -321,7 +315,6 @@ impl Definition {
|
|||
Definition::Const(it) => it.display(db, display_target).to_string(),
|
||||
Definition::Static(it) => it.display(db, display_target).to_string(),
|
||||
Definition::Trait(it) => it.display(db, display_target).to_string(),
|
||||
Definition::TraitAlias(it) => it.display(db, display_target).to_string(),
|
||||
Definition::TypeAlias(it) => it.display(db, display_target).to_string(),
|
||||
Definition::BuiltinType(it) => {
|
||||
it.name().display(db, display_target.edition).to_string()
|
||||
|
@ -589,7 +582,6 @@ impl<'db> NameClass<'db> {
|
|||
ast::Item::Module(it) => Definition::Module(sema.to_def(&it)?),
|
||||
ast::Item::Static(it) => Definition::Static(sema.to_def(&it)?),
|
||||
ast::Item::Trait(it) => Definition::Trait(sema.to_def(&it)?),
|
||||
ast::Item::TraitAlias(it) => Definition::TraitAlias(sema.to_def(&it)?),
|
||||
ast::Item::TypeAlias(it) => Definition::TypeAlias(sema.to_def(&it)?),
|
||||
ast::Item::Enum(it) => Definition::Adt(hir::Adt::Enum(sema.to_def(&it)?)),
|
||||
ast::Item::Struct(it) => Definition::Adt(hir::Adt::Struct(sema.to_def(&it)?)),
|
||||
|
@ -895,7 +887,7 @@ impl<'db> NameRefClass<'db> {
|
|||
}
|
||||
|
||||
impl_from!(
|
||||
Field, Module, Function, Adt, Variant, Const, Static, Trait, TraitAlias, TypeAlias, BuiltinType, Local,
|
||||
Field, Module, Function, Adt, Variant, Const, Static, Trait, TypeAlias, BuiltinType, Local,
|
||||
GenericParam, Label, Macro, ExternCrateDecl
|
||||
for Definition
|
||||
);
|
||||
|
@ -975,7 +967,6 @@ impl From<ModuleDef> for Definition {
|
|||
ModuleDef::Const(it) => Definition::Const(it),
|
||||
ModuleDef::Static(it) => Definition::Static(it),
|
||||
ModuleDef::Trait(it) => Definition::Trait(it),
|
||||
ModuleDef::TraitAlias(it) => Definition::TraitAlias(it),
|
||||
ModuleDef::TypeAlias(it) => Definition::TypeAlias(it),
|
||||
ModuleDef::Macro(it) => Definition::Macro(it),
|
||||
ModuleDef::BuiltinType(it) => Definition::BuiltinType(it),
|
||||
|
@ -1017,7 +1008,6 @@ impl From<GenericDef> for Definition {
|
|||
GenericDef::Function(it) => it.into(),
|
||||
GenericDef::Adt(it) => it.into(),
|
||||
GenericDef::Trait(it) => it.into(),
|
||||
GenericDef::TraitAlias(it) => it.into(),
|
||||
GenericDef::TypeAlias(it) => it.into(),
|
||||
GenericDef::Impl(it) => it.into(),
|
||||
GenericDef::Const(it) => it.into(),
|
||||
|
@ -1033,7 +1023,6 @@ impl TryFrom<Definition> for GenericDef {
|
|||
Definition::Function(it) => Ok(it.into()),
|
||||
Definition::Adt(it) => Ok(it.into()),
|
||||
Definition::Trait(it) => Ok(it.into()),
|
||||
Definition::TraitAlias(it) => Ok(it.into()),
|
||||
Definition::TypeAlias(it) => Ok(it.into()),
|
||||
Definition::SelfType(it) => Ok(it.into()),
|
||||
Definition::Const(it) => Ok(it.into()),
|
||||
|
|
|
@ -195,8 +195,7 @@ macro_rules! impl_has_docs {
|
|||
}
|
||||
|
||||
impl_has_docs![
|
||||
Variant, Field, Static, Const, Trait, TraitAlias, TypeAlias, Macro, Function, Adt, Module,
|
||||
Impl, Crate,
|
||||
Variant, Field, Static, Const, Trait, TypeAlias, Macro, Function, Adt, Module, Impl, Crate,
|
||||
];
|
||||
|
||||
macro_rules! impl_has_docs_enum {
|
||||
|
|
|
@ -475,8 +475,6 @@ fn validate_resolvable(
|
|||
}
|
||||
// FIXME
|
||||
ModuleDef::Trait(_) => return None,
|
||||
// FIXME
|
||||
ModuleDef::TraitAlias(_) => return None,
|
||||
ModuleDef::TypeAlias(alias) => alias.ty(db),
|
||||
ModuleDef::BuiltinType(builtin) => builtin.ty(db),
|
||||
ModuleDef::Adt(adt) => adt.ty(db),
|
||||
|
|
|
@ -273,7 +273,6 @@ pub enum SymbolKind {
|
|||
Struct,
|
||||
ToolModule,
|
||||
Trait,
|
||||
TraitAlias,
|
||||
TypeAlias,
|
||||
TypeParam,
|
||||
Union,
|
||||
|
@ -306,7 +305,6 @@ impl From<hir::ModuleDef> for SymbolKind {
|
|||
hir::ModuleDef::Adt(hir::Adt::Enum(..)) => SymbolKind::Enum,
|
||||
hir::ModuleDef::Adt(hir::Adt::Union(..)) => SymbolKind::Union,
|
||||
hir::ModuleDef::Trait(..) => SymbolKind::Trait,
|
||||
hir::ModuleDef::TraitAlias(..) => SymbolKind::TraitAlias,
|
||||
hir::ModuleDef::TypeAlias(..) => SymbolKind::TypeAlias,
|
||||
hir::ModuleDef::BuiltinType(..) => SymbolKind::TypeAlias,
|
||||
}
|
||||
|
|
|
@ -163,7 +163,6 @@ impl Definition {
|
|||
Definition::Const(it) => name_range(it, sema).and_then(syn_ctx_is_root),
|
||||
Definition::Static(it) => name_range(it, sema).and_then(syn_ctx_is_root),
|
||||
Definition::Trait(it) => name_range(it, sema).and_then(syn_ctx_is_root),
|
||||
Definition::TraitAlias(it) => name_range(it, sema).and_then(syn_ctx_is_root),
|
||||
Definition::TypeAlias(it) => name_range(it, sema).and_then(syn_ctx_is_root),
|
||||
Definition::Local(it) => {
|
||||
name_range(it.primary_source(sema.db), sema).and_then(syn_ctx_is_root)
|
||||
|
|
|
@ -352,7 +352,6 @@ impl Definition {
|
|||
hir::GenericDef::Function(it) => it.source(db).map(|src| src.syntax().cloned()),
|
||||
hir::GenericDef::Adt(it) => it.source(db).map(|src| src.syntax().cloned()),
|
||||
hir::GenericDef::Trait(it) => it.source(db).map(|src| src.syntax().cloned()),
|
||||
hir::GenericDef::TraitAlias(it) => it.source(db).map(|src| src.syntax().cloned()),
|
||||
hir::GenericDef::TypeAlias(it) => it.source(db).map(|src| src.syntax().cloned()),
|
||||
hir::GenericDef::Impl(it) => it.source(db).map(|src| src.syntax().cloned()),
|
||||
hir::GenericDef::Const(it) => it.source(db).map(|src| src.syntax().cloned()),
|
||||
|
|
|
@ -357,7 +357,6 @@ impl Query {
|
|||
hir::ModuleDef::Adt(..)
|
||||
| hir::ModuleDef::TypeAlias(..)
|
||||
| hir::ModuleDef::BuiltinType(..)
|
||||
| hir::ModuleDef::TraitAlias(..)
|
||||
| hir::ModuleDef::Trait(..)
|
||||
);
|
||||
if non_type_for_type_only_query || !self.matches_assoc_mode(symbol.is_assoc) {
|
||||
|
|
|
@ -225,7 +225,6 @@ pub(crate) fn resolve_doc_path_for_def(
|
|||
Definition::Const(it) => it.resolve_doc_path(db, link, ns, is_inner_doc),
|
||||
Definition::Static(it) => it.resolve_doc_path(db, link, ns, is_inner_doc),
|
||||
Definition::Trait(it) => it.resolve_doc_path(db, link, ns, is_inner_doc),
|
||||
Definition::TraitAlias(it) => it.resolve_doc_path(db, link, ns, is_inner_doc),
|
||||
Definition::TypeAlias(it) => it.resolve_doc_path(db, link, ns, is_inner_doc),
|
||||
Definition::Macro(it) => it.resolve_doc_path(db, link, ns, is_inner_doc),
|
||||
Definition::Field(it) => it.resolve_doc_path(db, link, ns, is_inner_doc),
|
||||
|
@ -671,11 +670,9 @@ fn filename_and_frag_for_def(
|
|||
None => String::from("index.html"),
|
||||
},
|
||||
Definition::Trait(t) => {
|
||||
// FIXME(trait-alias): url should be traitalias. for aliases
|
||||
format!("trait.{}.html", t.name(db).as_str())
|
||||
}
|
||||
Definition::TraitAlias(t) => {
|
||||
format!("traitalias.{}.html", t.name(db).as_str())
|
||||
}
|
||||
Definition::TypeAlias(t) => {
|
||||
format!("type.{}.html", t.name(db).as_str())
|
||||
}
|
||||
|
|
|
@ -162,7 +162,6 @@ fn structure_node(node: &SyntaxNode, config: &FileStructureConfig) -> Option<Str
|
|||
ast::Enum(it) => decl(it, StructureNodeKind::SymbolKind(SymbolKind::Enum)),
|
||||
ast::Variant(it) => decl(it, StructureNodeKind::SymbolKind(SymbolKind::Variant)),
|
||||
ast::Trait(it) => decl(it, StructureNodeKind::SymbolKind(SymbolKind::Trait)),
|
||||
ast::TraitAlias(it) => decl(it, StructureNodeKind::SymbolKind(SymbolKind::TraitAlias)),
|
||||
ast::Module(it) => decl(it, StructureNodeKind::SymbolKind(SymbolKind::Module)),
|
||||
ast::Macro(it) => decl(it, StructureNodeKind::SymbolKind(SymbolKind::Macro)),
|
||||
ast::TypeAlias(it) => decl_with_type_ref(&it, it.ty(), StructureNodeKind::SymbolKind(SymbolKind::TypeAlias)),
|
||||
|
@ -553,7 +552,7 @@ fn let_statements() {
|
|||
navigation_range: 251..256,
|
||||
node_range: 245..262,
|
||||
kind: SymbolKind(
|
||||
TraitAlias,
|
||||
Trait,
|
||||
),
|
||||
detail: None,
|
||||
deprecated: false,
|
||||
|
|
|
@ -29,7 +29,6 @@ pub enum FoldKind {
|
|||
Consts,
|
||||
Statics,
|
||||
TypeAliases,
|
||||
TraitAliases,
|
||||
ExternCrates,
|
||||
// endregion: item runs
|
||||
}
|
||||
|
@ -147,11 +146,6 @@ pub(crate) fn folding_ranges(file: &SourceFile) -> Vec<Fold> {
|
|||
res.push(Fold { range, kind: FoldKind::TypeAliases })
|
||||
}
|
||||
},
|
||||
ast::TraitAlias(alias) => {
|
||||
if let Some(range) = contiguous_range_for_item_group(alias, &mut visited_nodes) {
|
||||
res.push(Fold { range, kind: FoldKind::TraitAliases })
|
||||
}
|
||||
},
|
||||
ast::ExternCrate(extern_crate) => {
|
||||
if let Some(range) = contiguous_range_for_item_group(extern_crate, &mut visited_nodes) {
|
||||
res.push(Fold { range, kind: FoldKind::ExternCrates })
|
||||
|
@ -351,7 +345,6 @@ mod tests {
|
|||
FoldKind::ReturnType => "returntype",
|
||||
FoldKind::MatchArm => "matcharm",
|
||||
FoldKind::Function => "function",
|
||||
FoldKind::TraitAliases => "traitaliases",
|
||||
FoldKind::ExternCrates => "externcrates",
|
||||
};
|
||||
assert_eq!(kind, &attr.unwrap());
|
||||
|
|
|
@ -401,7 +401,6 @@ fn definition_owner_name(db: &RootDatabase, def: Definition, edition: Edition) -
|
|||
Definition::GenericParam(generic_param) => match generic_param.parent() {
|
||||
hir::GenericDef::Adt(it) => Some(it.name(db)),
|
||||
hir::GenericDef::Trait(it) => Some(it.name(db)),
|
||||
hir::GenericDef::TraitAlias(it) => Some(it.name(db)),
|
||||
hir::GenericDef::TypeAlias(it) => Some(it.name(db)),
|
||||
|
||||
hir::GenericDef::Impl(i) => i.self_ty(db).as_adt().map(|adt| adt.name(db)),
|
||||
|
|
|
@ -209,7 +209,6 @@ pub(crate) fn def_to_kind(db: &RootDatabase, def: Definition) -> SymbolInformati
|
|||
Definition::Const(..) => Constant,
|
||||
Definition::Static(..) => StaticVariable,
|
||||
Definition::Trait(..) => Trait,
|
||||
Definition::TraitAlias(..) => Trait,
|
||||
Definition::TypeAlias(it) => {
|
||||
if it.as_assoc_item(db).is_some() {
|
||||
AssociatedType
|
||||
|
|
|
@ -72,7 +72,6 @@ fn find_ancestors(item: SyntaxElement, direction: Direction, range: TextRange) -
|
|||
SyntaxKind::MACRO_CALL,
|
||||
SyntaxKind::TYPE_ALIAS,
|
||||
SyntaxKind::TRAIT,
|
||||
SyntaxKind::TRAIT_ALIAS,
|
||||
SyntaxKind::IMPL,
|
||||
SyntaxKind::MACRO_DEF,
|
||||
SyntaxKind::STRUCT,
|
||||
|
|
|
@ -226,9 +226,6 @@ impl TryToNav for FileSymbol {
|
|||
hir::ModuleDef::Trait(it) => {
|
||||
Some(it.display(db, display_target).to_string())
|
||||
}
|
||||
hir::ModuleDef::TraitAlias(it) => {
|
||||
Some(it.display(db, display_target).to_string())
|
||||
}
|
||||
hir::ModuleDef::TypeAlias(it) => {
|
||||
Some(it.display(db, display_target).to_string())
|
||||
}
|
||||
|
@ -261,7 +258,6 @@ impl TryToNav for Definition {
|
|||
Definition::Const(it) => it.try_to_nav(db),
|
||||
Definition::Static(it) => it.try_to_nav(db),
|
||||
Definition::Trait(it) => it.try_to_nav(db),
|
||||
Definition::TraitAlias(it) => it.try_to_nav(db),
|
||||
Definition::TypeAlias(it) => it.try_to_nav(db),
|
||||
Definition::ExternCrateDecl(it) => it.try_to_nav(db),
|
||||
Definition::InlineAsmOperand(it) => it.try_to_nav(db),
|
||||
|
@ -287,7 +283,6 @@ impl TryToNav for hir::ModuleDef {
|
|||
hir::ModuleDef::Const(it) => it.try_to_nav(db),
|
||||
hir::ModuleDef::Static(it) => it.try_to_nav(db),
|
||||
hir::ModuleDef::Trait(it) => it.try_to_nav(db),
|
||||
hir::ModuleDef::TraitAlias(it) => it.try_to_nav(db),
|
||||
hir::ModuleDef::TypeAlias(it) => it.try_to_nav(db),
|
||||
hir::ModuleDef::Macro(it) => it.try_to_nav(db),
|
||||
hir::ModuleDef::BuiltinType(_) => None,
|
||||
|
@ -366,12 +361,6 @@ impl ToNavFromAst for hir::Trait {
|
|||
container_name(db, self, self.krate(db).edition(db))
|
||||
}
|
||||
}
|
||||
impl ToNavFromAst for hir::TraitAlias {
|
||||
const KIND: SymbolKind = SymbolKind::TraitAlias;
|
||||
fn container_name(self, db: &RootDatabase) -> Option<SmolStr> {
|
||||
container_name(db, self, self.krate(db).edition(db))
|
||||
}
|
||||
}
|
||||
|
||||
impl<D> TryToNav for D
|
||||
where
|
||||
|
|
|
@ -1783,7 +1783,7 @@ trait Bar$0 = Foo where Self: ;
|
|||
fn foo<T: Bar>(_: impl Bar, _: &dyn Bar) {}
|
||||
"#,
|
||||
expect![[r#"
|
||||
Bar TraitAlias FileId(0) 13..42 19..22
|
||||
Bar Trait FileId(0) 13..42 19..22
|
||||
|
||||
FileId(0) 53..56
|
||||
FileId(0) 66..69
|
||||
|
|
|
@ -493,7 +493,6 @@ fn module_def_doctest(db: &RootDatabase, def: Definition) -> Option<Runnable> {
|
|||
Definition::Const(it) => it.attrs(db),
|
||||
Definition::Static(it) => it.attrs(db),
|
||||
Definition::Trait(it) => it.attrs(db),
|
||||
Definition::TraitAlias(it) => it.attrs(db),
|
||||
Definition::TypeAlias(it) => it.attrs(db),
|
||||
Definition::Macro(it) => it.attrs(db),
|
||||
Definition::SelfType(it) => it.attrs(db),
|
||||
|
|
|
@ -339,10 +339,6 @@ fn signature_help_for_generics(
|
|||
res.doc = it.docs(db);
|
||||
format_to!(res.signature, "trait {}", it.name(db).display(db, edition));
|
||||
}
|
||||
hir::GenericDef::TraitAlias(it) => {
|
||||
res.doc = it.docs(db);
|
||||
format_to!(res.signature, "trait {}", it.name(db).display(db, edition));
|
||||
}
|
||||
hir::GenericDef::TypeAlias(it) => {
|
||||
res.doc = it.docs(db);
|
||||
format_to!(res.signature, "type {}", it.name(db).display(db, edition));
|
||||
|
|
|
@ -576,7 +576,6 @@ pub(super) fn highlight_def(
|
|||
h
|
||||
}
|
||||
Definition::Trait(_) => Highlight::new(HlTag::Symbol(SymbolKind::Trait)),
|
||||
Definition::TraitAlias(_) => Highlight::new(HlTag::Symbol(SymbolKind::TraitAlias)),
|
||||
Definition::TypeAlias(type_) => {
|
||||
let mut h = Highlight::new(HlTag::Symbol(SymbolKind::TypeAlias));
|
||||
|
||||
|
@ -780,7 +779,6 @@ fn highlight_name_by_syntax(name: ast::Name) -> Highlight {
|
|||
MACRO_RULES => SymbolKind::Macro,
|
||||
CONST_PARAM => SymbolKind::ConstParam,
|
||||
SELF_PARAM => SymbolKind::SelfParam,
|
||||
TRAIT_ALIAS => SymbolKind::TraitAlias,
|
||||
ASM_OPERAND_NAMED => SymbolKind::Local,
|
||||
_ => return default.into(),
|
||||
};
|
||||
|
|
|
@ -311,7 +311,6 @@ fn module_def_to_hl_tag(def: Definition) -> HlTag {
|
|||
Definition::Const(_) => SymbolKind::Const,
|
||||
Definition::Static(_) => SymbolKind::Static,
|
||||
Definition::Trait(_) => SymbolKind::Trait,
|
||||
Definition::TraitAlias(_) => SymbolKind::TraitAlias,
|
||||
Definition::TypeAlias(_) => SymbolKind::TypeAlias,
|
||||
Definition::BuiltinLifetime(_) => SymbolKind::LifetimeParam,
|
||||
Definition::BuiltinType(_) => return HlTag::BuiltinType,
|
||||
|
|
|
@ -160,7 +160,6 @@ impl HlTag {
|
|||
SymbolKind::Struct => "struct",
|
||||
SymbolKind::ToolModule => "tool_module",
|
||||
SymbolKind::Trait => "trait",
|
||||
SymbolKind::TraitAlias => "trait_alias",
|
||||
SymbolKind::TypeAlias => "type_alias",
|
||||
SymbolKind::TypeParam => "type_param",
|
||||
SymbolKind::Union => "union",
|
||||
|
|
|
@ -78,8 +78,8 @@ pre { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
|
|||
<span class="brace">}</span>
|
||||
|
||||
<span class="keyword">use</span> <span class="unresolved_reference">foo</span><span class="operator">::</span><span class="unresolved_reference">bar</span> <span class="keyword">as</span> <span class="variable declaration">baz</span><span class="semicolon">;</span>
|
||||
<span class="keyword">trait</span> <span class="trait_alias declaration">Bar</span> <span class="operator">=</span> <span class="unresolved_reference">Baz</span><span class="semicolon">;</span>
|
||||
<span class="keyword">trait</span> <span class="trait_alias declaration">Foo</span> <span class="operator">=</span> <span class="trait_alias">Bar</span><span class="semicolon">;</span>
|
||||
<span class="keyword">trait</span> <span class="trait declaration">Bar</span> <span class="operator">=</span> <span class="unresolved_reference">Baz</span><span class="semicolon">;</span>
|
||||
<span class="keyword">trait</span> <span class="trait declaration">Foo</span> <span class="operator">=</span> <span class="trait">Bar</span><span class="semicolon">;</span>
|
||||
|
||||
<span class="keyword">fn</span> <span class="function declaration">main</span><span class="parenthesis">(</span><span class="parenthesis">)</span> <span class="brace">{</span>
|
||||
<span class="keyword">let</span> <span class="variable declaration">a</span> <span class="operator">=</span> <span class="char_literal">'</span><span class="escape_sequence">\n</span><span class="char_literal">'</span><span class="semicolon">;</span>
|
||||
|
|
|
@ -20,7 +20,7 @@ pub(super) fn trait_(p: &mut Parser<'_>, m: Marker) {
|
|||
// trait Z<U> = where Self: T<U>;
|
||||
generic_params::opt_where_clause(p);
|
||||
p.expect(T![;]);
|
||||
m.complete(p, TRAIT_ALIAS);
|
||||
m.complete(p, TRAIT);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -284,7 +284,6 @@ pub enum SyntaxKind {
|
|||
STRUCT,
|
||||
TOKEN_TREE,
|
||||
TRAIT,
|
||||
TRAIT_ALIAS,
|
||||
TRY_EXPR,
|
||||
TUPLE_EXPR,
|
||||
TUPLE_FIELD,
|
||||
|
@ -457,7 +456,6 @@ impl SyntaxKind {
|
|||
| STRUCT
|
||||
| TOKEN_TREE
|
||||
| TRAIT
|
||||
| TRAIT_ALIAS
|
||||
| TRY_EXPR
|
||||
| TUPLE_EXPR
|
||||
| TUPLE_FIELD
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
SOURCE_FILE
|
||||
TRAIT_ALIAS
|
||||
TRAIT
|
||||
TRAIT_KW "trait"
|
||||
WHITESPACE " "
|
||||
NAME
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
SOURCE_FILE
|
||||
TRAIT_ALIAS
|
||||
TRAIT
|
||||
TRAIT_KW "trait"
|
||||
WHITESPACE " "
|
||||
NAME
|
||||
|
@ -50,7 +50,7 @@ SOURCE_FILE
|
|||
IDENT "Copy"
|
||||
SEMICOLON ";"
|
||||
WHITESPACE "\n"
|
||||
TRAIT_ALIAS
|
||||
TRAIT
|
||||
TRAIT_KW "trait"
|
||||
WHITESPACE " "
|
||||
NAME
|
||||
|
|
|
@ -61,7 +61,7 @@ pub(crate) fn symbol_kind(symbol_kind: SymbolKind) -> lsp_types::SymbolKind {
|
|||
SymbolKind::Struct => lsp_types::SymbolKind::STRUCT,
|
||||
SymbolKind::Enum => lsp_types::SymbolKind::ENUM,
|
||||
SymbolKind::Variant => lsp_types::SymbolKind::ENUM_MEMBER,
|
||||
SymbolKind::Trait | SymbolKind::TraitAlias => lsp_types::SymbolKind::INTERFACE,
|
||||
SymbolKind::Trait => lsp_types::SymbolKind::INTERFACE,
|
||||
SymbolKind::Macro
|
||||
| SymbolKind::ProcMacro
|
||||
| SymbolKind::BuiltinAttr
|
||||
|
@ -156,7 +156,6 @@ pub(crate) fn completion_item_kind(
|
|||
SymbolKind::Static => lsp_types::CompletionItemKind::VALUE,
|
||||
SymbolKind::Struct => lsp_types::CompletionItemKind::STRUCT,
|
||||
SymbolKind::Trait => lsp_types::CompletionItemKind::INTERFACE,
|
||||
SymbolKind::TraitAlias => lsp_types::CompletionItemKind::INTERFACE,
|
||||
SymbolKind::TypeAlias => lsp_types::CompletionItemKind::STRUCT,
|
||||
SymbolKind::TypeParam => lsp_types::CompletionItemKind::TYPE_PARAMETER,
|
||||
SymbolKind::Union => lsp_types::CompletionItemKind::STRUCT,
|
||||
|
@ -817,7 +816,6 @@ fn semantic_token_type_and_modifiers(
|
|||
SymbolKind::Union => types::UNION,
|
||||
SymbolKind::TypeAlias => types::TYPE_ALIAS,
|
||||
SymbolKind::Trait => types::INTERFACE,
|
||||
SymbolKind::TraitAlias => types::INTERFACE,
|
||||
SymbolKind::Macro => types::MACRO,
|
||||
SymbolKind::ProcMacro => types::PROC_MACRO,
|
||||
SymbolKind::BuiltinAttr => types::BUILTIN_ATTRIBUTE,
|
||||
|
@ -909,7 +907,6 @@ pub(crate) fn folding_range(
|
|||
| FoldKind::WhereClause
|
||||
| FoldKind::ReturnType
|
||||
| FoldKind::Array
|
||||
| FoldKind::TraitAliases
|
||||
| FoldKind::ExternCrates
|
||||
| FoldKind::MatchArm
|
||||
| FoldKind::Function => None,
|
||||
|
|
|
@ -485,8 +485,7 @@ register_has_name_ast_id! {
|
|||
MacroRules = name,
|
||||
Module = name,
|
||||
Static = name,
|
||||
Trait = name,
|
||||
TraitAlias = name
|
||||
Trait = name
|
||||
}
|
||||
|
||||
macro_rules! register_assoc_item_ast_id {
|
||||
|
|
|
@ -154,7 +154,6 @@ Item =
|
|||
| Static
|
||||
| Struct
|
||||
| Trait
|
||||
| TraitAlias
|
||||
| TypeAlias
|
||||
| Union
|
||||
| Use
|
||||
|
@ -306,11 +305,8 @@ Trait =
|
|||
Attr* Visibility?
|
||||
'unsafe'? 'auto'?
|
||||
'trait' Name GenericParamList?
|
||||
(':' TypeBoundList?)? WhereClause? AssocItemList
|
||||
|
||||
TraitAlias =
|
||||
Attr* Visibility?
|
||||
'trait' Name GenericParamList? '=' TypeBoundList? WhereClause? ';'
|
||||
(((':' TypeBoundList?)? WhereClause? AssocItemList) |
|
||||
('=' TypeBoundList? WhereClause? ';'))
|
||||
|
||||
AssocItemList =
|
||||
'{' Attr* AssocItem* '}'
|
||||
|
|
|
@ -26,8 +26,7 @@ pub use self::{
|
|||
generated::{nodes::*, tokens::*},
|
||||
node_ext::{
|
||||
AttrKind, FieldKind, Macro, NameLike, NameOrNameRef, PathSegmentKind, SelfParamKind,
|
||||
SlicePatComponents, StructKind, TraitOrAlias, TypeBoundKind, TypeOrConstParam,
|
||||
VisibilityKind,
|
||||
SlicePatComponents, StructKind, TypeBoundKind, TypeOrConstParam, VisibilityKind,
|
||||
},
|
||||
operators::{ArithOp, BinaryOp, CmpOp, LogicOp, Ordering, RangeOp, UnaryOp},
|
||||
token_ext::{CommentKind, CommentPlacement, CommentShape, IsString, QuoteOffsets, Radix},
|
||||
|
|
|
@ -99,38 +99,10 @@ impl GenericParamsOwnerEdit for ast::Trait {
|
|||
|
||||
fn get_or_create_where_clause(&self) -> ast::WhereClause {
|
||||
if self.where_clause().is_none() {
|
||||
let position = match self.assoc_item_list() {
|
||||
Some(items) => Position::before(items.syntax()),
|
||||
None => Position::last_child_of(self.syntax()),
|
||||
};
|
||||
create_where_clause(position);
|
||||
}
|
||||
self.where_clause().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
impl GenericParamsOwnerEdit for ast::TraitAlias {
|
||||
fn get_or_create_generic_param_list(&self) -> ast::GenericParamList {
|
||||
match self.generic_param_list() {
|
||||
Some(it) => it,
|
||||
None => {
|
||||
let position = if let Some(name) = self.name() {
|
||||
Position::after(name.syntax)
|
||||
} else if let Some(trait_token) = self.trait_token() {
|
||||
Position::after(trait_token)
|
||||
} else {
|
||||
Position::last_child_of(self.syntax())
|
||||
};
|
||||
create_generic_param_list(position)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn get_or_create_where_clause(&self) -> ast::WhereClause {
|
||||
if self.where_clause().is_none() {
|
||||
let position = match self.semicolon_token() {
|
||||
Some(tok) => Position::before(tok),
|
||||
None => Position::last_child_of(self.syntax()),
|
||||
let position = match (self.assoc_item_list(), self.semicolon_token()) {
|
||||
(Some(items), _) => Position::before(items.syntax()),
|
||||
(_, Some(tok)) => Position::before(tok),
|
||||
(None, None) => Position::last_child_of(self.syntax()),
|
||||
};
|
||||
create_where_clause(position);
|
||||
}
|
||||
|
|
|
@ -1614,30 +1614,16 @@ impl Trait {
|
|||
#[inline]
|
||||
pub fn assoc_item_list(&self) -> Option<AssocItemList> { support::child(&self.syntax) }
|
||||
#[inline]
|
||||
pub fn semicolon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![;]) }
|
||||
#[inline]
|
||||
pub fn eq_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![=]) }
|
||||
#[inline]
|
||||
pub fn auto_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![auto]) }
|
||||
#[inline]
|
||||
pub fn trait_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![trait]) }
|
||||
#[inline]
|
||||
pub fn unsafe_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![unsafe]) }
|
||||
}
|
||||
pub struct TraitAlias {
|
||||
pub(crate) syntax: SyntaxNode,
|
||||
}
|
||||
impl ast::HasAttrs for TraitAlias {}
|
||||
impl ast::HasDocComments for TraitAlias {}
|
||||
impl ast::HasGenericParams for TraitAlias {}
|
||||
impl ast::HasName for TraitAlias {}
|
||||
impl ast::HasVisibility for TraitAlias {}
|
||||
impl TraitAlias {
|
||||
#[inline]
|
||||
pub fn type_bound_list(&self) -> Option<TypeBoundList> { support::child(&self.syntax) }
|
||||
#[inline]
|
||||
pub fn semicolon_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![;]) }
|
||||
#[inline]
|
||||
pub fn eq_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![=]) }
|
||||
#[inline]
|
||||
pub fn trait_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![trait]) }
|
||||
}
|
||||
pub struct TryExpr {
|
||||
pub(crate) syntax: SyntaxNode,
|
||||
}
|
||||
|
@ -2107,7 +2093,6 @@ pub enum Item {
|
|||
Static(Static),
|
||||
Struct(Struct),
|
||||
Trait(Trait),
|
||||
TraitAlias(TraitAlias),
|
||||
TypeAlias(TypeAlias),
|
||||
Union(Union),
|
||||
Use(Use),
|
||||
|
@ -6801,42 +6786,6 @@ impl fmt::Debug for Trait {
|
|||
f.debug_struct("Trait").field("syntax", &self.syntax).finish()
|
||||
}
|
||||
}
|
||||
impl AstNode for TraitAlias {
|
||||
#[inline]
|
||||
fn kind() -> SyntaxKind
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
TRAIT_ALIAS
|
||||
}
|
||||
#[inline]
|
||||
fn can_cast(kind: SyntaxKind) -> bool { kind == TRAIT_ALIAS }
|
||||
#[inline]
|
||||
fn cast(syntax: SyntaxNode) -> Option<Self> {
|
||||
if Self::can_cast(syntax.kind()) {
|
||||
Some(Self { syntax })
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
#[inline]
|
||||
fn syntax(&self) -> &SyntaxNode { &self.syntax }
|
||||
}
|
||||
impl hash::Hash for TraitAlias {
|
||||
fn hash<H: hash::Hasher>(&self, state: &mut H) { self.syntax.hash(state); }
|
||||
}
|
||||
impl Eq for TraitAlias {}
|
||||
impl PartialEq for TraitAlias {
|
||||
fn eq(&self, other: &Self) -> bool { self.syntax == other.syntax }
|
||||
}
|
||||
impl Clone for TraitAlias {
|
||||
fn clone(&self) -> Self { Self { syntax: self.syntax.clone() } }
|
||||
}
|
||||
impl fmt::Debug for TraitAlias {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
f.debug_struct("TraitAlias").field("syntax", &self.syntax).finish()
|
||||
}
|
||||
}
|
||||
impl AstNode for TryExpr {
|
||||
#[inline]
|
||||
fn kind() -> SyntaxKind
|
||||
|
@ -8471,10 +8420,6 @@ impl From<Trait> for Item {
|
|||
#[inline]
|
||||
fn from(node: Trait) -> Item { Item::Trait(node) }
|
||||
}
|
||||
impl From<TraitAlias> for Item {
|
||||
#[inline]
|
||||
fn from(node: TraitAlias) -> Item { Item::TraitAlias(node) }
|
||||
}
|
||||
impl From<TypeAlias> for Item {
|
||||
#[inline]
|
||||
fn from(node: TypeAlias) -> Item { Item::TypeAlias(node) }
|
||||
|
@ -8506,7 +8451,6 @@ impl AstNode for Item {
|
|||
| STATIC
|
||||
| STRUCT
|
||||
| TRAIT
|
||||
| TRAIT_ALIAS
|
||||
| TYPE_ALIAS
|
||||
| UNION
|
||||
| USE
|
||||
|
@ -8529,7 +8473,6 @@ impl AstNode for Item {
|
|||
STATIC => Item::Static(Static { syntax }),
|
||||
STRUCT => Item::Struct(Struct { syntax }),
|
||||
TRAIT => Item::Trait(Trait { syntax }),
|
||||
TRAIT_ALIAS => Item::TraitAlias(TraitAlias { syntax }),
|
||||
TYPE_ALIAS => Item::TypeAlias(TypeAlias { syntax }),
|
||||
UNION => Item::Union(Union { syntax }),
|
||||
USE => Item::Use(Use { syntax }),
|
||||
|
@ -8554,7 +8497,6 @@ impl AstNode for Item {
|
|||
Item::Static(it) => &it.syntax,
|
||||
Item::Struct(it) => &it.syntax,
|
||||
Item::Trait(it) => &it.syntax,
|
||||
Item::TraitAlias(it) => &it.syntax,
|
||||
Item::TypeAlias(it) => &it.syntax,
|
||||
Item::Union(it) => &it.syntax,
|
||||
Item::Use(it) => &it.syntax,
|
||||
|
@ -8984,7 +8926,6 @@ impl AstNode for AnyHasAttrs {
|
|||
| STMT_LIST
|
||||
| STRUCT
|
||||
| TRAIT
|
||||
| TRAIT_ALIAS
|
||||
| TRY_EXPR
|
||||
| TUPLE_EXPR
|
||||
| TUPLE_FIELD
|
||||
|
@ -9257,10 +9198,6 @@ impl From<Trait> for AnyHasAttrs {
|
|||
#[inline]
|
||||
fn from(node: Trait) -> AnyHasAttrs { AnyHasAttrs { syntax: node.syntax } }
|
||||
}
|
||||
impl From<TraitAlias> for AnyHasAttrs {
|
||||
#[inline]
|
||||
fn from(node: TraitAlias) -> AnyHasAttrs { AnyHasAttrs { syntax: node.syntax } }
|
||||
}
|
||||
impl From<TryExpr> for AnyHasAttrs {
|
||||
#[inline]
|
||||
fn from(node: TryExpr) -> AnyHasAttrs { AnyHasAttrs { syntax: node.syntax } }
|
||||
|
@ -9330,7 +9267,6 @@ impl AstNode for AnyHasDocComments {
|
|||
| STATIC
|
||||
| STRUCT
|
||||
| TRAIT
|
||||
| TRAIT_ALIAS
|
||||
| TUPLE_FIELD
|
||||
| TYPE_ALIAS
|
||||
| UNION
|
||||
|
@ -9420,10 +9356,6 @@ impl From<Trait> for AnyHasDocComments {
|
|||
#[inline]
|
||||
fn from(node: Trait) -> AnyHasDocComments { AnyHasDocComments { syntax: node.syntax } }
|
||||
}
|
||||
impl From<TraitAlias> for AnyHasDocComments {
|
||||
#[inline]
|
||||
fn from(node: TraitAlias) -> AnyHasDocComments { AnyHasDocComments { syntax: node.syntax } }
|
||||
}
|
||||
impl From<TupleField> for AnyHasDocComments {
|
||||
#[inline]
|
||||
fn from(node: TupleField) -> AnyHasDocComments { AnyHasDocComments { syntax: node.syntax } }
|
||||
|
@ -9488,7 +9420,7 @@ impl ast::HasGenericParams for AnyHasGenericParams {}
|
|||
impl AstNode for AnyHasGenericParams {
|
||||
#[inline]
|
||||
fn can_cast(kind: SyntaxKind) -> bool {
|
||||
matches!(kind, CONST | ENUM | FN | IMPL | STRUCT | TRAIT | TRAIT_ALIAS | TYPE_ALIAS | UNION)
|
||||
matches!(kind, CONST | ENUM | FN | IMPL | STRUCT | TRAIT | TYPE_ALIAS | UNION)
|
||||
}
|
||||
#[inline]
|
||||
fn cast(syntax: SyntaxNode) -> Option<Self> {
|
||||
|
@ -9536,10 +9468,6 @@ impl From<Trait> for AnyHasGenericParams {
|
|||
#[inline]
|
||||
fn from(node: Trait) -> AnyHasGenericParams { AnyHasGenericParams { syntax: node.syntax } }
|
||||
}
|
||||
impl From<TraitAlias> for AnyHasGenericParams {
|
||||
#[inline]
|
||||
fn from(node: TraitAlias) -> AnyHasGenericParams { AnyHasGenericParams { syntax: node.syntax } }
|
||||
}
|
||||
impl From<TypeAlias> for AnyHasGenericParams {
|
||||
#[inline]
|
||||
fn from(node: TypeAlias) -> AnyHasGenericParams { AnyHasGenericParams { syntax: node.syntax } }
|
||||
|
@ -9646,7 +9574,6 @@ impl AstNode for AnyHasName {
|
|||
| STATIC
|
||||
| STRUCT
|
||||
| TRAIT
|
||||
| TRAIT_ALIAS
|
||||
| TYPE_ALIAS
|
||||
| TYPE_PARAM
|
||||
| UNION
|
||||
|
@ -9739,10 +9666,6 @@ impl From<Trait> for AnyHasName {
|
|||
#[inline]
|
||||
fn from(node: Trait) -> AnyHasName { AnyHasName { syntax: node.syntax } }
|
||||
}
|
||||
impl From<TraitAlias> for AnyHasName {
|
||||
#[inline]
|
||||
fn from(node: TraitAlias) -> AnyHasName { AnyHasName { syntax: node.syntax } }
|
||||
}
|
||||
impl From<TypeAlias> for AnyHasName {
|
||||
#[inline]
|
||||
fn from(node: TypeAlias) -> AnyHasName { AnyHasName { syntax: node.syntax } }
|
||||
|
@ -9832,7 +9755,6 @@ impl AstNode for AnyHasVisibility {
|
|||
| STATIC
|
||||
| STRUCT
|
||||
| TRAIT
|
||||
| TRAIT_ALIAS
|
||||
| TUPLE_FIELD
|
||||
| TYPE_ALIAS
|
||||
| UNION
|
||||
|
@ -9910,10 +9832,6 @@ impl From<Trait> for AnyHasVisibility {
|
|||
#[inline]
|
||||
fn from(node: Trait) -> AnyHasVisibility { AnyHasVisibility { syntax: node.syntax } }
|
||||
}
|
||||
impl From<TraitAlias> for AnyHasVisibility {
|
||||
#[inline]
|
||||
fn from(node: TraitAlias) -> AnyHasVisibility { AnyHasVisibility { syntax: node.syntax } }
|
||||
}
|
||||
impl From<TupleField> for AnyHasVisibility {
|
||||
#[inline]
|
||||
fn from(node: TupleField) -> AnyHasVisibility { AnyHasVisibility { syntax: node.syntax } }
|
||||
|
@ -10639,11 +10557,6 @@ impl std::fmt::Display for Trait {
|
|||
std::fmt::Display::fmt(self.syntax(), f)
|
||||
}
|
||||
}
|
||||
impl std::fmt::Display for TraitAlias {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
std::fmt::Display::fmt(self.syntax(), f)
|
||||
}
|
||||
}
|
||||
impl std::fmt::Display for TryExpr {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
std::fmt::Display::fmt(self.syntax(), f)
|
||||
|
|
|
@ -880,51 +880,6 @@ impl AstNode for TypeOrConstParam {
|
|||
|
||||
impl HasAttrs for TypeOrConstParam {}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum TraitOrAlias {
|
||||
Trait(ast::Trait),
|
||||
TraitAlias(ast::TraitAlias),
|
||||
}
|
||||
|
||||
impl TraitOrAlias {
|
||||
pub fn name(&self) -> Option<ast::Name> {
|
||||
match self {
|
||||
TraitOrAlias::Trait(x) => x.name(),
|
||||
TraitOrAlias::TraitAlias(x) => x.name(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl AstNode for TraitOrAlias {
|
||||
fn can_cast(kind: SyntaxKind) -> bool
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
matches!(kind, SyntaxKind::TRAIT | SyntaxKind::TRAIT_ALIAS)
|
||||
}
|
||||
|
||||
fn cast(syntax: SyntaxNode) -> Option<Self>
|
||||
where
|
||||
Self: Sized,
|
||||
{
|
||||
let res = match syntax.kind() {
|
||||
SyntaxKind::TRAIT => TraitOrAlias::Trait(ast::Trait { syntax }),
|
||||
SyntaxKind::TRAIT_ALIAS => TraitOrAlias::TraitAlias(ast::TraitAlias { syntax }),
|
||||
_ => return None,
|
||||
};
|
||||
Some(res)
|
||||
}
|
||||
|
||||
fn syntax(&self) -> &SyntaxNode {
|
||||
match self {
|
||||
TraitOrAlias::Trait(it) => it.syntax(),
|
||||
TraitOrAlias::TraitAlias(it) => it.syntax(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl HasAttrs for TraitOrAlias {}
|
||||
|
||||
pub enum VisibilityKind {
|
||||
In(ast::Path),
|
||||
PubCrate,
|
||||
|
|
|
@ -1081,7 +1081,6 @@ fn extract_struct_traits(ast: &mut AstSrc) {
|
|||
"Enum",
|
||||
"Variant",
|
||||
"Trait",
|
||||
"TraitAlias",
|
||||
"Module",
|
||||
"Static",
|
||||
"Const",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue