aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/ra_hir_def/src/body/lower.rs6
-rw-r--r--crates/ra_ide/src/syntax_highlighting.rs2
-rw-r--r--crates/ra_parser/src/grammar/patterns.rs4
-rw-r--r--crates/ra_parser/src/syntax_kind/generated.rs2
-rw-r--r--crates/ra_syntax/src/ast/generated/nodes.rs22
-rw-r--r--crates/ra_syntax/src/ast/node_ext.rs8
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0008_path_part.rast2
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0024_slice_pat.rast2
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0026_tuple_pat_fields.rast2
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0111_tuple_pat.rast4
-rw-r--r--crates/ra_syntax/test_data/parser/inline/ok/0144_dot_dot_pat.rast48
-rw-r--r--crates/ra_syntax/test_data/parser/ok/0035_weird_exprs.rast2
-rw-r--r--xtask/src/ast_src.rs2
-rw-r--r--xtask/src/codegen/rust.ungram4
14 files changed, 55 insertions, 55 deletions
diff --git a/crates/ra_hir_def/src/body/lower.rs b/crates/ra_hir_def/src/body/lower.rs
index 3f210547e..0d0365370 100644
--- a/crates/ra_hir_def/src/body/lower.rs
+++ b/crates/ra_hir_def/src/body/lower.rs
@@ -826,7 +826,7 @@ impl ExprCollector<'_> {
826 Pat::Missing 826 Pat::Missing
827 } 827 }
828 } 828 }
829 ast::Pat::DotDotPat(_) => { 829 ast::Pat::RestPat(_) => {
830 // `DotDotPat` requires special handling and should not be mapped 830 // `DotDotPat` requires special handling and should not be mapped
831 // to a Pat. Here we are using `Pat::Missing` as a fallback for 831 // to a Pat. Here we are using `Pat::Missing` as a fallback for
832 // when `DotDotPat` is mapped to `Pat`, which can easily happen 832 // when `DotDotPat` is mapped to `Pat`, which can easily happen
@@ -853,10 +853,10 @@ impl ExprCollector<'_> {
853 fn collect_tuple_pat(&mut self, args: AstChildren<ast::Pat>) -> (Vec<PatId>, Option<usize>) { 853 fn collect_tuple_pat(&mut self, args: AstChildren<ast::Pat>) -> (Vec<PatId>, Option<usize>) {
854 // Find the location of the `..`, if there is one. Note that we do not 854 // Find the location of the `..`, if there is one. Note that we do not
855 // consider the possiblity of there being multiple `..` here. 855 // consider the possiblity of there being multiple `..` here.
856 let ellipsis = args.clone().position(|p| matches!(p, ast::Pat::DotDotPat(_))); 856 let ellipsis = args.clone().position(|p| matches!(p, ast::Pat::RestPat(_)));
857 // We want to skip the `..` pattern here, since we account for it above. 857 // We want to skip the `..` pattern here, since we account for it above.
858 let args = args 858 let args = args
859 .filter(|p| !matches!(p, ast::Pat::DotDotPat(_))) 859 .filter(|p| !matches!(p, ast::Pat::RestPat(_)))
860 .map(|p| self.collect_pat(p)) 860 .map(|p| self.collect_pat(p))
861 .collect(); 861 .collect();
862 862
diff --git a/crates/ra_ide/src/syntax_highlighting.rs b/crates/ra_ide/src/syntax_highlighting.rs
index 027fdecd0..32f34ef10 100644
--- a/crates/ra_ide/src/syntax_highlighting.rs
+++ b/crates/ra_ide/src/syntax_highlighting.rs
@@ -577,7 +577,7 @@ fn highlight_element(
577 _ if element.parent().and_then(ast::RangePat::cast).is_some() => { 577 _ if element.parent().and_then(ast::RangePat::cast).is_some() => {
578 HighlightTag::Operator.into() 578 HighlightTag::Operator.into()
579 } 579 }
580 _ if element.parent().and_then(ast::DotDotPat::cast).is_some() => { 580 _ if element.parent().and_then(ast::RestPat::cast).is_some() => {
581 HighlightTag::Operator.into() 581 HighlightTag::Operator.into()
582 } 582 }
583 _ if element.parent().and_then(ast::Attr::cast).is_some() => { 583 _ if element.parent().and_then(ast::Attr::cast).is_some() => {
diff --git a/crates/ra_parser/src/grammar/patterns.rs b/crates/ra_parser/src/grammar/patterns.rs
index 623e8d6d4..716bdc978 100644
--- a/crates/ra_parser/src/grammar/patterns.rs
+++ b/crates/ra_parser/src/grammar/patterns.rs
@@ -192,7 +192,7 @@ fn record_field_pat_list(p: &mut Parser) {
192 p.bump(T!['{']); 192 p.bump(T!['{']);
193 while !p.at(EOF) && !p.at(T!['}']) { 193 while !p.at(EOF) && !p.at(T!['}']) {
194 match p.current() { 194 match p.current() {
195 // A trailing `..` is *not* treated as a DOT_DOT_PAT. 195 // A trailing `..` is *not* treated as a REST_PAT.
196 T![.] if p.at(T![..]) => p.bump(T![..]), 196 T![.] if p.at(T![..]) => p.bump(T![..]),
197 T!['{'] => error_block(p, "expected ident"), 197 T!['{'] => error_block(p, "expected ident"),
198 198
@@ -267,7 +267,7 @@ fn dot_dot_pat(p: &mut Parser) -> CompletedMarker {
267 assert!(p.at(T![..])); 267 assert!(p.at(T![..]));
268 let m = p.start(); 268 let m = p.start();
269 p.bump(T![..]); 269 p.bump(T![..]);
270 m.complete(p, DOT_DOT_PAT) 270 m.complete(p, REST_PAT)
271} 271}
272 272
273// test ref_pat 273// test ref_pat
diff --git a/crates/ra_parser/src/syntax_kind/generated.rs b/crates/ra_parser/src/syntax_kind/generated.rs
index b5dda25a9..b18653aa5 100644
--- a/crates/ra_parser/src/syntax_kind/generated.rs
+++ b/crates/ra_parser/src/syntax_kind/generated.rs
@@ -158,7 +158,7 @@ pub enum SyntaxKind {
158 BOX_PAT, 158 BOX_PAT,
159 IDENT_PAT, 159 IDENT_PAT,
160 WILDCARD_PAT, 160 WILDCARD_PAT,
161 DOT_DOT_PAT, 161 REST_PAT,
162 PATH_PAT, 162 PATH_PAT,
163 RECORD_PAT, 163 RECORD_PAT,
164 RECORD_PAT_FIELD_LIST, 164 RECORD_PAT_FIELD_LIST,
diff --git a/crates/ra_syntax/src/ast/generated/nodes.rs b/crates/ra_syntax/src/ast/generated/nodes.rs
index 01aefb60d..6cb637b1d 100644
--- a/crates/ra_syntax/src/ast/generated/nodes.rs
+++ b/crates/ra_syntax/src/ast/generated/nodes.rs
@@ -1130,10 +1130,10 @@ impl BoxPat {
1130 pub fn pat(&self) -> Option<Pat> { support::child(&self.syntax) } 1130 pub fn pat(&self) -> Option<Pat> { support::child(&self.syntax) }
1131} 1131}
1132#[derive(Debug, Clone, PartialEq, Eq, Hash)] 1132#[derive(Debug, Clone, PartialEq, Eq, Hash)]
1133pub struct DotDotPat { 1133pub struct RestPat {
1134 pub(crate) syntax: SyntaxNode, 1134 pub(crate) syntax: SyntaxNode,
1135} 1135}
1136impl DotDotPat { 1136impl RestPat {
1137 pub fn dotdot_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![..]) } 1137 pub fn dotdot_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![..]) }
1138} 1138}
1139#[derive(Debug, Clone, PartialEq, Eq, Hash)] 1139#[derive(Debug, Clone, PartialEq, Eq, Hash)]
@@ -1336,7 +1336,7 @@ pub enum Stmt {
1336pub enum Pat { 1336pub enum Pat {
1337 IdentPat(IdentPat), 1337 IdentPat(IdentPat),
1338 BoxPat(BoxPat), 1338 BoxPat(BoxPat),
1339 DotDotPat(DotDotPat), 1339 RestPat(RestPat),
1340 LiteralPat(LiteralPat), 1340 LiteralPat(LiteralPat),
1341 MacroPat(MacroPat), 1341 MacroPat(MacroPat),
1342 OrPat(OrPat), 1342 OrPat(OrPat),
@@ -2577,8 +2577,8 @@ impl AstNode for BoxPat {
2577 } 2577 }
2578 fn syntax(&self) -> &SyntaxNode { &self.syntax } 2578 fn syntax(&self) -> &SyntaxNode { &self.syntax }
2579} 2579}
2580impl AstNode for DotDotPat { 2580impl AstNode for RestPat {
2581 fn can_cast(kind: SyntaxKind) -> bool { kind == DOT_DOT_PAT } 2581 fn can_cast(kind: SyntaxKind) -> bool { kind == REST_PAT }
2582 fn cast(syntax: SyntaxNode) -> Option<Self> { 2582 fn cast(syntax: SyntaxNode) -> Option<Self> {
2583 if Self::can_cast(syntax.kind()) { 2583 if Self::can_cast(syntax.kind()) {
2584 Some(Self { syntax }) 2584 Some(Self { syntax })
@@ -3141,8 +3141,8 @@ impl From<IdentPat> for Pat {
3141impl From<BoxPat> for Pat { 3141impl From<BoxPat> for Pat {
3142 fn from(node: BoxPat) -> Pat { Pat::BoxPat(node) } 3142 fn from(node: BoxPat) -> Pat { Pat::BoxPat(node) }
3143} 3143}
3144impl From<DotDotPat> for Pat { 3144impl From<RestPat> for Pat {
3145 fn from(node: DotDotPat) -> Pat { Pat::DotDotPat(node) } 3145 fn from(node: RestPat) -> Pat { Pat::RestPat(node) }
3146} 3146}
3147impl From<LiteralPat> for Pat { 3147impl From<LiteralPat> for Pat {
3148 fn from(node: LiteralPat) -> Pat { Pat::LiteralPat(node) } 3148 fn from(node: LiteralPat) -> Pat { Pat::LiteralPat(node) }
@@ -3183,7 +3183,7 @@ impl From<TupleStructPat> for Pat {
3183impl AstNode for Pat { 3183impl AstNode for Pat {
3184 fn can_cast(kind: SyntaxKind) -> bool { 3184 fn can_cast(kind: SyntaxKind) -> bool {
3185 match kind { 3185 match kind {
3186 IDENT_PAT | BOX_PAT | DOT_DOT_PAT | LITERAL_PAT | MACRO_PAT | OR_PAT | PAREN_PAT 3186 IDENT_PAT | BOX_PAT | REST_PAT | LITERAL_PAT | MACRO_PAT | OR_PAT | PAREN_PAT
3187 | PATH_PAT | WILDCARD_PAT | RANGE_PAT | RECORD_PAT | REF_PAT | SLICE_PAT 3187 | PATH_PAT | WILDCARD_PAT | RANGE_PAT | RECORD_PAT | REF_PAT | SLICE_PAT
3188 | TUPLE_PAT | TUPLE_STRUCT_PAT => true, 3188 | TUPLE_PAT | TUPLE_STRUCT_PAT => true,
3189 _ => false, 3189 _ => false,
@@ -3193,7 +3193,7 @@ impl AstNode for Pat {
3193 let res = match syntax.kind() { 3193 let res = match syntax.kind() {
3194 IDENT_PAT => Pat::IdentPat(IdentPat { syntax }), 3194 IDENT_PAT => Pat::IdentPat(IdentPat { syntax }),
3195 BOX_PAT => Pat::BoxPat(BoxPat { syntax }), 3195 BOX_PAT => Pat::BoxPat(BoxPat { syntax }),
3196 DOT_DOT_PAT => Pat::DotDotPat(DotDotPat { syntax }), 3196 REST_PAT => Pat::RestPat(RestPat { syntax }),
3197 LITERAL_PAT => Pat::LiteralPat(LiteralPat { syntax }), 3197 LITERAL_PAT => Pat::LiteralPat(LiteralPat { syntax }),
3198 MACRO_PAT => Pat::MacroPat(MacroPat { syntax }), 3198 MACRO_PAT => Pat::MacroPat(MacroPat { syntax }),
3199 OR_PAT => Pat::OrPat(OrPat { syntax }), 3199 OR_PAT => Pat::OrPat(OrPat { syntax }),
@@ -3214,7 +3214,7 @@ impl AstNode for Pat {
3214 match self { 3214 match self {
3215 Pat::IdentPat(it) => &it.syntax, 3215 Pat::IdentPat(it) => &it.syntax,
3216 Pat::BoxPat(it) => &it.syntax, 3216 Pat::BoxPat(it) => &it.syntax,
3217 Pat::DotDotPat(it) => &it.syntax, 3217 Pat::RestPat(it) => &it.syntax,
3218 Pat::LiteralPat(it) => &it.syntax, 3218 Pat::LiteralPat(it) => &it.syntax,
3219 Pat::MacroPat(it) => &it.syntax, 3219 Pat::MacroPat(it) => &it.syntax,
3220 Pat::OrPat(it) => &it.syntax, 3220 Pat::OrPat(it) => &it.syntax,
@@ -3990,7 +3990,7 @@ impl std::fmt::Display for BoxPat {
3990 std::fmt::Display::fmt(self.syntax(), f) 3990 std::fmt::Display::fmt(self.syntax(), f)
3991 } 3991 }
3992} 3992}
3993impl std::fmt::Display for DotDotPat { 3993impl std::fmt::Display for RestPat {
3994 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { 3994 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3995 std::fmt::Display::fmt(self.syntax(), f) 3995 std::fmt::Display::fmt(self.syntax(), f)
3996 } 3996 }
diff --git a/crates/ra_syntax/src/ast/node_ext.rs b/crates/ra_syntax/src/ast/node_ext.rs
index af5a93d1d..2ffb83819 100644
--- a/crates/ra_syntax/src/ast/node_ext.rs
+++ b/crates/ra_syntax/src/ast/node_ext.rs
@@ -293,15 +293,15 @@ impl ast::SlicePat {
293 let mut args = self.args().peekable(); 293 let mut args = self.args().peekable();
294 let prefix = args 294 let prefix = args
295 .peeking_take_while(|p| match p { 295 .peeking_take_while(|p| match p {
296 ast::Pat::DotDotPat(_) => false, 296 ast::Pat::RestPat(_) => false,
297 ast::Pat::IdentPat(bp) => match bp.pat() { 297 ast::Pat::IdentPat(bp) => match bp.pat() {
298 Some(ast::Pat::DotDotPat(_)) => false, 298 Some(ast::Pat::RestPat(_)) => false,
299 _ => true, 299 _ => true,
300 }, 300 },
301 ast::Pat::RefPat(rp) => match rp.pat() { 301 ast::Pat::RefPat(rp) => match rp.pat() {
302 Some(ast::Pat::DotDotPat(_)) => false, 302 Some(ast::Pat::RestPat(_)) => false,
303 Some(ast::Pat::IdentPat(bp)) => match bp.pat() { 303 Some(ast::Pat::IdentPat(bp)) => match bp.pat() {
304 Some(ast::Pat::DotDotPat(_)) => false, 304 Some(ast::Pat::RestPat(_)) => false,
305 _ => true, 305 _ => true,
306 }, 306 },
307 _ => true, 307 _ => true,
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0008_path_part.rast b/crates/ra_syntax/test_data/parser/inline/ok/0008_path_part.rast
index d848f3c88..7d2f7eab0 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0008_path_part.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0008_path_part.rast
@@ -81,7 +81,7 @@ SOURCE_FILE@0..103
81 NAME_REF@87..90 81 NAME_REF@87..90
82 IDENT@87..90 "Bar" 82 IDENT@87..90 "Bar"
83 L_PAREN@90..91 "(" 83 L_PAREN@90..91 "("
84 DOT_DOT_PAT@91..93 84 REST_PAT@91..93
85 DOT2@91..93 ".." 85 DOT2@91..93 ".."
86 R_PAREN@93..94 ")" 86 R_PAREN@93..94 ")"
87 WHITESPACE@94..95 " " 87 WHITESPACE@94..95 " "
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0024_slice_pat.rast b/crates/ra_syntax/test_data/parser/inline/ok/0024_slice_pat.rast
index 66f906fae..2dbce34b6 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0024_slice_pat.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0024_slice_pat.rast
@@ -26,7 +26,7 @@ SOURCE_FILE@0..39
26 IDENT@24..25 "b" 26 IDENT@24..25 "b"
27 COMMA@25..26 "," 27 COMMA@25..26 ","
28 WHITESPACE@26..27 " " 28 WHITESPACE@26..27 " "
29 DOT_DOT_PAT@27..29 29 REST_PAT@27..29
30 DOT2@27..29 ".." 30 DOT2@27..29 ".."
31 R_BRACK@29..30 "]" 31 R_BRACK@29..30 "]"
32 WHITESPACE@30..31 " " 32 WHITESPACE@30..31 " "
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0026_tuple_pat_fields.rast b/crates/ra_syntax/test_data/parser/inline/ok/0026_tuple_pat_fields.rast
index e049e4df7..467a30134 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0026_tuple_pat_fields.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0026_tuple_pat_fields.rast
@@ -83,7 +83,7 @@ SOURCE_FILE@0..97
83 UNDERSCORE@78..79 "_" 83 UNDERSCORE@78..79 "_"
84 COMMA@79..80 "," 84 COMMA@79..80 ","
85 WHITESPACE@80..81 " " 85 WHITESPACE@80..81 " "
86 DOT_DOT_PAT@81..83 86 REST_PAT@81..83
87 DOT2@81..83 ".." 87 DOT2@81..83 ".."
88 WHITESPACE@83..84 " " 88 WHITESPACE@83..84 " "
89 COMMA@84..85 "," 89 COMMA@84..85 ","
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0111_tuple_pat.rast b/crates/ra_syntax/test_data/parser/inline/ok/0111_tuple_pat.rast
index f94a2ebde..b82ed0230 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0111_tuple_pat.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0111_tuple_pat.rast
@@ -26,7 +26,7 @@ SOURCE_FILE@0..94
26 IDENT@24..25 "b" 26 IDENT@24..25 "b"
27 COMMA@25..26 "," 27 COMMA@25..26 ","
28 WHITESPACE@26..27 " " 28 WHITESPACE@26..27 " "
29 DOT_DOT_PAT@27..29 29 REST_PAT@27..29
30 DOT2@27..29 ".." 30 DOT2@27..29 ".."
31 R_PAREN@29..30 ")" 31 R_PAREN@29..30 ")"
32 WHITESPACE@30..31 " " 32 WHITESPACE@30..31 " "
@@ -60,7 +60,7 @@ SOURCE_FILE@0..94
60 WHITESPACE@63..64 " " 60 WHITESPACE@63..64 " "
61 TUPLE_PAT@64..68 61 TUPLE_PAT@64..68
62 L_PAREN@64..65 "(" 62 L_PAREN@64..65 "("
63 DOT_DOT_PAT@65..67 63 REST_PAT@65..67
64 DOT2@65..67 ".." 64 DOT2@65..67 ".."
65 R_PAREN@67..68 ")" 65 R_PAREN@67..68 ")"
66 WHITESPACE@68..69 " " 66 WHITESPACE@68..69 " "
diff --git a/crates/ra_syntax/test_data/parser/inline/ok/0144_dot_dot_pat.rast b/crates/ra_syntax/test_data/parser/inline/ok/0144_dot_dot_pat.rast
index 8fb0db031..8a5bde0b6 100644
--- a/crates/ra_syntax/test_data/parser/inline/ok/0144_dot_dot_pat.rast
+++ b/crates/ra_syntax/test_data/parser/inline/ok/0144_dot_dot_pat.rast
@@ -14,7 +14,7 @@ SOURCE_FILE@0..555
14 LET_STMT@16..28 14 LET_STMT@16..28
15 LET_KW@16..19 "let" 15 LET_KW@16..19 "let"
16 WHITESPACE@19..20 " " 16 WHITESPACE@19..20 " "
17 DOT_DOT_PAT@20..22 17 REST_PAT@20..22
18 DOT2@20..22 ".." 18 DOT2@20..22 ".."
19 WHITESPACE@22..23 " " 19 WHITESPACE@22..23 " "
20 EQ@23..24 "=" 20 EQ@23..24 "="
@@ -40,7 +40,7 @@ SOURCE_FILE@0..555
40 IDENT@66..67 "a" 40 IDENT@66..67 "a"
41 COMMA@67..68 "," 41 COMMA@67..68 ","
42 WHITESPACE@68..69 " " 42 WHITESPACE@68..69 " "
43 DOT_DOT_PAT@69..71 43 REST_PAT@69..71
44 DOT2@69..71 ".." 44 DOT2@69..71 ".."
45 R_PAREN@71..72 ")" 45 R_PAREN@71..72 ")"
46 WHITESPACE@72..73 " " 46 WHITESPACE@72..73 " "
@@ -61,7 +61,7 @@ SOURCE_FILE@0..555
61 IDENT@88..89 "a" 61 IDENT@88..89 "a"
62 COMMA@89..90 "," 62 COMMA@89..90 ","
63 WHITESPACE@90..91 " " 63 WHITESPACE@90..91 " "
64 DOT_DOT_PAT@91..93 64 REST_PAT@91..93
65 DOT2@91..93 ".." 65 DOT2@91..93 ".."
66 COMMA@93..94 "," 66 COMMA@93..94 ","
67 R_PAREN@94..95 ")" 67 R_PAREN@94..95 ")"
@@ -87,7 +87,7 @@ SOURCE_FILE@0..555
87 IDENT@116..117 "a" 87 IDENT@116..117 "a"
88 COMMA@117..118 "," 88 COMMA@117..118 ","
89 WHITESPACE@118..119 " " 89 WHITESPACE@118..119 " "
90 DOT_DOT_PAT@119..121 90 REST_PAT@119..121
91 DOT2@119..121 ".." 91 DOT2@119..121 ".."
92 R_PAREN@121..122 ")" 92 R_PAREN@121..122 ")"
93 WHITESPACE@122..123 " " 93 WHITESPACE@122..123 " "
@@ -112,7 +112,7 @@ SOURCE_FILE@0..555
112 IDENT@143..144 "a" 112 IDENT@143..144 "a"
113 COMMA@144..145 "," 113 COMMA@144..145 ","
114 WHITESPACE@145..146 " " 114 WHITESPACE@145..146 " "
115 DOT_DOT_PAT@146..148 115 REST_PAT@146..148
116 DOT2@146..148 ".." 116 DOT2@146..148 ".."
117 COMMA@148..149 "," 117 COMMA@148..149 ","
118 R_PAREN@149..150 ")" 118 R_PAREN@149..150 ")"
@@ -129,11 +129,11 @@ SOURCE_FILE@0..555
129 WHITESPACE@164..165 " " 129 WHITESPACE@164..165 " "
130 TUPLE_PAT@165..173 130 TUPLE_PAT@165..173
131 L_PAREN@165..166 "(" 131 L_PAREN@165..166 "("
132 DOT_DOT_PAT@166..168 132 REST_PAT@166..168
133 DOT2@166..168 ".." 133 DOT2@166..168 ".."
134 COMMA@168..169 "," 134 COMMA@168..169 ","
135 WHITESPACE@169..170 " " 135 WHITESPACE@169..170 " "
136 DOT_DOT_PAT@170..172 136 REST_PAT@170..172
137 DOT2@170..172 ".." 137 DOT2@170..172 ".."
138 R_PAREN@172..173 ")" 138 R_PAREN@172..173 ")"
139 WHITESPACE@173..174 " " 139 WHITESPACE@173..174 " "
@@ -153,11 +153,11 @@ SOURCE_FILE@0..555
153 NAME_REF@188..193 153 NAME_REF@188..193
154 IDENT@188..193 "Tuple" 154 IDENT@188..193 "Tuple"
155 L_PAREN@193..194 "(" 155 L_PAREN@193..194 "("
156 DOT_DOT_PAT@194..196 156 REST_PAT@194..196
157 DOT2@194..196 ".." 157 DOT2@194..196 ".."
158 COMMA@196..197 "," 158 COMMA@196..197 ","
159 WHITESPACE@197..198 " " 159 WHITESPACE@197..198 " "
160 DOT_DOT_PAT@198..200 160 REST_PAT@198..200
161 DOT2@198..200 ".." 161 DOT2@198..200 ".."
162 R_PAREN@200..201 ")" 162 R_PAREN@200..201 ")"
163 WHITESPACE@201..202 " " 163 WHITESPACE@201..202 " "
@@ -173,7 +173,7 @@ SOURCE_FILE@0..555
173 WHITESPACE@215..216 " " 173 WHITESPACE@215..216 " "
174 TUPLE_PAT@216..227 174 TUPLE_PAT@216..227
175 L_PAREN@216..217 "(" 175 L_PAREN@216..217 "("
176 DOT_DOT_PAT@217..219 176 REST_PAT@217..219
177 DOT2@217..219 ".." 177 DOT2@217..219 ".."
178 COMMA@219..220 "," 178 COMMA@219..220 ","
179 WHITESPACE@220..221 " " 179 WHITESPACE@220..221 " "
@@ -182,7 +182,7 @@ SOURCE_FILE@0..555
182 IDENT@221..222 "a" 182 IDENT@221..222 "a"
183 COMMA@222..223 "," 183 COMMA@222..223 ","
184 WHITESPACE@223..224 " " 184 WHITESPACE@223..224 " "
185 DOT_DOT_PAT@224..226 185 REST_PAT@224..226
186 DOT2@224..226 ".." 186 DOT2@224..226 ".."
187 R_PAREN@226..227 ")" 187 R_PAREN@226..227 ")"
188 WHITESPACE@227..228 " " 188 WHITESPACE@227..228 " "
@@ -202,7 +202,7 @@ SOURCE_FILE@0..555
202 NAME_REF@242..247 202 NAME_REF@242..247
203 IDENT@242..247 "Tuple" 203 IDENT@242..247 "Tuple"
204 L_PAREN@247..248 "(" 204 L_PAREN@247..248 "("
205 DOT_DOT_PAT@248..250 205 REST_PAT@248..250
206 DOT2@248..250 ".." 206 DOT2@248..250 ".."
207 COMMA@250..251 "," 207 COMMA@250..251 ","
208 WHITESPACE@251..252 " " 208 WHITESPACE@251..252 " "
@@ -211,7 +211,7 @@ SOURCE_FILE@0..555
211 IDENT@252..253 "a" 211 IDENT@252..253 "a"
212 COMMA@253..254 "," 212 COMMA@253..254 ","
213 WHITESPACE@254..255 " " 213 WHITESPACE@254..255 " "
214 DOT_DOT_PAT@255..257 214 REST_PAT@255..257
215 DOT2@255..257 ".." 215 DOT2@255..257 ".."
216 R_PAREN@257..258 ")" 216 R_PAREN@257..258 ")"
217 WHITESPACE@258..259 " " 217 WHITESPACE@258..259 " "
@@ -233,7 +233,7 @@ SOURCE_FILE@0..555
233 WHITESPACE@300..301 " " 233 WHITESPACE@300..301 " "
234 SLICE_PAT@301..305 234 SLICE_PAT@301..305
235 L_BRACK@301..302 "[" 235 L_BRACK@301..302 "["
236 DOT_DOT_PAT@302..304 236 REST_PAT@302..304
237 DOT2@302..304 ".." 237 DOT2@302..304 ".."
238 R_BRACK@304..305 "]" 238 R_BRACK@304..305 "]"
239 WHITESPACE@305..306 " " 239 WHITESPACE@305..306 " "
@@ -254,7 +254,7 @@ SOURCE_FILE@0..555
254 IDENT@321..325 "head" 254 IDENT@321..325 "head"
255 COMMA@325..326 "," 255 COMMA@325..326 ","
256 WHITESPACE@326..327 " " 256 WHITESPACE@326..327 " "
257 DOT_DOT_PAT@327..329 257 REST_PAT@327..329
258 DOT2@327..329 ".." 258 DOT2@327..329 ".."
259 R_BRACK@329..330 "]" 259 R_BRACK@329..330 "]"
260 WHITESPACE@330..331 " " 260 WHITESPACE@330..331 " "
@@ -281,7 +281,7 @@ SOURCE_FILE@0..555
281 WHITESPACE@356..357 " " 281 WHITESPACE@356..357 " "
282 AT@357..358 "@" 282 AT@357..358 "@"
283 WHITESPACE@358..359 " " 283 WHITESPACE@358..359 " "
284 DOT_DOT_PAT@359..361 284 REST_PAT@359..361
285 DOT2@359..361 ".." 285 DOT2@359..361 ".."
286 R_BRACK@361..362 "]" 286 R_BRACK@361..362 "]"
287 WHITESPACE@362..363 " " 287 WHITESPACE@362..363 " "
@@ -302,7 +302,7 @@ SOURCE_FILE@0..555
302 IDENT@378..382 "head" 302 IDENT@378..382 "head"
303 COMMA@382..383 "," 303 COMMA@382..383 ","
304 WHITESPACE@383..384 " " 304 WHITESPACE@383..384 " "
305 DOT_DOT_PAT@384..386 305 REST_PAT@384..386
306 DOT2@384..386 ".." 306 DOT2@384..386 ".."
307 COMMA@386..387 "," 307 COMMA@386..387 ","
308 WHITESPACE@387..388 " " 308 WHITESPACE@387..388 " "
@@ -334,7 +334,7 @@ SOURCE_FILE@0..555
334 WHITESPACE@418..419 " " 334 WHITESPACE@418..419 " "
335 AT@419..420 "@" 335 AT@419..420 "@"
336 WHITESPACE@420..421 " " 336 WHITESPACE@420..421 " "
337 DOT_DOT_PAT@421..423 337 REST_PAT@421..423
338 DOT2@421..423 ".." 338 DOT2@421..423 ".."
339 COMMA@423..424 "," 339 COMMA@423..424 ","
340 WHITESPACE@424..425 " " 340 WHITESPACE@424..425 " "
@@ -360,11 +360,11 @@ SOURCE_FILE@0..555
360 IDENT@446..450 "head" 360 IDENT@446..450 "head"
361 COMMA@450..451 "," 361 COMMA@450..451 ","
362 WHITESPACE@451..452 " " 362 WHITESPACE@451..452 " "
363 DOT_DOT_PAT@452..454 363 REST_PAT@452..454
364 DOT2@452..454 ".." 364 DOT2@452..454 ".."
365 COMMA@454..455 "," 365 COMMA@454..455 ","
366 WHITESPACE@455..456 " " 366 WHITESPACE@455..456 " "
367 DOT_DOT_PAT@456..458 367 REST_PAT@456..458
368 DOT2@456..458 ".." 368 DOT2@456..458 ".."
369 COMMA@458..459 "," 369 COMMA@458..459 ","
370 WHITESPACE@459..460 " " 370 WHITESPACE@459..460 " "
@@ -390,7 +390,7 @@ SOURCE_FILE@0..555
390 IDENT@481..485 "head" 390 IDENT@481..485 "head"
391 COMMA@485..486 "," 391 COMMA@485..486 ","
392 WHITESPACE@486..487 " " 392 WHITESPACE@486..487 " "
393 DOT_DOT_PAT@487..489 393 REST_PAT@487..489
394 DOT2@487..489 ".." 394 DOT2@487..489 ".."
395 COMMA@489..490 "," 395 COMMA@489..490 ","
396 WHITESPACE@490..491 " " 396 WHITESPACE@490..491 " "
@@ -405,7 +405,7 @@ SOURCE_FILE@0..555
405 WHITESPACE@500..501 " " 405 WHITESPACE@500..501 " "
406 AT@501..502 "@" 406 AT@501..502 "@"
407 WHITESPACE@502..503 " " 407 WHITESPACE@502..503 " "
408 DOT_DOT_PAT@503..505 408 REST_PAT@503..505
409 DOT2@503..505 ".." 409 DOT2@503..505 ".."
410 R_BRACK@505..506 "]" 410 R_BRACK@505..506 "]"
411 WHITESPACE@506..507 " " 411 WHITESPACE@506..507 " "
@@ -426,7 +426,7 @@ SOURCE_FILE@0..555
426 IDENT@522..526 "head" 426 IDENT@522..526 "head"
427 COMMA@526..527 "," 427 COMMA@526..527 ","
428 WHITESPACE@527..528 " " 428 WHITESPACE@527..528 " "
429 DOT_DOT_PAT@528..530 429 REST_PAT@528..530
430 DOT2@528..530 ".." 430 DOT2@528..530 ".."
431 COMMA@530..531 "," 431 COMMA@530..531 ","
432 WHITESPACE@531..532 " " 432 WHITESPACE@531..532 " "
@@ -435,7 +435,7 @@ SOURCE_FILE@0..555
435 IDENT@532..535 "mid" 435 IDENT@532..535 "mid"
436 COMMA@535..536 "," 436 COMMA@535..536 ","
437 WHITESPACE@536..537 " " 437 WHITESPACE@536..537 " "
438 DOT_DOT_PAT@537..539 438 REST_PAT@537..539
439 DOT2@537..539 ".." 439 DOT2@537..539 ".."
440 COMMA@539..540 "," 440 COMMA@539..540 ","
441 WHITESPACE@540..541 " " 441 WHITESPACE@540..541 " "
diff --git a/crates/ra_syntax/test_data/parser/ok/0035_weird_exprs.rast b/crates/ra_syntax/test_data/parser/ok/0035_weird_exprs.rast
index ac9c1fa79..5bb9363a8 100644
--- a/crates/ra_syntax/test_data/parser/ok/0035_weird_exprs.rast
+++ b/crates/ra_syntax/test_data/parser/ok/0035_weird_exprs.rast
@@ -1634,7 +1634,7 @@ SOURCE_FILE@0..3813
1634 PARAM@2952..2962 1634 PARAM@2952..2962
1635 TUPLE_PAT@2952..2956 1635 TUPLE_PAT@2952..2956
1636 L_PAREN@2952..2953 "(" 1636 L_PAREN@2952..2953 "("
1637 DOT_DOT_PAT@2953..2955 1637 REST_PAT@2953..2955
1638 DOT2@2953..2955 ".." 1638 DOT2@2953..2955 ".."
1639 R_PAREN@2955..2956 ")" 1639 R_PAREN@2955..2956 ")"
1640 COLON@2956..2957 ":" 1640 COLON@2956..2957 ":"
diff --git a/xtask/src/ast_src.rs b/xtask/src/ast_src.rs
index 2ff029158..1386fc4e7 100644
--- a/xtask/src/ast_src.rs
+++ b/xtask/src/ast_src.rs
@@ -128,7 +128,7 @@ pub(crate) const KINDS_SRC: KindsSrc = KindsSrc {
128 "BOX_PAT", 128 "BOX_PAT",
129 "IDENT_PAT", 129 "IDENT_PAT",
130 "WILDCARD_PAT", 130 "WILDCARD_PAT",
131 "DOT_DOT_PAT", 131 "REST_PAT",
132 "PATH_PAT", 132 "PATH_PAT",
133 "RECORD_PAT", 133 "RECORD_PAT",
134 "RECORD_PAT_FIELD_LIST", 134 "RECORD_PAT_FIELD_LIST",
diff --git a/xtask/src/codegen/rust.ungram b/xtask/src/codegen/rust.ungram
index 25d6f7a20..02f5aa732 100644
--- a/xtask/src/codegen/rust.ungram
+++ b/xtask/src/codegen/rust.ungram
@@ -498,7 +498,7 @@ TypeBound =
498Pat = 498Pat =
499 IdentPat 499 IdentPat
500| BoxPat 500| BoxPat
501| DotDotPat 501| RestPat
502| LiteralPat 502| LiteralPat
503| MacroPat 503| MacroPat
504| OrPat 504| OrPat
@@ -560,7 +560,7 @@ OrPat =
560BoxPat = 560BoxPat =
561 'box' Pat 561 'box' Pat
562 562
563DotDotPat = 563RestPat =
564 '..' 564 '..'
565 565
566MacroPat = 566MacroPat =