Skip to content

Commit c364999

Browse files
authored
Merge pull request #22540 from github/hvitved-swift-function-modifiers
Unified: Extract modifiers for function declarations
2 parents eb3ddb8 + a83eb22 commit c364999

8 files changed

Lines changed: 147 additions & 0 deletions

File tree

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
558558
// an empty `block`.
559559
rule!(
560560
(functionDecl
561+
modifiers: _* @mods
561562
name: @name
562563
genericParameterClause: (genericParameterClause parameters: _* @type_params)?
563564
signature: (functionSignature
@@ -566,6 +567,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
566567
body: (codeBlock statements: _* @body))
567568
=>
568569
(function_declaration
570+
modifier: {mods}
569571
name_node: (identifier #{name})
570572
type_parameter: {type_params}
571573
parameter: {params}
@@ -574,13 +576,15 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
574576
),
575577
rule!(
576578
(functionDecl
579+
modifiers: _* @mods
577580
name: @name
578581
genericParameterClause: (genericParameterClause parameters: _* @type_params)?
579582
signature: (functionSignature
580583
parameterClause: (functionParameterClause parameters: _* @params)
581584
returnClause: (returnClause type: @ret)?))
582585
=>
583586
(function_declaration
587+
modifier: {mods}
584588
name_node: (identifier #{name})
585589
type_parameter: {type_params}
586590
parameter: {params}

unified/extractor/tests/corpus/swift/control-flow/discard-statement.output

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ top_level
7575
type: unsupported_node "~Copyable"
7676
member:
7777
function_declaration
78+
modifier: modifier "consuming"
7879
name_node: identifier "close"
7980
body:
8081
block
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
class Factory {
2+
class func make() {}
3+
}
4+
5+
---
6+
7+
sourceFile
8+
endOfFileToken: endOfFile
9+
statements:
10+
codeBlockItem
11+
item:
12+
classDecl
13+
attributes:
14+
name: identifier "Factory"
15+
memberBlock:
16+
memberBlock
17+
leftBrace: {
18+
rightBrace: }
19+
members:
20+
memberBlockItem
21+
decl:
22+
functionDecl
23+
attributes:
24+
body:
25+
codeBlock
26+
leftBrace: {
27+
rightBrace: }
28+
statements:
29+
name: identifier "make"
30+
modifiers:
31+
declModifier
32+
name: class
33+
signature:
34+
functionSignature
35+
parameterClause:
36+
functionParameterClause
37+
leftParen: (
38+
rightParen: )
39+
parameters:
40+
funcKeyword: func
41+
modifiers:
42+
classKeyword: class
43+
44+
---
45+
46+
top_level
47+
body:
48+
block
49+
stmt:
50+
class_like_declaration
51+
modifier: modifier "class"
52+
name_node: identifier "Factory"
53+
member:
54+
function_declaration
55+
modifier: modifier "class"
56+
name_node: identifier "make"
57+
body: block "class func make() {}"
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class Factory {
2+
class func make() {}
3+
}

unified/extractor/tests/corpus/swift/types/protocol-declaration.output

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
protocol Drawable {
22
func draw()
3+
static func make()
34
}
45

56
---
@@ -31,6 +32,22 @@ sourceFile
3132
rightParen: )
3233
parameters:
3334
funcKeyword: func
35+
memberBlockItem
36+
decl:
37+
functionDecl
38+
attributes:
39+
name: identifier "make"
40+
modifiers:
41+
declModifier
42+
name: static
43+
signature:
44+
functionSignature
45+
parameterClause:
46+
functionParameterClause
47+
leftParen: (
48+
rightParen: )
49+
parameters:
50+
funcKeyword: func
3451
modifiers:
3552
protocolKeyword: protocol
3653

@@ -47,3 +64,7 @@ top_level
4764
function_declaration
4865
name_node: identifier "draw"
4966
body: block "func draw()"
67+
function_declaration
68+
modifier: modifier "static"
69+
name_node: identifier "make"
70+
body: block "static func make()"
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
protocol Drawable {
22
func draw()
3+
static func make()
34
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
class Factory {
2+
static func make() {}
3+
}
4+
5+
---
6+
7+
sourceFile
8+
endOfFileToken: endOfFile
9+
statements:
10+
codeBlockItem
11+
item:
12+
classDecl
13+
attributes:
14+
name: identifier "Factory"
15+
memberBlock:
16+
memberBlock
17+
leftBrace: {
18+
rightBrace: }
19+
members:
20+
memberBlockItem
21+
decl:
22+
functionDecl
23+
attributes:
24+
body:
25+
codeBlock
26+
leftBrace: {
27+
rightBrace: }
28+
statements:
29+
name: identifier "make"
30+
modifiers:
31+
declModifier
32+
name: static
33+
signature:
34+
functionSignature
35+
parameterClause:
36+
functionParameterClause
37+
leftParen: (
38+
rightParen: )
39+
parameters:
40+
funcKeyword: func
41+
modifiers:
42+
classKeyword: class
43+
44+
---
45+
46+
top_level
47+
body:
48+
block
49+
stmt:
50+
class_like_declaration
51+
modifier: modifier "class"
52+
name_node: identifier "Factory"
53+
member:
54+
function_declaration
55+
modifier: modifier "static"
56+
name_node: identifier "make"
57+
body: block "static func make() {}"
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class Factory {
2+
static func make() {}
3+
}

0 commit comments

Comments
 (0)