mirror of
https://github.com/github/codeql.git
synced 2026-05-30 02:51:24 +02:00
Unified: Add Swift corpus tests
Add corpus test cases for Swift covering closures, collections, control flow, functions, literals, loops, operators, optionals/errors, types, and variables. Update existing desugar.txt with raw parse sections. Note: operator nodes currently render their node ID instead of the actual operator text (e.g. operator "3" instead of operator "+"). This will be fixed in the next commit. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
188
unified/extractor/tests/corpus/swift/closures.txt
Normal file
188
unified/extractor/tests/corpus/swift/closures.txt
Normal file
@@ -0,0 +1,188 @@
|
||||
===
|
||||
Closure with explicit parameters
|
||||
===
|
||||
|
||||
let f = { (x: Int) -> Int in x * 2 }
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "f"
|
||||
value:
|
||||
lambda_literal
|
||||
type:
|
||||
lambda_function_type
|
||||
name:
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
lambda_function_type_parameters
|
||||
lambda_parameter
|
||||
name:
|
||||
simple_identifier "x"
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
statements
|
||||
multiplicative_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: *
|
||||
rhs: integer_literal "2"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let f = { (x: Int) -> Int in x * 2 }"
|
||||
|
||||
===
|
||||
Closure with shorthand parameters
|
||||
===
|
||||
|
||||
let f = { $0 + $1 }
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "f"
|
||||
value:
|
||||
lambda_literal
|
||||
statements
|
||||
additive_expression
|
||||
lhs: simple_identifier "$0"
|
||||
op: +
|
||||
rhs: simple_identifier "$1"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let f = { $0 + $1 }"
|
||||
|
||||
===
|
||||
Trailing closure
|
||||
===
|
||||
|
||||
xs.map { $0 * 2 }
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
call_expression
|
||||
navigation_expression
|
||||
suffix:
|
||||
navigation_suffix
|
||||
suffix: simple_identifier "map"
|
||||
target: simple_identifier "xs"
|
||||
call_suffix
|
||||
lambda_literal
|
||||
statements
|
||||
multiplicative_expression
|
||||
lhs: simple_identifier "$0"
|
||||
op: *
|
||||
rhs: integer_literal "2"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "xs.map { $0 * 2 }"
|
||||
|
||||
===
|
||||
Closure with capture list
|
||||
===
|
||||
|
||||
let f = { [weak self] in self?.doThing() }
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "f"
|
||||
value:
|
||||
lambda_literal
|
||||
captures:
|
||||
capture_list
|
||||
capture_list_item
|
||||
name: simple_identifier "self"
|
||||
ownership_modifier
|
||||
statements
|
||||
call_expression
|
||||
navigation_expression
|
||||
suffix:
|
||||
navigation_suffix
|
||||
suffix: simple_identifier "doThing"
|
||||
target:
|
||||
self_expression
|
||||
?
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let f = { [weak self] in self?.doThing() }"
|
||||
|
||||
===
|
||||
Multi-statement closure
|
||||
===
|
||||
|
||||
let f = { (x: Int) -> Int in
|
||||
let y = x + 1
|
||||
return y * 2
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "f"
|
||||
value:
|
||||
lambda_literal
|
||||
type:
|
||||
lambda_function_type
|
||||
name:
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
lambda_function_type_parameters
|
||||
lambda_parameter
|
||||
name:
|
||||
simple_identifier "x"
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
statements
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "y"
|
||||
value:
|
||||
additive_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: +
|
||||
rhs: integer_literal "1"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
control_transfer_statement
|
||||
result:
|
||||
multiplicative_expression
|
||||
lhs: simple_identifier "y"
|
||||
op: *
|
||||
rhs: integer_literal "2"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let f = { (x: Int) -> Int in\n let y = x + 1\n return y * 2\n}"
|
||||
234
unified/extractor/tests/corpus/swift/collections.txt
Normal file
234
unified/extractor/tests/corpus/swift/collections.txt
Normal file
@@ -0,0 +1,234 @@
|
||||
===
|
||||
Array literal
|
||||
===
|
||||
|
||||
let xs = [1, 2, 3]
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "xs"
|
||||
value:
|
||||
array_literal
|
||||
element:
|
||||
integer_literal "1"
|
||||
integer_literal "2"
|
||||
integer_literal "3"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let xs = [1, 2, 3]"
|
||||
|
||||
===
|
||||
Empty array literal with type
|
||||
===
|
||||
|
||||
let xs: [Int] = []
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "xs"
|
||||
value:
|
||||
array_literal
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
type_annotation
|
||||
name:
|
||||
array_type
|
||||
name:
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let xs: [Int] = []"
|
||||
|
||||
===
|
||||
Dictionary literal
|
||||
===
|
||||
|
||||
let d = ["a": 1, "b": 2]
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "d"
|
||||
value:
|
||||
dictionary_literal
|
||||
key:
|
||||
line_string_literal
|
||||
text: line_str_text "a"
|
||||
line_string_literal
|
||||
text: line_str_text "b"
|
||||
value:
|
||||
integer_literal "1"
|
||||
integer_literal "2"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let d = [\"a\": 1, \"b\": 2]"
|
||||
|
||||
===
|
||||
Set literal
|
||||
===
|
||||
|
||||
let s: Set<Int> = [1, 2, 3]
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "s"
|
||||
value:
|
||||
array_literal
|
||||
element:
|
||||
integer_literal "1"
|
||||
integer_literal "2"
|
||||
integer_literal "3"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
type_annotation
|
||||
name:
|
||||
user_type
|
||||
type_identifier "Set"
|
||||
type_arguments
|
||||
name:
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let s: Set<Int> = [1, 2, 3]"
|
||||
|
||||
===
|
||||
Tuple literal
|
||||
===
|
||||
|
||||
let t = (1, "two", 3.0)
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "t"
|
||||
value:
|
||||
tuple_expression
|
||||
value:
|
||||
integer_literal "1"
|
||||
line_string_literal
|
||||
text: line_str_text "two"
|
||||
real_literal "3.0"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let t = (1, \"two\", 3.0)"
|
||||
|
||||
===
|
||||
Subscript access
|
||||
===
|
||||
|
||||
let first = xs[0]
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "first"
|
||||
value:
|
||||
call_expression
|
||||
simple_identifier "xs"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value: integer_literal "0"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let first = xs[0]"
|
||||
|
||||
===
|
||||
Dictionary subscript
|
||||
===
|
||||
|
||||
let v = d["key"]
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "v"
|
||||
value:
|
||||
call_expression
|
||||
simple_identifier "d"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "key"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let v = d[\"key\"]"
|
||||
|
||||
===
|
||||
Tuple member access
|
||||
===
|
||||
|
||||
let n = t.0
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "n"
|
||||
value:
|
||||
navigation_expression
|
||||
suffix:
|
||||
navigation_suffix
|
||||
suffix: integer_literal "0"
|
||||
target: simple_identifier "t"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let n = t.0"
|
||||
333
unified/extractor/tests/corpus/swift/control-flow.txt
Normal file
333
unified/extractor/tests/corpus/swift/control-flow.txt
Normal file
@@ -0,0 +1,333 @@
|
||||
===
|
||||
If statement
|
||||
===
|
||||
|
||||
if x > 0 {
|
||||
print(x)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
if_statement
|
||||
condition:
|
||||
comparison_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: >
|
||||
rhs: integer_literal "0"
|
||||
statements
|
||||
call_expression
|
||||
simple_identifier "print"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value: simple_identifier "x"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "if x > 0 {\n print(x)\n}"
|
||||
|
||||
===
|
||||
If-else
|
||||
===
|
||||
|
||||
if x > 0 {
|
||||
print(x)
|
||||
} else {
|
||||
print(-x)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
if_statement
|
||||
condition:
|
||||
comparison_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: >
|
||||
rhs: integer_literal "0"
|
||||
statements
|
||||
call_expression
|
||||
simple_identifier "print"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value: simple_identifier "x"
|
||||
else "else"
|
||||
statements
|
||||
call_expression
|
||||
simple_identifier "print"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value:
|
||||
prefix_expression
|
||||
operation: -
|
||||
target: simple_identifier "x"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "if x > 0 {\n print(x)\n} else {\n print(-x)\n}"
|
||||
|
||||
===
|
||||
If-else-if chain
|
||||
===
|
||||
|
||||
if x > 0 {
|
||||
print(1)
|
||||
} else if x < 0 {
|
||||
print(2)
|
||||
} else {
|
||||
print(3)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
if_statement
|
||||
condition:
|
||||
comparison_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: >
|
||||
rhs: integer_literal "0"
|
||||
statements
|
||||
call_expression
|
||||
simple_identifier "print"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value: integer_literal "1"
|
||||
else "else"
|
||||
if_statement
|
||||
condition:
|
||||
comparison_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: <
|
||||
rhs: integer_literal "0"
|
||||
statements
|
||||
call_expression
|
||||
simple_identifier "print"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value: integer_literal "2"
|
||||
else "else"
|
||||
statements
|
||||
call_expression
|
||||
simple_identifier "print"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value: integer_literal "3"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "if x > 0 {\n print(1)\n} else if x < 0 {\n print(2)\n} else {\n print(3)\n}"
|
||||
|
||||
===
|
||||
If-let optional binding
|
||||
===
|
||||
|
||||
if let value = optional {
|
||||
print(value)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
if_statement
|
||||
bound_identifier: simple_identifier "value"
|
||||
condition:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
=
|
||||
simple_identifier "optional"
|
||||
statements
|
||||
call_expression
|
||||
simple_identifier "print"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value: simple_identifier "value"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "if let value = optional {\n print(value)\n}"
|
||||
|
||||
===
|
||||
Guard let
|
||||
===
|
||||
|
||||
guard let value = optional else { return }
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
guard_statement
|
||||
bound_identifier: simple_identifier "value"
|
||||
condition:
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
=
|
||||
simple_identifier "optional"
|
||||
else "else"
|
||||
statements
|
||||
control_transfer_statement
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "guard let value = optional else { return }"
|
||||
|
||||
===
|
||||
Ternary expression
|
||||
===
|
||||
|
||||
let y = x > 0 ? 1 : -1
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "y"
|
||||
value:
|
||||
ternary_expression
|
||||
condition:
|
||||
comparison_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: >
|
||||
rhs: integer_literal "0"
|
||||
if_false:
|
||||
prefix_expression
|
||||
operation: -
|
||||
target: integer_literal "1"
|
||||
if_true: integer_literal "1"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let y = x > 0 ? 1 : -1"
|
||||
|
||||
===
|
||||
Switch statement
|
||||
===
|
||||
|
||||
switch x {
|
||||
case 1:
|
||||
print("one")
|
||||
case 2, 3:
|
||||
print("two or three")
|
||||
default:
|
||||
print("other")
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
switch_statement
|
||||
expr: simple_identifier "x"
|
||||
switch_entry
|
||||
switch_pattern
|
||||
pattern
|
||||
integer_literal "1"
|
||||
statements
|
||||
call_expression
|
||||
simple_identifier "print"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "one"
|
||||
switch_entry
|
||||
switch_pattern
|
||||
pattern
|
||||
integer_literal "2"
|
||||
switch_pattern
|
||||
pattern
|
||||
integer_literal "3"
|
||||
statements
|
||||
call_expression
|
||||
simple_identifier "print"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "two or three"
|
||||
switch_entry
|
||||
default_keyword "default"
|
||||
statements
|
||||
call_expression
|
||||
simple_identifier "print"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "other"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "switch x {\ncase 1:\n print(\"one\")\ncase 2, 3:\n print(\"two or three\")\ndefault:\n print(\"other\")\n}"
|
||||
|
||||
===
|
||||
Switch with binding pattern
|
||||
===
|
||||
|
||||
switch shape {
|
||||
case .circle(let r):
|
||||
print(r)
|
||||
case .square(let s):
|
||||
print(s)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
switch_statement
|
||||
expr: simple_identifier "shape"
|
||||
switch_entry
|
||||
switch_pattern
|
||||
pattern
|
||||
simple_identifier "circle"
|
||||
pattern
|
||||
bound_identifier: simple_identifier "r"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
statements
|
||||
call_expression
|
||||
simple_identifier "print"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value: simple_identifier "r"
|
||||
switch_entry
|
||||
switch_pattern
|
||||
pattern
|
||||
simple_identifier "square"
|
||||
pattern
|
||||
bound_identifier: simple_identifier "s"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
statements
|
||||
call_expression
|
||||
simple_identifier "print"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value: simple_identifier "s"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "switch shape {\ncase .circle(let r):\n print(r)\ncase .square(let s):\n print(s)\n}"
|
||||
@@ -7,8 +7,19 @@ Additive expression is desugared
|
||||
---
|
||||
|
||||
source_file
|
||||
simple_identifier "blah"
|
||||
additive_expression
|
||||
lhs: integer_literal "1"
|
||||
op: +
|
||||
rhs: integer_literal "2"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
binary_expr
|
||||
operator: operator "3"
|
||||
left: unsupported_node "1"
|
||||
right: unsupported_node "2"
|
||||
|
||||
===
|
||||
Another additive expression is desugared
|
||||
@@ -19,5 +30,16 @@ foo + bar
|
||||
---
|
||||
|
||||
source_file
|
||||
simple_identifier "blah"
|
||||
additive_expression
|
||||
lhs: simple_identifier "foo"
|
||||
op: +
|
||||
rhs: simple_identifier "bar"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
binary_expr
|
||||
operator: operator "3"
|
||||
left: name_expr "foo"
|
||||
right: name_expr "bar"
|
||||
|
||||
297
unified/extractor/tests/corpus/swift/functions.txt
Normal file
297
unified/extractor/tests/corpus/swift/functions.txt
Normal file
@@ -0,0 +1,297 @@
|
||||
===
|
||||
Function with no parameters
|
||||
===
|
||||
|
||||
func greet() {
|
||||
print("hello")
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
function_declaration
|
||||
body:
|
||||
function_body
|
||||
statements
|
||||
call_expression
|
||||
simple_identifier "print"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "hello"
|
||||
name: simple_identifier "greet"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "func greet() {\n print(\"hello\")\n}"
|
||||
|
||||
===
|
||||
Function with parameters and return type
|
||||
===
|
||||
|
||||
func add(_ a: Int, _ b: Int) -> Int {
|
||||
return a + b
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
function_declaration
|
||||
body:
|
||||
function_body
|
||||
statements
|
||||
control_transfer_statement
|
||||
result:
|
||||
additive_expression
|
||||
lhs: simple_identifier "a"
|
||||
op: +
|
||||
rhs: simple_identifier "b"
|
||||
name:
|
||||
simple_identifier "add"
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
parameter
|
||||
external_name: simple_identifier "_"
|
||||
name:
|
||||
simple_identifier "a"
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
parameter
|
||||
external_name: simple_identifier "_"
|
||||
name:
|
||||
simple_identifier "b"
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "func add(_ a: Int, _ b: Int) -> Int {\n return a + b\n}"
|
||||
|
||||
===
|
||||
Function with named parameters
|
||||
===
|
||||
|
||||
func greet(person name: String) {
|
||||
print(name)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
function_declaration
|
||||
body:
|
||||
function_body
|
||||
statements
|
||||
call_expression
|
||||
simple_identifier "print"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value: simple_identifier "name"
|
||||
name: simple_identifier "greet"
|
||||
parameter
|
||||
external_name: simple_identifier "person"
|
||||
name:
|
||||
simple_identifier "name"
|
||||
user_type
|
||||
type_identifier "String"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "func greet(person name: String) {\n print(name)\n}"
|
||||
|
||||
===
|
||||
Function with default parameter value
|
||||
===
|
||||
|
||||
func greet(name: String = "world") {
|
||||
print(name)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
function_declaration
|
||||
body:
|
||||
function_body
|
||||
statements
|
||||
call_expression
|
||||
simple_identifier "print"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value: simple_identifier "name"
|
||||
default_value:
|
||||
line_string_literal
|
||||
text: line_str_text "world"
|
||||
name: simple_identifier "greet"
|
||||
parameter
|
||||
name:
|
||||
simple_identifier "name"
|
||||
user_type
|
||||
type_identifier "String"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "func greet(name: String = \"world\") {\n print(name)\n}"
|
||||
|
||||
===
|
||||
Variadic function
|
||||
===
|
||||
|
||||
func sum(_ values: Int...) -> Int {
|
||||
return values.reduce(0, +)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
function_declaration
|
||||
body:
|
||||
function_body
|
||||
statements
|
||||
control_transfer_statement
|
||||
result:
|
||||
call_expression
|
||||
navigation_expression
|
||||
suffix:
|
||||
navigation_suffix
|
||||
suffix: simple_identifier "reduce"
|
||||
target: simple_identifier "values"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value: integer_literal "0"
|
||||
value_argument
|
||||
value: +
|
||||
name:
|
||||
simple_identifier "sum"
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
parameter
|
||||
external_name: simple_identifier "_"
|
||||
name:
|
||||
simple_identifier "values"
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "func sum(_ values: Int...) -> Int {\n return values.reduce(0, +)\n}"
|
||||
|
||||
===
|
||||
Function call
|
||||
===
|
||||
|
||||
foo(1, 2)
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
call_expression
|
||||
simple_identifier "foo"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value: integer_literal "1"
|
||||
value_argument
|
||||
value: integer_literal "2"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "foo(1, 2)"
|
||||
|
||||
===
|
||||
Function call with labelled arguments
|
||||
===
|
||||
|
||||
greet(person: "Bob")
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
call_expression
|
||||
simple_identifier "greet"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
name:
|
||||
value_argument_label
|
||||
simple_identifier "person"
|
||||
value:
|
||||
line_string_literal
|
||||
text: line_str_text "Bob"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "greet(person: \"Bob\")"
|
||||
|
||||
===
|
||||
Method call
|
||||
===
|
||||
|
||||
list.append(1)
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
call_expression
|
||||
navigation_expression
|
||||
suffix:
|
||||
navigation_suffix
|
||||
suffix: simple_identifier "append"
|
||||
target: simple_identifier "list"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value: integer_literal "1"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "list.append(1)"
|
||||
|
||||
===
|
||||
Generic function
|
||||
===
|
||||
|
||||
func identity<T>(_ x: T) -> T {
|
||||
return x
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
function_declaration
|
||||
body:
|
||||
function_body
|
||||
statements
|
||||
control_transfer_statement
|
||||
result: simple_identifier "x"
|
||||
name:
|
||||
simple_identifier "identity"
|
||||
user_type
|
||||
type_identifier "T"
|
||||
type_parameters
|
||||
type_parameter
|
||||
type_identifier "T"
|
||||
parameter
|
||||
external_name: simple_identifier "_"
|
||||
name:
|
||||
simple_identifier "x"
|
||||
user_type
|
||||
type_identifier "T"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "func identity<T>(_ x: T) -> T {\n return x\n}"
|
||||
121
unified/extractor/tests/corpus/swift/literals.txt
Normal file
121
unified/extractor/tests/corpus/swift/literals.txt
Normal file
@@ -0,0 +1,121 @@
|
||||
===
|
||||
Integer literal
|
||||
===
|
||||
|
||||
42
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
integer_literal "42"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "42"
|
||||
|
||||
===
|
||||
Negative integer literal
|
||||
===
|
||||
|
||||
-7
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
prefix_expression
|
||||
operation: -
|
||||
target: integer_literal "7"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "-7"
|
||||
|
||||
===
|
||||
Floating-point literal
|
||||
===
|
||||
|
||||
3.14
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
real_literal "3.14"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "3.14"
|
||||
|
||||
===
|
||||
Boolean literals
|
||||
===
|
||||
|
||||
true
|
||||
false
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
boolean_literal
|
||||
boolean_literal
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
unsupported_node "true"
|
||||
unsupported_node "false"
|
||||
|
||||
===
|
||||
Nil literal
|
||||
===
|
||||
|
||||
nil
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
|
||||
===
|
||||
String literal
|
||||
===
|
||||
|
||||
"hello"
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
line_string_literal
|
||||
text: line_str_text "hello"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "\"hello\""
|
||||
|
||||
===
|
||||
String with interpolation
|
||||
===
|
||||
|
||||
"hello \(name)"
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
line_string_literal
|
||||
interpolation:
|
||||
interpolated_expression
|
||||
value: simple_identifier "name"
|
||||
text: line_str_text "hello "
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "\"hello \\(name)\""
|
||||
208
unified/extractor/tests/corpus/swift/loops.txt
Normal file
208
unified/extractor/tests/corpus/swift/loops.txt
Normal file
@@ -0,0 +1,208 @@
|
||||
===
|
||||
For-in over array literal
|
||||
===
|
||||
|
||||
for x in [1, 2, 3] {
|
||||
print(x)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
for_statement
|
||||
collection:
|
||||
array_literal
|
||||
element:
|
||||
integer_literal "1"
|
||||
integer_literal "2"
|
||||
integer_literal "3"
|
||||
item:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "x"
|
||||
statements
|
||||
call_expression
|
||||
simple_identifier "print"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value: simple_identifier "x"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "for x in [1, 2, 3] {\n print(x)\n}"
|
||||
|
||||
===
|
||||
For-in over range
|
||||
===
|
||||
|
||||
for i in 0..<10 {
|
||||
print(i)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
for_statement
|
||||
collection:
|
||||
range_expression
|
||||
end: integer_literal "10"
|
||||
op: ..<
|
||||
start: integer_literal "0"
|
||||
item:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "i"
|
||||
statements
|
||||
call_expression
|
||||
simple_identifier "print"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value: simple_identifier "i"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "for i in 0..<10 {\n print(i)\n}"
|
||||
|
||||
===
|
||||
For-in with where clause
|
||||
===
|
||||
|
||||
for x in xs where x > 0 {
|
||||
print(x)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
for_statement
|
||||
collection: simple_identifier "xs"
|
||||
item:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "x"
|
||||
where_clause
|
||||
where_keyword "where"
|
||||
comparison_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: >
|
||||
rhs: integer_literal "0"
|
||||
statements
|
||||
call_expression
|
||||
simple_identifier "print"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value: simple_identifier "x"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "for x in xs where x > 0 {\n print(x)\n}"
|
||||
|
||||
===
|
||||
While loop
|
||||
===
|
||||
|
||||
while x > 0 {
|
||||
x -= 1
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
while_statement
|
||||
condition:
|
||||
comparison_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: >
|
||||
rhs: integer_literal "0"
|
||||
statements
|
||||
assignment
|
||||
operator: -=
|
||||
result: integer_literal "1"
|
||||
target:
|
||||
directly_assignable_expression
|
||||
simple_identifier "x"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "while x > 0 {\n x -= 1\n}"
|
||||
|
||||
===
|
||||
Repeat-while loop
|
||||
===
|
||||
|
||||
repeat {
|
||||
x -= 1
|
||||
} while x > 0
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
repeat_while_statement
|
||||
condition:
|
||||
comparison_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: >
|
||||
rhs: integer_literal "0"
|
||||
statements
|
||||
assignment
|
||||
operator: -=
|
||||
result: integer_literal "1"
|
||||
target:
|
||||
directly_assignable_expression
|
||||
simple_identifier "x"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "repeat {\n x -= 1\n} while x > 0"
|
||||
|
||||
===
|
||||
Break and continue
|
||||
===
|
||||
|
||||
for x in xs {
|
||||
if x < 0 { continue }
|
||||
if x > 100 { break }
|
||||
print(x)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
for_statement
|
||||
collection: simple_identifier "xs"
|
||||
item:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "x"
|
||||
statements
|
||||
if_statement
|
||||
condition:
|
||||
comparison_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: <
|
||||
rhs: integer_literal "0"
|
||||
statements
|
||||
control_transfer_statement
|
||||
if_statement
|
||||
condition:
|
||||
comparison_expression
|
||||
lhs: simple_identifier "x"
|
||||
op: >
|
||||
rhs: integer_literal "100"
|
||||
statements
|
||||
control_transfer_statement
|
||||
call_expression
|
||||
simple_identifier "print"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value: simple_identifier "x"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "for x in xs {\n if x < 0 { continue }\n if x > 100 { break }\n print(x)\n}"
|
||||
264
unified/extractor/tests/corpus/swift/operators.txt
Normal file
264
unified/extractor/tests/corpus/swift/operators.txt
Normal file
@@ -0,0 +1,264 @@
|
||||
===
|
||||
Addition
|
||||
===
|
||||
|
||||
a + b
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
additive_expression
|
||||
lhs: simple_identifier "a"
|
||||
op: +
|
||||
rhs: simple_identifier "b"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
binary_expr
|
||||
operator: operator "3"
|
||||
left: name_expr "a"
|
||||
right: name_expr "b"
|
||||
|
||||
===
|
||||
Subtraction
|
||||
===
|
||||
|
||||
a - b
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
additive_expression
|
||||
lhs: simple_identifier "a"
|
||||
op: -
|
||||
rhs: simple_identifier "b"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
binary_expr
|
||||
operator: operator "3"
|
||||
left: name_expr "a"
|
||||
right: name_expr "b"
|
||||
|
||||
===
|
||||
Multiplication
|
||||
===
|
||||
|
||||
a * b
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
multiplicative_expression
|
||||
lhs: simple_identifier "a"
|
||||
op: *
|
||||
rhs: simple_identifier "b"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
binary_expr
|
||||
operator: operator "3"
|
||||
left: name_expr "a"
|
||||
right: name_expr "b"
|
||||
|
||||
===
|
||||
Division
|
||||
===
|
||||
|
||||
a / b
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
multiplicative_expression
|
||||
lhs: simple_identifier "a"
|
||||
op: /
|
||||
rhs: simple_identifier "b"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
binary_expr
|
||||
operator: operator "3"
|
||||
left: name_expr "a"
|
||||
right: name_expr "b"
|
||||
|
||||
===
|
||||
Operator precedence: addition and multiplication
|
||||
===
|
||||
|
||||
a + b * c
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
additive_expression
|
||||
lhs: simple_identifier "a"
|
||||
op: +
|
||||
rhs:
|
||||
multiplicative_expression
|
||||
lhs: simple_identifier "b"
|
||||
op: *
|
||||
rhs: simple_identifier "c"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
binary_expr
|
||||
operator: operator "3"
|
||||
left: name_expr "a"
|
||||
right:
|
||||
binary_expr
|
||||
operator: operator "6"
|
||||
left: name_expr "b"
|
||||
right: name_expr "c"
|
||||
|
||||
===
|
||||
Parenthesised expression
|
||||
===
|
||||
|
||||
(a + b) * c
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
multiplicative_expression
|
||||
lhs:
|
||||
tuple_expression
|
||||
value:
|
||||
additive_expression
|
||||
lhs: simple_identifier "a"
|
||||
op: +
|
||||
rhs: simple_identifier "b"
|
||||
op: *
|
||||
rhs: simple_identifier "c"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body:
|
||||
binary_expr
|
||||
operator: operator "9"
|
||||
left: unsupported_node "(a + b)"
|
||||
right: name_expr "c"
|
||||
|
||||
===
|
||||
Comparison
|
||||
===
|
||||
|
||||
a < b
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
comparison_expression
|
||||
lhs: simple_identifier "a"
|
||||
op: <
|
||||
rhs: simple_identifier "b"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "a < b"
|
||||
|
||||
===
|
||||
Equality
|
||||
===
|
||||
|
||||
a == b
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
equality_expression
|
||||
lhs: simple_identifier "a"
|
||||
op: ==
|
||||
rhs: simple_identifier "b"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "a == b"
|
||||
|
||||
===
|
||||
Logical and
|
||||
===
|
||||
|
||||
a && b
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
conjunction_expression
|
||||
lhs: simple_identifier "a"
|
||||
op: &&
|
||||
rhs: simple_identifier "b"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "a && b"
|
||||
|
||||
===
|
||||
Logical or
|
||||
===
|
||||
|
||||
a || b
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
disjunction_expression
|
||||
lhs: simple_identifier "a"
|
||||
op: ||
|
||||
rhs: simple_identifier "b"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "a || b"
|
||||
|
||||
===
|
||||
Logical not
|
||||
===
|
||||
|
||||
!a
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
prefix_expression
|
||||
operation: bang "!"
|
||||
target: simple_identifier "a"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "!a"
|
||||
|
||||
===
|
||||
Range operator
|
||||
===
|
||||
|
||||
1...10
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
range_expression
|
||||
end: integer_literal "10"
|
||||
op: ...
|
||||
start: integer_literal "1"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "1...10"
|
||||
236
unified/extractor/tests/corpus/swift/optionals-and-errors.txt
Normal file
236
unified/extractor/tests/corpus/swift/optionals-and-errors.txt
Normal file
@@ -0,0 +1,236 @@
|
||||
===
|
||||
Optional type annotation
|
||||
===
|
||||
|
||||
let x: Int? = nil
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "x"
|
||||
value: nil
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
type_annotation
|
||||
name:
|
||||
optional_type
|
||||
wrapped:
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let x: Int? = nil"
|
||||
|
||||
===
|
||||
Optional chaining
|
||||
===
|
||||
|
||||
let n = obj?.foo?.bar
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "n"
|
||||
value:
|
||||
navigation_expression
|
||||
suffix:
|
||||
navigation_suffix
|
||||
suffix: simple_identifier "bar"
|
||||
target:
|
||||
navigation_expression
|
||||
suffix:
|
||||
navigation_suffix
|
||||
suffix: simple_identifier "foo"
|
||||
target:
|
||||
simple_identifier "obj"
|
||||
?
|
||||
?
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let n = obj?.foo?.bar"
|
||||
|
||||
===
|
||||
Force unwrap
|
||||
===
|
||||
|
||||
let n = opt!
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "n"
|
||||
value:
|
||||
postfix_expression
|
||||
operation: bang "!"
|
||||
target: simple_identifier "opt"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let n = opt!"
|
||||
|
||||
===
|
||||
Nil-coalescing
|
||||
===
|
||||
|
||||
let n = opt ?? 0
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "n"
|
||||
value:
|
||||
nil_coalescing_expression
|
||||
if_nil: integer_literal "0"
|
||||
value: simple_identifier "opt"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let n = opt ?? 0"
|
||||
|
||||
===
|
||||
Throwing function
|
||||
===
|
||||
|
||||
func read() throws -> String {
|
||||
return ""
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
function_declaration
|
||||
body:
|
||||
function_body
|
||||
statements
|
||||
control_transfer_statement
|
||||
result:
|
||||
line_string_literal
|
||||
name:
|
||||
simple_identifier "read"
|
||||
user_type
|
||||
type_identifier "String"
|
||||
throws "throws"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "func read() throws -> String {\n return \"\"\n}"
|
||||
|
||||
===
|
||||
Do-catch
|
||||
===
|
||||
|
||||
do {
|
||||
try foo()
|
||||
} catch {
|
||||
print(error)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
do_statement
|
||||
statements
|
||||
try_expression
|
||||
expr:
|
||||
call_expression
|
||||
simple_identifier "foo"
|
||||
call_suffix
|
||||
value_arguments
|
||||
try_operator
|
||||
catch_block
|
||||
catch_keyword "catch"
|
||||
statements
|
||||
call_expression
|
||||
simple_identifier "print"
|
||||
call_suffix
|
||||
value_arguments
|
||||
value_argument
|
||||
value: simple_identifier "error"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "do {\n try foo()\n} catch {\n print(error)\n}"
|
||||
|
||||
===
|
||||
Try? expression
|
||||
===
|
||||
|
||||
let result = try? foo()
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "result"
|
||||
value:
|
||||
try_expression
|
||||
expr:
|
||||
call_expression
|
||||
simple_identifier "foo"
|
||||
call_suffix
|
||||
value_arguments
|
||||
try_operator
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let result = try? foo()"
|
||||
|
||||
===
|
||||
Try! expression
|
||||
===
|
||||
|
||||
let result = try! foo()
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "result"
|
||||
value:
|
||||
try_expression
|
||||
expr:
|
||||
call_expression
|
||||
simple_identifier "foo"
|
||||
call_suffix
|
||||
value_arguments
|
||||
try_operator
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let result = try! foo()"
|
||||
490
unified/extractor/tests/corpus/swift/types.txt
Normal file
490
unified/extractor/tests/corpus/swift/types.txt
Normal file
@@ -0,0 +1,490 @@
|
||||
===
|
||||
Empty class
|
||||
===
|
||||
|
||||
class Foo {}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
class_declaration
|
||||
body:
|
||||
class_body
|
||||
declaration_kind: class
|
||||
name: type_identifier "Foo"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "class Foo {}"
|
||||
|
||||
===
|
||||
Class with stored properties
|
||||
===
|
||||
|
||||
class Point {
|
||||
var x: Int
|
||||
var y: Int
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
class_declaration
|
||||
body:
|
||||
class_body
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "x"
|
||||
value_binding_pattern
|
||||
mutability: var
|
||||
type_annotation
|
||||
name:
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "y"
|
||||
value_binding_pattern
|
||||
mutability: var
|
||||
type_annotation
|
||||
name:
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
declaration_kind: class
|
||||
name: type_identifier "Point"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "class Point {\n var x: Int\n var y: Int\n}"
|
||||
|
||||
===
|
||||
Class with initializer
|
||||
===
|
||||
|
||||
class Point {
|
||||
var x: Int
|
||||
init(x: Int) {
|
||||
self.x = x
|
||||
}
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
class_declaration
|
||||
body:
|
||||
class_body
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "x"
|
||||
value_binding_pattern
|
||||
mutability: var
|
||||
type_annotation
|
||||
name:
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
init_declaration
|
||||
body:
|
||||
function_body
|
||||
statements
|
||||
assignment
|
||||
operator: =
|
||||
result: simple_identifier "x"
|
||||
target:
|
||||
directly_assignable_expression
|
||||
navigation_expression
|
||||
suffix:
|
||||
navigation_suffix
|
||||
suffix: simple_identifier "x"
|
||||
target:
|
||||
self_expression
|
||||
name: init
|
||||
parameter
|
||||
name:
|
||||
simple_identifier "x"
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
declaration_kind: class
|
||||
name: type_identifier "Point"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "class Point {\n var x: Int\n init(x: Int) {\n self.x = x\n }\n}"
|
||||
|
||||
===
|
||||
Class with method
|
||||
===
|
||||
|
||||
class Counter {
|
||||
var n = 0
|
||||
func bump() {
|
||||
n += 1
|
||||
}
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
class_declaration
|
||||
body:
|
||||
class_body
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "n"
|
||||
value: integer_literal "0"
|
||||
value_binding_pattern
|
||||
mutability: var
|
||||
function_declaration
|
||||
body:
|
||||
function_body
|
||||
statements
|
||||
assignment
|
||||
operator: +=
|
||||
result: integer_literal "1"
|
||||
target:
|
||||
directly_assignable_expression
|
||||
simple_identifier "n"
|
||||
name: simple_identifier "bump"
|
||||
declaration_kind: class
|
||||
name: type_identifier "Counter"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "class Counter {\n var n = 0\n func bump() {\n n += 1\n }\n}"
|
||||
|
||||
===
|
||||
Class inheritance
|
||||
===
|
||||
|
||||
class Dog: Animal {}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
class_declaration
|
||||
body:
|
||||
class_body
|
||||
declaration_kind: class
|
||||
name: type_identifier "Dog"
|
||||
inheritance_specifier
|
||||
inherits_from:
|
||||
user_type
|
||||
type_identifier "Animal"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "class Dog: Animal {}"
|
||||
|
||||
===
|
||||
Struct
|
||||
===
|
||||
|
||||
struct Point {
|
||||
let x: Int
|
||||
let y: Int
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
class_declaration
|
||||
body:
|
||||
class_body
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "x"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
type_annotation
|
||||
name:
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "y"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
type_annotation
|
||||
name:
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
declaration_kind: struct
|
||||
name: type_identifier "Point"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "struct Point {\n let x: Int\n let y: Int\n}"
|
||||
|
||||
===
|
||||
Enum with cases
|
||||
===
|
||||
|
||||
enum Direction {
|
||||
case north
|
||||
case south
|
||||
case east
|
||||
case west
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
class_declaration
|
||||
body:
|
||||
enum_class_body
|
||||
enum_entry
|
||||
name: simple_identifier "north"
|
||||
enum_entry
|
||||
name: simple_identifier "south"
|
||||
enum_entry
|
||||
name: simple_identifier "east"
|
||||
enum_entry
|
||||
name: simple_identifier "west"
|
||||
declaration_kind: enum
|
||||
name: type_identifier "Direction"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "enum Direction {\n case north\n case south\n case east\n case west\n}"
|
||||
|
||||
===
|
||||
Enum with associated values
|
||||
===
|
||||
|
||||
enum Shape {
|
||||
case circle(radius: Double)
|
||||
case square(side: Double)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
class_declaration
|
||||
body:
|
||||
enum_class_body
|
||||
enum_entry
|
||||
data_contents:
|
||||
enum_type_parameters
|
||||
name:
|
||||
user_type
|
||||
type_identifier "Double"
|
||||
simple_identifier "radius"
|
||||
name: simple_identifier "circle"
|
||||
enum_entry
|
||||
data_contents:
|
||||
enum_type_parameters
|
||||
name:
|
||||
user_type
|
||||
type_identifier "Double"
|
||||
simple_identifier "side"
|
||||
name: simple_identifier "square"
|
||||
declaration_kind: enum
|
||||
name: type_identifier "Shape"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "enum Shape {\n case circle(radius: Double)\n case square(side: Double)\n}"
|
||||
|
||||
===
|
||||
Protocol declaration
|
||||
===
|
||||
|
||||
protocol Drawable {
|
||||
func draw()
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
protocol_declaration
|
||||
body:
|
||||
protocol_body
|
||||
protocol_function_declaration
|
||||
name: simple_identifier "draw"
|
||||
declaration_kind: protocol
|
||||
name: type_identifier "Drawable"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "protocol Drawable {\n func draw()\n}"
|
||||
|
||||
===
|
||||
Extension
|
||||
===
|
||||
|
||||
extension Int {
|
||||
func squared() -> Int { return self * self }
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
class_declaration
|
||||
body:
|
||||
class_body
|
||||
function_declaration
|
||||
body:
|
||||
function_body
|
||||
statements
|
||||
control_transfer_statement
|
||||
result:
|
||||
multiplicative_expression
|
||||
lhs:
|
||||
self_expression
|
||||
op: *
|
||||
rhs:
|
||||
self_expression
|
||||
name:
|
||||
simple_identifier "squared"
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
declaration_kind: extension
|
||||
name:
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "extension Int {\n func squared() -> Int { return self * self }\n}"
|
||||
|
||||
===
|
||||
Computed property
|
||||
===
|
||||
|
||||
class Rect {
|
||||
var w: Double
|
||||
var h: Double
|
||||
var area: Double {
|
||||
return w * h
|
||||
}
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
class_declaration
|
||||
body:
|
||||
class_body
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "w"
|
||||
value_binding_pattern
|
||||
mutability: var
|
||||
type_annotation
|
||||
name:
|
||||
user_type
|
||||
type_identifier "Double"
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "h"
|
||||
value_binding_pattern
|
||||
mutability: var
|
||||
type_annotation
|
||||
name:
|
||||
user_type
|
||||
type_identifier "Double"
|
||||
property_declaration
|
||||
computed_value:
|
||||
computed_property
|
||||
statements
|
||||
control_transfer_statement
|
||||
result:
|
||||
multiplicative_expression
|
||||
lhs: simple_identifier "w"
|
||||
op: *
|
||||
rhs: simple_identifier "h"
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "area"
|
||||
value_binding_pattern
|
||||
mutability: var
|
||||
type_annotation
|
||||
name:
|
||||
user_type
|
||||
type_identifier "Double"
|
||||
declaration_kind: class
|
||||
name: type_identifier "Rect"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "class Rect {\n var w: Double\n var h: Double\n var area: Double {\n return w * h\n }\n}"
|
||||
|
||||
===
|
||||
Property with getter and setter
|
||||
===
|
||||
|
||||
class Box {
|
||||
private var _v = 0
|
||||
var v: Int {
|
||||
get { return _v }
|
||||
set { _v = newValue }
|
||||
}
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
class_declaration
|
||||
body:
|
||||
class_body
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "_v"
|
||||
value: integer_literal "0"
|
||||
modifiers
|
||||
visibility_modifier
|
||||
value_binding_pattern
|
||||
mutability: var
|
||||
property_declaration
|
||||
computed_value:
|
||||
computed_property
|
||||
computed_getter
|
||||
getter_specifier
|
||||
statements
|
||||
control_transfer_statement
|
||||
result: simple_identifier "_v"
|
||||
computed_setter
|
||||
setter_specifier
|
||||
statements
|
||||
assignment
|
||||
operator: =
|
||||
result: simple_identifier "newValue"
|
||||
target:
|
||||
directly_assignable_expression
|
||||
simple_identifier "_v"
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "v"
|
||||
value_binding_pattern
|
||||
mutability: var
|
||||
type_annotation
|
||||
name:
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
declaration_kind: class
|
||||
name: type_identifier "Box"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "class Box {\n private var _v = 0\n var v: Int {\n get { return _v }\n set { _v = newValue }\n }\n}"
|
||||
187
unified/extractor/tests/corpus/swift/variables.txt
Normal file
187
unified/extractor/tests/corpus/swift/variables.txt
Normal file
@@ -0,0 +1,187 @@
|
||||
===
|
||||
Let binding
|
||||
===
|
||||
|
||||
let x = 1
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "x"
|
||||
value: integer_literal "1"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let x = 1"
|
||||
|
||||
===
|
||||
Var binding
|
||||
===
|
||||
|
||||
var x = 1
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "x"
|
||||
value: integer_literal "1"
|
||||
value_binding_pattern
|
||||
mutability: var
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "var x = 1"
|
||||
|
||||
===
|
||||
Let with type annotation
|
||||
===
|
||||
|
||||
let x: Int = 1
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "x"
|
||||
value: integer_literal "1"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
type_annotation
|
||||
name:
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let x: Int = 1"
|
||||
|
||||
===
|
||||
Var without initialiser
|
||||
===
|
||||
|
||||
var x: Int
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "x"
|
||||
value_binding_pattern
|
||||
mutability: var
|
||||
type_annotation
|
||||
name:
|
||||
user_type
|
||||
type_identifier "Int"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "var x: Int"
|
||||
|
||||
===
|
||||
Tuple destructuring binding
|
||||
===
|
||||
|
||||
let (a, b) = pair
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
pattern
|
||||
simple_identifier "a"
|
||||
pattern
|
||||
simple_identifier "b"
|
||||
value: simple_identifier "pair"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let (a, b) = pair"
|
||||
|
||||
===
|
||||
Multiple bindings on one line
|
||||
===
|
||||
|
||||
let x = 1, y = 2
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
property_declaration
|
||||
name:
|
||||
pattern
|
||||
bound_identifier: simple_identifier "x"
|
||||
pattern
|
||||
bound_identifier: simple_identifier "y"
|
||||
value:
|
||||
integer_literal "1"
|
||||
integer_literal "2"
|
||||
value_binding_pattern
|
||||
mutability: let
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "let x = 1, y = 2"
|
||||
|
||||
===
|
||||
Assignment
|
||||
===
|
||||
|
||||
x = 1
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
assignment
|
||||
operator: =
|
||||
result: integer_literal "1"
|
||||
target:
|
||||
directly_assignable_expression
|
||||
simple_identifier "x"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "x = 1"
|
||||
|
||||
===
|
||||
Compound assignment
|
||||
===
|
||||
|
||||
x += 1
|
||||
|
||||
---
|
||||
|
||||
source_file
|
||||
assignment
|
||||
operator: +=
|
||||
result: integer_literal "1"
|
||||
target:
|
||||
directly_assignable_expression
|
||||
simple_identifier "x"
|
||||
|
||||
---
|
||||
|
||||
top_level
|
||||
body: unsupported_node "x += 1"
|
||||
Reference in New Issue
Block a user