diff --git a/Package.resolved b/Package.resolved index b655792..4a4727e 100644 --- a/Package.resolved +++ b/Package.resolved @@ -5,8 +5,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-syntax.git", "state" : { - "revision" : "0687f71944021d616d34d922343dcef086855920", - "version" : "600.0.1" + "revision" : "cb53fa1bd3219b0b23ded7dfdd3b2baff266fd25", + "version" : "600.0.0" } } ], diff --git a/Sources/PrototypeMacros/PrototypeMacro.swift b/Sources/PrototypeMacros/PrototypeMacro.swift index f96876a..15804cd 100644 --- a/Sources/PrototypeMacros/PrototypeMacro.swift +++ b/Sources/PrototypeMacros/PrototypeMacro.swift @@ -14,199 +14,19 @@ public struct PrototypeMacro: PeerMacro { let arguments = try PrototypeMacroArguments(from: node) let spec = try PrototypeSpec(parsing: declaration) - var result: [DeclSyntax] = [] - try arguments.kinds.forEach { kind in + return try arguments.kinds.map { kind in switch kind { case .form: - let members = spec.members.filter { member in member.attributes.contains(.visible) } - var isInSection = false - var body: [String] = [] - - try members.forEach { member in - if member.attributes.contains(.section) { - if isInSection { - body.append("}") - } - - isInSection = true - - if let sectionTitle = member.sectionTitle { - body.append("Section(header: Text(\"\(spec.name)Form.\(sectionTitle)\")) {") - } else { - body.append("Section {") - } - } - - body.append(try buildMemberSpecFormSyntax(arguments: arguments, keyPrefix: "\(spec.name)Form", spec: member)) - } - - if isInSection { - body.append("}") - } + try buildFormSyntax(spec: spec, arguments: arguments) - let modelAttribute = spec.kind == .binding ? "@Binding" : "@ObservedObject" - let modelParameter = spec.kind == .binding ? "Binding<\(spec.name)>": "\(spec.name)" - let modelAssignment = spec.kind == .binding ? "self._model = model" : "self.model = model" - - result.append( - """ - \(raw: spec.accessLevelModifiers.structDeclAccessLevelModifiers) struct \(raw: spec.name)Form: View { - \(raw: modelAttribute) public var model: \(raw: spec.name) - private let footer: AnyView? - private let numberFormatter: NumberFormatter - - public init(model: \(raw: modelParameter), numberFormatter: NumberFormatter = .init()) { - \(raw: modelAssignment) - self.footer = nil - self.numberFormatter = numberFormatter - } - - public init