Skip to content

Commit c0610e3

Browse files
committed
[Observation] Lift the initializer requirement by utilizing init accessors for fully formed definite initialization
1 parent 6cb2266 commit c0610e3

File tree

1 file changed

+8
-9
lines changed

1 file changed

+8
-9
lines changed

lib/Macros/Sources/ObservationMacros/ObservableMacro.swift

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -219,14 +219,6 @@ extension ObservableMacro: MemberMacro {
219219
declaration.addIfNeeded(ObservableMacro.accessFunction(observableType), to: &declarations)
220220
declaration.addIfNeeded(ObservableMacro.withMutationFunction(observableType), to: &declarations)
221221

222-
let storedInstanceVariables = declaration.definedVariables.filter { $0.isValidForObservation }
223-
for property in storedInstanceVariables {
224-
if property.hasMacroApplication(ObservableMacro.ignoredMacroName) { continue }
225-
if property.initializer == nil {
226-
context.addDiagnostics(from: DiagnosticsError(syntax: property, message: "@Observable requires property '\(property.identifier?.text ?? "")' to have an initial value", id: .missingInitializer), node: property)
227-
}
228-
}
229-
230222
return declarations
231223
}
232224
}
@@ -306,6 +298,13 @@ public struct ObservationTrackedMacro: AccessorMacro {
306298
return []
307299
}
308300

301+
let initAccessor: AccessorDeclSyntax =
302+
"""
303+
init(initialValue) initializes(_\(identifier)) {
304+
_\(identifier) = initialValue
305+
}
306+
"""
307+
309308
let getAccessor: AccessorDeclSyntax =
310309
"""
311310
get {
@@ -323,7 +322,7 @@ public struct ObservationTrackedMacro: AccessorMacro {
323322
}
324323
"""
325324

326-
return [getAccessor, setAccessor]
325+
return [initAccessor, getAccessor, setAccessor]
327326
}
328327
}
329328

0 commit comments

Comments
 (0)