Skip to content

Commit e7f9530

Browse files
authored
Merge pull request #1846 from ahoppen/invalid-manifest-build-settings
Return compiler arguments for invalid package manifests
2 parents 247acf6 + a087692 commit e7f9530

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -783,7 +783,7 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
783783

784784
/// Retrieve settings for a package manifest (Package.swift).
785785
private func settings(forPackageManifest path: AbsolutePath) throws -> TextDocumentSourceKitOptionsResponse? {
786-
let compilerArgs = swiftPMWorkspace.interpreterFlags(for: path.parentDirectory) + [path.pathString]
786+
let compilerArgs = try swiftPMWorkspace.interpreterFlags(for: path) + [path.pathString]
787787
return TextDocumentSourceKitOptionsResponse(compilerArguments: compilerArgs)
788788
}
789789
}

Tests/BuildSystemIntegrationTests/SwiftPMBuildSystemTests.swift

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1148,6 +1148,39 @@ final class SwiftPMBuildSystemTests: XCTestCase {
11481148
XCTAssert(compilerArgs.contains(try versionSpecificManifestURL.filePath))
11491149
}
11501150
}
1151+
1152+
func testBuildSettingsForInvalidManifest() async throws {
1153+
try await withTestScratchDir { tempDir in
1154+
try FileManager.default.createFiles(
1155+
root: tempDir,
1156+
files: [
1157+
"pkg/Sources/lib/a.swift": "",
1158+
"pkg/Package.swift": """
1159+
// swift-tools-version: 4.2
1160+
import PackageDescription
1161+
""",
1162+
]
1163+
)
1164+
let packageRoot = try tempDir.appendingPathComponent("pkg").realpath
1165+
let manifestURL = packageRoot.appendingPathComponent("Package.swift")
1166+
let buildSystemManager = await BuildSystemManager(
1167+
buildSystemSpec: BuildSystemSpec(kind: .swiftPM, projectRoot: packageRoot),
1168+
toolchainRegistry: .forTesting,
1169+
options: SourceKitLSPOptions(),
1170+
connectionToClient: DummyBuildSystemManagerConnectionToClient(),
1171+
buildSystemTestHooks: BuildSystemTestHooks()
1172+
)
1173+
await buildSystemManager.waitForUpToDateBuildGraph()
1174+
let settings = await buildSystemManager.buildSettingsInferredFromMainFile(
1175+
for: DocumentURI(manifestURL),
1176+
language: .swift,
1177+
fallbackAfterTimeout: false
1178+
)
1179+
let compilerArgs = try XCTUnwrap(settings?.compilerArguments)
1180+
XCTAssert(compilerArgs.contains("-package-description-version"))
1181+
XCTAssert(compilerArgs.contains(try manifestURL.filePath))
1182+
}
1183+
}
11511184
}
11521185

11531186
private func assertArgumentsDoNotContain(

0 commit comments

Comments
 (0)