Skip to content

Commit 7216d12

Browse files
committed
unified: Avoid singleton or_pattern in Swift switch case mapping
1 parent c4b4fde commit 7216d12

2 files changed

Lines changed: 58 additions & 59 deletions

File tree

unified/extractor/src/languages/swift/swift.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -652,11 +652,20 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
652652
=>
653653
(switch_expr value: {val} case: {..cases})
654654
),
655-
// Switch entry with patterns and body
655+
// Switch entry with multiple patterns and body
656656
rule!(
657-
(switch_entry pattern: (switch_pattern pattern: @pats)+ statement: _* @body)
657+
(switch_entry
658+
pattern: (switch_pattern pattern: @first)
659+
pattern: (switch_pattern pattern: @rest)+
660+
statement: _* @body)
661+
=>
662+
(switch_case pattern: (or_pattern pattern: {first} pattern: {..rest}) body: (block stmt: {..body}))
663+
),
664+
// Switch entry with exactly one pattern and body
665+
rule!(
666+
(switch_entry pattern: (switch_pattern pattern: @pat) statement: _* @body)
658667
=>
659-
(switch_case pattern: (or_pattern pattern: {..pats}) body: (block stmt: {..body}))
668+
(switch_case pattern: {pat} body: (block stmt: {..body}))
660669
),
661670
// Switch entry: default case (no patterns)
662671
rule!(

unified/extractor/tests/corpus/swift/control-flow.txt

Lines changed: 46 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -559,10 +559,8 @@ top_level
559559
name_expr
560560
identifier: identifier "print"
561561
pattern:
562-
or_pattern
563-
pattern:
564-
expr_equality_pattern
565-
expr: int_literal "1"
562+
expr_equality_pattern
563+
expr: int_literal "1"
566564
switch_case
567565
body:
568566
block
@@ -703,18 +701,16 @@ top_level
703701
name_expr
704702
identifier: identifier "print"
705703
pattern:
706-
or_pattern
707-
pattern:
708-
constructor_pattern
709-
element:
710-
pattern_element
711-
pattern:
712-
name_pattern
713-
identifier: identifier "r"
714-
constructor:
715-
member_access_expr
716-
base: inferred_type_expr "."
717-
member: identifier "circle"
704+
constructor_pattern
705+
element:
706+
pattern_element
707+
pattern:
708+
name_pattern
709+
identifier: identifier "r"
710+
constructor:
711+
member_access_expr
712+
base: inferred_type_expr "."
713+
member: identifier "circle"
718714
switch_case
719715
body:
720716
block
@@ -729,18 +725,16 @@ top_level
729725
name_expr
730726
identifier: identifier "print"
731727
pattern:
732-
or_pattern
733-
pattern:
734-
constructor_pattern
735-
element:
736-
pattern_element
737-
pattern:
738-
name_pattern
739-
identifier: identifier "s"
740-
constructor:
741-
member_access_expr
742-
base: inferred_type_expr "."
743-
member: identifier "square"
728+
constructor_pattern
729+
element:
730+
pattern_element
731+
pattern:
732+
name_pattern
733+
identifier: identifier "s"
734+
constructor:
735+
member_access_expr
736+
base: inferred_type_expr "."
737+
member: identifier "square"
744738
value:
745739
name_expr
746740
identifier: identifier "shape"
@@ -852,19 +846,17 @@ top_level
852846
name_expr
853847
identifier: identifier "print"
854848
pattern:
855-
or_pattern
856-
pattern:
857-
constructor_pattern
858-
element:
859-
pattern_element
860-
key: identifier "isAcknowledged"
861-
pattern:
862-
expr_equality_pattern
863-
expr: boolean_literal "false"
864-
constructor:
865-
member_access_expr
866-
base: inferred_type_expr "."
867-
member: identifier "implicit"
849+
constructor_pattern
850+
element:
851+
pattern_element
852+
key: identifier "isAcknowledged"
853+
pattern:
854+
expr_equality_pattern
855+
expr: boolean_literal "false"
856+
constructor:
857+
member_access_expr
858+
base: inferred_type_expr "."
859+
member: identifier "implicit"
868860
switch_case
869861
body:
870862
block
@@ -879,21 +871,19 @@ top_level
879871
name_expr
880872
identifier: identifier "print"
881873
pattern:
882-
or_pattern
883-
pattern:
884-
constructor_pattern
885-
element:
886-
pattern_element
887-
key: identifier "threadRowId"
888-
pattern: ignore_pattern "_"
889-
pattern_element
890-
pattern:
891-
name_pattern
892-
identifier: identifier "rowId"
893-
constructor:
894-
member_access_expr
895-
base: inferred_type_expr "."
896-
member: identifier "thread"
874+
constructor_pattern
875+
element:
876+
pattern_element
877+
key: identifier "threadRowId"
878+
pattern: ignore_pattern "_"
879+
pattern_element
880+
pattern:
881+
name_pattern
882+
identifier: identifier "rowId"
883+
constructor:
884+
member_access_expr
885+
base: inferred_type_expr "."
886+
member: identifier "thread"
897887
value:
898888
name_expr
899889
identifier: identifier "x"

0 commit comments

Comments
 (0)