Skip to content

Commit 22eeb4f

Browse files
authored
Merge pull request #143 from rmaz/separatetoolchain
Separate toolchain discovery from build settings
2 parents 5c8ed58 + ace68d3 commit 22eeb4f

File tree

8 files changed

+21
-20
lines changed

8 files changed

+21
-20
lines changed

Sources/SKCore/BuildSystem.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,8 @@ public protocol BuildSystem {
3232
/// Returns the settings for the given url and language mode, if known.
3333
func settings(for: URL, _ language: Language) -> FileBuildSettings?
3434

35+
/// Returns the toolchain to use to compile this file
36+
func toolchain(for: URL, _ language: Language) -> Toolchain?
37+
3538
// TODO: notifications when settings change.
3639
}

Sources/SKCore/BuildSystemList.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,8 @@ extension BuildSystemList: BuildSystem {
3838
}
3939
return nil
4040
}
41+
42+
public func toolchain(for url: URL, _ language: Language) -> Toolchain? {
43+
return providers.first?.toolchain(for: url, language)
44+
}
4145
}

Sources/SKCore/CompilationDatabaseBuildSystem.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,13 @@ extension CompilationDatabaseBuildSystem: BuildSystem {
4343
guard let db = database(for: url),
4444
let cmd = db[url].first else { return nil }
4545
return FileBuildSettings(
46-
preferredToolchain: nil, // FIXME: infer from path
4746
compilerArguments: Array(cmd.commandLine.dropFirst()),
4847
workingDirectory: cmd.directory
4948
)
5049
}
5150

51+
public func toolchain(for: URL, _ language: Language) -> Toolchain? { return nil }
52+
5253
func database(for url: URL) -> CompilationDatabase? {
5354
if let path = try? AbsolutePath(validating: url.path) {
5455
return database(for: path)

Sources/SKCore/FallbackBuildSystem.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ public final class FallbackBuildSystem: BuildSystem {
5050
}
5151
}
5252

53+
public func toolchain(for: URL, _ language: Language) -> Toolchain? { return nil }
54+
5355
func settingsSwift(_ path: AbsolutePath) -> FileBuildSettings {
5456
var args: [String] = []
5557
if let sdkpath = sdkpath {
@@ -59,7 +61,7 @@ public final class FallbackBuildSystem: BuildSystem {
5961
]
6062
}
6163
args.append(path.pathString)
62-
return FileBuildSettings(preferredToolchain: nil, compilerArguments: args)
64+
return FileBuildSettings(compilerArguments: args)
6365
}
6466

6567
func settingsClang(_ path: AbsolutePath, _ language: Language) -> FileBuildSettings {
@@ -71,6 +73,6 @@ public final class FallbackBuildSystem: BuildSystem {
7173
]
7274
}
7375
args.append(path.pathString)
74-
return FileBuildSettings(preferredToolchain: nil, compilerArguments: args)
76+
return FileBuildSettings(compilerArguments: args)
7577
}
7678
}

Sources/SKCore/FileBuildSettings.swift

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,20 @@
1212

1313
/// Build settings for a single file.
1414
///
15-
/// Encapsulates all the settings needed to compile a single file, including the compiler arguments,
16-
/// working directory, and preferred toolchain if any. FileBuildSettings are typically the result
17-
/// of a BuildSystem query.
15+
/// Encapsulates all the settings needed to compile a single file, including the compiler arguments
16+
/// and working directory. FileBuildSettings are typically the result of a BuildSystem query.
1817
public struct FileBuildSettings {
1918

20-
/// The Toolchain that is preferred for compiling this file, if any.
21-
public var preferredToolchain: Toolchain? = nil
22-
2319
/// The compiler arguments to use for this file.
2420
public var compilerArguments: [String]
2521

2622
/// The working directory to resolve any relative paths in `compilerArguments`.
2723
public var workingDirectory: String? = nil
2824

2925
public init(
30-
preferredToolchain: Toolchain? = nil,
3126
compilerArguments: [String],
3227
workingDirectory: String? = nil)
3328
{
34-
self.preferredToolchain = preferredToolchain
3529
self.compilerArguments = compilerArguments
3630
self.workingDirectory = workingDirectory
3731
}

Sources/SKSwiftPMWorkspace/SwiftPMWorkspace.swift

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,10 @@ extension SwiftPMWorkspace: BuildSystem {
214214
return nil
215215
}
216216

217+
public func toolchain(for: LanguageServerProtocol.URL, _ language: Language) -> SKCore.Toolchain? {
218+
return nil
219+
}
220+
217221
/// Returns the resolved target description for the given file, if one is known.
218222
func targetDescription(for file: AbsolutePath) -> TargetBuildDescription? {
219223
if let td = fileToTarget[file] {
@@ -257,10 +261,7 @@ extension SwiftPMWorkspace {
257261
func impl(_ path: AbsolutePath) -> FileBuildSettings? {
258262
for package in packageGraph.packages where path == package.manifest.path {
259263
let compilerArgs = workspace.interpreterFlags(for: package.path) + [path.pathString]
260-
return FileBuildSettings(
261-
preferredToolchain: nil,
262-
compilerArguments: compilerArgs
263-
)
264+
return FileBuildSettings(compilerArguments: compilerArgs)
264265
}
265266
return nil
266267
}
@@ -319,7 +320,6 @@ extension SwiftPMWorkspace {
319320
args += td.compileArguments()
320321

321322
return FileBuildSettings(
322-
preferredToolchain: nil,
323323
compilerArguments: args,
324324
workingDirectory: workspacePath.pathString)
325325
}
@@ -382,7 +382,6 @@ extension SwiftPMWorkspace {
382382
}
383383

384384
return FileBuildSettings(
385-
preferredToolchain: nil,
386385
compilerArguments: args,
387386
workingDirectory: workspacePath.pathString)
388387
}

Sources/SourceKit/SourceKitServer.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ public final class SourceKitServer: LanguageServer {
134134
}
135135

136136
func toolchain(for url: URL, _ language: Language) -> Toolchain? {
137-
if let toolchain = workspace?.buildSettings.settings(for: url, language)?.preferredToolchain {
137+
if let toolchain = workspace?.buildSettings.toolchain(for: url, language) {
138138
return toolchain
139139
}
140140

Tests/SKCoreTests/FallbackBuildSystemTests.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ final class FallbackBuildSystemTests: XCTestCase {
2828
XCTAssertNil(bs.indexDatabasePath)
2929

3030
let settings = bs.settings(for: source.asURL, .swift)!
31-
XCTAssertNil(settings.preferredToolchain)
3231
XCTAssertNil(settings.workingDirectory)
3332

3433
let args = settings.compilerArguments
@@ -53,7 +52,6 @@ final class FallbackBuildSystemTests: XCTestCase {
5352
bs.sdkpath = sdk
5453

5554
let settings = bs.settings(for: source.asURL, .cpp)!
56-
XCTAssertNil(settings.preferredToolchain)
5755
XCTAssertNil(settings.workingDirectory)
5856

5957
let args = settings.compilerArguments

0 commit comments

Comments
 (0)