Skip to content

Commit 0bdbb50

Browse files
committed
Review CompilationDatabaseBuildSystem
1 parent 3753837 commit 0bdbb50

File tree

7 files changed

+26
-59
lines changed

7 files changed

+26
-59
lines changed

Sources/BuildSystemIntegration/BuildServerBuildSystem.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ extension BuildServerBuildSystem: BuiltInBuildSystem {
328328
)
329329
}
330330

331-
package func waitForUpBuildSystemUpdates(request: WorkspaceWaitForBuildSystemUpdatesRequest) async -> VoidResponse {
331+
package func waitForBuildSystemUpdates(request: WorkspaceWaitForBuildSystemUpdatesRequest) async -> VoidResponse {
332332
return VoidResponse()
333333
}
334334
}

Sources/BuildSystemIntegration/BuiltInBuildSystem.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,5 +71,5 @@ package protocol BuiltInBuildSystem: AnyObject, Sendable {
7171
) async throws -> TextDocumentSourceKitOptionsResponse?
7272

7373
/// Wait until the build graph has been loaded.
74-
func waitForUpBuildSystemUpdates(request: WorkspaceWaitForBuildSystemUpdatesRequest) async -> VoidResponse
74+
func waitForBuildSystemUpdates(request: WorkspaceWaitForBuildSystemUpdatesRequest) async -> VoidResponse
7575
}

Sources/BuildSystemIntegration/BuiltInBuildSystemAdapter.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ package actor BuiltInBuildSystemAdapter: QueueBasedMessageHandler {
167167
case let request as RequestAndReply<WorkspaceBuildTargetsRequest>:
168168
await request.reply { try await underlyingBuildSystem.buildTargets(request: request.params) }
169169
case let request as RequestAndReply<WorkspaceWaitForBuildSystemUpdatesRequest>:
170-
await request.reply { await underlyingBuildSystem.waitForUpBuildSystemUpdates(request: request.params) }
170+
await request.reply { await underlyingBuildSystem.waitForBuildSystemUpdates(request: request.params) }
171171
default:
172172
await request.reply { throw ResponseError.methodNotFound(Request.method) }
173173
}

Sources/BuildSystemIntegration/CompilationDatabaseBuildSystem.swift

