Skip to content

Commit a90e5d1

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

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
@@ -203,14 +203,6 @@ extension ObservableMacro: MemberMacro {
203203
declaration.addIfNeeded(ObservableMacro.accessFunction(observableType), to: &declarations)
204204
declaration.addIfNeeded(ObservableMacro.withMutationFunction(observableType), to: &declarations)
205205

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-
214206
return declarations
215207
}
216208
}
@@ -290,6 +282,13 @@ public struct ObservationTrackedMacro: AccessorMacro {
290282
return []
291283
}
292284

285+
let initAccessor: AccessorDeclSyntax =
286+
"""
287+
init(initialValue) initializes(_\(identifier)) {
288+
_\(identifier) = initialValue
289+
}
290+
"""
291+
293292
let getAccessor: AccessorDeclSyntax =
294293
"""
295294
get {
@@ -307,7 +306,7 @@ public struct ObservationTrackedMacro: AccessorMacro {
307306
}
308307
"""
309308

310-
return [getAccessor, setAccessor]
309+
return [initAccessor, getAccessor, setAccessor]
311310
}
312311
}
313312

0 commit comments

Comments
 (0)