diff options
Diffstat (limited to 'crates/syntax/src/ast/node_ext.rs')
-rw-r--r-- | crates/syntax/src/ast/node_ext.rs | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/crates/syntax/src/ast/node_ext.rs b/crates/syntax/src/ast/node_ext.rs index a60bc5ad9..3d27d2c1a 100644 --- a/crates/syntax/src/ast/node_ext.rs +++ b/crates/syntax/src/ast/node_ext.rs | |||
@@ -144,19 +144,20 @@ impl AttrKind { | |||
144 | 144 | ||
145 | impl ast::Attr { | 145 | impl ast::Attr { |
146 | pub fn as_simple_atom(&self) -> Option<SmolStr> { | 146 | pub fn as_simple_atom(&self) -> Option<SmolStr> { |
147 | if self.eq_token().is_some() || self.token_tree().is_some() { | 147 | let meta = self.meta()?; |
148 | if meta.eq_token().is_some() || meta.token_tree().is_some() { | ||
148 | return None; | 149 | return None; |
149 | } | 150 | } |
150 | self.simple_name() | 151 | self.simple_name() |
151 | } | 152 | } |
152 | 153 | ||
153 | pub fn as_simple_call(&self) -> Option<(SmolStr, ast::TokenTree)> { | 154 | pub fn as_simple_call(&self) -> Option<(SmolStr, ast::TokenTree)> { |
154 | let tt = self.token_tree()?; | 155 | let tt = self.meta()?.token_tree()?; |
155 | Some((self.simple_name()?, tt)) | 156 | Some((self.simple_name()?, tt)) |
156 | } | 157 | } |
157 | 158 | ||
158 | pub fn simple_name(&self) -> Option<SmolStr> { | 159 | pub fn simple_name(&self) -> Option<SmolStr> { |
159 | let path = self.path()?; | 160 | let path = self.meta()?.path()?; |
160 | match (path.segment(), path.qualifier()) { | 161 | match (path.segment(), path.qualifier()) { |
161 | (Some(segment), None) => Some(segment.syntax().first_token()?.text().into()), | 162 | (Some(segment), None) => Some(segment.syntax().first_token()?.text().into()), |
162 | _ => None, | 163 | _ => None, |
@@ -174,6 +175,18 @@ impl ast::Attr { | |||
174 | _ => AttrKind::Outer, | 175 | _ => AttrKind::Outer, |
175 | } | 176 | } |
176 | } | 177 | } |
178 | |||
179 | pub fn path(&self) -> Option<ast::Path> { | ||
180 | self.meta()?.path() | ||
181 | } | ||
182 | |||
183 | pub fn expr(&self) -> Option<ast::Expr> { | ||
184 | self.meta()?.expr() | ||
185 | } | ||
186 | |||
187 | pub fn token_tree(&self) -> Option<ast::TokenTree> { | ||
188 | self.meta()?.token_tree() | ||
189 | } | ||
177 | } | 190 | } |
178 | 191 | ||
179 | #[derive(Debug, Clone, PartialEq, Eq)] | 192 | #[derive(Debug, Clone, PartialEq, Eq)] |