mirror of
https://github.com/github/codeql.git
synced 2026-06-30 00:55:29 +02:00
unified: Fix handling of 'if case let'
This commit is contained in:
@@ -673,13 +673,13 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
|
||||
=>
|
||||
(switch_case body: (block stmt: {..body}))
|
||||
),
|
||||
// if case let x = expr — the pattern is taken as-is (no Optional wrapping)
|
||||
// if case PATTERN = expr — preserve the pattern directly (no Optional wrapping)
|
||||
rule!(
|
||||
(if_let_binding "case" (value_binding_pattern) bound_identifier: @name _ @val)
|
||||
(if_let_binding "case" pattern: @pat value: @val)
|
||||
=>
|
||||
(pattern_guard_expr
|
||||
value: {val}
|
||||
pattern: (name_pattern identifier: (identifier #{name})))
|
||||
pattern: {pat})
|
||||
),
|
||||
rule!(
|
||||
(if_let_binding
|
||||
|
||||
@@ -594,6 +594,83 @@ top_level
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
|
||||
===
|
||||
If-case-let with shadowing in condition value
|
||||
===
|
||||
|
||||
if case let x = x + 10 {
|
||||
print(x)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
statement:
|
||||
if_statement
|
||||
body:
|
||||
block
|
||||
statement:
|
||||
call_expression
|
||||
function: simple_identifier "print"
|
||||
suffix:
|
||||
call_suffix
|
||||
arguments:
|
||||
value_arguments
|
||||
argument:
|
||||
value_argument
|
||||
value: simple_identifier "x"
|
||||
condition:
|
||||
if_condition
|
||||
kind:
|
||||
if_let_binding
|
||||
pattern:
|
||||
pattern
|
||||
kind:
|
||||
binding_pattern
|
||||
binding:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
pattern:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "x"
|
||||
value:
|
||||
additive_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: +
|
||||
rhs: integer_literal "10"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
block
|
||||
stmt:
|
||||
if_expr
|
||||
condition:
|
||||
pattern_guard_expr
|
||||
pattern:
|
||||
name_pattern
|
||||
identifier: identifier "x"
|
||||
value:
|
||||
binary_expr
|
||||
operator: infix_operator "+"
|
||||
left:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
right: int_literal "10"
|
||||
then:
|
||||
block
|
||||
stmt:
|
||||
call_expr
|
||||
argument:
|
||||
argument
|
||||
value:
|
||||
name_expr
|
||||
identifier: identifier "x"
|
||||
callee:
|
||||
name_expr
|
||||
identifier: identifier "print"
|
||||
|
||||
===
|
||||
Switch with binding pattern
|
||||
===
|
||||
|
||||
Reference in New Issue
Block a user