aboutsummaryrefslogtreecommitdiff
path: root/crates/syntax/src/ast/node_ext.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/syntax/src/ast/node_ext.rs')
-rw-r--r--crates/syntax/src/ast/node_ext.rs28
1 files changed, 13 insertions, 15 deletions
diff --git a/crates/syntax/src/ast/node_ext.rs b/crates/syntax/src/ast/node_ext.rs
index 01f580a40..bdf907a21 100644
--- a/crates/syntax/src/ast/node_ext.rs
+++ b/crates/syntax/src/ast/node_ext.rs
@@ -58,10 +58,7 @@ impl From<ast::MacroDef> for Macro {
58 58
59impl AstNode for Macro { 59impl AstNode for Macro {
60 fn can_cast(kind: SyntaxKind) -> bool { 60 fn can_cast(kind: SyntaxKind) -> bool {
61 match kind { 61 matches!(kind, SyntaxKind::MACRO_RULES | SyntaxKind::MACRO_DEF)
62 SyntaxKind::MACRO_RULES | SyntaxKind::MACRO_DEF => true,
63 _ => false,
64 }
65 } 62 }
66 fn cast(syntax: SyntaxNode) -> Option<Self> { 63 fn cast(syntax: SyntaxNode) -> Option<Self> {
67 let res = match syntax.kind() { 64 let res = match syntax.kind() {
@@ -380,6 +377,15 @@ impl fmt::Display for NameOrNameRef {
380 } 377 }
381} 378}
382 379
380impl NameOrNameRef {
381 pub fn text(&self) -> &str {
382 match self {
383 NameOrNameRef::Name(name) => name.text(),
384 NameOrNameRef::NameRef(name_ref) => name_ref.text(),
385 }
386 }
387}
388
383impl ast::RecordPatField { 389impl ast::RecordPatField {
384 pub fn for_field_name_ref(field_name: &ast::NameRef) -> Option<ast::RecordPatField> { 390 pub fn for_field_name_ref(field_name: &ast::NameRef) -> Option<ast::RecordPatField> {
385 let candidate = field_name.syntax().parent().and_then(ast::RecordPatField::cast)?; 391 let candidate = field_name.syntax().parent().and_then(ast::RecordPatField::cast)?;
@@ -453,10 +459,8 @@ impl ast::FieldExpr {
453 pub fn field_access(&self) -> Option<FieldKind> { 459 pub fn field_access(&self) -> Option<FieldKind> {
454 if let Some(nr) = self.name_ref() { 460 if let Some(nr) = self.name_ref() {
455 Some(FieldKind::Name(nr)) 461 Some(FieldKind::Name(nr))
456 } else if let Some(tok) = self.index_token() {
457 Some(FieldKind::Index(tok))
458 } else { 462 } else {
459 None 463 self.index_token().map(FieldKind::Index)
460 } 464 }
461 } 465 }
462} 466}
@@ -473,16 +477,10 @@ impl ast::SlicePat {
473 let prefix = args 477 let prefix = args
474 .peeking_take_while(|p| match p { 478 .peeking_take_while(|p| match p {
475 ast::Pat::RestPat(_) => false, 479 ast::Pat::RestPat(_) => false,
476 ast::Pat::IdentPat(bp) => match bp.pat() { 480 ast::Pat::IdentPat(bp) => !matches!(bp.pat(), Some(ast::Pat::RestPat(_))),
477 Some(ast::Pat::RestPat(_)) => false,
478 _ => true,
479 },
480 ast::Pat::RefPat(rp) => match rp.pat() { 481 ast::Pat::RefPat(rp) => match rp.pat() {
481 Some(ast::Pat::RestPat(_)) => false, 482 Some(ast::Pat::RestPat(_)) => false,
482 Some(ast::Pat::IdentPat(bp)) => match bp.pat() { 483 Some(ast::Pat::IdentPat(bp)) => !matches!(bp.pat(), Some(ast::Pat::RestPat(_))),
483 Some(ast::Pat::RestPat(_)) => false,
484 _ => true,
485 },
486 _ => true, 484 _ => true,
487 }, 485 },
488 _ => true, 486 _ => true,