use crate::syntax::{SyntaxKind, SyntaxNode, SyntaxToken};
pub trait AstNode: Sized {
fn can_cast(kind: SyntaxKind) -> bool;
fn cast(syntax: SyntaxNode) -> Option<Self>;
fn syntax(&self) -> &SyntaxNode;
}
pub trait AstToken: Sized {
fn can_cast(kind: SyntaxKind) -> bool;
fn cast(syntax: SyntaxToken) -> Option<Self>;
fn syntax(&self) -> &SyntaxToken;
fn text(&self) -> &str {
self.syntax().text()
}
}