Lines changed: 20 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,14 @@ fileprivate enum Cachable<Value> {
4848
///
4949
/// Provides build settings from a `CompilationDatabase` found by searching a project. For now, only
5050
/// one compilation database, located at the project root.
51-
package actor CompilationDatabaseBuildSystem {
51+
package actor CompilationDatabaseBuildSystem: BuiltInBuildSystem {
52+
static package func projectRoot(for workspaceFolder: AbsolutePath, options: SourceKitLSPOptions) -> AbsolutePath? {
53+
if tryLoadCompilationDatabase(directory: workspaceFolder) != nil {
54+
return workspaceFolder
55+
}
56+
return nil
57+
}
58+
5259
/// The compilation database.
5360
var compdb: CompilationDatabase? = nil {
5461
didSet {
@@ -58,14 +65,12 @@ package actor CompilationDatabaseBuildSystem {
5865
}
5966
}
6067

61-
package let connectionToSourceKitLSP: any Connection
68+
private let connectionToSourceKitLSP: any Connection
69+
private let searchPaths: [RelativePath]
70+
private let fileSystem: FileSystem
6271

6372
package let projectRoot: AbsolutePath
6473

65-
let searchPaths: [RelativePath]
66-
67-
let fileSystem: FileSystem
68-
6974
private var _indexStorePath: Cachable<AbsolutePath?> = .noValue
7075
package var indexStorePath: AbsolutePath? {
7176
_indexStorePath.get {
@@ -87,6 +92,12 @@ package actor CompilationDatabaseBuildSystem {
8792
}
8893
}
8994

95+
package var indexDatabasePath: AbsolutePath? {
96+
indexStorePath?.parentDirectory.appending(component: "IndexDatabase")
97+
}
98+
99+
package nonisolated var supportsPreparation: Bool { false }
100+
90101
package init?(
91102
projectRoot: AbsolutePath,
92103
searchPaths: [RelativePath],
@@ -103,21 +114,6 @@ package actor CompilationDatabaseBuildSystem {
103114
return nil
104115
}
105116
}
106-
}
107-
108-
extension CompilationDatabaseBuildSystem: BuiltInBuildSystem {
109-
static package func projectRoot(for workspaceFolder: AbsolutePath, options: SourceKitLSPOptions) -> AbsolutePath? {
110-
if tryLoadCompilationDatabase(directory: workspaceFolder) != nil {
111-
return workspaceFolder
112-
}
113-
return nil
114-
}
115-
116-
package nonisolated var supportsPreparation: Bool { false }
117-
118-
package var indexDatabasePath: AbsolutePath? {
119-
indexStorePath?.parentDirectory.appending(component: "IndexDatabase")
120-
}
121117

122118
package func buildTargets(request: WorkspaceBuildTargetsRequest) async throws -> WorkspaceBuildTargetsResponse {
123119
return WorkspaceBuildTargetsResponse(targets: [
@@ -135,10 +131,7 @@ extension CompilationDatabaseBuildSystem: BuiltInBuildSystem {
135131
}
136132

137133
package func buildTargetSources(request: BuildTargetSourcesRequest) async throws -> BuildTargetSourcesResponse {
138-
guard request.targets.contains(.dummy) else {
139-
return BuildTargetSourcesResponse(items: [])
140-
}
141-
guard let compdb else {
134+
guard request.targets.contains(.dummy), let compdb else {
142135
return BuildTargetSourcesResponse(items: [])
143136
}
144137
return BuildTargetSourcesResponse(items: [SourcesItem(target: .dummy, sources: compdb.sourceItems)])
@@ -157,7 +150,7 @@ extension CompilationDatabaseBuildSystem: BuiltInBuildSystem {
157150
package func sourceKitOptions(
158151
request: TextDocumentSourceKitOptionsRequest
159152
) async throws -> TextDocumentSourceKitOptionsResponse? {
160-
guard let db = database(for: request.textDocument.uri), let cmd = db[request.textDocument.uri].first else {
153+
guard let compdb, let cmd = compdb[request.textDocument.uri].first else {
161154
return nil
162155
}
163156
return TextDocumentSourceKitOptionsResponse(
@@ -166,36 +159,10 @@ extension CompilationDatabaseBuildSystem: BuiltInBuildSystem {
166159
)
167160
}
168161

169-
package func waitForUpBuildSystemUpdates(request: WorkspaceWaitForBuildSystemUpdatesRequest) async -> VoidResponse {
162+
package func waitForBuildSystemUpdates(request: WorkspaceWaitForBuildSystemUpdatesRequest) async -> VoidResponse {
170163
return VoidResponse()
171164
}
172165

173-
private func database(for uri: DocumentURI) -> CompilationDatabase? {
174-
if let url = uri.fileURL, let path = try? AbsolutePath(validating: url.path) {
175-
return database(for: path)
176-
}
177-
return compdb
178-
}
179-
180-
private func database(for path: AbsolutePath) -> CompilationDatabase? {
181-
if compdb == nil {
182-
var dir = path
183-
while !dir.isRoot {
184-
dir = dir.parentDirectory
185-
if let db = tryLoadCompilationDatabase(directory: dir, additionalSearchPaths: searchPaths, fileSystem) {
186-
compdb = db
187-
break
188-
}
189-
}
190-
}
191-
192-
if compdb == nil {
193-
logger.error("Could not open compilation database for \(path)")
194-
}
195-
196-
return compdb
197-
}
198-
199166
private func fileEventShouldTriggerCompilationDatabaseReload(event: FileEvent) -> Bool {
200167
switch event.uri.fileURL?.lastPathComponent {
201168
case "compile_commands.json", "compile_flags.txt":

Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -650,7 +650,7 @@ extension SwiftPMBuildSystem: BuildSystemIntegration.BuiltInBuildSystem {
650650
return []
651651
}
652652

653-
package func waitForUpBuildSystemUpdates(request: WorkspaceWaitForBuildSystemUpdatesRequest) async -> VoidResponse {
653+
package func waitForBuildSystemUpdates(request: WorkspaceWaitForBuildSystemUpdatesRequest) async -> VoidResponse {
654654
await self.packageLoadingQueue.async {}.valuePropagatingCancellation
655655
return VoidResponse()
656656
}

Sources/BuildSystemIntegration/TestBuildSystem.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ package actor TestBuildSystem: BuiltInBuildSystem {
8383
return buildSettingsByFile[request.textDocument.uri]
8484
}
8585

86-
package func waitForUpBuildSystemUpdates(request: WorkspaceWaitForBuildSystemUpdatesRequest) async -> VoidResponse {
86+
package func waitForBuildSystemUpdates(request: WorkspaceWaitForBuildSystemUpdatesRequest) async -> VoidResponse {
8787
return VoidResponse()
8888
}
8989

Tests/BuildSystemIntegrationTests/SwiftPMBuildSystemTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ fileprivate extension SwiftPMBuildSystem {
4444
}
4545

4646
func waitForUpToDateBuildGraph() async {
47-
let _: VoidResponse = await self.waitForUpBuildSystemUpdates(request: WorkspaceWaitForBuildSystemUpdatesRequest())
47+
let _: VoidResponse = await self.waitForBuildSystemUpdates(request: WorkspaceWaitForBuildSystemUpdatesRequest())
4848
}
4949
}
5050

0 commit comments

Comments
 (0)