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.rs37
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,