Files
sourcekit-lsp/Sources/DocumentationLanguageService/DocumentationLanguageService.swift
2025-12-08 15:16:36 -05:00

111 lines
3.4 KiB
Swift

//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2024 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 Foundation
import IndexStoreDB
@_spi(SourceKitLSP) package import LanguageServerProtocol
package import SKOptions
package import SourceKitLSP
import SwiftExtensions
package import SwiftSyntax
package import ToolchainRegistry
package actor DocumentationLanguageService: LanguageService, Sendable {
/// The ``SourceKitLSPServer`` instance that created this `DocumentationLanguageService`.
private(set) weak var sourceKitLSPServer: SourceKitLSPServer?
let documentationManager: DocCDocumentationManager
var documentManager: DocumentManager {
get throws {
guard let sourceKitLSPServer else {
throw ResponseError.unknown("Connection to the editor closed")
}
return sourceKitLSPServer.documentManager
}
}
package static var experimentalCapabilities: [String: LSPAny] {
return [
DoccDocumentationRequest.method: .dictionary(["version": .int(1)])
]
}
package init(
sourceKitLSPServer: SourceKitLSPServer,
toolchain: Toolchain,
options: SourceKitLSPOptions,
hooks: Hooks,
workspace: Workspace
) async throws {
self.sourceKitLSPServer = sourceKitLSPServer
self.documentationManager = DocCDocumentationManager(buildServerManager: workspace.buildServerManager)
}
package nonisolated func canHandle(workspace: Workspace, toolchain: Toolchain) -> Bool {
return true
}
package func initialize(
_ initialize: InitializeRequest
) async throws -> InitializeResult {
return InitializeResult(
capabilities: ServerCapabilities()
)
}
package func shutdown() async {
// Nothing to tear down
}
package func addStateChangeHandler(
handler: @escaping @Sendable (LanguageServerState, LanguageServerState) -> Void
) async {
// There is no underlying language server with which to report state
}
package func openDocument(
_ notification: DidOpenTextDocumentNotification,
snapshot: DocumentSnapshot
) async {
// The DocumentationLanguageService does not do anything with document events
}
package func closeDocument(_ notification: DidCloseTextDocumentNotification) async {
// The DocumentationLanguageService does not do anything with document events
}
package func reopenDocument(_ notification: ReopenTextDocumentNotification) async {
// The DocumentationLanguageService does not do anything with document events
}
package func syntacticTestItems(for snapshot: DocumentSnapshot) async -> [AnnotatedTestItem] {
return []
}
package func syntacticPlaygrounds(
for snapshot: DocumentSnapshot,
in workspace: Workspace
) async -> [TextDocumentPlayground] {
return []
}
package func changeDocument(
_ notification: DidChangeTextDocumentNotification,
preEditSnapshot: DocumentSnapshot,
postEditSnapshot: DocumentSnapshot,
edits: [SwiftSyntax.SourceEdit]
) async {
// The DocumentationLanguageService does not do anything with document events
}
}