Files
sourcekit-lsp/Sources/BuildSystemIntegration/TestBuildSystem.swift
Alex Hoppen 022a6de6c3 Handle filesDependenciesUpdated in BuildSystemManager instead of the build system
The implementation of which file’s dependencies have been updated is common across all build systems and thus build systems shouldn’t need to implement this logic. This also allows us to remove `BuildSystemDelegate`.
2024-09-12 07:34:12 -07:00

91 lines
3.2 KiB
Swift

//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import BuildServerProtocol
import LanguageServerProtocol
import SKOptions
import ToolchainRegistry
import struct TSCBasic.AbsolutePath
/// Build system to be used for testing BuildSystem and BuildSystemDelegate functionality with SourceKitLSPServer
/// and other components.
package actor TestBuildSystem: BuiltInBuildSystem {
package static func projectRoot(for workspaceFolder: AbsolutePath, options: SourceKitLSPOptions) -> AbsolutePath? {
return workspaceFolder
}
package let projectRoot: AbsolutePath
package let indexStorePath: AbsolutePath? = nil
package let indexDatabasePath: AbsolutePath? = nil
private weak var messageHandler: BuiltInBuildSystemMessageHandler?
/// Build settings by file.
private var buildSettingsByFile: [DocumentURI: SourceKitOptionsResponse] = [:]
package func setBuildSettings(for uri: DocumentURI, to buildSettings: SourceKitOptionsResponse?) async {
buildSettingsByFile[uri] = buildSettings
await self.messageHandler?.sendNotificationToSourceKitLSP(DidChangeBuildTargetNotification(changes: nil))
}
package nonisolated var supportsPreparation: Bool { false }
package init(
projectRoot: AbsolutePath,
messageHandler: any BuiltInBuildSystemMessageHandler
) {
self.projectRoot = projectRoot
self.messageHandler = messageHandler
}
package func buildTargets(request: BuildTargetsRequest) async throws -> BuildTargetsResponse {
return BuildTargetsResponse(targets: [])
}
package func buildTargetSources(request: BuildTargetSourcesRequest) async throws -> BuildTargetSourcesResponse {
return BuildTargetSourcesResponse(items: [])
}
package func didChangeWatchedFiles(notification: BuildServerProtocol.DidChangeWatchedFilesNotification) async {}
package func inverseSources(request: InverseSourcesRequest) -> InverseSourcesResponse {
return InverseSourcesResponse(targets: [BuildTargetIdentifier.dummy])
}
package func prepare(request: PrepareTargetsRequest) async throws -> VoidResponse {
throw PrepareNotSupportedError()
}
package func sourceKitOptions(request: SourceKitOptionsRequest) async throws -> SourceKitOptionsResponse? {
return buildSettingsByFile[request.textDocument.uri]
}
package func toolchain(for uri: DocumentURI, _ language: Language) async -> Toolchain? {
return nil
}
package func scheduleBuildGraphGeneration() {}
package func waitForUpToDateBuildGraph() async {}
package func topologicalSort(of targets: [BuildTargetIdentifier]) -> [BuildTargetIdentifier]? {
return nil
}
package func targets(dependingOn targets: [BuildTargetIdentifier]) -> [BuildTargetIdentifier]? {
return nil
}
package func addSourceFilesDidChangeCallback(_ callback: @escaping () async -> Void) async {}
}