1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2022 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
package import LanguageServerProtocol
import SKLogging
extension SwiftLanguageService {
package func openGeneratedInterface(
document: DocumentURI,
moduleName: String,
groupName: String?,
symbolUSR symbol: String?
) async throws -> GeneratedInterfaceDetails? {
let urlData = GeneratedInterfaceDocumentURLData(
moduleName: moduleName,
groupName: groupName,
sourcekitdDocumentName: "\(moduleName)-\(UUID())",
primaryFile: document
)
let position: Position? =
if let symbol {
await orLog("Getting position of USR") {
try await generatedInterfaceManager.position(ofUsr: symbol, in: urlData)
}
} else {
nil
}
if case .dictionary(let experimentalCapabilities) = self.capabilityRegistry.clientCapabilities.experimental,
case .bool(true) = experimentalCapabilities["workspace/getReferenceDocument"]
{
return GeneratedInterfaceDetails(uri: try urlData.uri, position: position)
}
let interfaceFilePath = self.generatedInterfacesPath.appendingPathComponent(urlData.displayName)
try await generatedInterfaceManager.snapshot(of: urlData).text.write(
to: interfaceFilePath,
atomically: true,
encoding: String.Encoding.utf8
)
return GeneratedInterfaceDetails(
uri: DocumentURI(interfaceFilePath),
position: position
)
}
}
|