From 5c594bcb48f01bdcf3068f72cefffda337a03533 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 19 Jul 2019 18:22:00 +0300 Subject: cleanup casts --- crates/ra_syntax/src/ast/generated.rs.tera | 56 +++++++++++------------------- 1 file changed, 20 insertions(+), 36 deletions(-) (limited to 'crates/ra_syntax/src/ast/generated.rs.tera') diff --git a/crates/ra_syntax/src/ast/generated.rs.tera b/crates/ra_syntax/src/ast/generated.rs.tera index f3365c560..03b4bf3a1 100644 --- a/crates/ra_syntax/src/ast/generated.rs.tera +++ b/crates/ra_syntax/src/ast/generated.rs.tera @@ -12,18 +12,34 @@ the below applies to the result of this template #![cfg_attr(rustfmt, rustfmt_skip)] use crate::{ - SyntaxNode, SyntaxKind::*, + SyntaxNode, SyntaxKind::{self, *}, ast::{self, AstNode}, }; {% for node, methods in ast %} // {{ node }} - -{%- if methods.enum %} #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct {{ node }} { pub(crate) syntax: SyntaxNode, } +impl AstNode for {{ node }} { + fn can_cast(kind: SyntaxKind) -> bool { + match kind { + {%- if methods.enum %} + {% for kind in methods.enum %} | {{ kind | SCREAM }} {%- endfor -%} + {% else %} + {{ node | SCREAM }} + {%- endif %} => true, + _ => false, + } + } + fn cast(syntax: SyntaxNode) -> Option { + if Self::can_cast(syntax.kind()) { Some({{ node }} { syntax }) } else { None } + } + fn syntax(&self) -> &SyntaxNode { &self.syntax } +} + +{% if methods.enum %} #[derive(Debug, Clone, PartialEq, Eq)] pub enum {{ node }}Kind { {%- for kind in methods.enum %} @@ -33,25 +49,9 @@ pub enum {{ node }}Kind { {%- for kind in methods.enum %} impl From<{{ kind }}> for {{ node }} { - fn from(n: {{ kind }}) -> {{ node }} { - {{ node }}::cast(n.syntax).unwrap() - } + fn from(n: {{ kind }}) -> {{ node }} { {{ node }} { syntax: n.syntax } } } {%- endfor %} - - -impl AstNode for {{ node }} { - fn cast(syntax: SyntaxNode) -> Option { - match syntax.kind() { - {%- for kind in methods.enum %} - | {{ kind | SCREAM }} - {%- endfor %} => Some({{ node }} { syntax }), - _ => None, - } - } - fn syntax(&self) -> &SyntaxNode { &self.syntax } -} - impl {{ node }} { pub fn kind(&self) -> {{ node }}Kind { match self.syntax.kind() { @@ -62,22 +62,6 @@ impl {{ node }} { } } } -{% else %} -#[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct {{ node }} { - pub(crate) syntax: SyntaxNode, -} - -impl AstNode for {{ node }} { - fn cast(syntax: SyntaxNode) -> Option { - match syntax.kind() { - {{ node | SCREAM }} => Some({{ node }} { syntax }), - _ => None, - } - } - fn syntax(&self) -> &SyntaxNode { &self.syntax } -} - {% endif %} {% if methods.traits -%} -- cgit v1.2.3