Skip to content

Commit 59fb1dc

Browse files
committed
[Observation] Lift the initializer requirement by utilizing init accessors for fully formed definite initialization
1 parent f373ad9 commit 59fb1dc

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

lib/Macros/Sources/ObservationMacros/ObservableMacro.swift

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -202,15 +202,7 @@ extension ObservableMacro: MemberMacro {
202202
declaration.addIfNeeded(ObservableMacro.registrarVariable(observableType), to: &declarations)
203203
declaration.addIfNeeded(ObservableMacro.accessFunction(observableType), to: &declarations)
204204
declaration.addIfNeeded(ObservableMacro.withMutationFunction(observableType), to: &declarations)
205-
206-
let storedInstanceVariables = declaration.definedVariables.filter { $0.isValidForObservation }
207-
for property in storedInstanceVariables {
208-
if property.hasMacroApplication(ObservableMacro.ignoredMacroName) { continue }
209-
if property.initializer == nil {
210-
context.addDiagnostics(from: DiagnosticsError(syntax: property, message: "@Observable requires property '\(property.identifier?.text ?? "")' to have an initial value", id: .missingInitializer), node: property)
211-
}
212-
}
213-
205+
214206
return declarations
215207
}
216208
}
@@ -290,6 +282,14 @@ public struct ObservationTrackedMacro: AccessorMacro {
290282
return []
291283
}
292284

285+
let initAccessor: AccessorDeclSyntax = {
286+
"""
287+
init(initialValue) initializes(_\(identifier)) {
288+
_\(identifier) = initialValue
289+
}
290+
"""
291+
}
292+
293293
let getAccessor: AccessorDeclSyntax =
294294
"""
295295
get {
@@ -307,7 +307,7 @@ public struct ObservationTrackedMacro: AccessorMacro {
307307
}
308308
"""
309309

310-
return [getAccessor, setAccessor]
310+
return [initAccessor, getAccessor, setAccessor]
311311
}
312312
}
313313

0 commit comments

Comments
 (0)