Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/parser/src/grammar/patterns.rs')
-rw-r--r--crates/parser/src/grammar/patterns.rs18
1 files changed, 9 insertions, 9 deletions
diff --git a/crates/parser/src/grammar/patterns.rs b/crates/parser/src/grammar/patterns.rs
index 882c243b0c..ed01fca2ac 100644
--- a/crates/parser/src/grammar/patterns.rs
+++ b/crates/parser/src/grammar/patterns.rs
@@ -21,7 +21,8 @@ const RANGE_PAT_END_FIRST: TokenSet =
expressions::LITERAL_FIRST.union(paths::PATH_FIRST).union(TokenSet::new(&[T![-], T![const]]));
pub(crate) fn pattern(p: &mut Parser<'_>) {
- pattern_r(p, PAT_RECOVERY_SET);
+ let m = p.start();
+ pattern_r(p, m, false, PAT_RECOVERY_SET);
}
/// Parses a pattern list separated by pipes `|`.
@@ -36,13 +37,11 @@ pub(crate) fn pattern_single(p: &mut Parser<'_>) {
/// Parses a pattern list separated by pipes `|`
/// using the given `recovery_set`.
pub(super) fn pattern_top_r(p: &mut Parser<'_>, recovery_set: TokenSet) {
- p.eat(T![|]);
- pattern_r(p, recovery_set);
+ let m = p.start();
+ let has_leading_pipe = p.eat(T![|]);
+ pattern_r(p, m, has_leading_pipe, recovery_set);
}
-/// Parses a pattern list separated by pipes `|`, with no leading `|`,using the
-/// given `recovery_set`.
-
// test or_pattern
// fn main() {
// match () {
@@ -52,11 +51,12 @@ pub(super) fn pattern_top_r(p: &mut Parser<'_>, recovery_set: TokenSet) {
// [_ | _,] => (),
// }
// }
-fn pattern_r(p: &mut Parser<'_>, recovery_set: TokenSet) {
- let m = p.start();
+/// Parses a pattern list separated by pipes `|`, with no leading `|`,using the
+/// given `recovery_set`.
+fn pattern_r(p: &mut Parser<'_>, m: Marker, has_leading_pipe: bool, recovery_set: TokenSet) {
pattern_single_r(p, recovery_set);
- if !p.at(T![|]) {
+ if !p.at(T![|]) && !has_leading_pipe {
m.abandon(p);
return;
}