Skip to content

Commit ce27af6

Browse files
committed
[Swiftify] make protocol extension methods public
1 parent aa7c250 commit ce27af6

File tree

2 files changed

+19
-9
lines changed

2 files changed

+19
-9
lines changed

lib/Macros/Sources/SwiftMacros/SwiftifyImportMacro.swift

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1808,11 +1808,21 @@ public struct SwiftifyImportProtocolMacro: ExtensionMacro {
18081808
}
18091809
let overloads = try arguments.map {
18101810
let (method, args) = try parseProtocolMacroParam($0, methods: methods)
1811-
let function = try constructOverloadFunction(
1811+
let hasVisibilityModifier = method.modifiers.contains { modifier in
1812+
let modName = modifier.name.trimmed.text
1813+
return modName == "public" || modName == "internal" || modName == "open"
1814+
|| modName == "private" || modName == "filePrivate"
1815+
}
1816+
let result = try constructOverloadFunction(
18121817
forDecl: method, leadingTrivia: Trivia(), args: args,
18131818
spanAvailability: spanAvailability,
18141819
typeMappings: typeMappings)
1815-
return MemberBlockItemSyntax(decl: function)
1820+
guard let newMethod = result.as(FunctionDeclSyntax.self)?
1821+
.with(\.modifiers, method.modifiers
1822+
+ (hasVisibilityModifier ? [] : [DeclModifierSyntax(name: .identifier("public"))])) else {
1823+
throw RuntimeError("expected FunctionDeclSyntax but got \(result.kind) for \(method.description)")
1824+
}
1825+
return MemberBlockItemSyntax(decl: newMethod)
18161826
}
18171827

18181828
return [ExtensionDeclSyntax(extensionKeyword: .identifier("extension"), extendedType: type,

test/Macros/SwiftifyImport/CountedBy/Protocol.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ protocol OverloadedProtocol {
4242
------------------------------
4343
extension SimpleProtocol {
4444
/// This is an auto-generated wrapper for safer interop
45-
@_alwaysEmitIntoClient @_disfavoredOverload
45+
@_alwaysEmitIntoClient @_disfavoredOverload public
4646
func myFunc(_ ptr: UnsafeBufferPointer<CInt>) {
4747
let len = CInt(exactly: ptr.count)!
4848
return unsafe myFunc(ptr.baseAddress!, len)
@@ -53,15 +53,15 @@ extension SimpleProtocol {
5353
------------------------------
5454
extension SpanProtocol {
5555
/// This is an auto-generated wrapper for safer interop
56-
@_alwaysEmitIntoClient @_disfavoredOverload
56+
@_alwaysEmitIntoClient @_disfavoredOverload public
5757
func foo(_ ptr: Span<CInt>) {
5858
let len = CInt(exactly: ptr.count)!
5959
return unsafe ptr.withUnsafeBufferPointer { _ptrPtr in
6060
return unsafe foo(_ptrPtr.baseAddress!, len)
6161
}
6262
}
6363
/// This is an auto-generated wrapper for safer interop
64-
@_alwaysEmitIntoClient @_lifetime(borrow self) @_disfavoredOverload
64+
@_alwaysEmitIntoClient @_lifetime(borrow self) @_disfavoredOverload public
6565
func bar(_ len: CInt) -> Span<CInt> {
6666
return unsafe _swiftifyOverrideLifetime(Span<CInt>(_unsafeStart: unsafe bar(len), count: Int(len)), copying: ())
6767
}
@@ -71,7 +71,7 @@ extension SpanProtocol {
7171
------------------------------
7272
extension MixedProtocol {
7373
/// This is an auto-generated wrapper for safer interop
74-
@_alwaysEmitIntoClient @_disfavoredOverload
74+
@_alwaysEmitIntoClient @_disfavoredOverload public
7575
/// Some doc comment
7676
func foo(_ ptr: Span<CInt>) {
7777
let len = CInt(exactly: ptr.count)!
@@ -80,7 +80,7 @@ extension MixedProtocol {
8080
}
8181
}
8282
/// This is an auto-generated wrapper for safer interop
83-
@_alwaysEmitIntoClient @_disfavoredOverload
83+
@_alwaysEmitIntoClient @_disfavoredOverload public
8484
func bar(_ ptr: UnsafeBufferPointer<CInt>) {
8585
let len = CInt(exactly: ptr.count)!
8686
return unsafe bar(ptr.baseAddress!, len)
@@ -91,13 +91,13 @@ extension MixedProtocol {
9191
------------------------------
9292
extension OverloadedProtocol {
9393
/// This is an auto-generated wrapper for safer interop
94-
@_alwaysEmitIntoClient @_disfavoredOverload
94+
@_alwaysEmitIntoClient @_disfavoredOverload public
9595
func foo(_ ptr: UnsafeBufferPointer<CInt>) {
9696
let len1 = CInt(exactly: ptr.count)!
9797
return unsafe foo(ptr.baseAddress!, len1)
9898
}
9999
/// This is an auto-generated wrapper for safer interop
100-
@_alwaysEmitIntoClient @_disfavoredOverload
100+
@_alwaysEmitIntoClient @_disfavoredOverload public
101101
func foo(bar: UnsafeBufferPointer<CInt>) {
102102
let len2 = CInt(exactly: bar.count)!
103103
return unsafe foo(bar: bar.baseAddress!, len2)

0 commit comments

Comments
 (0)