Files
sourcekit-lsp/Sources/SourceKitLSP/IndexStoreDB+MainFilesProvider.swift
T
Rintaro Ishizaki b9e4c67793 Delete SwiftExtensions duplicates of swift-tools-protocols APIs
Delete `Collection+Only.swift`, `Duration+Seconds.swift`,
`FileManagerExtensions.swift`, `PipeAsStringHandler.swift`, and
`URLExtensions.swift` from `Sources/SwiftExtensions/`. The same
APIs now live in swift-tools-protocols as `@_spi(SourceKitLSP)
public` declarations.

Update each call site to add `@_spi(SourceKitLSP) import
ToolsProtocolsSwiftExtensions` next to the existing
`import SwiftExtensions`. Add the
`_ToolsProtocolsSwiftExtensionsForPlugin` dependency and the
`ToolsProtocolsSwiftExtensions=_ToolsProtocolsSwiftExtensionsForPlugin`
module alias to the `SwiftSourceKitClientPlugin` target in both
`Package.swift` and the corresponding `CMakeLists.txt`.
2026-06-08 21:08:24 -07:00

48 lines
1.9 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 BuildServerIntegration
import Foundation
import IndexStoreDB
@_spi(SourceKitLSP) package import LanguageServerProtocol
@_spi(SourceKitLSP) import SKLogging
import SemanticIndex
import SwiftExtensions
@_spi(SourceKitLSP) import ToolsProtocolsSwiftExtensions
extension UncheckedIndex: BuildServerIntegration.MainFilesProvider {
/// - Important: This may return realpaths when the build server might not be using realpaths. Use
/// `BuildServerManager.mainFiles(containing:)` to work around that problem.
package func mainFiles(containing uri: DocumentURI, crossLanguage: Bool) -> Set<DocumentURI> {
let mainFiles: Set<DocumentURI>
if let filePath = orLog("File path to get main files", { try uri.fileURL?.filePath }) {
guard let underlyingIndexStoreDB = self.underlyingIndexStoreDB else {
logger.error("Not checking main files for URI because index has been closed")
return []
}
let mainFilePaths = underlyingIndexStoreDB.mainFilesContainingFile(
path: filePath,
crossLanguage: crossLanguage
)
mainFiles = Set(
mainFilePaths
.filter { FileManager.default.fileExists(atPath: $0) }
.map({ DocumentURI(filePath: $0, isDirectory: false) })
)
} else {
mainFiles = []
}
logger.info("Main files for \(uri.forLogging): \(mainFiles)")
return mainFiles
}
}