File tree Expand file tree Collapse file tree
Sources/StructBuilderMacro Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -16,17 +16,17 @@ public struct BuildableMacro: PeerMacro {
1616 in context: Context
1717 ) throws -> [ SwiftSyntax . DeclSyntax ] where Context : SwiftSyntaxMacros . MacroExpansionContext , Declaration : SwiftSyntax . DeclSyntaxProtocol {
1818 if let structDecl = declaration. as ( StructDeclSyntax . self) {
19- let structBuilder = makeStructBuilder ( structDecl: structDecl)
19+ let structBuilder = generateBuilderFromStruct ( structDecl: structDecl)
2020 return [ DeclSyntax ( structBuilder) ]
2121 }
2222
2323 if let enumDecl = declaration. as ( EnumDeclSyntax . self) {
24- let enumBuilder = try makeEnumBuilder ( enumDecl: enumDecl)
24+ let enumBuilder = try generateBuilderFromEnum ( enumDecl: enumDecl)
2525 return [ DeclSyntax ( enumBuilder) ]
2626 }
2727
2828 if let classDecl = declaration. as ( ClassDeclSyntax . self) {
29- let classBuilder = try makeClassBuilder ( classDecl: classDecl)
29+ let classBuilder = try generateBuilderFromClass ( classDecl: classDecl)
3030 return [ DeclSyntax ( classBuilder) ]
3131 }
3232
Original file line number Diff line number Diff line change 11//
2- // MakeEnumBuilder .swift
2+ // GenerateBuilderFromEnum .swift
33//
44//
55// Created by Alexander Schmutz on 09.02.24.
66//
77
88import SwiftSyntax
99
10- func makeEnumBuilder ( enumDecl: EnumDeclSyntax ) throws -> StructDeclSyntax {
10+ func generateBuilderFromEnum ( enumDecl: EnumDeclSyntax ) throws -> StructDeclSyntax {
1111 let enumMember = EnumMember (
1212 identifier: TokenSyntax ( stringLiteral: " value " ) ,
1313 type: TypeSyntax ( stringLiteral: enumDecl. name. text) ,
Original file line number Diff line number Diff line change 11//
2- // MakeClassBuilder .swift
2+ // GenerateBuilderFromClass .swift
33//
44//
55// Created by Alexander Schmutz on 09.02.24.
66//
77
88import SwiftSyntax
99
10- func makeClassBuilder ( classDecl: ClassDeclSyntax ) throws -> StructDeclSyntax {
10+ func generateBuilderFromClass ( classDecl: ClassDeclSyntax ) throws -> StructDeclSyntax {
1111 guard let initialiserDecl = getFirstInitialiser ( from: classDecl. memberBlock) else {
1212 throw " Missing initialiser "
1313 }
1414 let structMembers = extractInitializerMembers ( from: initialiserDecl)
1515
16- return makeStructBuilderFrom ( structName : classDecl. name, structMembers : structMembers)
16+ return makeStructBuilder ( withStructName : classDecl. name, and : structMembers)
1717}
Original file line number Diff line number Diff line change 1+ //
2+ // GenerateBuilderFromStruct.swift
3+ //
4+ //
5+ // Created by Alexander Schmutz on 09.02.24.
6+ //
7+
8+ import SwiftSyntax
9+
10+ func generateBuilderFromStruct( structDecl: StructDeclSyntax ) -> StructDeclSyntax {
11+ let structMembers = getStructMembers ( structDecl: structDecl)
12+ return makeStructBuilder ( withStructName: structDecl. name, and: structMembers)
13+ }
14+
15+ private func getStructMembers( structDecl: StructDeclSyntax ) -> [ StructMember ] {
16+ if let initialiserDecl = getFirstInitialiser ( from: structDecl. memberBlock) {
17+ return extractInitializerMembers ( from: initialiserDecl)
18+ } else {
19+ return extractMembersFrom ( structDecl. memberBlock. members)
20+ }
21+ }
Original file line number Diff line number Diff line change 1+ //
2+ // MakeStructBuilder.swift
3+ //
4+ //
5+ // Created by Alexander Schmutz on 13.02.24.
6+ //
7+
8+ import SwiftSyntax
9+
10+ func makeStructBuilder( withStructName structName: TokenSyntax , and structMembers: [ StructMember ] ) -> StructDeclSyntax {
11+ StructDeclSyntax ( name: getStructBuilderName ( from: structName) ) {
12+ MemberBlockItemListSyntax {
13+ for structMember in structMembers {
14+ MemberBlockItemSyntax ( decl: makeVariableDecl ( structMember: structMember) )
15+ }
16+ MemberBlockItemSyntax (
17+ leadingTrivia: . newlines( 2 ) ,
18+ decl: makeFunctionDecl ( name: structName, structMembers: structMembers)
19+ )
20+ }
21+ }
22+ }
Load diff This file was deleted.
You can’t perform that action at this time.
0 commit comments