From d3e90db400dcd20e601eaae1af372b1c0c8b08c8 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 10 Sep 2026 13:21:22 +0200 Subject: [PATCH 1/3] unified: Extract Swift function modifiers Capture declaration modifiers on Swift functions with and without bodies, and add corpus coverage for consuming, static, and class functions. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .../extractor/src/languages/swift/swift.rs | 4 ++ .../control-flow/discard-statement.output | 1 + .../corpus/swift/types/class-function.output | 57 +++++++++++++++++++ .../corpus/swift/types/class-function.swift | 3 + .../corpus/swift/types/static-function.output | 57 +++++++++++++++++++ .../corpus/swift/types/static-function.swift | 3 + 6 files changed, 125 insertions(+) create mode 100644 unified/extractor/tests/corpus/swift/types/class-function.output create mode 100644 unified/extractor/tests/corpus/swift/types/class-function.swift create mode 100644 unified/extractor/tests/corpus/swift/types/static-function.output create mode 100644 unified/extractor/tests/corpus/swift/types/static-function.swift diff --git a/unified/extractor/src/languages/swift/swift.rs b/unified/extractor/src/languages/swift/swift.rs index 960900070ba0..21a8c5009bb3 100644 --- a/unified/extractor/src/languages/swift/swift.rs +++ b/unified/extractor/src/languages/swift/swift.rs @@ -558,6 +558,7 @@ fn translation_rules() -> Vec> { // an empty `block`. rule!( (functionDecl + modifiers: _* @mods name: @name genericParameterClause: (genericParameterClause parameters: _* @type_params)? signature: (functionSignature @@ -566,6 +567,7 @@ fn translation_rules() -> Vec> { body: (codeBlock statements: _* @body)) => (function_declaration + modifier: {mods} name_node: (identifier #{name}) type_parameter: {type_params} parameter: {params} @@ -574,6 +576,7 @@ fn translation_rules() -> Vec> { ), rule!( (functionDecl + modifiers: _* @mods name: @name genericParameterClause: (genericParameterClause parameters: _* @type_params)? signature: (functionSignature @@ -581,6 +584,7 @@ fn translation_rules() -> Vec> { returnClause: (returnClause type: @ret)?)) => (function_declaration + modifier: {mods} name_node: (identifier #{name}) type_parameter: {type_params} parameter: {params} diff --git a/unified/extractor/tests/corpus/swift/control-flow/discard-statement.output b/unified/extractor/tests/corpus/swift/control-flow/discard-statement.output index 8fc2dfb9d963..c4418dba888b 100644 --- a/unified/extractor/tests/corpus/swift/control-flow/discard-statement.output +++ b/unified/extractor/tests/corpus/swift/control-flow/discard-statement.output @@ -75,6 +75,7 @@ top_level type: unsupported_node "~Copyable" member: function_declaration + modifier: modifier "consuming" name_node: identifier "close" body: block diff --git a/unified/extractor/tests/corpus/swift/types/class-function.output b/unified/extractor/tests/corpus/swift/types/class-function.output new file mode 100644 index 000000000000..ed00913dafde --- /dev/null +++ b/unified/extractor/tests/corpus/swift/types/class-function.output @@ -0,0 +1,57 @@ +class Factory { + class func make() {} +} + +--- + +sourceFile + endOfFileToken: endOfFile + statements: + codeBlockItem + item: + classDecl + attributes: + name: identifier "Factory" + memberBlock: + memberBlock + leftBrace: { + rightBrace: } + members: + memberBlockItem + decl: + functionDecl + attributes: + body: + codeBlock + leftBrace: { + rightBrace: } + statements: + name: identifier "make" + modifiers: + declModifier + name: class + signature: + functionSignature + parameterClause: + functionParameterClause + leftParen: ( + rightParen: ) + parameters: + funcKeyword: func + modifiers: + classKeyword: class + +--- + +top_level + body: + block + stmt: + class_like_declaration + modifier: modifier "class" + name_node: identifier "Factory" + member: + function_declaration + modifier: modifier "class" + name_node: identifier "make" + body: block "class func make() {}" diff --git a/unified/extractor/tests/corpus/swift/types/class-function.swift b/unified/extractor/tests/corpus/swift/types/class-function.swift new file mode 100644 index 000000000000..d4424ab3005e --- /dev/null +++ b/unified/extractor/tests/corpus/swift/types/class-function.swift @@ -0,0 +1,3 @@ +class Factory { + class func make() {} +} diff --git a/unified/extractor/tests/corpus/swift/types/static-function.output b/unified/extractor/tests/corpus/swift/types/static-function.output new file mode 100644 index 000000000000..f610765a02eb --- /dev/null +++ b/unified/extractor/tests/corpus/swift/types/static-function.output @@ -0,0 +1,57 @@ +class Factory { + static func make() {} +} + +--- + +sourceFile + endOfFileToken: endOfFile + statements: + codeBlockItem + item: + classDecl + attributes: + name: identifier "Factory" + memberBlock: + memberBlock + leftBrace: { + rightBrace: } + members: + memberBlockItem + decl: + functionDecl + attributes: + body: + codeBlock + leftBrace: { + rightBrace: } + statements: + name: identifier "make" + modifiers: + declModifier + name: static + signature: + functionSignature + parameterClause: + functionParameterClause + leftParen: ( + rightParen: ) + parameters: + funcKeyword: func + modifiers: + classKeyword: class + +--- + +top_level + body: + block + stmt: + class_like_declaration + modifier: modifier "class" + name_node: identifier "Factory" + member: + function_declaration + modifier: modifier "static" + name_node: identifier "make" + body: block "static func make() {}" diff --git a/unified/extractor/tests/corpus/swift/types/static-function.swift b/unified/extractor/tests/corpus/swift/types/static-function.swift new file mode 100644 index 000000000000..3b70d91795cb --- /dev/null +++ b/unified/extractor/tests/corpus/swift/types/static-function.swift @@ -0,0 +1,3 @@ +class Factory { + static func make() {} +} From c339f348295f016553c5473e6051a089768ff68c Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 10 Sep 2026 13:34:04 +0200 Subject: [PATCH 2/3] unified: Test bodyless Swift function modifiers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../swift/types/protocol-declaration.output | 21 +++++++++++++++++++ .../swift/types/protocol-declaration.swift | 1 + 2 files changed, 22 insertions(+) diff --git a/unified/extractor/tests/corpus/swift/types/protocol-declaration.output b/unified/extractor/tests/corpus/swift/types/protocol-declaration.output index 1521bc349b92..188333076fc5 100644 --- a/unified/extractor/tests/corpus/swift/types/protocol-declaration.output +++ b/unified/extractor/tests/corpus/swift/types/protocol-declaration.output @@ -1,5 +1,6 @@ protocol Drawable { func draw() + static func make() } --- @@ -31,6 +32,22 @@ sourceFile rightParen: ) parameters: funcKeyword: func + memberBlockItem + decl: + functionDecl + attributes: + name: identifier "make" + modifiers: + declModifier + name: static + signature: + functionSignature + parameterClause: + functionParameterClause + leftParen: ( + rightParen: ) + parameters: + funcKeyword: func modifiers: protocolKeyword: protocol @@ -47,3 +64,7 @@ top_level function_declaration name_node: identifier "draw" body: block "func draw()" + function_declaration + modifier: modifier "static" + name: identifier "make" + body: block "static func make()" diff --git a/unified/extractor/tests/corpus/swift/types/protocol-declaration.swift b/unified/extractor/tests/corpus/swift/types/protocol-declaration.swift index 030b68a60c04..417886c213de 100644 --- a/unified/extractor/tests/corpus/swift/types/protocol-declaration.swift +++ b/unified/extractor/tests/corpus/swift/types/protocol-declaration.swift @@ -1,3 +1,4 @@ protocol Drawable { func draw() + static func make() } From a83eb2205129ce01aaa2df2e98a82a2f9682f385 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 11 Sep 2026 09:05:36 +0200 Subject: [PATCH 3/3] unified: Refresh rebased Swift corpus output Regenerate the bodyless function modifier fixture against the updated unified AST field names from main. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .../tests/corpus/swift/types/protocol-declaration.output | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unified/extractor/tests/corpus/swift/types/protocol-declaration.output b/unified/extractor/tests/corpus/swift/types/protocol-declaration.output index 188333076fc5..dacfae76cb34 100644 --- a/unified/extractor/tests/corpus/swift/types/protocol-declaration.output +++ b/unified/extractor/tests/corpus/swift/types/protocol-declaration.output @@ -66,5 +66,5 @@ top_level body: block "func draw()" function_declaration modifier: modifier "static" - name: identifier "make" + name_node: identifier "make" body: block "static func make()"