Merge pull request #3562 from FireofGods/display_for_node

Add `std::fmt::Display` as a supertrait for `AstNode`
This commit is contained in:
Aleksey Kladov 2020-03-12 15:40:53 +01:00 committed by GitHub
commit afd64ef4f7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 648 additions and 1 deletions

View file

@ -30,7 +30,7 @@ pub use self::{
/// conversion itself has zero runtime cost: ast and syntax nodes have exactly
/// the same representation: a pointer to the tree root and a pointer to the
/// node itself.
pub trait AstNode {
pub trait AstNode: std::fmt::Display {
fn can_cast(kind: SyntaxKind) -> bool
where
Self: Sized;

File diff suppressed because it is too large Load diff

View file

@ -68,6 +68,12 @@ fn generate_ast(grammar: AstSrc<'_>) -> Result<String> {
pub(crate) syntax: SyntaxNode,
}
impl std::fmt::Display for #name {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
std::fmt::Display::fmt(self.syntax(), f)
}
}
impl AstNode for #name {
fn can_cast(kind: SyntaxKind) -> bool {
match kind {
@ -114,6 +120,12 @@ fn generate_ast(grammar: AstSrc<'_>) -> Result<String> {
}
)*
impl std::fmt::Display for #name {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
std::fmt::Display::fmt(self.syntax(), f)
}
}
impl AstNode for #name {
fn can_cast(kind: SyntaxKind) -> bool {
match kind {