diff options
Diffstat (limited to 'crates/syntax/src/ast/node_ext.rs')
-rw-r--r-- | crates/syntax/src/ast/node_ext.rs | 28 |
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 | ||
59 | impl AstNode for Macro { | 59 | impl 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 | ||
380 | impl 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 | |||
383 | impl ast::RecordPatField { | 389 | impl 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, |