From cb2f0c7ee0cf7d151d1f1b01902a345759e0f45c Mon Sep 17 00:00:00 2001 From: Philippe Hausler Date: Thu, 1 Jun 2023 14:16:17 -0700 Subject: [PATCH] [Observation] Ensure type access is qualified to the module name --- .../ObservationMacros/ObservableMacro.swift | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/Macros/Sources/ObservationMacros/ObservableMacro.swift b/lib/Macros/Sources/ObservationMacros/ObservableMacro.swift index be1bf85a327e0..75aeccfc63d35 100644 --- a/lib/Macros/Sources/ObservationMacros/ObservableMacro.swift +++ b/lib/Macros/Sources/ObservationMacros/ObservableMacro.swift @@ -17,6 +17,22 @@ import SwiftSyntaxMacros @_implementationOnly import SwiftSyntaxBuilder public struct ObservableMacro { + static let moduleName = "_Observation" + + static let conformanceName = "Observable" + static var qualifiedConformanceName: String { + return "\(moduleName).\(conformanceName)" + } + + static var observableConformanceType: TypeSyntax { + "\(raw: qualifiedConformanceName)" + } + + static let registrarTypeName = "ObservationRegistrar" + static var qualifiedRegistrarTypeName: String { + return "\(moduleName).\(registrarTypeName)" + } + static let trackedMacroName = "ObservationTracked" static let ignoredMacroName = "ObservationIgnored" @@ -25,7 +41,7 @@ public struct ObservableMacro { static func registrarVariable(_ observableType: TokenSyntax) -> DeclSyntax { return """ - @\(raw: ignoredMacroName) private let \(raw: registrarVariableName) = ObservationRegistrar() + @\(raw: ignoredMacroName) private let \(raw: registrarVariableName) = \(raw: qualifiedRegistrarTypeName)() """ } @@ -264,13 +280,13 @@ extension ObservableMacro: ConformanceMacro { if let inheritanceList { for inheritance in inheritanceList { - if inheritance.typeName.identifier == "Observable" { + if inheritance.typeName.identifier == ObservableMacro.conformanceName { return [] } } } - return [("Observable", nil)] + return [(ObservableMacro.observableConformanceType, nil)] } }