diff --git a/Sources/Workspace/InitPackage.swift b/Sources/Workspace/InitPackage.swift index 07224aeb17f..9625ae7fc3e 100644 --- a/Sources/Workspace/InitPackage.swift +++ b/Sources/Workspace/InitPackage.swift @@ -35,14 +35,19 @@ public final class InitPackage { /// Note: This should only contain Apple platforms right now. public var platforms: [SupportedPlatform] + /// The swiftLanguageModes to include + public var swiftLanguageModes: [SwiftLanguageVersion] + public init( packageType: PackageType, supportedTestingLibraries: Set, - platforms: [SupportedPlatform] = [] + platforms: [SupportedPlatform] = [], + swiftLanguageModes: [SwiftLanguageVersion] = [SwiftLanguageVersion.v6] ) { self.packageType = packageType self.supportedTestingLibraries = supportedTestingLibraries self.platforms = platforms + self.swiftLanguageModes = swiftLanguageModes } } @@ -432,6 +437,12 @@ public final class InitPackage { pkgParams.append(param) } + if (!options.swiftLanguageModes.isEmpty) { + pkgParams.append(""" + swiftLanguageModes: [\(options.swiftLanguageModes.map { ".v\($0)" }.joined(separator: ", "))] + """) + } + stream.send("\(pkgParams.joined(separator: ",\n"))\n)\n") } diff --git a/Sources/_InternalTestSupport/misc.swift b/Sources/_InternalTestSupport/misc.swift index 944a9b1c079..e659cf71c0a 100644 --- a/Sources/_InternalTestSupport/misc.swift +++ b/Sources/_InternalTestSupport/misc.swift @@ -666,11 +666,12 @@ extension InitPackage { packageType: PackageType, supportedTestingLibraries: Set = [.swiftTesting], destinationPath: AbsolutePath, - fileSystem: FileSystem + fileSystem: FileSystem, + swiftLanguageModes: [SwiftLanguageVersion] = [] ) throws { try self.init( name: name, - options: InitPackageOptions(packageType: packageType, supportedTestingLibraries: supportedTestingLibraries), + options: InitPackageOptions(packageType: packageType, supportedTestingLibraries: supportedTestingLibraries, swiftLanguageModes: swiftLanguageModes), destinationPath: destinationPath, installedSwiftPMConfiguration: .default, fileSystem: fileSystem diff --git a/Tests/WorkspaceTests/InitTests.swift b/Tests/WorkspaceTests/InitTests.swift index c5a6cc61319..ddc8efe0b92 100644 --- a/Tests/WorkspaceTests/InitTests.swift +++ b/Tests/WorkspaceTests/InitTests.swift @@ -510,6 +510,31 @@ final class InitTests: XCTestCase { } } + func testInitPackageIncludesSwiftLanguageMode() throws { + try testWithTemporaryDirectory { tmpPath in + let fs = localFileSystem + let path = tmpPath.appending("testInitPackageIncludesSwiftLanguageMode") + let name = path.basename + try fs.createDirectory(path) + + // Create a library package + let initPackage = try InitPackage( + name: name, + packageType: .library, + supportedTestingLibraries: [], + destinationPath: path, + installedSwiftPMConfiguration: .default, + fileSystem: localFileSystem + ) + try initPackage.writePackageStructure() + + // Verify the manifest includes Swift language mode + let manifest = path.appending("Package.swift") + let manifestContents: String = try localFileSystem.readFileContents(manifest) + XCTAssertMatch(manifestContents, .contains("swiftLanguageModes: [.v6]")) + } + } + private func packageWithNameOnly(named name: String) -> String { return """ let package = Package(