Skip to content

Commit 1965acc

Browse files
committed
Generate var getter for reuseIdentifier, fixes concurrentcy-safe error.
With `let reuseIdentifier = reuseIdentifier()`, Swift 6 would generate this error: Let 'R' is not concurrency-safe because non-'Sendable' type '_R' may have shared mutable state By changing to `var reuseIdentifier: reuseIdentifier { .init() }`, the error goes away. To be extra safe, made two additional changes (that aren't strictly needed to fix the error): - changed all other top-level lets to vars, - changed the lets in the reuseIdentifier struct to vars
1 parent 1365194 commit 1965acc

File tree

4 files changed

+20
-11
lines changed

4 files changed

+20
-11
lines changed

Sources/RswiftGenerators/ReuseIdentifier+Generator.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ extension Reusable {
2626
groupedReusables.reportWarningsForDuplicatesAndEmpties(source: "reuseIdentifier", result: "reuse identifier", warning: warning)
2727

2828
let letbindings = groupedReusables.uniques
29-
.map { $0.generateLetBinding() }
29+
.map { $0.generateVarGetter() }
3030
.sorted { $0.name < $1.name }
3131

3232
let comments = ["This `\(qualifiedName.value)` struct is generated, and contains static references to \(letbindings.count) reuse identifiers."]
@@ -82,8 +82,8 @@ extension Reusable {
8282
)
8383
}
8484

85-
func generateLetBinding() -> LetBinding {
86-
LetBinding(
85+
func generateVarGetter() -> VarGetter {
86+
VarGetter(
8787
comments: ["Reuse identifier `\(identifier)`."],
8888
name: SwiftIdentifier(name: identifier),
8989
typeReference: genericTypeReference,

Sources/RswiftGenerators/StringsTable+Generator.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ import RswiftResources
1010

1111

1212
extension Struct {
13-
public func generateBundleVarGetterForString(name: String) -> VarGetter {
13+
public func generateBundleVarGetterForString() -> VarGetter {
1414
VarGetter(
1515
deploymentTarget: deploymentTarget,
16-
name: SwiftIdentifier(name: name),
17-
typeReference: TypeReference(module: .host, rawName: self.name.value),
16+
name: name,
17+
typeReference: TypeReference(module: .host, rawName: name.value),
1818
valueCodeString: ".init(bundle: bundle, preferredLanguages: nil, locale: nil)"
1919
)
2020
}

Sources/RswiftGenerators/SwiftSyntax/Struct.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,15 @@ extension Struct {
549549
)
550550
}
551551

552+
public func generateVarGetter() -> VarGetter {
553+
VarGetter(
554+
deploymentTarget: deploymentTarget,
555+
name: name,
556+
typeReference: TypeReference(module: .host, rawName: self.name.value),
557+
valueCodeString: ".init()"
558+
)
559+
}
560+
552561
public func generateBundleVarGetter(name: String) -> VarGetter {
553562
VarGetter(
554563
deploymentTarget: deploymentTarget,

Sources/rswift/RswiftCore.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ public struct RswiftCore {
209209
}
210210

211211
if generators.contains(.string), !stringStruct.isEmpty {
212-
stringStruct.generateBundleVarGetterForString(name: "string")
212+
stringStruct.generateBundleVarGetterForString()
213213
stringStruct.generateBundleFunctionForString(name: "string")
214214
stringStruct.generateLocaleFunctionForString(name: "string")
215215
stringStruct.generatePreferredLanguagesFunctionForString(name: "string")
@@ -241,7 +241,7 @@ public struct RswiftCore {
241241
}
242242

243243
if generators.contains(.entitlements), !entitlementsStruct.isEmpty {
244-
entitlementsStruct.generateLetBinding()
244+
entitlementsStruct.generateVarGetter()
245245
entitlementsStruct
246246
}
247247

@@ -258,12 +258,12 @@ public struct RswiftCore {
258258
}
259259

260260
if generators.contains(.segue), !segueStruct.isEmpty {
261-
segueStruct.generateLetBinding()
261+
segueStruct.generateVarGetter()
262262
segueStruct
263263
}
264264

265265
if generators.contains(.id), !idStruct.isEmpty {
266-
idStruct.generateLetBinding()
266+
idStruct.generateVarGetter()
267267
idStruct
268268
}
269269

@@ -274,7 +274,7 @@ public struct RswiftCore {
274274
}
275275

276276
if generators.contains(.reuseIdentifier), !reuseIdentifierStruct.isEmpty {
277-
reuseIdentifierStruct.generateLetBinding()
277+
reuseIdentifierStruct.generateVarGetter()
278278
reuseIdentifierStruct
279279
}
280280

0 commit comments

Comments
 (0)