From a5301e94d5467db8e48ed31c4abd562c79edb841 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 6 Nov 2018 21:52:00 +0300 Subject: Generalize Owned nodes --- crates/ra_syntax/src/ast/generated.rs.tera | 32 +++++++++++++----------------- 1 file changed, 14 insertions(+), 18 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 1321f0def..6e28575b2 100644 --- a/crates/ra_syntax/src/ast/generated.rs.tera +++ b/crates/ra_syntax/src/ast/generated.rs.tera @@ -8,27 +8,12 @@ the below applies to the result of this template use crate::{ ast, SyntaxNode, SyntaxNodeRef, AstNode, + yellow::{TreeRoot, RaTypes, OwnedRoot, RefRoot}, SyntaxKind::*, }; {% for node, methods in ast %} // {{ node }} -#[derive(Debug, Clone)] -pub struct {{ node }}Node(SyntaxNode); - -impl {{ node }}Node { - pub fn ast(&self) -> {{ node }} { - {{ node }}::cast(self.0.borrowed()).unwrap() - } -} - -impl<'a> From<{{ node }}<'a>> for {{ node }}Node { - fn from(ast: {{ node}}<'a>) -> {{ node }}Node { - let syntax = ast.syntax().owned(); - {{ node }}Node(syntax) - } -} - {%- if methods.enum %} #[derive(Debug, Clone, Copy)] pub enum {{ node }}<'a> { @@ -56,9 +41,10 @@ impl<'a> AstNode<'a> for {{ node }}<'a> { } {% else %} #[derive(Debug, Clone, Copy)] -pub struct {{ node }}<'a> { - syntax: SyntaxNodeRef<'a>, +pub struct {{ node }}Node = OwnedRoot> { + syntax: SyntaxNode, } +pub type {{ node }}<'a> = {{ node }}Node>; impl<'a> AstNode<'a> for {{ node }}<'a> { fn cast(syntax: SyntaxNodeRef<'a>) -> Option { @@ -69,6 +55,16 @@ impl<'a> AstNode<'a> for {{ node }}<'a> { } fn syntax(self) -> SyntaxNodeRef<'a> { self.syntax } } + +impl> {{ node }}Node { + pub fn borrowed(&self) -> {{ node }} { + {{ node }}Node { syntax: self.syntax.borrowed() } + } + pub fn owned(&self) -> {{ node }}Node { + {{ node }}Node { syntax: self.syntax.owned() } + } +} + {% endif %} {% if methods.traits -%} {%- for t in methods.traits -%} -- cgit v1.2.3