mirror of
https://github.com/github/codeql.git
synced 2026-06-29 16:47:09 +02:00
unified: Make switch_case pattern optional; add or_pattern disjunction node
This commit is contained in:
@@ -42,6 +42,7 @@ supertypes:
|
||||
- name_pattern
|
||||
- tuple_pattern
|
||||
- constructor_pattern
|
||||
- or_pattern
|
||||
- ignore_pattern
|
||||
- expr_equality_pattern
|
||||
- bulk_importing_pattern
|
||||
@@ -359,12 +360,12 @@ named:
|
||||
case*: switch_case
|
||||
|
||||
# A single `case ...:` (or `default:`) entry in a switch.
|
||||
# An entry with multiple `case p1, p2:` patterns has multiple `pattern`s.
|
||||
# A `default:` entry has no patterns.
|
||||
# An entry with multiple `case p1, p2:` patterns uses an `or_pattern`.
|
||||
# A `default:` entry has no pattern.
|
||||
# An optional `guard` corresponds to a `where`-clause on the case.
|
||||
switch_case:
|
||||
modifier*: modifier
|
||||
pattern*: pattern
|
||||
pattern?: pattern
|
||||
guard?: expr
|
||||
body: block
|
||||
|
||||
@@ -421,6 +422,11 @@ named:
|
||||
constructor: expr_or_type
|
||||
element*: pattern_element
|
||||
|
||||
# A disjunction pattern that matches if any of its sub-patterns match.
|
||||
or_pattern:
|
||||
modifier*: modifier
|
||||
pattern*: pattern
|
||||
|
||||
# A pattern with an optional associated name.
|
||||
pattern_element:
|
||||
modifier*: modifier
|
||||
|
||||
@@ -654,9 +654,9 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
|
||||
),
|
||||
// Switch entry with patterns and body
|
||||
rule!(
|
||||
(switch_entry pattern: (switch_pattern pattern: @pats)* statement: _* @body)
|
||||
(switch_entry pattern: (switch_pattern pattern: @pats)+ statement: _* @body)
|
||||
=>
|
||||
(switch_case pattern: {..pats} body: (block stmt: {..body}))
|
||||
(switch_case pattern: (or_pattern pattern: {..pats}) body: (block stmt: {..body}))
|
||||
),
|
||||
// Switch entry: default case (no patterns)
|
||||
rule!(
|
||||
|
||||
@@ -559,8 +559,10 @@ top_level
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
expr_equality_pattern
|
||||
expr: int_literal "1"
|
||||
or_pattern
|
||||
pattern:
|
||||
expr_equality_pattern
|
||||
expr: int_literal "1"
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
@@ -573,10 +575,12 @@ top_level
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
expr_equality_pattern
|
||||
expr: int_literal "2"
|
||||
expr_equality_pattern
|
||||
expr: int_literal "3"
|
||||
or_pattern
|
||||
pattern:
|
||||
expr_equality_pattern
|
||||
expr: int_literal "2"
|
||||
expr_equality_pattern
|
||||
expr: int_literal "3"
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
@@ -699,16 +703,18 @@ top_level
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
constructor_pattern
|
||||
element:
|
||||
pattern_element
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "r"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "circle"
|
||||
or_pattern
|
||||
pattern:
|
||||
constructor_pattern
|
||||
element:
|
||||
pattern_element
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "r"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "circle"
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
@@ -723,16 +729,18 @@ top_level
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
constructor_pattern
|
||||
element:
|
||||
pattern_element
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "s"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "square"
|
||||
or_pattern
|
||||
pattern:
|
||||
constructor_pattern
|
||||
element:
|
||||
pattern_element
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "s"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "square"
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "shape"
|
||||
@@ -844,17 +852,19 @@ top_level
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
constructor_pattern
|
||||
element:
|
||||
pattern_element
|
||||
key: identifier "isAcknowledged"
|
||||
pattern:
|
||||
expr_equality_pattern
|
||||
expr: boolean_literal "false"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "implicit"
|
||||
or_pattern
|
||||
pattern:
|
||||
constructor_pattern
|
||||
element:
|
||||
pattern_element
|
||||
key: identifier "isAcknowledged"
|
||||
pattern:
|
||||
expr_equality_pattern
|
||||
expr: boolean_literal "false"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "implicit"
|
||||
switch_case
|
||||
body:
|
||||
block
|
||||
@@ -869,19 +879,21 @@ top_level
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
pattern:
|
||||
constructor_pattern
|
||||
element:
|
||||
pattern_element
|
||||
key: identifier "threadRowId"
|
||||
pattern: ignore_pattern "_"
|
||||
pattern_element
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "rowId"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "thread"
|
||||
or_pattern
|
||||
pattern:
|
||||
constructor_pattern
|
||||
element:
|
||||
pattern_element
|
||||
key: identifier "threadRowId"
|
||||
pattern: ignore_pattern "_"
|
||||
pattern_element
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "rowId"
|
||||
constructor:
|
||||
member_access_expr
|
||||
base: inferred_type_expr "."
|
||||
member: identifier "thread"
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
|
||||
Reference in New Issue
Block a user