diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 58ad3c7..19f35f6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,7 +16,7 @@ jobs: with: swift-version: "5.10" - name: Checkout - uses: actions/checkout@v4.1.7 + uses: actions/checkout@v4.2.2 - name: Create Release run: | set -euo pipefail diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml index 6099d09..44d269d 100644 --- a/.github/workflows/swift.yml +++ b/.github/workflows/swift.yml @@ -10,12 +10,12 @@ on: branches: [ "main" ] jobs: - build-knit: + build-knit-swift-5: runs-on: macos-latest steps: - - uses: actions/checkout@v4.1.7 + - uses: actions/checkout@v4.2.2 - uses: swift-actions/setup-swift@v2.1.0 with: swift-version: "5.10" @@ -23,3 +23,19 @@ jobs: run: swift build -v - name: Run Knit tests run: swift test -v + +# Enable below when issue is resolved: https://github.com/swift-actions/setup-swift/issues/683 + +# build-knit-swift-6: +# +# runs-on: macos-latest +# +# steps: +# - uses: actions/checkout@v4.2.2 +# - uses: swift-actions/setup-swift@v2.1.0 +# with: +# swift-version: "6.0" +# - name: Build Knit +# run: swift build -v +# - name: Run Knit tests +# run: swift test -v diff --git a/Package.swift b/Package.swift index ed8881e..bc3e7f9 100644 --- a/Package.swift +++ b/Package.swift @@ -66,5 +66,9 @@ let package = Package( "KnitCodeGen", ] ), + ], + swiftLanguageVersions: [ + // When this SPM package is imported by a Swift 6 toolchain it should still be used in the v5 language mode + .v5, ] ) diff --git a/Sources/KnitCodeGen/AssemblyParsing.swift b/Sources/KnitCodeGen/AssemblyParsing.swift index 8b2fcb9..26c592b 100644 --- a/Sources/KnitCodeGen/AssemblyParsing.swift +++ b/Sources/KnitCodeGen/AssemblyParsing.swift @@ -3,8 +3,8 @@ // import Foundation -import SwiftSyntax -import SwiftParser +@preconcurrency import SwiftSyntax +@preconcurrency import SwiftParser class AssemblyFileVisitor: SyntaxVisitor, IfConfigVisitor { diff --git a/Sources/KnitCodeGen/Configuration.swift b/Sources/KnitCodeGen/Configuration.swift index a244fc0..c44ddcb 100644 --- a/Sources/KnitCodeGen/Configuration.swift +++ b/Sources/KnitCodeGen/Configuration.swift @@ -5,14 +5,14 @@ import Foundation import SwiftSyntax -public struct Configuration: Encodable { +public struct Configuration: Encodable, Sendable { /// Name of the module for this configuration. public var assemblyName: String public let moduleName: String public var directives: KnitDirectives - public enum AssemblyType: String, Encodable { + public enum AssemblyType: String, Encodable, Sendable { /// `Swinject.Assembly` case moduleAssembly = "ModuleAssembly" case autoInitAssembly = "AutoInitModuleAssembly" diff --git a/Sources/KnitCodeGen/FunctionCallRegistrationParsing.swift b/Sources/KnitCodeGen/FunctionCallRegistrationParsing.swift index aa28ba9..eeb97d9 100644 --- a/Sources/KnitCodeGen/FunctionCallRegistrationParsing.swift +++ b/Sources/KnitCodeGen/FunctionCallRegistrationParsing.swift @@ -3,7 +3,7 @@ // import Foundation -import SwiftSyntax +@preconcurrency import SwiftSyntax struct CalledMethod { diff --git a/Sources/KnitCodeGen/KnitDirectives.swift b/Sources/KnitCodeGen/KnitDirectives.swift index db042fd..4f6e1a9 100644 --- a/Sources/KnitCodeGen/KnitDirectives.swift +++ b/Sources/KnitCodeGen/KnitDirectives.swift @@ -5,7 +5,7 @@ import Foundation import SwiftSyntax -public struct KnitDirectives: Codable, Equatable { +public struct KnitDirectives: Codable, Equatable, Sendable { var accessLevel: AccessLevel? var getterConfig: Set var moduleName: String? @@ -131,16 +131,16 @@ extension KnitDirectives { } } -public enum GetterConfig: Codable, Equatable, Hashable { +public enum GetterConfig: Codable, Equatable, Hashable, Sendable { /// Only the `callAsFunction()` accessor is generated. case callAsFunction /// Only the identified getter is generated. case identifiedGetter(_ name: String?) /// Centralized control of the default behavior. - public static var `default`: Set = [.identifiedGetter(nil)] + public static let `default`: Set = [.identifiedGetter(nil)] - public static var both: Set = [.callAsFunction, .identifiedGetter(nil)] + public static let both: Set = [.callAsFunction, .identifiedGetter(nil)] public var isNamed: Bool { switch self { @@ -150,12 +150,12 @@ public enum GetterConfig: Codable, Equatable, Hashable { } } -public enum AccessLevel: String, CaseIterable, Codable { +public enum AccessLevel: String, CaseIterable, Codable, Sendable { case `public` case `internal` case hidden case ignore /// Centralized control of the default behavior. - public static var `default`: AccessLevel = .internal + public static let `default`: AccessLevel = .internal } diff --git a/Sources/KnitCodeGen/ModuleImport.swift b/Sources/KnitCodeGen/ModuleImport.swift index 51e981d..5767a48 100644 --- a/Sources/KnitCodeGen/ModuleImport.swift +++ b/Sources/KnitCodeGen/ModuleImport.swift @@ -3,9 +3,9 @@ // import Foundation -import SwiftSyntax +@preconcurrency import SwiftSyntax -public struct ModuleImport { +public struct ModuleImport: Sendable { let decl: ImportDeclSyntax let ifConfigCondition: ExprSyntax? let name: String diff --git a/Sources/KnitCodeGen/Registration.swift b/Sources/KnitCodeGen/Registration.swift index 61fc9f5..b059f8f 100644 --- a/Sources/KnitCodeGen/Registration.swift +++ b/Sources/KnitCodeGen/Registration.swift @@ -2,9 +2,9 @@ // Copyright © Block, Inc. All rights reserved. // -import SwiftSyntax +@preconcurrency import SwiftSyntax -public struct Registration: Equatable, Codable { +public struct Registration: Equatable, Codable, Sendable { public var service: String @@ -63,7 +63,7 @@ public struct Registration: Equatable, Codable { extension Registration { - public struct Argument: Equatable, Codable { + public struct Argument: Equatable, Codable, Sendable { let identifier: Identifier let type: String @@ -77,7 +77,7 @@ extension Registration { self.type = type } - public enum Identifier: Codable, Equatable { + public enum Identifier: Codable, Equatable, Sendable { /// Used for arguments defined in `.register` registrations. case fixed(String) @@ -87,7 +87,7 @@ extension Registration { } - public enum FunctionName: String, Codable { + public enum FunctionName: String, Codable, Sendable { case register case autoregister case registerAbstract diff --git a/Sources/KnitCodeGen/RegistrationIntoCollection.swift b/Sources/KnitCodeGen/RegistrationIntoCollection.swift index e603b20..b934141 100644 --- a/Sources/KnitCodeGen/RegistrationIntoCollection.swift +++ b/Sources/KnitCodeGen/RegistrationIntoCollection.swift @@ -4,7 +4,7 @@ /// Represents a single concrete factory registered into a collection /// A separate instance will be created for each call to `{auto}registerIntoCollection` -public struct RegistrationIntoCollection: Equatable { +public struct RegistrationIntoCollection: Equatable, Sendable { public var service: String