Fix hir for ast::UnionDef
This commit is contained in:
@@ -196,17 +196,6 @@ impl StructKind {
|
||||
}
|
||||
|
||||
impl ast::StructDef {
|
||||
pub fn is_union(&self) -> bool {
|
||||
for child in self.syntax().children_with_tokens() {
|
||||
match child.kind() {
|
||||
T![struct] => return false,
|
||||
T![union] => return true,
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
pub fn kind(&self) -> StructKind {
|
||||
StructKind::from_node(self)
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -293,7 +293,8 @@ Grammar(
|
||||
"TypeParamsOwner",
|
||||
"AttrsOwner",
|
||||
"DocCommentsOwner"
|
||||
]
|
||||
],
|
||||
options: ["RecordFieldDefList"],
|
||||
),
|
||||
"RecordFieldDefList": (collections: [("fields", "RecordFieldDef")]),
|
||||
"RecordFieldDef": (
|
||||
@@ -398,7 +399,7 @@ Grammar(
|
||||
]),
|
||||
|
||||
"NominalDef": (
|
||||
enum: ["StructDef", "EnumDef"],
|
||||
enum: ["StructDef", "EnumDef", "UnionDef"],
|
||||
traits: [
|
||||
"NameOwner",
|
||||
"TypeParamsOwner",
|
||||
@@ -406,9 +407,9 @@ Grammar(
|
||||
],
|
||||
),
|
||||
"ModuleItem": (
|
||||
enum: ["StructDef", "EnumDef", "FnDef", "TraitDef", "TypeAliasDef", "ImplBlock",
|
||||
enum: ["StructDef", "UnionDef", "EnumDef", "FnDef", "TraitDef", "TypeAliasDef", "ImplBlock",
|
||||
"UseItem", "ExternCrateItem", "ConstDef", "StaticDef", "Module" ],
|
||||
traits: ["AttrsOwner"]
|
||||
traits: ["AttrsOwner"],
|
||||
),
|
||||
"ImplItem": (
|
||||
enum: ["FnDef", "TypeAliasDef", "ConstDef"],
|
||||
|
||||
Reference in New Issue
Block a user