Skip to content

Commit 5ca5cea

Browse files
authored
Merge pull request #4 from swhitty/return-type
Fix Return type
2 parents 50241a0 + 8844668 commit 5ca5cea

File tree

5 files changed

+66
-42
lines changed

5 files changed

+66
-42
lines changed

.github/workflows/build.yml

Lines changed: 8 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,10 @@ jobs:
1919
run: swift build --build-tests --enable-experimental-prebuilts
2020
- name: Test
2121
run: swift test --skip-build
22-
23-
xcode_15_4:
24-
runs-on: macos-14
25-
env:
26-
DEVELOPER_DIR: /Applications/Xcode_15.4.app/Contents/Developer
27-
steps:
28-
- name: Checkout
29-
uses: actions/checkout@v4
30-
- name: Version
31-
run: swift --version
32-
- name: Build
33-
run: swift build --build-tests
34-
- name: Test
35-
run: swift test --skip-build
36-
37-
xcode_15_2:
38-
runs-on: macos-14
22+
xcode_26:
23+
runs-on: macos-15
3924
env:
40-
DEVELOPER_DIR: /Applications/Xcode_15.2.app/Contents/Developer
25+
DEVELOPER_DIR: /Applications/Xcode_26.0.app/Contents/Developer
4126
steps:
4227
- name: Checkout
4328
uses: actions/checkout@v4
@@ -48,22 +33,22 @@ jobs:
4833
- name: Test
4934
run: swift test --skip-build
5035

51-
linux_swift_5_10:
36+
linux_swift_6_1:
5237
runs-on: ubuntu-latest
53-
container: swift:5.10
38+
container: swift:6.1.2
5439
steps:
5540
- name: Checkout
5641
uses: actions/checkout@v4
5742
- name: Version
5843
run: swift --version
5944
- name: Build
60-
run: swift build --build-tests
45+
run: swift build --build-tests --enable-experimental-prebuilts
6146
- name: Test
6247
run: swift test --skip-build
6348

64-
linux_swift_5_9:
49+
linux_swift_6_2:
6550
runs-on: ubuntu-latest
66-
container: swift:5.9
51+
container: swiftlang/swift:nightly-6.2-noble
6752
steps:
6853
- name: Checkout
6954
uses: actions/checkout@v4
@@ -73,16 +58,3 @@ jobs:
7358
run: swift build --build-tests
7459
- name: Test
7560
run: swift test --skip-build
76-
77-
linux_swift_6_1:
78-
runs-on: ubuntu-latest
79-
container: swift:6.1.2
80-
steps:
81-
- name: Checkout
82-
uses: actions/checkout@v4
83-
- name: Version
84-
run: swift --version
85-
- name: Build
86-
run: swift build --build-tests --enable-experimental-prebuilts
87-
- name: Test
88-
run: swift test --skip-build

Macros/Tests/HTTPHandlerMacroTests.swift

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,15 @@
2929
// SOFTWARE.
3030
//
3131

32+
import Foundation
3233
import FlyingFox
3334
import FlyingFoxMacros
34-
import XCTest
35+
import Testing
3536

36-
final class HTTPHandlerMacroTests: XCTestCase {
37+
struct HTTPHandlerMacroTests {
3738

38-
func testHandler() async throws {
39+
@Test
40+
func handler() async throws {
3941
let handler = MacroHandler()
4042

4143
await AsyncAssertEqual(
@@ -55,6 +57,24 @@ final class HTTPHandlerMacroTests: XCTestCase {
5557
try await handler.handleRequest(.make(path: "/fish")).jsonDictionaryBody,
5658
["name": "Pickles"]
5759
)
60+
61+
await AsyncAssertEqual(
62+
try await handler.handleRequest(.make(path: "/chips")).jsonDictionaryBody,
63+
["name": "🍟"]
64+
)
65+
66+
await AsyncAssertEqual(
67+
try await handler.handleRequest(.make(path: "/shrimp")).jsonDictionaryBody,
68+
["name": "🦐"]
69+
)
70+
71+
await AsyncAssertEqual(
72+
try await handler.handleRequest(.make(path: "/all")).jsonArrayBody,
73+
[
74+
["name": "Tyger Tyger"],
75+
["name": "Burning Bright"]
76+
]
77+
)
5878
}
5979
}
6080

@@ -79,9 +99,29 @@ private struct MacroHandler {
7999
Fish(name: "Pickles")
80100
}
81101

102+
@JSONRoute("/chips")
103+
func getFoo() -> MacroHandler.Chips {
104+
MacroHandler.Chips(name: "🍟")
105+
}
106+
107+
@JSONRoute("/shrimp")
108+
func getShrimp() -> some Encodable {
109+
MacroHandler.Chips(name: "🦐")
110+
}
111+
112+
@JSONRoute("/all")
113+
func getAll() -> [Fish] {
114+
[
115+
Fish(name: "Tyger Tyger"),
116+
Fish(name: "Burning Bright")
117+
]
118+
}
119+
82120
struct Fish: Encodable {
83121
var name: String
84122
}
123+
124+
typealias Chips = Fish
85125
}
86126

87127
private extension HTTPResponse {
@@ -95,4 +135,14 @@ private extension HTTPResponse {
95135
return object as? NSDictionary
96136
}
97137
}
138+
139+
var jsonArrayBody: NSArray? {
140+
get async {
141+
guard let data = try? await bodyData,
142+
let object = try? JSONSerialization.jsonObject(with: data, options: []) else {
143+
return nil
144+
}
145+
return object as? NSArray
146+
}
147+
}
98148
}

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// swift-tools-version:5.9
1+
// swift-tools-version:6.1
22

33
import PackageDescription
44
import CompilerPluginSupport

Plugins/Sources/FunctionDecl.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ extension FunctionDecl {
9090
parameters: [],
9191
effects: [],
9292
attributes: [],
93-
returnType: .init(syntax.signature.returnClause?.type.as(IdentifierTypeSyntax.self)?.name.text)
93+
returnType: .init(syntax.signature.returnClause?.type.trimmedDescription)
9494
)
9595

9696
decl.attributes = syntax.attributes
@@ -115,7 +115,7 @@ extension FunctionDecl {
115115
decl.effects.insert(.async)
116116
}
117117

118-
if syntax.signature.effectSpecifiers?.throwsSpecifier != nil {
118+
if syntax.signature.effectSpecifiers?.throwsClause?.throwsSpecifier != nil {
119119
decl.effects.insert(.throws)
120120
}
121121

Plugins/Sources/HTTPHandlerMacro.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,11 @@ import SwiftSyntaxBuilder
3434
import SwiftSyntaxMacros
3535

3636
public enum HTTPHandlerMacro: MemberMacro {
37+
3738
public static func expansion(
3839
of node: AttributeSyntax,
3940
providingMembersOf declaration: some DeclGroupSyntax,
41+
conformingTo protocols: [TypeSyntax],
4042
in context: some MacroExpansionContext
4143
) throws -> [DeclSyntax] {
4244
let memberList = declaration.memberBlock.members

0 commit comments

Comments
 (0)