mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 12:54:58 +00:00
Fix hir for ast::UnionDef
This commit is contained in:
parent
e1c0bdaf75
commit
5fd68b5929
22 changed files with 121 additions and 86 deletions
|
@ -1856,6 +1856,7 @@ impl Module {
|
|||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||
pub enum ModuleItem {
|
||||
StructDef(StructDef),
|
||||
UnionDef(UnionDef),
|
||||
EnumDef(EnumDef),
|
||||
FnDef(FnDef),
|
||||
TraitDef(TraitDef),
|
||||
|
@ -1872,6 +1873,11 @@ impl From<StructDef> for ModuleItem {
|
|||
ModuleItem::StructDef(node)
|
||||
}
|
||||
}
|
||||
impl From<UnionDef> for ModuleItem {
|
||||
fn from(node: UnionDef) -> ModuleItem {
|
||||
ModuleItem::UnionDef(node)
|
||||
}
|
||||
}
|
||||
impl From<EnumDef> for ModuleItem {
|
||||
fn from(node: EnumDef) -> ModuleItem {
|
||||
ModuleItem::EnumDef(node)
|
||||
|
@ -1925,14 +1931,15 @@ impl From<Module> for ModuleItem {
|
|||
impl AstNode for ModuleItem {
|
||||
fn can_cast(kind: SyntaxKind) -> bool {
|
||||
match kind {
|
||||
STRUCT_DEF | ENUM_DEF | FN_DEF | TRAIT_DEF | TYPE_ALIAS_DEF | IMPL_BLOCK | USE_ITEM
|
||||
| EXTERN_CRATE_ITEM | CONST_DEF | STATIC_DEF | MODULE => true,
|
||||
STRUCT_DEF | UNION_DEF | ENUM_DEF | FN_DEF | TRAIT_DEF | TYPE_ALIAS_DEF
|
||||
| IMPL_BLOCK | USE_ITEM | EXTERN_CRATE_ITEM | CONST_DEF | STATIC_DEF | MODULE => true,
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
fn cast(syntax: SyntaxNode) -> Option<Self> {
|
||||
let res = match syntax.kind() {
|
||||
STRUCT_DEF => ModuleItem::StructDef(StructDef { syntax }),
|
||||
UNION_DEF => ModuleItem::UnionDef(UnionDef { syntax }),
|
||||
ENUM_DEF => ModuleItem::EnumDef(EnumDef { syntax }),
|
||||
FN_DEF => ModuleItem::FnDef(FnDef { syntax }),
|
||||
TRAIT_DEF => ModuleItem::TraitDef(TraitDef { syntax }),
|
||||
|
@ -1950,6 +1957,7 @@ impl AstNode for ModuleItem {
|
|||
fn syntax(&self) -> &SyntaxNode {
|
||||
match self {
|
||||
ModuleItem::StructDef(it) => &it.syntax,
|
||||
ModuleItem::UnionDef(it) => &it.syntax,
|
||||
ModuleItem::EnumDef(it) => &it.syntax,
|
||||
ModuleItem::FnDef(it) => &it.syntax,
|
||||
ModuleItem::TraitDef(it) => &it.syntax,
|
||||
|
@ -2038,6 +2046,7 @@ impl NeverType {}
|
|||
pub enum NominalDef {
|
||||
StructDef(StructDef),
|
||||
EnumDef(EnumDef),
|
||||
UnionDef(UnionDef),
|
||||
}
|
||||
impl From<StructDef> for NominalDef {
|
||||
fn from(node: StructDef) -> NominalDef {
|
||||
|
@ -2049,10 +2058,15 @@ impl From<EnumDef> for NominalDef {
|
|||
NominalDef::EnumDef(node)
|
||||
}
|
||||
}
|
||||
impl From<UnionDef> for NominalDef {
|
||||
fn from(node: UnionDef) -> NominalDef {
|
||||
NominalDef::UnionDef(node)
|
||||
}
|
||||
}
|
||||
impl AstNode for NominalDef {
|
||||
fn can_cast(kind: SyntaxKind) -> bool {
|
||||
match kind {
|
||||
STRUCT_DEF | ENUM_DEF => true,
|
||||
STRUCT_DEF | ENUM_DEF | UNION_DEF => true,
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
@ -2060,6 +2074,7 @@ impl AstNode for NominalDef {
|
|||
let res = match syntax.kind() {
|
||||
STRUCT_DEF => NominalDef::StructDef(StructDef { syntax }),
|
||||
ENUM_DEF => NominalDef::EnumDef(EnumDef { syntax }),
|
||||
UNION_DEF => NominalDef::UnionDef(UnionDef { syntax }),
|
||||
_ => return None,
|
||||
};
|
||||
Some(res)
|
||||
|
@ -2068,6 +2083,7 @@ impl AstNode for NominalDef {
|
|||
match self {
|
||||
NominalDef::StructDef(it) => &it.syntax,
|
||||
NominalDef::EnumDef(it) => &it.syntax,
|
||||
NominalDef::UnionDef(it) => &it.syntax,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3815,7 +3831,11 @@ impl ast::NameOwner for UnionDef {}
|
|||
impl ast::TypeParamsOwner for UnionDef {}
|
||||
impl ast::AttrsOwner for UnionDef {}
|
||||
impl ast::DocCommentsOwner for UnionDef {}
|
||||
impl UnionDef {}
|
||||
impl UnionDef {
|
||||
pub fn record_field_def_list(&self) -> Option<RecordFieldDefList> {
|
||||
AstChildren::new(&self.syntax).next()
|
||||
}
|
||||
}
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||
pub struct UseItem {
|
||||
pub(crate) syntax: SyntaxNode,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue