diff options
Diffstat (limited to 'crates/ra_syntax/src/ast/generated.rs.tera')
-rw-r--r-- | crates/ra_syntax/src/ast/generated.rs.tera | 51 |
1 files changed, 15 insertions, 36 deletions
diff --git a/crates/ra_syntax/src/ast/generated.rs.tera b/crates/ra_syntax/src/ast/generated.rs.tera index c8a13fc5f..f3365c560 100644 --- a/crates/ra_syntax/src/ast/generated.rs.tera +++ b/crates/ra_syntax/src/ast/generated.rs.tera | |||
@@ -11,94 +11,73 @@ the below applies to the result of this template | |||
11 | 11 | ||
12 | #![cfg_attr(rustfmt, rustfmt_skip)] | 12 | #![cfg_attr(rustfmt, rustfmt_skip)] |
13 | 13 | ||
14 | use rowan::TransparentNewType; | ||
15 | |||
16 | use crate::{ | 14 | use crate::{ |
17 | SyntaxNode, SyntaxKind::*, | 15 | SyntaxNode, SyntaxKind::*, |
18 | syntax_node::{TreeArc}, | ||
19 | ast::{self, AstNode}, | 16 | ast::{self, AstNode}, |
20 | }; | 17 | }; |
21 | {% for node, methods in ast %} | 18 | {% for node, methods in ast %} |
22 | // {{ node }} | 19 | // {{ node }} |
23 | 20 | ||
24 | {%- if methods.enum %} | 21 | {%- if methods.enum %} |
25 | #[derive(Debug, PartialEq, Eq, Hash)] | 22 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] |
26 | #[repr(transparent)] | ||
27 | pub struct {{ node }} { | 23 | pub struct {{ node }} { |
28 | pub(crate) syntax: SyntaxNode, | 24 | pub(crate) syntax: SyntaxNode, |
29 | } | 25 | } |
30 | unsafe impl TransparentNewType for {{ node }} { | ||
31 | type Repr = rowan::SyntaxNode; | ||
32 | } | ||
33 | 26 | ||
34 | #[derive(Debug, Clone, Copy, PartialEq, Eq)] | 27 | #[derive(Debug, Clone, PartialEq, Eq)] |
35 | pub enum {{ node }}Kind<'a> { | 28 | pub enum {{ node }}Kind { |
36 | {%- for kind in methods.enum %} | 29 | {%- for kind in methods.enum %} |
37 | {{ kind }}(&'a {{ kind }}), | 30 | {{ kind }}({{ kind }}), |
38 | {%- endfor %} | 31 | {%- endfor %} |
39 | } | 32 | } |
40 | 33 | ||
41 | {%- for kind in methods.enum %} | 34 | {%- for kind in methods.enum %} |
42 | impl<'a> From<&'a {{ kind }}> for &'a {{ node }} { | 35 | impl From<{{ kind }}> for {{ node }} { |
43 | fn from(n: &'a {{ kind }}) -> &'a {{ node }} { | 36 | fn from(n: {{ kind }}) -> {{ node }} { |
44 | {{ node }}::cast(&n.syntax).unwrap() | 37 | {{ node }}::cast(n.syntax).unwrap() |
45 | } | 38 | } |
46 | } | 39 | } |
47 | {%- endfor %} | 40 | {%- endfor %} |
48 | 41 | ||
49 | 42 | ||
50 | impl AstNode for {{ node }} { | 43 | impl AstNode for {{ node }} { |
51 | fn cast(syntax: &SyntaxNode) -> Option<&Self> { | 44 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
52 | match syntax.kind() { | 45 | match syntax.kind() { |
53 | {%- for kind in methods.enum %} | 46 | {%- for kind in methods.enum %} |
54 | | {{ kind | SCREAM }} | 47 | | {{ kind | SCREAM }} |
55 | {%- endfor %} => Some({{ node }}::from_repr(syntax.into_repr())), | 48 | {%- endfor %} => Some({{ node }} { syntax }), |
56 | _ => None, | 49 | _ => None, |
57 | } | 50 | } |
58 | } | 51 | } |
59 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 52 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
60 | } | 53 | } |
61 | 54 | ||
62 | impl ToOwned for {{ node }} { | ||
63 | type Owned = TreeArc<{{ node }}>; | ||
64 | fn to_owned(&self) -> TreeArc<{{ node }}> { TreeArc::cast(self.syntax.to_owned()) } | ||
65 | } | ||
66 | |||
67 | impl {{ node }} { | 55 | impl {{ node }} { |
68 | pub fn kind(&self) -> {{ node }}Kind { | 56 | pub fn kind(&self) -> {{ node }}Kind { |
69 | match self.syntax.kind() { | 57 | match self.syntax.kind() { |
70 | {%- for kind in methods.enum %} | 58 | {%- for kind in methods.enum %} |
71 | {{ kind | SCREAM }} => {{ node }}Kind::{{ kind }}({{ kind }}::cast(&self.syntax).unwrap()), | 59 | {{ kind | SCREAM }} => {{ node }}Kind::{{ kind }}({{ kind }}::cast(self.syntax.clone()).unwrap()), |
72 | {%- endfor %} | 60 | {%- endfor %} |
73 | _ => unreachable!(), | 61 | _ => unreachable!(), |
74 | } | 62 | } |
75 | } | 63 | } |
76 | } | 64 | } |
77 | {% else %} | 65 | {% else %} |
78 | #[derive(Debug, PartialEq, Eq, Hash)] | 66 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] |
79 | #[repr(transparent)] | ||
80 | pub struct {{ node }} { | 67 | pub struct {{ node }} { |
81 | pub(crate) syntax: SyntaxNode, | 68 | pub(crate) syntax: SyntaxNode, |
82 | } | 69 | } |
83 | unsafe impl TransparentNewType for {{ node }} { | ||
84 | type Repr = rowan::SyntaxNode; | ||
85 | } | ||
86 | 70 | ||
87 | impl AstNode for {{ node }} { | 71 | impl AstNode for {{ node }} { |
88 | fn cast(syntax: &SyntaxNode) -> Option<&Self> { | 72 | fn cast(syntax: SyntaxNode) -> Option<Self> { |
89 | match syntax.kind() { | 73 | match syntax.kind() { |
90 | {{ node | SCREAM }} => Some({{ node }}::from_repr(syntax.into_repr())), | 74 | {{ node | SCREAM }} => Some({{ node }} { syntax }), |
91 | _ => None, | 75 | _ => None, |
92 | } | 76 | } |
93 | } | 77 | } |
94 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 78 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
95 | } | 79 | } |
96 | 80 | ||
97 | impl ToOwned for {{ node }} { | ||
98 | type Owned = TreeArc<{{ node }}>; | ||
99 | fn to_owned(&self) -> TreeArc<{{ node }}> { TreeArc::cast(self.syntax.to_owned()) } | ||
100 | } | ||
101 | |||
102 | {% endif %} | 81 | {% endif %} |
103 | {% if methods.traits -%} | 82 | {% if methods.traits -%} |
104 | 83 | ||
@@ -113,7 +92,7 @@ impl {{ node }} { | |||
113 | {%- for m in methods.collections -%} | 92 | {%- for m in methods.collections -%} |
114 | {%- set method_name = m.0 -%} | 93 | {%- set method_name = m.0 -%} |
115 | {%- set ChildName = m.1 %} | 94 | {%- set ChildName = m.1 %} |
116 | pub fn {{ method_name }}(&self) -> impl Iterator<Item = &{{ ChildName }}> { | 95 | pub fn {{ method_name }}(&self) -> impl Iterator<Item = {{ ChildName }}> { |
117 | super::children(self) | 96 | super::children(self) |
118 | } | 97 | } |
119 | {% endfor -%} | 98 | {% endfor -%} |
@@ -129,7 +108,7 @@ impl {{ node }} { | |||
129 | {%- set method_name = m.0 -%} | 108 | {%- set method_name = m.0 -%} |
130 | {%- set ChildName = m.1 %} | 109 | {%- set ChildName = m.1 %} |
131 | {%- endif %} | 110 | {%- endif %} |
132 | pub fn {{ method_name }}(&self) -> Option<&{{ ChildName }}> { | 111 | pub fn {{ method_name }}(&self) -> Option<{{ ChildName }}> { |
133 | super::child_opt(self) | 112 | super::child_opt(self) |
134 | } | 113 | } |
135 | {% endfor -%} | 114 | {% endfor -%} |