Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/syntax/src/ast/node_ext.rs')
| -rw-r--r-- | crates/syntax/src/ast/node_ext.rs | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/crates/syntax/src/ast/node_ext.rs b/crates/syntax/src/ast/node_ext.rs index 56f94b965e..b9ccd34cff 100644 --- a/crates/syntax/src/ast/node_ext.rs +++ b/crates/syntax/src/ast/node_ext.rs @@ -10,11 +10,12 @@ use parser::SyntaxKind; use rowan::{GreenNodeData, GreenTokenData}; use crate::{ + NodeOrToken, SmolStr, SyntaxElement, SyntaxToken, T, TokenText, ast::{ - self, support, AstNode, AstToken, HasAttrs, HasGenericArgs, HasGenericParams, HasName, - SyntaxNode, + self, AstNode, AstToken, HasAttrs, HasGenericArgs, HasGenericParams, HasName, SyntaxNode, + support, }, - ted, NodeOrToken, SmolStr, SyntaxElement, SyntaxToken, TokenText, T, + ted, }; use super::{GenericParam, RangeItem, RangeOp}; @@ -35,6 +36,16 @@ impl ast::NameRef { pub fn text(&self) -> TokenText<'_> { text_of_first_token(self.syntax()) } + pub fn text_non_mutable(&self) -> &str { + fn first_token(green_ref: &GreenNodeData) -> &GreenTokenData { + green_ref.children().next().and_then(NodeOrToken::into_token).unwrap() + } + + match self.syntax().green() { + Cow::Borrowed(green_ref) => first_token(green_ref).text(), + Cow::Owned(_) => unreachable!(), + } + } pub fn as_tuple_field(&self) -> Option<usize> { self.text().parse().ok() @@ -317,11 +328,7 @@ impl ast::Path { let path_range = self.syntax().text_range(); successors(self.first_segment(), move |p| { p.parent_path().parent_path().and_then(|p| { - if path_range.contains_range(p.syntax().text_range()) { - p.segment() - } else { - None - } + if path_range.contains_range(p.syntax().text_range()) { p.segment() } else { None } }) }) } @@ -506,11 +513,7 @@ impl ast::Union { impl ast::RecordExprField { pub fn for_field_name(field_name: &ast::NameRef) -> Option<ast::RecordExprField> { let candidate = Self::for_name_ref(field_name)?; - if candidate.field_name().as_ref() == Some(field_name) { - Some(candidate) - } else { - None - } + if candidate.field_name().as_ref() == Some(field_name) { Some(candidate) } else { None } } pub fn for_name_ref(name_ref: &ast::NameRef) -> Option<ast::RecordExprField> { @@ -785,11 +788,7 @@ pub enum SelfParamKind { impl ast::SelfParam { pub fn kind(&self) -> SelfParamKind { if self.amp_token().is_some() { - if self.mut_token().is_some() { - SelfParamKind::MutRef - } else { - SelfParamKind::Ref - } + if self.mut_token().is_some() { SelfParamKind::MutRef } else { SelfParamKind::Ref } } else { SelfParamKind::Owned } @@ -1066,7 +1065,7 @@ impl ast::GenericParamList { ast::GenericParam::TypeParam(_) | ast::GenericParam::ConstParam(_) => None, }) } - pub fn type_or_const_params(&self) -> impl Iterator<Item = ast::TypeOrConstParam> { + pub fn type_or_const_params(&self) -> impl Iterator<Item = ast::TypeOrConstParam> + use<> { self.generic_params().filter_map(|param| match param { ast::GenericParam::TypeParam(it) => Some(ast::TypeOrConstParam::Type(it)), ast::GenericParam::LifetimeParam(_) => None, |