Skip to content

Commit af08633

Browse files
committed
complete match statement unparsing
1 parent af4f883 commit af08633

2 files changed

Lines changed: 46 additions & 2 deletions

File tree

src/unparser.rs

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1368,8 +1368,32 @@ impl Unparser {
13681368
self.write_str(name);
13691369
}
13701370

1371-
fn unparse_pattern_match_as(&mut self, _node: &PatternMatchAs<TextRange>) {
1372-
// TODO
1371+
fn unparse_pattern_match_as(&mut self, node: &PatternMatchAs<TextRange>) {
1372+
match &node.name {
1373+
Some(name) => match &node.pattern {
1374+
Some(pattern) => {
1375+
let with_parens = self.precedence_level > Precedence::Test.value();
1376+
if with_parens {
1377+
self.write_str("(");
1378+
}
1379+
self.with_precedence(Precedence::Bor, |prec_self| {
1380+
prec_self.unparse_pattern(pattern);
1381+
});
1382+
self.write_str(" as ");
1383+
self.write_str(name);
1384+
1385+
if with_parens {
1386+
self.write_str(")");
1387+
}
1388+
}
1389+
None => {
1390+
self.write_str(name);
1391+
}
1392+
},
1393+
None => {
1394+
self.write_str("_");
1395+
}
1396+
};
13731397
}
13741398

13751399
fn unparse_pattern_match_or(&mut self, node: &PatternMatchOr<TextRange>) {

test_files/match.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
name_2 = 2
2+
name_5 = 5
3+
4+
5+
class MatchThis:
6+
field_1 = "Test1"
7+
field_2 = "Test2"
8+
9+
10+
match {name_5: name_2}:
11+
case [value_1, *rest] if []:
12+
print(value_1, *rest)
13+
case (value_1, *rest) if []:
14+
print(value_1, *rest)
15+
case MatchThis(field_1=field1_value, field_2=field2_value):
16+
print(field1_value, field2_value)
17+
case {"field_1": field1_value, "field_2": field2_value, **kwargs}:
18+
print(field1_value, field2_value, **kwargs) # type: ignore
19+
case _ if lambda *name_4, **name_2: name_5: # type: ignore
20+
pass

0 commit comments

Comments
 (0)