Skip to content

Commit 4c69950

Browse files
Add BoxPat variant
1 parent 20149b2 commit 4c69950

File tree

3 files changed

+41
-2
lines changed

3 files changed

+41
-2
lines changed

crates/ra_parser/src/syntax_kind/generated.rs

+1
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ pub enum SyntaxKind {
149149
IMPL_TRAIT_TYPE,
150150
DYN_TRAIT_TYPE,
151151
REF_PAT,
152+
BOX_PAT,
152153
BIND_PAT,
153154
PLACEHOLDER_PAT,
154155
PATH_PAT,

crates/ra_syntax/src/ast/generated.rs

+37-2
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,33 @@ impl BlockExpr {
307307
}
308308
}
309309
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
310+
pub struct BoxPat {
311+
pub(crate) syntax: SyntaxNode,
312+
}
313+
impl AstNode for BoxPat {
314+
fn can_cast(kind: SyntaxKind) -> bool {
315+
match kind {
316+
BOX_PAT => true,
317+
_ => false,
318+
}
319+
}
320+
fn cast(syntax: SyntaxNode) -> Option<Self> {
321+
if Self::can_cast(syntax.kind()) {
322+
Some(Self { syntax })
323+
} else {
324+
None
325+
}
326+
}
327+
fn syntax(&self) -> &SyntaxNode {
328+
&self.syntax
329+
}
330+
}
331+
impl BoxPat {
332+
pub fn pat(&self) -> Option<Pat> {
333+
AstChildren::new(&self.syntax).next()
334+
}
335+
}
336+
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
310337
pub struct BreakExpr {
311338
pub(crate) syntax: SyntaxNode,
312339
}
@@ -2063,6 +2090,7 @@ impl ParenType {
20632090
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
20642091
pub enum Pat {
20652092
RefPat(RefPat),
2093+
BoxPat(BoxPat),
20662094
BindPat(BindPat),
20672095
PlaceholderPat(PlaceholderPat),
20682096
PathPat(PathPat),
@@ -2078,6 +2106,11 @@ impl From<RefPat> for Pat {
20782106
Pat::RefPat(node)
20792107
}
20802108
}
2109+
impl From<BoxPat> for Pat {
2110+
fn from(node: BoxPat) -> Pat {
2111+
Pat::BoxPat(node)
2112+
}
2113+
}
20812114
impl From<BindPat> for Pat {
20822115
fn from(node: BindPat) -> Pat {
20832116
Pat::BindPat(node)
@@ -2126,14 +2159,15 @@ impl From<LiteralPat> for Pat {
21262159
impl AstNode for Pat {
21272160
fn can_cast(kind: SyntaxKind) -> bool {
21282161
match kind {
2129-
REF_PAT | BIND_PAT | PLACEHOLDER_PAT | PATH_PAT | RECORD_PAT | TUPLE_STRUCT_PAT
2130-
| TUPLE_PAT | SLICE_PAT | RANGE_PAT | LITERAL_PAT => true,
2162+
REF_PAT | BOX_PAT | BIND_PAT | PLACEHOLDER_PAT | PATH_PAT | RECORD_PAT
2163+
| TUPLE_STRUCT_PAT | TUPLE_PAT | SLICE_PAT | RANGE_PAT | LITERAL_PAT => true,
21312164
_ => false,
21322165
}
21332166
}
21342167
fn cast(syntax: SyntaxNode) -> Option<Self> {
21352168
let res = match syntax.kind() {
21362169
REF_PAT => Pat::RefPat(RefPat { syntax }),
2170+
BOX_PAT => Pat::BoxPat(BoxPat { syntax }),
21372171
BIND_PAT => Pat::BindPat(BindPat { syntax }),
21382172
PLACEHOLDER_PAT => Pat::PlaceholderPat(PlaceholderPat { syntax }),
21392173
PATH_PAT => Pat::PathPat(PathPat { syntax }),
@@ -2150,6 +2184,7 @@ impl AstNode for Pat {
21502184
fn syntax(&self) -> &SyntaxNode {
21512185
match self {
21522186
Pat::RefPat(it) => &it.syntax,
2187+
Pat::BoxPat(it) => &it.syntax,
21532188
Pat::BindPat(it) => &it.syntax,
21542189
Pat::PlaceholderPat(it) => &it.syntax,
21552190
Pat::PathPat(it) => &it.syntax,

crates/ra_syntax/src/grammar.ron

+3
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ Grammar(
158158
"DYN_TRAIT_TYPE",
159159

160160
"REF_PAT",
161+
"BOX_PAT",
161162
"BIND_PAT",
162163
"PLACEHOLDER_PAT",
163164
"PATH_PAT",
@@ -523,6 +524,7 @@ Grammar(
523524
),
524525

525526
"RefPat": ( options: [ "Pat" ]),
527+
"BoxPat": ( options: [ "Pat" ]),
526528
"BindPat": (
527529
options: [ "Pat" ],
528530
traits: ["NameOwner"]
@@ -552,6 +554,7 @@ Grammar(
552554
"Pat": (
553555
enum: [
554556
"RefPat",
557+
"BoxPat",
555558
"BindPat",
556559
"PlaceholderPat",
557560
"PathPat",

0 commit comments

Comments
 (0)