## Summary
This PR removes the `skip_until` parser method. The main use case for it
was for error recovery which we want to isolate only in list parsing.
There are two references which are removed:
1. Parsing a list of match arguments in a class pattern. Take the
following code snippet as an example:
```python
match foo:
case Foo(bar.z=1, baz):
pass
```
This is a syntax error as the keyword argument pattern can only have an
identifier but here it's an attribute node. Now, to move on to the next
argument (`baz`), the parser would skip until the end of the argument to
recover. What we will do now is to parse the value as a pattern (per
spec) thus moving the parser ahead and add the node with an empty
identifier.
The above code will produce the following AST:
<details><summary><b>AST</b></summary>
<p>
```rs
Module(
ModModule {
range: 0..52,
body: [
Match(
StmtMatch {
range: 0..51,
subject: Name(
ExprName {
range: 6..9,
id: "foo",
ctx: Load,
},
),
cases: [
MatchCase {
range: 15..51,
pattern: MatchClass(
PatternMatchClass {
range: 20..37,
cls: Name(
ExprName {
range: 20..23,
id: "Foo",
ctx: Load,
},
),
arguments: PatternArguments {
range: 24..37,
patterns: [
MatchAs(
PatternMatchAs {
range: 33..36,
pattern: None,
name: Some(
Identifier {
id: "baz",
range: 33..36,
},
),
},
),
],
keywords: [
PatternKeyword {
range: 24..31,
attr: Identifier {
id: "",
range: 31..31,
},
pattern: MatchValue(
PatternMatchValue {
range: 30..31,
value: NumberLiteral(
ExprNumberLiteral {
range: 30..31,
value: Int(
1,
),
},
),
},
),
},
],
},
},
),
guard: None,
body: [
Pass(
StmtPass {
range: 47..51,
},
),
],
},
],
},
),
],
},
)
```
</p>
</details>
2. Parsing a list of parameters. Here, our list parsing method makes
sure to only call the parse element function when it's a valid list
element. A parameter can start either with a `Star`, `DoubleStar`, or
`Name` token which corresponds to the 3 `if` conditions. Thus, the
`else` block is not required as the list parsing will recover without
it.