fix(hir): VariantDef is impl HasSource

A new syntax node `ast::VariantDef` has been introduced to map between the HIR node and the AST.
The files have been updated with `cargo test -p xtask`.

Signed-off-by: Prajwal S N <prajwalnadig21@gmail.com>
This commit is contained in:
Prajwal S N 2025-03-08 01:25:27 +05:30
parent 62dea277cc
commit 39391b0d38
No known key found for this signature in database
GPG key ID: 60701A603988FAC2
5 changed files with 70 additions and 3 deletions

View file

@ -279,6 +279,11 @@ Adt =
| Struct
| Union
VariantDef =
Struct
| Union
| Variant
Const =
Attr* Visibility?
'default'?

View file

@ -2446,6 +2446,17 @@ pub enum UseBoundGenericArg {
NameRef(NameRef),
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum VariantDef {
Struct(Struct),
Union(Union),
Variant(Variant),
}
impl ast::HasAttrs for VariantDef {}
impl ast::HasDocComments for VariantDef {}
impl ast::HasName for VariantDef {}
impl ast::HasVisibility for VariantDef {}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct AnyHasArgList {
pub(crate) syntax: SyntaxNode,
@ -6738,6 +6749,40 @@ impl AstNode for UseBoundGenericArg {
}
}
}
impl From<Struct> for VariantDef {
#[inline]
fn from(node: Struct) -> VariantDef { VariantDef::Struct(node) }
}
impl From<Union> for VariantDef {
#[inline]
fn from(node: Union) -> VariantDef { VariantDef::Union(node) }
}
impl From<Variant> for VariantDef {
#[inline]
fn from(node: Variant) -> VariantDef { VariantDef::Variant(node) }
}
impl AstNode for VariantDef {
#[inline]
fn can_cast(kind: SyntaxKind) -> bool { matches!(kind, STRUCT | UNION | VARIANT) }
#[inline]
fn cast(syntax: SyntaxNode) -> Option<Self> {
let res = match syntax.kind() {
STRUCT => VariantDef::Struct(Struct { syntax }),
UNION => VariantDef::Union(Union { syntax }),
VARIANT => VariantDef::Variant(Variant { syntax }),
_ => return None,
};
Some(res)
}
#[inline]
fn syntax(&self) -> &SyntaxNode {
match self {
VariantDef::Struct(it) => &it.syntax,
VariantDef::Union(it) => &it.syntax,
VariantDef::Variant(it) => &it.syntax,
}
}
}
impl AnyHasArgList {
#[inline]
pub fn new<T: ast::HasArgList>(node: T) -> AnyHasArgList {
@ -7753,6 +7798,11 @@ impl std::fmt::Display for UseBoundGenericArg {
std::fmt::Display::fmt(self.syntax(), f)
}
}
impl std::fmt::Display for VariantDef {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
std::fmt::Display::fmt(self.syntax(), f)
}
}
impl std::fmt::Display for Abi {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
std::fmt::Display::fmt(self.syntax(), f)