refactor: leverage HasAttrs for code brevity

This commit is contained in:
Ryo Yoshida 2023-03-04 00:24:03 +09:00
parent 2e7d2c2d04
commit 356d12eae4
No known key found for this signature in database
GPG key ID: E25698A930586171
3 changed files with 47 additions and 36 deletions

View file

@ -680,6 +680,36 @@ impl TypeOrConstParam {
}
}
impl AstNode for TypeOrConstParam {
fn can_cast(kind: SyntaxKind) -> bool
where
Self: Sized,
{
matches!(kind, SyntaxKind::TYPE_PARAM | SyntaxKind::CONST_PARAM)
}
fn cast(syntax: SyntaxNode) -> Option<Self>
where
Self: Sized,
{
let res = match syntax.kind() {
SyntaxKind::TYPE_PARAM => TypeOrConstParam::Type(ast::TypeParam { syntax }),
SyntaxKind::CONST_PARAM => TypeOrConstParam::Const(ast::ConstParam { syntax }),
_ => return None,
};
Some(res)
}
fn syntax(&self) -> &SyntaxNode {
match self {
TypeOrConstParam::Type(it) => it.syntax(),
TypeOrConstParam::Const(it) => it.syntax(),
}
}
}
impl HasAttrs for TypeOrConstParam {}
#[derive(Debug, Clone)]
pub enum TraitOrAlias {
Trait(ast::Trait),