mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-27 12:29:21 +00:00
Add BoxPat
variant
This commit is contained in:
parent
fdece911fe
commit
e6f3790106
3 changed files with 41 additions and 2 deletions
|
@ -149,6 +149,7 @@ pub enum SyntaxKind {
|
||||||
IMPL_TRAIT_TYPE,
|
IMPL_TRAIT_TYPE,
|
||||||
DYN_TRAIT_TYPE,
|
DYN_TRAIT_TYPE,
|
||||||
REF_PAT,
|
REF_PAT,
|
||||||
|
BOX_PAT,
|
||||||
BIND_PAT,
|
BIND_PAT,
|
||||||
PLACEHOLDER_PAT,
|
PLACEHOLDER_PAT,
|
||||||
PATH_PAT,
|
PATH_PAT,
|
||||||
|
|
|
@ -307,6 +307,33 @@ impl BlockExpr {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
|
pub struct BoxPat {
|
||||||
|
pub(crate) syntax: SyntaxNode,
|
||||||
|
}
|
||||||
|
impl AstNode for BoxPat {
|
||||||
|
fn can_cast(kind: SyntaxKind) -> bool {
|
||||||
|
match kind {
|
||||||
|
BOX_PAT => true,
|
||||||
|
_ => false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn cast(syntax: SyntaxNode) -> Option<Self> {
|
||||||
|
if Self::can_cast(syntax.kind()) {
|
||||||
|
Some(Self { syntax })
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn syntax(&self) -> &SyntaxNode {
|
||||||
|
&self.syntax
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl BoxPat {
|
||||||
|
pub fn pat(&self) -> Option<Pat> {
|
||||||
|
AstChildren::new(&self.syntax).next()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
pub struct BreakExpr {
|
pub struct BreakExpr {
|
||||||
pub(crate) syntax: SyntaxNode,
|
pub(crate) syntax: SyntaxNode,
|
||||||
}
|
}
|
||||||
|
@ -2063,6 +2090,7 @@ impl ParenType {
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
pub enum Pat {
|
pub enum Pat {
|
||||||
RefPat(RefPat),
|
RefPat(RefPat),
|
||||||
|
BoxPat(BoxPat),
|
||||||
BindPat(BindPat),
|
BindPat(BindPat),
|
||||||
PlaceholderPat(PlaceholderPat),
|
PlaceholderPat(PlaceholderPat),
|
||||||
PathPat(PathPat),
|
PathPat(PathPat),
|
||||||
|
@ -2078,6 +2106,11 @@ impl From<RefPat> for Pat {
|
||||||
Pat::RefPat(node)
|
Pat::RefPat(node)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
impl From<BoxPat> for Pat {
|
||||||
|
fn from(node: BoxPat) -> Pat {
|
||||||
|
Pat::BoxPat(node)
|
||||||
|
}
|
||||||
|
}
|
||||||
impl From<BindPat> for Pat {
|
impl From<BindPat> for Pat {
|
||||||
fn from(node: BindPat) -> Pat {
|
fn from(node: BindPat) -> Pat {
|
||||||
Pat::BindPat(node)
|
Pat::BindPat(node)
|
||||||
|
@ -2126,14 +2159,15 @@ impl From<LiteralPat> for Pat {
|
||||||
impl AstNode for Pat {
|
impl AstNode for Pat {
|
||||||
fn can_cast(kind: SyntaxKind) -> bool {
|
fn can_cast(kind: SyntaxKind) -> bool {
|
||||||
match kind {
|
match kind {
|
||||||
REF_PAT | BIND_PAT | PLACEHOLDER_PAT | PATH_PAT | RECORD_PAT | TUPLE_STRUCT_PAT
|
REF_PAT | BOX_PAT | BIND_PAT | PLACEHOLDER_PAT | PATH_PAT | RECORD_PAT
|
||||||
| TUPLE_PAT | SLICE_PAT | RANGE_PAT | LITERAL_PAT => true,
|
| TUPLE_STRUCT_PAT | TUPLE_PAT | SLICE_PAT | RANGE_PAT | LITERAL_PAT => true,
|
||||||
_ => false,
|
_ => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn cast(syntax: SyntaxNode) -> Option<Self> {
|
fn cast(syntax: SyntaxNode) -> Option<Self> {
|
||||||
let res = match syntax.kind() {
|
let res = match syntax.kind() {
|
||||||
REF_PAT => Pat::RefPat(RefPat { syntax }),
|
REF_PAT => Pat::RefPat(RefPat { syntax }),
|
||||||
|
BOX_PAT => Pat::BoxPat(BoxPat { syntax }),
|
||||||
BIND_PAT => Pat::BindPat(BindPat { syntax }),
|
BIND_PAT => Pat::BindPat(BindPat { syntax }),
|
||||||
PLACEHOLDER_PAT => Pat::PlaceholderPat(PlaceholderPat { syntax }),
|
PLACEHOLDER_PAT => Pat::PlaceholderPat(PlaceholderPat { syntax }),
|
||||||
PATH_PAT => Pat::PathPat(PathPat { syntax }),
|
PATH_PAT => Pat::PathPat(PathPat { syntax }),
|
||||||
|
@ -2150,6 +2184,7 @@ impl AstNode for Pat {
|
||||||
fn syntax(&self) -> &SyntaxNode {
|
fn syntax(&self) -> &SyntaxNode {
|
||||||
match self {
|
match self {
|
||||||
Pat::RefPat(it) => &it.syntax,
|
Pat::RefPat(it) => &it.syntax,
|
||||||
|
Pat::BoxPat(it) => &it.syntax,
|
||||||
Pat::BindPat(it) => &it.syntax,
|
Pat::BindPat(it) => &it.syntax,
|
||||||
Pat::PlaceholderPat(it) => &it.syntax,
|
Pat::PlaceholderPat(it) => &it.syntax,
|
||||||
Pat::PathPat(it) => &it.syntax,
|
Pat::PathPat(it) => &it.syntax,
|
||||||
|
|
|
@ -158,6 +158,7 @@ Grammar(
|
||||||
"DYN_TRAIT_TYPE",
|
"DYN_TRAIT_TYPE",
|
||||||
|
|
||||||
"REF_PAT",
|
"REF_PAT",
|
||||||
|
"BOX_PAT",
|
||||||
"BIND_PAT",
|
"BIND_PAT",
|
||||||
"PLACEHOLDER_PAT",
|
"PLACEHOLDER_PAT",
|
||||||
"PATH_PAT",
|
"PATH_PAT",
|
||||||
|
@ -523,6 +524,7 @@ Grammar(
|
||||||
),
|
),
|
||||||
|
|
||||||
"RefPat": ( options: [ "Pat" ]),
|
"RefPat": ( options: [ "Pat" ]),
|
||||||
|
"BoxPat": ( options: [ "Pat" ]),
|
||||||
"BindPat": (
|
"BindPat": (
|
||||||
options: [ "Pat" ],
|
options: [ "Pat" ],
|
||||||
traits: ["NameOwner"]
|
traits: ["NameOwner"]
|
||||||
|
@ -552,6 +554,7 @@ Grammar(
|
||||||
"Pat": (
|
"Pat": (
|
||||||
enum: [
|
enum: [
|
||||||
"RefPat",
|
"RefPat",
|
||||||
|
"BoxPat",
|
||||||
"BindPat",
|
"BindPat",
|
||||||
"PlaceholderPat",
|
"PlaceholderPat",
|
||||||
"PathPat",
|
"PathPat",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue