diff --git a/CHANGELOG.md b/CHANGELOG.md index f050071..a24e976 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +# [0.2.6] - 2025-01-03 + +### Added + +- Automackable handle inherited classes + # [0.2.5] - 2024-11-15 ### Fixed diff --git a/Sources/SageSwiftKit/AutoMockableMacros.swift b/Sources/SageSwiftKit/AutoMockableMacros.swift index 17865f4..815abc0 100644 --- a/Sources/SageSwiftKit/AutoMockableMacros.swift +++ b/Sources/SageSwiftKit/AutoMockableMacros.swift @@ -3,4 +3,7 @@ // All Rights Reserved. @attached(peer, names: suffixed(Mock)) -public macro AutoMockable(accessLevel: String? = nil) = #externalMacro(module: "SageSwiftKitMacros", type: "AutoMockable") +public macro AutoMockable( + accessLevel: String? = nil, + classInheritance: Bool = false +) = #externalMacro(module: "SageSwiftKitMacros", type: "AutoMockable") diff --git a/Sources/SageSwiftKitClient/main.swift b/Sources/SageSwiftKitClient/main.swift index 21e3471..01c6a79 100644 --- a/Sources/SageSwiftKitClient/main.swift +++ b/Sources/SageSwiftKitClient/main.swift @@ -37,9 +37,21 @@ struct PlayingObject { } -@AutoMockable() -public protocol DateSelectorViewModel { +//@NodePrinter +public class TmpClass { + var a: String + var b: String + + init(a: String, b: String) { + self.a = a + self.b = b + } +} + +@AutoMockable(classInheritance: true) +public protocol DateSelectorViewModel: TmpClass { var onTap: (String, Int?) -> Void { get set } var onString: String { get set } var onDouble: Double? { get set } } + diff --git a/Sources/SageSwiftKitMacros/MockableMacros/AutoMockableBuilder.swift b/Sources/SageSwiftKitMacros/AutoMockableMacros/AutoMockableBuilder.swift similarity index 71% rename from Sources/SageSwiftKitMacros/MockableMacros/AutoMockableBuilder.swift rename to Sources/SageSwiftKitMacros/AutoMockableMacros/AutoMockableBuilder.swift index 908f9f1..8b9dcb6 100644 --- a/Sources/SageSwiftKitMacros/MockableMacros/AutoMockableBuilder.swift +++ b/Sources/SageSwiftKitMacros/AutoMockableMacros/AutoMockableBuilder.swift @@ -25,6 +25,12 @@ public enum AutoMockable: PeerMacro { .adapter .expression(cast: StringLiteralExprSyntax.self)?.representedLiteralValue ?? "internal" + let classInheritance = node + .adapter + .findArgument(id: "classInheritance")? + .adapter + .expression(cast: BooleanLiteralExprSyntax.self)?.literal.text ?? "false" + let procotolName = protocolSyntax.name.text guard let members = declaration.as(ProtocolDeclSyntax.self)?.memberBlock.members else { @@ -51,39 +57,49 @@ public enum AutoMockable: PeerMacro { name: .identifier("\(procotolName)Mock"), inheritanceClause: .init( inheritedTypes: .init(itemsBuilder: { + if classInheritance == "true" { + if let inherited = protocolSyntax.inheritanceClause { + inherited.inheritedTypes + } + } InheritedTypeSyntax( type: IdentifierTypeSyntax( name: .identifier(procotolName) ) ) - if let inherited = protocolSyntax.inheritanceClause { - inherited.inheritedTypes + if classInheritance == "false" { + if let inherited = protocolSyntax.inheritanceClause { + inherited.inheritedTypes + } } }) ), memberBlock: MemberBlockSyntax( members: try MemberBlockItemListSyntax(itemsBuilder: { // Init - InitializerDeclSyntax( - modifiers: .init(itemsBuilder: { - DeclModifierSyntax(name: accessLevel.tokenSyntax) - }), - signature: .init( - parameterClause: .init( - parameters: .init( - itemsBuilder: {} + + if classInheritance == "false" { + InitializerDeclSyntax( + modifiers: .init(itemsBuilder: { + DeclModifierSyntax(name: accessLevel.tokenSyntax) + }), + signature: .init( + parameterClause: .init( + parameters: .init( + itemsBuilder: {} + ) + ) + ), + body: .init( + statements: .init( + itemsBuilder: { + + } ) - ) - ), - body: .init( - statements: .init( - itemsBuilder: { - - } ) ) - ) + } // Classes that has mock data for each function for funcData in functionsToMock { diff --git a/Sources/SageSwiftKitMacros/MockableMacros/Auxiliars/Builders/ClassMockForFunctionBuilder.swift b/Sources/SageSwiftKitMacros/AutoMockableMacros/Auxiliars/Builders/ClassMockForFunctionBuilder.swift similarity index 100% rename from Sources/SageSwiftKitMacros/MockableMacros/Auxiliars/Builders/ClassMockForFunctionBuilder.swift rename to Sources/SageSwiftKitMacros/AutoMockableMacros/Auxiliars/Builders/ClassMockForFunctionBuilder.swift diff --git a/Sources/SageSwiftKitMacros/MockableMacros/Auxiliars/Builders/FunctionMocksClassBuilder.swift b/Sources/SageSwiftKitMacros/AutoMockableMacros/Auxiliars/Builders/FunctionMocksClassBuilder.swift similarity index 100% rename from Sources/SageSwiftKitMacros/MockableMacros/Auxiliars/Builders/FunctionMocksClassBuilder.swift rename to Sources/SageSwiftKitMacros/AutoMockableMacros/Auxiliars/Builders/FunctionMocksClassBuilder.swift diff --git a/Sources/SageSwiftKitMacros/MockableMacros/Auxiliars/Builders/ProtocolFunctionsConformanceBuilder.swift b/Sources/SageSwiftKitMacros/AutoMockableMacros/Auxiliars/Builders/ProtocolFunctionsConformanceBuilder.swift similarity index 100% rename from Sources/SageSwiftKitMacros/MockableMacros/Auxiliars/Builders/ProtocolFunctionsConformanceBuilder.swift rename to Sources/SageSwiftKitMacros/AutoMockableMacros/Auxiliars/Builders/ProtocolFunctionsConformanceBuilder.swift diff --git a/Sources/SageSwiftKitMacros/MockableMacros/Auxiliars/Builders/ProtocolVarsConformanceBuilder.swift b/Sources/SageSwiftKitMacros/AutoMockableMacros/Auxiliars/Builders/ProtocolVarsConformanceBuilder.swift similarity index 100% rename from Sources/SageSwiftKitMacros/MockableMacros/Auxiliars/Builders/ProtocolVarsConformanceBuilder.swift rename to Sources/SageSwiftKitMacros/AutoMockableMacros/Auxiliars/Builders/ProtocolVarsConformanceBuilder.swift diff --git a/Sources/SageSwiftKitMacros/MockableMacros/Auxiliars/FunctionsMockData.swift b/Sources/SageSwiftKitMacros/AutoMockableMacros/Auxiliars/FunctionsMockData.swift similarity index 100% rename from Sources/SageSwiftKitMacros/MockableMacros/Auxiliars/FunctionsMockData.swift rename to Sources/SageSwiftKitMacros/AutoMockableMacros/Auxiliars/FunctionsMockData.swift diff --git a/Sources/SageSwiftKitMacros/MockableMacros/MockableMacros.swift b/Sources/SageSwiftKitMacros/AutoMockableMacros/MockableMacros.swift similarity index 100% rename from Sources/SageSwiftKitMacros/MockableMacros/MockableMacros.swift rename to Sources/SageSwiftKitMacros/AutoMockableMacros/MockableMacros.swift