diff --git a/Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift b/Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift index 90b7cf4ca..adb790a74 100644 --- a/Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift +++ b/Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift @@ -783,7 +783,7 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem { /// Retrieve settings for a package manifest (Package.swift). private func settings(forPackageManifest path: AbsolutePath) throws -> TextDocumentSourceKitOptionsResponse? { - let compilerArgs = swiftPMWorkspace.interpreterFlags(for: path.parentDirectory) + [path.pathString] + let compilerArgs = try swiftPMWorkspace.interpreterFlags(for: path) + [path.pathString] return TextDocumentSourceKitOptionsResponse(compilerArguments: compilerArgs) } } diff --git a/Tests/BuildSystemIntegrationTests/SwiftPMBuildSystemTests.swift b/Tests/BuildSystemIntegrationTests/SwiftPMBuildSystemTests.swift index 339ea64f0..f800b0a2f 100644 --- a/Tests/BuildSystemIntegrationTests/SwiftPMBuildSystemTests.swift +++ b/Tests/BuildSystemIntegrationTests/SwiftPMBuildSystemTests.swift @@ -1148,6 +1148,39 @@ final class SwiftPMBuildSystemTests: XCTestCase { XCTAssert(compilerArgs.contains(try versionSpecificManifestURL.filePath)) } } + + func testBuildSettingsForInvalidManifest() async throws { + try await withTestScratchDir { tempDir in + try FileManager.default.createFiles( + root: tempDir, + files: [ + "pkg/Sources/lib/a.swift": "", + "pkg/Package.swift": """ + // swift-tools-version: 4.2 + import PackageDescription + """, + ] + ) + let packageRoot = try tempDir.appendingPathComponent("pkg").realpath + let manifestURL = packageRoot.appendingPathComponent("Package.swift") + let buildSystemManager = await BuildSystemManager( + buildSystemSpec: BuildSystemSpec(kind: .swiftPM, projectRoot: packageRoot), + toolchainRegistry: .forTesting, + options: SourceKitLSPOptions(), + connectionToClient: DummyBuildSystemManagerConnectionToClient(), + buildSystemTestHooks: BuildSystemTestHooks() + ) + await buildSystemManager.waitForUpToDateBuildGraph() + let settings = await buildSystemManager.buildSettingsInferredFromMainFile( + for: DocumentURI(manifestURL), + language: .swift, + fallbackAfterTimeout: false + ) + let compilerArgs = try XCTUnwrap(settings?.compilerArguments) + XCTAssert(compilerArgs.contains("-package-description-version")) + XCTAssert(compilerArgs.contains(try manifestURL.filePath)) + } + } } private func assertArgumentsDoNotContain(