Skip to content

Commit 0224025

Browse files
Added enum cases for PluginInterface file (#887)
* Added Plugin Interface File * Remove declarations from Plugin.swift * Added enum cases for PluginInterface file * Fixed enums to include interface file in plugin alone generation * Update Sources/NodesGenerator/Resources/Stencils/PluginInterface.stencil Co-authored-by: Christopher Fuller <[email protected]> * Added snapshots for PluginInterface file (#888) * Added snapshots for PluginInterface file * regebed snapshots * fixed snapshots * Fixed closure length warning * fixed plural string and snapshots --------- Co-authored-by: Christopher Fuller <[email protected]>
1 parent b1bce9a commit 0224025

File tree

100 files changed

+1112
-61
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

100 files changed

+1112
-61
lines changed

Sources/NodesGenerator/PresetGenerator.swift

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public final class PresetGenerator {
4444
flowTestsImports: node.flowTests.imports(with: config),
4545
interfaceImports: node.interface.imports(with: config),
4646
pluginImports: node.plugin.imports(with: config),
47+
pluginInterfaceImports: node.pluginInterface.imports(with: config),
4748
pluginTestsImports: node.pluginTests.imports(with: config),
4849
stateImports: node.state.imports(with: config),
4950
dependencies: config.dependencies,

Sources/NodesGenerator/StencilContexts/NodeStencilContext.swift

+8-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public struct NodeStencilContext: StencilContext {
2626
private let flowTestsImports: [String]
2727
private let interfaceImports: [String]
2828
private let pluginImports: [String]
29+
private let pluginInterfaceImports: [String]
2930
private let pluginTestsImports: [String]
3031
private let stateImports: [String]
3132
private let viewControllerImports: [String]
@@ -77,6 +78,7 @@ public struct NodeStencilContext: StencilContext {
7778
"flow_tests_imports": flowTestsImports,
7879
"interface_imports": interfaceImports,
7980
"plugin_imports": pluginImports,
81+
"plugin_interface_imports": pluginInterfaceImports,
8082
"plugin_tests_imports": pluginTestsImports,
8183
"state_imports": stateImports,
8284
"view_controller_imports": viewControllerImports,
@@ -113,7 +115,7 @@ public struct NodeStencilContext: StencilContext {
113115
]
114116
}
115117

116-
// swiftlint:disable:next function_default_parameter_at_end
118+
// swiftlint:disable:next function_default_parameter_at_end function_body_length
117119
public init(
118120
fileHeader: String,
119121
nodeName: String,
@@ -129,6 +131,7 @@ public struct NodeStencilContext: StencilContext {
129131
flowTestsImports: Set<String>,
130132
interfaceImports: Set<String>,
131133
pluginImports: Set<String>,
134+
pluginInterfaceImports: Set<String>,
132135
pluginTestsImports: Set<String>,
133136
stateImports: Set<String>,
134137
viewControllerImports: Set<String>,
@@ -179,6 +182,7 @@ public struct NodeStencilContext: StencilContext {
179182
flowTestsImports: flowTestsImports,
180183
interfaceImports: interfaceImports,
181184
pluginImports: pluginImports,
185+
pluginInterfaceImports: pluginInterfaceImports,
182186
pluginTestsImports: pluginTestsImports,
183187
stateImports: stateImports,
184188
viewControllerImports: viewControllerImports,
@@ -278,6 +282,7 @@ public struct NodeStencilContext: StencilContext {
278282
flowTestsImports: flowTestsImports,
279283
interfaceImports: interfaceImports,
280284
pluginImports: [],
285+
pluginInterfaceImports: [],
281286
pluginTestsImports: [],
282287
stateImports: stateImports,
283288
viewControllerImports: viewControllerImports,
@@ -330,6 +335,7 @@ public struct NodeStencilContext: StencilContext {
330335
flowTestsImports: Set<String>,
331336
interfaceImports: Set<String>,
332337
pluginImports: Set<String>,
338+
pluginInterfaceImports: Set<String>,
333339
pluginTestsImports: Set<String>,
334340
stateImports: Set<String>,
335341
viewControllerImports: Set<String>,
@@ -380,6 +386,7 @@ public struct NodeStencilContext: StencilContext {
380386
self.flowTestsImports = flowTestsImports.sortedImports()
381387
self.interfaceImports = interfaceImports.sortedImports()
382388
self.pluginImports = pluginImports.sortedImports()
389+
self.pluginInterfaceImports = pluginInterfaceImports.sortedImports()
383390
self.pluginTestsImports = pluginTestsImports.sortedImports()
384391
self.stateImports = stateImports.sortedImports()
385392
self.viewControllerImports = viewControllerImports.sortedImports()

Sources/NodesGenerator/StencilContexts/NodeViewInjectedStencilContext.swift

+8
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public struct NodeViewInjectedStencilContext: StencilContext {
2222
private let flowTestsImports: [String]
2323
private let interfaceImports: [String]
2424
private let pluginImports: [String]
25+
private let pluginInterfaceImports: [String]
2526
private let pluginTestsImports: [String]
2627
private let stateImports: [String]
2728
private let dependencies: [[String: Any]]
@@ -52,6 +53,7 @@ public struct NodeViewInjectedStencilContext: StencilContext {
5253
"flow_tests_imports": flowTestsImports,
5354
"interface_imports": interfaceImports,
5455
"plugin_imports": pluginImports,
56+
"plugin_interface_imports": pluginInterfaceImports,
5557
"plugin_tests_imports": pluginTestsImports,
5658
"state_imports": stateImports,
5759
"dependencies": dependencies,
@@ -83,6 +85,7 @@ public struct NodeViewInjectedStencilContext: StencilContext {
8385
flowTestsImports: Set<String>,
8486
interfaceImports: Set<String>,
8587
pluginImports: Set<String>,
88+
pluginInterfaceImports: Set<String>,
8689
pluginTestsImports: Set<String>,
8790
stateImports: Set<String>,
8891
dependencies: [Config.Variable],
@@ -112,6 +115,7 @@ public struct NodeViewInjectedStencilContext: StencilContext {
112115
flowTestsImports: flowTestsImports,
113116
interfaceImports: interfaceImports,
114117
pluginImports: pluginImports,
118+
pluginInterfaceImports: pluginInterfaceImports,
115119
pluginTestsImports: pluginTestsImports,
116120
stateImports: stateImports,
117121
dependencies: dependencies,
@@ -141,6 +145,7 @@ public struct NodeViewInjectedStencilContext: StencilContext {
141145
flowTestsImports: Set<String>,
142146
interfaceImports: Set<String>,
143147
pluginImports: Set<String>,
148+
pluginInterfaceImports: Set<String>,
144149
pluginTestsImports: Set<String>,
145150
stateImports: Set<String>,
146151
dependencies: [Config.Variable],
@@ -171,6 +176,7 @@ public struct NodeViewInjectedStencilContext: StencilContext {
171176
flowTestsImports: flowTestsImports,
172177
interfaceImports: interfaceImports,
173178
pluginImports: pluginImports,
179+
pluginInterfaceImports: pluginInterfaceImports,
174180
pluginTestsImports: pluginTestsImports,
175181
stateImports: stateImports,
176182
dependencies: dependencies,
@@ -202,6 +208,7 @@ public struct NodeViewInjectedStencilContext: StencilContext {
202208
flowTestsImports: Set<String>,
203209
interfaceImports: Set<String>,
204210
pluginImports: Set<String>,
211+
pluginInterfaceImports: Set<String>,
205212
pluginTestsImports: Set<String>,
206213
stateImports: Set<String>,
207214
dependencies: [Config.Variable],
@@ -231,6 +238,7 @@ public struct NodeViewInjectedStencilContext: StencilContext {
231238
self.flowTestsImports = flowTestsImports.sortedImports()
232239
self.interfaceImports = interfaceImports.sortedImports()
233240
self.pluginImports = pluginImports.sortedImports()
241+
self.pluginInterfaceImports = pluginInterfaceImports.sortedImports()
234242
self.pluginTestsImports = pluginTestsImports.sortedImports()
235243
self.stateImports = stateImports.sortedImports()
236244
self.dependencies = dependencies.map(\.dictionary)

Sources/NodesGenerator/StencilContexts/PluginStencilContext.swift

+4
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public struct PluginStencilContext: StencilContext {
1212
private let fileHeader: String
1313
private let pluginName: String
1414
private let pluginImports: [String]
15+
private let pluginInterfaceImports: [String]
1516
private let pluginTestsImports: [String]
1617
private let isPeripheryCommentEnabled: Bool
1718
private let isNimbleEnabled: Bool
@@ -21,6 +22,7 @@ public struct PluginStencilContext: StencilContext {
2122
"file_header": fileHeader,
2223
"plugin_name": pluginName,
2324
"plugin_imports": pluginImports,
25+
"plugin_interface_imports": pluginInterfaceImports,
2426
"plugin_tests_imports": pluginTestsImports,
2527
"is_periphery_comment_enabled": isPeripheryCommentEnabled,
2628
"is_nimble_enabled": isNimbleEnabled
@@ -31,13 +33,15 @@ public struct PluginStencilContext: StencilContext {
3133
fileHeader: String,
3234
pluginName: String,
3335
pluginImports: Set<String>,
36+
pluginInterfaceImports: Set<String>,
3437
pluginTestsImports: Set<String>,
3538
isPeripheryCommentEnabled: Bool,
3639
isNimbleEnabled: Bool
3740
) {
3841
self.fileHeader = fileHeader
3942
self.pluginName = pluginName
4043
self.pluginImports = pluginImports.sortedImports()
44+
self.pluginInterfaceImports = pluginInterfaceImports.sortedImports()
4145
self.pluginTestsImports = pluginTestsImports.sortedImports()
4246
self.isPeripheryCommentEnabled = isPeripheryCommentEnabled
4347
self.isNimbleEnabled = isNimbleEnabled

Sources/NodesGenerator/StencilRenderer.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public final class StencilRenderer {
4040
includeTests: Bool
4141
) throws -> [String: String] {
4242
let additional: [StencilTemplate] = includeTests ? [.pluginTests] : []
43-
let stencils: [StencilTemplate] = [.plugin] + additional
43+
let stencils: [StencilTemplate] = [.plugin, .pluginInterface] + additional
4444
return try render(stencils: stencils, with: context.dictionary)
4545
}
4646

Sources/NodesGenerator/StencilTemplate.swift

+13-2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public enum StencilTemplate: CustomStringConvertible, Equatable, Sendable {
2020
case flowTests
2121
case interface(Variation)
2222
case plugin
23+
case pluginInterface
2324
case pluginTests
2425
case pluginList
2526
case pluginListTests
@@ -62,6 +63,7 @@ public enum StencilTemplate: CustomStringConvertible, Equatable, Sendable {
6263
public let flowTests: StencilTemplate
6364
public let interface: StencilTemplate
6465
public let plugin: StencilTemplate
66+
public let pluginInterface: StencilTemplate
6567
public let pluginTests: StencilTemplate
6668
public let state: StencilTemplate
6769
public let viewController: StencilTemplate
@@ -80,6 +82,7 @@ public enum StencilTemplate: CustomStringConvertible, Equatable, Sendable {
8082
self.flowTests = .flowTests
8183
self.interface = .interface(variation)
8284
self.plugin = .plugin
85+
self.pluginInterface = .pluginInterface
8386
self.pluginTests = .pluginTests
8487
self.state = .state
8588
self.viewController = .viewController(variation)
@@ -98,7 +101,7 @@ public enum StencilTemplate: CustomStringConvertible, Equatable, Sendable {
98101
state,
99102
viewController,
100103
viewState
101-
] + (includePlugin ? [.plugin] : [])
104+
] + (includePlugin ? [.plugin, .pluginInterface] : [])
102105
guard includeTests
103106
else { return stencils }
104107
let testsStencils: [StencilTemplate] = [
@@ -125,6 +128,7 @@ public enum StencilTemplate: CustomStringConvertible, Equatable, Sendable {
125128
public let flowTests: StencilTemplate
126129
public let interface: StencilTemplate
127130
public let plugin: StencilTemplate
131+
public let pluginInterface: StencilTemplate
128132
public let pluginTests: StencilTemplate
129133
public let state: StencilTemplate
130134

@@ -139,6 +143,7 @@ public enum StencilTemplate: CustomStringConvertible, Equatable, Sendable {
139143
self.flowTests = .flowTests
140144
self.interface = .interface(.regular)
141145
self.plugin = .plugin
146+
self.pluginInterface = .pluginInterface
142147
self.pluginTests = .pluginTests
143148
self.state = .state
144149
}
@@ -151,7 +156,7 @@ public enum StencilTemplate: CustomStringConvertible, Equatable, Sendable {
151156
flow,
152157
interface,
153158
state
154-
] + (includePlugin ? [.plugin] : [])
159+
] + (includePlugin ? [.plugin, .pluginInterface] : [])
155160
guard includeTests
156161
else { return stencils }
157162
let testsStencils: [StencilTemplate] = [
@@ -188,6 +193,8 @@ public enum StencilTemplate: CustomStringConvertible, Equatable, Sendable {
188193
"Interface"
189194
case .plugin:
190195
"Plugin"
196+
case .pluginInterface:
197+
"PluginInterface"
191198
case .pluginTests:
192199
"PluginTests"
193200
case .pluginList:
@@ -225,6 +232,8 @@ public enum StencilTemplate: CustomStringConvertible, Equatable, Sendable {
225232
description
226233
case .plugin, .pluginTests:
227234
description
235+
case .pluginInterface:
236+
description
228237
case let .interface(variation):
229238
description.appending(variation.suffix)
230239
case .pluginList, .pluginListTests:
@@ -277,6 +286,8 @@ public enum StencilTemplate: CustomStringConvertible, Equatable, Sendable {
277286
config.baseImports
278287
.union(["Nodes"])
279288
.union(config.dependencyInjectionImports)
289+
case .pluginInterface:
290+
config.baseImports
280291
case .pluginTests:
281292
config.baseTestImports
282293
.union(["NodesTesting"])

Sources/NodesGenerator/XcodeTemplatePermutations/NodeViewInjectedXcodeTemplatePermutation.swift

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ internal struct NodeViewInjectedXcodeTemplatePermutation: XcodeTemplatePermutati
3333
flowTestsImports: node.flowTests.imports(with: config),
3434
interfaceImports: node.interface.imports(with: config),
3535
pluginImports: node.plugin.imports(with: config),
36+
pluginInterfaceImports: node.pluginInterface.imports(with: config),
3637
pluginTestsImports: node.pluginTests.imports(with: config),
3738
stateImports: node.state.imports(with: config),
3839
dependencies: config.dependencies,

Sources/NodesGenerator/XcodeTemplatePermutations/NodeXcodeTemplatePermutation.swift

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ internal struct NodeXcodeTemplatePermutation: XcodeTemplatePermutation {
3636
flowTestsImports: node.flowTests.imports(with: config, including: uiFramework),
3737
interfaceImports: node.interface.imports(with: config, including: uiFramework),
3838
pluginImports: node.plugin.imports(with: config, including: uiFramework),
39+
pluginInterfaceImports: node.pluginInterface.imports(with: config, including: uiFramework),
3940
pluginTestsImports: node.pluginTests.imports(with: config, including: uiFramework),
4041
stateImports: node.state.imports(with: config, including: uiFramework),
4142
viewControllerImports: node.viewController.imports(with: config, including: uiFramework),

Sources/NodesGenerator/XcodeTemplatePermutations/PluginXcodeTemplatePermutation.swift

+3-1
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@ internal struct PluginXcodeTemplatePermutation: XcodeTemplatePermutation {
1616
internal init(name: String, config: Config) {
1717
self.name = name
1818
let plugin: StencilTemplate = .plugin
19+
let pluginInterface: StencilTemplate = .pluginInterface
1920
let pluginTests: StencilTemplate = .pluginTests
20-
stencils = [plugin] + (config.isTestTemplatesGenerationEnabled ? [pluginTests] : [])
21+
stencils = [plugin, pluginInterface] + (config.isTestTemplatesGenerationEnabled ? [pluginTests] : [])
2122
stencilContext = PluginStencilContext(
2223
fileHeader: XcodeTemplateConstants.fileHeader,
2324
pluginName: XcodeTemplateConstants.variable(XcodeTemplateConstants.productName),
2425
pluginImports: plugin.imports(with: config),
26+
pluginInterfaceImports: pluginInterface.imports(with: config),
2527
pluginTestsImports: pluginTests.imports(with: config),
2628
isPeripheryCommentEnabled: config.isPeripheryCommentEnabled,
2729
isNimbleEnabled: config.isNimbleEnabled

Tests/NodesGeneratorTests/StencilRendererTests.swift

+24-20
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ final class StencilRendererTests: XCTestCase, TestFactories {
6060
"Flow",
6161
"Interface",
6262
"Plugin",
63+
"PluginInterface",
6364
"State",
6465
"ViewController",
6566
"ViewState"
@@ -109,31 +110,34 @@ final class StencilRendererTests: XCTestCase, TestFactories {
109110

110111
func testRenderNode_withPluginAndTests() throws {
111112
let stencilRenderer: StencilRenderer = .init()
113+
let expectedTemplates: [String] = [
114+
"Analytics",
115+
"AnalyticsTests",
116+
"Builder",
117+
"BuilderTests",
118+
"Context",
119+
"ContextTests",
120+
"Flow",
121+
"FlowTests",
122+
"Interface",
123+
"Plugin",
124+
"PluginInterface",
125+
"PluginTests",
126+
"State",
127+
"ViewController",
128+
"ViewControllerTests",
129+
"ViewState",
130+
"ViewStateFactoryTests"
131+
]
132+
112133
try mockCounts.forEach { count in
113134
try UIFramework.Kind.allCases.forEach { kind in
114135
let context: NodeStencilContext = try givenNodeStencilContext(mockCount: count)
115136
let templates: [String: String] = try stencilRenderer.renderNode(context: context,
116137
kind: kind,
117138
includePlugin: true,
118139
includeTests: true)
119-
expect(templates.keys.sorted()) == [
120-
"Analytics",
121-
"AnalyticsTests",
122-
"Builder",
123-
"BuilderTests",
124-
"Context",
125-
"ContextTests",
126-
"Flow",
127-
"FlowTests",
128-
"Interface",
129-
"Plugin",
130-
"PluginTests",
131-
"State",
132-
"ViewController",
133-
"ViewControllerTests",
134-
"ViewState",
135-
"ViewStateFactoryTests"
136-
]
140+
expect(templates.keys.sorted()) == expectedTemplates
137141
templates.forEach { name, template in
138142
assertSnapshot(of: template,
139143
as: .lines,
@@ -262,7 +266,7 @@ final class StencilRendererTests: XCTestCase, TestFactories {
262266
let context: PluginStencilContext = givenPluginStencilContext(mockCount: count)
263267
let templates: [String: String] = try stencilRenderer
264268
.renderPlugin(context: context, includeTests: false)
265-
expect(templates.keys.sorted()) == ["Plugin"]
269+
expect(templates.keys.sorted()) == ["Plugin", "PluginInterface"]
266270
templates.forEach { name, template in
267271
assertSnapshot(of: template,
268272
as: .lines,
@@ -277,7 +281,7 @@ final class StencilRendererTests: XCTestCase, TestFactories {
277281
let context: PluginStencilContext = givenPluginStencilContext(mockCount: count)
278282
let templates: [String: String] = try stencilRenderer
279283
.renderPlugin(context: context, includeTests: true)
280-
expect(templates.keys.sorted()) == ["Plugin", "PluginTests"]
284+
expect(templates.keys.sorted()) == ["Plugin", "PluginInterface", "PluginTests"]
281285
templates.forEach { name, template in
282286
assertSnapshot(of: template,
283287
as: .lines,

0 commit comments

Comments
 (0)