From facf2aa5a230906b9decceea01e841eaec82c335 Mon Sep 17 00:00:00 2001 From: fummicc1 Date: Sun, 1 Dec 2024 11:47:39 +0900 Subject: [PATCH 1/4] Use uniqueModel for IfMacroModel subModels before rendering so that we can avoid naming duplication after generation --- Sources/MockoloFramework/Models/IfMacroModel.swift | 6 +++--- .../Parsers/SwiftSyntaxExtensions.swift | 10 ++++++++-- .../MockoloFramework/Templates/IfMacroTemplate.swift | 6 +++--- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Sources/MockoloFramework/Models/IfMacroModel.swift b/Sources/MockoloFramework/Models/IfMacroModel.swift index 75e1e55e..4f5ba3bb 100644 --- a/Sources/MockoloFramework/Models/IfMacroModel.swift +++ b/Sources/MockoloFramework/Models/IfMacroModel.swift @@ -17,19 +17,19 @@ final class IfMacroModel: Model { let name: String let offset: Int64 - let entities: [Model] + let entities: [(String, Model)] var modelType: ModelType { return .macro } var fullName: String { - return entities.map {$0.fullName}.joined(separator: "_") + return entities.map {$0.0}.joined(separator: "_") } init(name: String, offset: Int64, - entities: [Model]) { + entities: [(String, Model)]) { self.name = name self.entities = entities self.offset = offset diff --git a/Sources/MockoloFramework/Parsers/SwiftSyntaxExtensions.swift b/Sources/MockoloFramework/Parsers/SwiftSyntaxExtensions.swift index 18e8d3e8..62410e25 100644 --- a/Sources/MockoloFramework/Parsers/SwiftSyntaxExtensions.swift +++ b/Sources/MockoloFramework/Parsers/SwiftSyntaxExtensions.swift @@ -254,8 +254,14 @@ extension IfConfigDeclSyntax { } } } - - let macroModel = IfMacroModel(name: name, offset: self.offset, entities: subModels) + + let uniqueSubModels = uniqueEntities( + in: subModels, + exclude: [:], + fullnames: [] + ).map({ $0 }) + + let macroModel = IfMacroModel(name: name, offset: self.offset, entities: uniqueSubModels) return (macroModel, attrDesc, hasInit) } } diff --git a/Sources/MockoloFramework/Templates/IfMacroTemplate.swift b/Sources/MockoloFramework/Templates/IfMacroTemplate.swift index 728beef5..87720216 100644 --- a/Sources/MockoloFramework/Templates/IfMacroTemplate.swift +++ b/Sources/MockoloFramework/Templates/IfMacroTemplate.swift @@ -20,12 +20,12 @@ extension IfMacroModel { func applyMacroTemplate(name: String, context: RenderContext, arguments: GenerationArguments, - entities: [Model]) -> String { + entities: [(String, Model)]) -> String { let rendered = entities .compactMap { model in - model.render( + model.1.render( context: .init( - overloadingResolvedName: model.name, // FIXME: the name is not resolving overload + overloadingResolvedName: model.0, enclosingType: context.enclosingType, annotatedTypeKind: context.annotatedTypeKind ), From ea7d4b2709978c19d839e0c5b56e2392a220919d Mon Sep 17 00:00:00 2001 From: fummicc1 Date: Sun, 1 Dec 2024 11:57:23 +0900 Subject: [PATCH 2/4] Remove wrapping by `XCTExpectFailure` --- Tests/TestMacros/MacroTests.swift | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Tests/TestMacros/MacroTests.swift b/Tests/TestMacros/MacroTests.swift index 33b101fb..0e1fadb3 100644 --- a/Tests/TestMacros/MacroTests.swift +++ b/Tests/TestMacros/MacroTests.swift @@ -8,10 +8,8 @@ final class MacroTests: MockoloTestCase { #if os(macOS) func testMacroInFuncWithOverload() { - XCTExpectFailure("Resolving overloading in #if is broken.") { - verify(srcContent: macroInFuncWithOverload, - dstContent: macroInFuncWithOverloadMock) - } + verify(srcContent: macroInFuncWithOverload, + dstContent: macroInFuncWithOverloadMock) } #endif From f5a9eac2537b212c8b9b175b32f3c4bfb5545528 Mon Sep 17 00:00:00 2001 From: fummicc1 Date: Sun, 1 Dec 2024 12:11:06 +0900 Subject: [PATCH 3/4] Remove XCTest import --- Tests/TestMacros/MacroTests.swift | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Tests/TestMacros/MacroTests.swift b/Tests/TestMacros/MacroTests.swift index 0e1fadb3..0a2d5ff1 100644 --- a/Tests/TestMacros/MacroTests.swift +++ b/Tests/TestMacros/MacroTests.swift @@ -1,17 +1,13 @@ -import XCTest - final class MacroTests: MockoloTestCase { func testMacroInFunc() { verify(srcContent: macroInFunc, dstContent: macroInFuncMock) } -#if os(macOS) func testMacroInFuncWithOverload() { verify(srcContent: macroInFuncWithOverload, dstContent: macroInFuncWithOverloadMock) } -#endif func testMacroImports() { verify(srcContent: macroImports, From a92b467d51237b9cae66ce632302faf3e8c2e318 Mon Sep 17 00:00:00 2001 From: fummicc1 Date: Sun, 1 Dec 2024 12:11:32 +0900 Subject: [PATCH 4/4] Fix test fixture --- Tests/TestMacros/FixtureMacro.swift | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/Tests/TestMacros/FixtureMacro.swift b/Tests/TestMacros/FixtureMacro.swift index 5a119ea9..356a5769 100644 --- a/Tests/TestMacros/FixtureMacro.swift +++ b/Tests/TestMacros/FixtureMacro.swift @@ -282,21 +282,27 @@ protocol PresentableListener: AnyObject { """ let macroInFuncWithOverloadMock = """ + + + class PresentableListenerMock: PresentableListener { init() { } + #if DEBUG + private(set) var runCallCount = 0 - var runHandler: ((Int) -> ())? - func run(value: Int) { + var runHandler: ((Int) -> ())? + func run(value: Int) { runCallCount += 1 if let runHandler = runHandler { runHandler(value) } } + private(set) var runValueCallCount = 0 - var runValueHandler: ((String) -> ())? - func run(value: String) { + var runValueHandler: ((String) -> ())? + func run(value: String) { runValueCallCount += 1 if let runValueHandler = runValueHandler { runValueHandler(value) @@ -305,4 +311,5 @@ class PresentableListenerMock: PresentableListener { } #endif } + """