Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions Sources/GRPCCodeGen/Internal/Renderer/TextBasedRenderer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1134,8 +1134,9 @@ struct TextBasedRenderer: RendererProtocol {
/// Renders the specified code block.
func renderCodeBlock(_ description: CodeBlock) {
if let comment = description.comment { renderComment(comment) }
let item = description.item
renderCodeBlockItem(item)
if let item = description.item {
Copy link
Collaborator

@rnro rnro Nov 26, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The previous style had a cleaner call site; what was the impetus to change?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

description.item is now Optional, so we need this change (or for renderCodeBlockItem to take an optional)

renderCodeBlockItem(item)
}
}

/// Renders the specified code blocks.
Expand Down
17 changes: 7 additions & 10 deletions Sources/GRPCCodeGen/Internal/StructuredSwift+Server.swift
Original file line number Diff line number Diff line change
Expand Up @@ -97,16 +97,13 @@ extension ExtensionDescription {
return ExtensionDescription(
onType: extensionName,
declarations: [
.guarded(
.grpc,
.function(
.registerMethods(
accessLevel: accessLevel,
serviceNamespace: serviceNamespace,
methods: methods,
serializer: serializer,
deserializer: deserializer
)
.function(
.registerMethods(
accessLevel: accessLevel,
serviceNamespace: serviceNamespace,
methods: methods,
serializer: serializer,
deserializer: deserializer
)
)
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -288,13 +288,10 @@ extension EnumDescription {
typealiasNames.append("Client")
}
let typealiases: [Declaration] = typealiasNames.map { alias in
.guarded(
.grpc,
.typealias(
accessModifier: accessModifier,
name: alias,
existingType: .member(name + "_" + alias)
)
.typealias(
accessModifier: accessModifier,
name: alias,
existingType: .member(name + "_" + alias)
)
}
description.members.append(contentsOf: typealiases)
Expand Down
12 changes: 0 additions & 12 deletions Sources/GRPCCodeGen/Internal/StructuredSwift+Types.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,6 @@
* limitations under the License.
*/

extension AvailabilityDescription {
package static let grpc = AvailabilityDescription(
osVersions: [
OSVersion(os: .macOS, version: "15.0"),
OSVersion(os: .iOS, version: "18.0"),
OSVersion(os: .watchOS, version: "11.0"),
OSVersion(os: .tvOS, version: "18.0"),
OSVersion(os: .visionOS, version: "2.0"),
]
)
}

extension ExistingTypeDescription {
fileprivate static func grpcCore(_ typeName: String) -> Self {
return .member(["GRPCCore", typeName])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1207,7 +1207,7 @@ struct CodeBlock: Equatable, Codable, Sendable {
var comment: Comment?

/// The code block item that appears below the comment.
var item: CodeBlockItem
var item: CodeBlockItem?
}

/// A description of a Swift file.
Expand Down
24 changes: 4 additions & 20 deletions Sources/GRPCCodeGen/Internal/Translator/ClientCodeTranslator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -79,22 +79,6 @@ struct ClientCodeTranslator {
init() {}

func translate(
accessModifier: AccessModifier,
services: [ServiceDescriptor],
serializer: (String) -> String,
deserializer: (String) -> String
) -> [CodeBlock] {
services.flatMap { service in
self.translate(
accessModifier: accessModifier,
service: service,
serializer: serializer,
deserializer: deserializer
)
}
}

private func translate(
accessModifier: AccessModifier,
service: ServiceDescriptor,
serializer: (String) -> String,
Expand All @@ -114,7 +98,7 @@ struct ClientCodeTranslator {
blocks.append(
CodeBlock(
comment: .preFormatted(service.documentation),
item: .declaration(.guarded(.grpc, .protocol(clientProtocol)))
item: .declaration(.protocol(clientProtocol))
)
)

Expand All @@ -126,7 +110,7 @@ struct ClientCodeTranslator {
deserializer: deserializer
)
blocks.append(
CodeBlock(item: .declaration(.guarded(.grpc, .extension(extensionWithDefaults))))
CodeBlock(item: .declaration(.extension(extensionWithDefaults)))
)

let extensionWithExplodedAPI: ExtensionDescription = .explodedClientMethods(
Expand All @@ -135,7 +119,7 @@ struct ClientCodeTranslator {
methods: service.methods
)
blocks.append(
CodeBlock(item: .declaration(.guarded(.grpc, .extension(extensionWithExplodedAPI))))
CodeBlock(item: .declaration(.extension(extensionWithExplodedAPI)))
)

let clientStruct: StructDescription = .client(
Expand All @@ -148,7 +132,7 @@ struct ClientCodeTranslator {
blocks.append(
CodeBlock(
comment: .preFormatted(service.documentation),
item: .declaration(.guarded(.grpc, .struct(clientStruct)))
item: .declaration(.struct(clientStruct))
)
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,34 +28,50 @@ struct IDLToStructuredSwiftTranslator: Translator {
try self.validateInput(codeGenerationRequest)
let accessModifier = AccessModifier(accessLevel)

var codeBlocks: [CodeBlock] = []
let metadataTranslator = MetadataTranslator()
var codeBlocks = metadataTranslator.translate(
accessModifier: accessModifier,
services: codeGenerationRequest.services,
client: client,
server: server
)
let serverTranslator = ServerCodeTranslator()
let clientTranslator = ClientCodeTranslator()

if server {
let translator = ServerCodeTranslator()
let blocks = translator.translate(
accessModifier: accessModifier,
services: codeGenerationRequest.services,
serializer: codeGenerationRequest.lookupSerializer,
deserializer: codeGenerationRequest.lookupDeserializer
for service in codeGenerationRequest.services {
codeBlocks.append(
CodeBlock(comment: .mark("\(service.fullyQualifiedName)", sectionBreak: true))
)
codeBlocks.append(contentsOf: blocks)
}

if client {
let translator = ClientCodeTranslator()
let blocks = translator.translate(
let metadata = metadataTranslator.translate(
accessModifier: accessModifier,
services: codeGenerationRequest.services,
serializer: codeGenerationRequest.lookupSerializer,
deserializer: codeGenerationRequest.lookupDeserializer
service: service,
client: client,
server: server
)
codeBlocks.append(contentsOf: blocks)
codeBlocks.append(contentsOf: metadata)

if server {
codeBlocks.append(
CodeBlock(comment: .mark("\(service.fullyQualifiedName) (server)", sectionBreak: false))
)

let blocks = serverTranslator.translate(
accessModifier: accessModifier,
service: service,
serializer: codeGenerationRequest.lookupSerializer,
deserializer: codeGenerationRequest.lookupDeserializer
)
codeBlocks.append(contentsOf: blocks)
}

if client {
codeBlocks.append(
CodeBlock(comment: .mark("\(service.fullyQualifiedName) (client)", sectionBreak: false))
)
let blocks = clientTranslator.translate(
accessModifier: accessModifier,
service: service,
serializer: codeGenerationRequest.lookupSerializer,
deserializer: codeGenerationRequest.lookupDeserializer
)
codeBlocks.append(contentsOf: blocks)
}
}

let fileDescription = FileDescription(
Expand Down
16 changes: 0 additions & 16 deletions Sources/GRPCCodeGen/Internal/Translator/MetadataTranslator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,6 @@ struct MetadataTranslator {
init() {}

func translate(
accessModifier: AccessModifier,
services: [ServiceDescriptor],
client: Bool,
server: Bool
) -> [CodeBlock] {
return services.flatMap { service in
self.translate(
accessModifier: accessModifier,
service: service,
client: client,
server: server
)
}
}

private func translate(
accessModifier: AccessModifier,
service: ServiceDescriptor,
client: Bool,
Expand Down
24 changes: 4 additions & 20 deletions Sources/GRPCCodeGen/Internal/Translator/ServerCodeTranslator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -61,22 +61,6 @@ struct ServerCodeTranslator {
init() {}

func translate(
accessModifier: AccessModifier,
services: [ServiceDescriptor],
serializer: (String) -> String,
deserializer: (String) -> String
) -> [CodeBlock] {
return services.flatMap { service in
self.translate(
accessModifier: accessModifier,
service: service,
serializer: serializer,
deserializer: deserializer
)
}
}

private func translate(
accessModifier: AccessModifier,
service: ServiceDescriptor,
serializer: (String) -> String,
Expand Down Expand Up @@ -106,7 +90,7 @@ struct ServerCodeTranslator {
blocks.append(
CodeBlock(
comment: .preFormatted(service.documentation),
item: .declaration(.guarded(.grpc, .protocol(streamingServiceProtocol)))
item: .declaration(.protocol(streamingServiceProtocol))
)
)

Expand All @@ -122,7 +106,7 @@ struct ServerCodeTranslator {
blocks.append(
CodeBlock(
comment: .doc("Conformance to `GRPCCore.RegistrableRPCService`."),
item: .declaration(.guarded(.grpc, .extension(registerExtension)))
item: .declaration(.extension(registerExtension))
)
)

Expand All @@ -136,7 +120,7 @@ struct ServerCodeTranslator {
blocks.append(
CodeBlock(
comment: .preFormatted(service.documentation),
item: .declaration(.guarded(.grpc, .protocol(serviceProtocol)))
item: .declaration(.protocol(serviceProtocol))
)
)

Expand All @@ -150,7 +134,7 @@ struct ServerCodeTranslator {
blocks.append(
CodeBlock(
comment: .doc("Partial conformance to `\(streamingServiceProtocolName)`."),
item: .declaration(.guarded(.grpc, .extension(streamingServiceDefaultImplExtension)))
item: .declaration(.extension(streamingServiceDefaultImplExtension))
)
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,6 @@ import Testing
extension StructuedSwiftTests {
@Suite("Metadata")
struct Metadata {
@Test("@available(...)")
func grpcAvailability() async throws {
let availability: AvailabilityDescription = .grpc
let structDecl = StructDescription(name: "Ignored")
let expected = """
@available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
struct Ignored {}
"""

#expect(render(.guarded(availability, .struct(structDecl))) == expected)
}

@Test("typealias Input = <Name>", arguments: AccessModifier.allCases)
func methodInputTypealias(access: AccessModifier) {
let decl: TypealiasDescription = .methodInput(accessModifier: access, name: "Foo")
Expand Down Expand Up @@ -263,9 +251,7 @@ extension StructuedSwiftTests {

if config.server {
expected += """
@available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
\(access) typealias StreamingServiceProtocol = Foo_StreamingServiceProtocol
@available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
\(access) typealias ServiceProtocol = Foo_ServiceProtocol
"""
}
Expand All @@ -276,9 +262,7 @@ extension StructuedSwiftTests {
}

expected += """
@available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
\(access) typealias ClientProtocol = Foo_ClientProtocol
@available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
\(access) typealias Client = Foo_Client
"""
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ struct ClientCodeTranslatorSnippetBasedTests {

let expectedSwift = """
/// Documentation for ServiceA
@available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
public protocol NamespaceA_ServiceA_ClientProtocol: Sendable {
/// Documentation for MethodA
func methodA<Result>(
Expand All @@ -51,7 +50,6 @@ struct ClientCodeTranslatorSnippetBasedTests {
onResponse handleResponse: @Sendable @escaping (GRPCCore.ClientResponse<NamespaceA_ServiceAResponse>) async throws -> Result
) async throws -> Result where Result: Sendable
}
@available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
extension NamespaceA_ServiceA.ClientProtocol {
public func methodA<Result>(
request: GRPCCore.ClientRequest<NamespaceA_ServiceARequest>,
Expand All @@ -69,7 +67,6 @@ struct ClientCodeTranslatorSnippetBasedTests {
)
}
}
@available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
extension NamespaceA_ServiceA.ClientProtocol {
/// Documentation for MethodA
public func methodA<Result>(
Expand All @@ -92,7 +89,6 @@ struct ClientCodeTranslatorSnippetBasedTests {
}
}
/// Documentation for ServiceA
@available(macOS 15.0, iOS 18.0, watchOS 11.0, tvOS 18.0, visionOS 2.0, *)
public struct NamespaceA_ServiceA_Client: NamespaceA_ServiceA.ClientProtocol {
private let client: GRPCCore.GRPCClient

Expand Down Expand Up @@ -131,7 +127,7 @@ struct ClientCodeTranslatorSnippetBasedTests {
service: ServiceDescriptor
) -> String {
let translator = ClientCodeTranslator()
let codeBlocks = translator.translate(accessModifier: accessLevel, services: [service]) {
let codeBlocks = translator.translate(accessModifier: accessLevel, service: service) {
"GRPCProtobuf.ProtobufSerializer<\($0)>()"
} deserializer: {
"GRPCProtobuf.ProtobufDeserializer<\($0)>()"
Expand Down
Loading
Loading