diff options
Diffstat (limited to 'crates/ra_syntax/src/ast')
-rw-r--r-- | crates/ra_syntax/src/ast/generated.rs | 18 | ||||
-rw-r--r-- | crates/ra_syntax/src/ast/mod.rs | 43 |
2 files changed, 61 insertions, 0 deletions
diff --git a/crates/ra_syntax/src/ast/generated.rs b/crates/ra_syntax/src/ast/generated.rs index f27093291..ef7b5b1a1 100644 --- a/crates/ra_syntax/src/ast/generated.rs +++ b/crates/ra_syntax/src/ast/generated.rs | |||
@@ -231,6 +231,24 @@ impl<'a> AstNode<'a> for CastExpr<'a> { | |||
231 | 231 | ||
232 | impl<'a> CastExpr<'a> {} | 232 | impl<'a> CastExpr<'a> {} |
233 | 233 | ||
234 | // Comment | ||
235 | #[derive(Debug, Clone, Copy)] | ||
236 | pub struct Comment<'a> { | ||
237 | syntax: SyntaxNodeRef<'a>, | ||
238 | } | ||
239 | |||
240 | impl<'a> AstNode<'a> for Comment<'a> { | ||
241 | fn cast(syntax: SyntaxNodeRef<'a>) -> Option<Self> { | ||
242 | match syntax.kind() { | ||
243 | COMMENT => Some(Comment { syntax }), | ||
244 | _ => None, | ||
245 | } | ||
246 | } | ||
247 | fn syntax(self) -> SyntaxNodeRef<'a> { self.syntax } | ||
248 | } | ||
249 | |||
250 | impl<'a> Comment<'a> {} | ||
251 | |||
234 | // Condition | 252 | // Condition |
235 | #[derive(Debug, Clone, Copy)] | 253 | #[derive(Debug, Clone, Copy)] |
236 | pub struct Condition<'a> { | 254 | pub struct Condition<'a> { |
diff --git a/crates/ra_syntax/src/ast/mod.rs b/crates/ra_syntax/src/ast/mod.rs index c1570b868..10dac72e5 100644 --- a/crates/ra_syntax/src/ast/mod.rs +++ b/crates/ra_syntax/src/ast/mod.rs | |||
@@ -99,6 +99,49 @@ impl<'a> Lifetime<'a> { | |||
99 | } | 99 | } |
100 | } | 100 | } |
101 | 101 | ||
102 | impl<'a> Comment<'a> { | ||
103 | pub fn text(&self) -> SmolStr { | ||
104 | self.syntax().leaf_text().unwrap().clone() | ||
105 | } | ||
106 | |||
107 | pub fn flavor(&self) -> CommentFlavor { | ||
108 | let text = self.text(); | ||
109 | if text.starts_with("///") { | ||
110 | CommentFlavor::Doc | ||
111 | } else if text.starts_with("//!") { | ||
112 | CommentFlavor::ModuleDoc | ||
113 | } else if text.starts_with("//") { | ||
114 | CommentFlavor::Line | ||
115 | } else { | ||
116 | CommentFlavor::Multiline | ||
117 | } | ||
118 | } | ||
119 | |||
120 | pub fn prefix(&self) -> &'static str { | ||
121 | self.flavor().prefix() | ||
122 | } | ||
123 | } | ||
124 | |||
125 | #[derive(Debug)] | ||
126 | pub enum CommentFlavor { | ||
127 | Line, | ||
128 | Doc, | ||
129 | ModuleDoc, | ||
130 | Multiline | ||
131 | } | ||
132 | |||
133 | impl CommentFlavor { | ||
134 | pub fn prefix(&self) -> &'static str { | ||
135 | use self::CommentFlavor::*; | ||
136 | match *self { | ||
137 | Line => "//", | ||
138 | Doc => "///", | ||
139 | ModuleDoc => "//!", | ||
140 | Multiline => "/*" | ||
141 | } | ||
142 | } | ||
143 | } | ||
144 | |||
102 | impl<'a> Name<'a> { | 145 | impl<'a> Name<'a> { |
103 | pub fn text(&self) -> SmolStr { | 146 | pub fn text(&self) -> SmolStr { |
104 | let ident = self.syntax().first_child() | 147 | let ident = self.syntax().first_child() |