diff --git a/Package.swift b/Package.swift index b3cbfa518..a9caf5030 100644 --- a/Package.swift +++ b/Package.swift @@ -3,20 +3,6 @@ import Foundation import PackageDescription -/// Swift settings that should be applied to every Swift target. -var globalSwiftSettings: [SwiftSetting] { - var result: [SwiftSetting] = [ - .enableUpcomingFeature("InternalImportsByDefault"), - .enableUpcomingFeature("MemberImportVisibility"), - .enableUpcomingFeature("InferIsolatedConformances"), - .enableUpcomingFeature("NonisolatedNonsendingByDefault"), - ] - if noSwiftPMDependency { - result += [.define("NO_SWIFTPM_DEPENDENCY")] - } - return result -} - var products: [Product] = [ .executable(name: "sourcekit-lsp", targets: ["sourcekit-lsp"]), .library(name: "_SourceKitLSP", targets: ["SourceKitLSP"]), @@ -50,7 +36,6 @@ var targets: [Target] = [ .product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"), ], exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings, linkerSettings: sourcekitLSPLinkSettings ), @@ -78,7 +63,6 @@ var targets: [Target] = [ .product(name: "SwiftPMDataModel-auto", package: "swift-package-manager"), ]), exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings ), .testTarget( @@ -92,7 +76,6 @@ var targets: [Target] = [ "TSCExtensions", .product(name: "LanguageServerProtocol", package: "swift-tools-protocols"), ], - swiftSettings: globalSwiftSettings ), .target( @@ -118,7 +101,6 @@ var targets: [Target] = [ .product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"), ] + swiftSyntaxDependencies(["SwiftSyntax"]), exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings ), // MARK: CompletionScoring @@ -127,26 +109,22 @@ var targets: [Target] = [ name: "CompletionScoring", dependencies: ["CCompletionScoring"], exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings ), .target( name: "CompletionScoringForPlugin", dependencies: ["CCompletionScoring"], exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings ), .testTarget( name: "CompletionScoringTests", dependencies: ["CompletionScoring", "CompletionScoringTestSupport", "SwiftExtensions"], - swiftSettings: globalSwiftSettings ), .testTarget( name: "CompletionScoringPerfTests", dependencies: ["CompletionScoring", "CompletionScoringTestSupport", "SwiftExtensions"], - swiftSettings: globalSwiftSettings ), // MARK: CompletionScoringTestSupport @@ -159,7 +137,6 @@ var targets: [Target] = [ .product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"), ], resources: [.copy("INPUTS")], - swiftSettings: globalSwiftSettings ), // MARK: CSKTestSupport @@ -198,7 +175,6 @@ var targets: [Target] = [ .product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"), ] + swiftSyntaxDependencies(["SwiftIDEUtils", "SwiftSyntax", "SwiftParser"]), exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings ), .testTarget( @@ -212,7 +188,6 @@ var targets: [Target] = [ .product(name: "SKLogging", package: "swift-tools-protocols"), .product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"), ], - swiftSettings: globalSwiftSettings ), // MARK: DocumentationLanguageService @@ -234,7 +209,6 @@ var targets: [Target] = [ .product(name: "SymbolKit", package: "swift-docc-symbolkit"), ], exclude: [], - swiftSettings: globalSwiftSettings ), // MARK: InProcessClient @@ -255,7 +229,6 @@ var targets: [Target] = [ .product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"), ], exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings ), // MARK: LanguageServerProtocolExtensions @@ -272,7 +245,6 @@ var targets: [Target] = [ .product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"), ], exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings ), // MARK: SemanticIndex @@ -292,7 +264,6 @@ var targets: [Target] = [ .product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"), ], exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings ), .testTarget( @@ -303,7 +274,6 @@ var targets: [Target] = [ .product(name: "SKLogging", package: "swift-tools-protocols"), .product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"), ], - swiftSettings: globalSwiftSettings ), // MARK: SKOptions @@ -317,7 +287,6 @@ var targets: [Target] = [ .product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"), ], exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings ), // MARK: SKUtilities @@ -329,7 +298,6 @@ var targets: [Target] = [ .product(name: "SKLogging", package: "swift-tools-protocols"), ], exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings ), .target( @@ -339,7 +307,7 @@ var targets: [Target] = [ .product(name: "_SKLoggingForPlugin", package: "swift-tools-protocols"), ], exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings + [ + swiftSettings: [ .unsafeFlags([ "-module-alias", "SKLogging=_SKLoggingForPlugin", "-module-alias", "SwiftExtensions=SwiftExtensionsForPlugin", @@ -354,7 +322,6 @@ var targets: [Target] = [ "SKUtilities", "SKTestSupport", ], - swiftSettings: globalSwiftSettings ), // MARK: SKTestSupport @@ -382,7 +349,6 @@ var targets: [Target] = [ .product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"), ], resources: [.copy("INPUTS")], - swiftSettings: globalSwiftSettings ), // MARK: SourceKitD @@ -396,7 +362,6 @@ var targets: [Target] = [ .product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"), ], exclude: ["CMakeLists.txt", "sourcekitd_uids.swift.gyb"], - swiftSettings: globalSwiftSettings ), .target( @@ -408,7 +373,7 @@ var targets: [Target] = [ .product(name: "_ToolsProtocolsSwiftExtensionsForPlugin", package: "swift-tools-protocols"), ], exclude: ["CMakeLists.txt", "sourcekitd_uids.swift.gyb"], - swiftSettings: globalSwiftSettings + [ + swiftSettings: [ .unsafeFlags([ "-module-alias", "SKLogging=_SKLoggingForPlugin", "-module-alias", "SwiftExtensions=SwiftExtensionsForPlugin", @@ -427,7 +392,6 @@ var targets: [Target] = [ "ToolchainRegistry", .product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"), ], - swiftSettings: globalSwiftSettings ), // MARK: SourceKitLSP @@ -453,7 +417,6 @@ var targets: [Target] = [ .product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"), ] + swiftSyntaxDependencies(["SwiftSyntax"]), exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings ), .testTarget( @@ -481,7 +444,6 @@ var targets: [Target] = [ + swiftSyntaxDependencies([ "SwiftIfConfig", "SwiftParser", "SwiftSyntax", "SwiftCompilerPlugin", "SwiftSyntaxMacros", ]), - swiftSettings: globalSwiftSettings ), // MARK: SwiftExtensions @@ -492,7 +454,6 @@ var targets: [Target] = [ .product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols") ], exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings ), .target( @@ -501,7 +462,7 @@ var targets: [Target] = [ .product(name: "_ToolsProtocolsSwiftExtensionsForPlugin", package: "swift-tools-protocols") ], exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings + [ + swiftSettings: [ .unsafeFlags([ "-module-alias", "ToolsProtocolsSwiftExtensions=_ToolsProtocolsSwiftExtensionsForPlugin", ]) @@ -516,7 +477,6 @@ var targets: [Target] = [ .product(name: "SKLogging", package: "swift-tools-protocols"), .product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"), ], - swiftSettings: globalSwiftSettings ), // MARK: SwiftLanguageService @@ -555,7 +515,6 @@ var targets: [Target] = [ "SwiftSyntaxBuilder", ]), exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings ), // MARK: SwiftSourceKitClientPlugin @@ -569,7 +528,7 @@ var targets: [Target] = [ "SwiftSourceKitPluginCommon", ], exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings + [ + swiftSettings: [ .unsafeFlags([ "-module-alias", "SourceKitD=SourceKitDForPlugin", "-module-alias", "SwiftExtensions=SwiftExtensionsForPlugin", @@ -590,7 +549,7 @@ var targets: [Target] = [ .product(name: "_SKLoggingForPlugin", package: "swift-tools-protocols"), ], exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings + [ + swiftSettings: [ .unsafeFlags([ "-module-alias", "SourceKitD=SourceKitDForPlugin", "-module-alias", "SwiftExtensions=SwiftExtensionsForPlugin", @@ -615,7 +574,7 @@ var targets: [Target] = [ .product(name: "_ToolsProtocolsSwiftExtensionsForPlugin", package: "swift-tools-protocols"), ], exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings + [ + swiftSettings: [ .unsafeFlags([ "-module-alias", "CompletionScoring=CompletionScoringForPlugin", "-module-alias", "SKUtilities=SKUtilitiesForPlugin", @@ -640,7 +599,6 @@ var targets: [Target] = [ "ToolchainRegistry", .product(name: "LanguageServerProtocol", package: "swift-tools-protocols"), ], - swiftSettings: globalSwiftSettings ), // MARK: ToolchainRegistry @@ -654,7 +612,6 @@ var targets: [Target] = [ .product(name: "SKLogging", package: "swift-tools-protocols"), ], exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings ), .testTarget( @@ -663,7 +620,6 @@ var targets: [Target] = [ "SKTestSupport", "ToolchainRegistry", ], - swiftSettings: globalSwiftSettings ), // MARK: TSCExtensions @@ -677,7 +633,6 @@ var targets: [Target] = [ .product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"), ], exclude: ["CMakeLists.txt"], - swiftSettings: globalSwiftSettings ), .testTarget( @@ -688,10 +643,41 @@ var targets: [Target] = [ "TSCExtensions", .product(name: "ToolsProtocolsSwiftExtensions", package: "swift-tools-protocols"), ], - swiftSettings: globalSwiftSettings ), ] +// MARK: - Apply global Swift settings + +// Apply global Swift settings to targets. +do { + var globalSwiftSettings: [SwiftSetting] = [ + // Swift 7 mode upcoming features. These must be compatible with swift-tools-version. + .enableUpcomingFeature("InternalImportsByDefault"), + .enableUpcomingFeature("MemberImportVisibility"), + .enableUpcomingFeature("InferIsolatedConformances"), + .enableUpcomingFeature("NonisolatedNonsendingByDefault"), + .enableUpcomingFeature("ExistentialAny"), + .enableUpcomingFeature("ImmutableWeakCaptures"), + + // Warning escalation. + .unsafeFlags(["-Werror", "ExistentialAny"]), + ] + if noSwiftPMDependency { + globalSwiftSettings.append( + .define("NO_SWIFTPM_DEPENDENCY") + ) + } + + for target in targets where target.type != .plugin { + if let swiftSettings = target.swiftSettings { + // Target-specific settings should come last. + target.swiftSettings = globalSwiftSettings + swiftSettings + } else { + target.swiftSettings = globalSwiftSettings + } + } +} + if buildOnlyTests { products = [] targets = targets.compactMap { target in diff --git a/Sources/BuildServerIntegration/BuildServerManager.swift b/Sources/BuildServerIntegration/BuildServerManager.swift index 9e9a7d407..6bb354eb3 100644 --- a/Sources/BuildServerIntegration/BuildServerManager.swift +++ b/Sources/BuildServerIntegration/BuildServerManager.swift @@ -205,7 +205,9 @@ private extension BuildServerSpec { private func createBuiltInBuildServerAdapter( messagesToSourceKitLSPHandler: any MessageHandler, buildServerHooks: BuildServerHooks, - _ createBuildServer: @Sendable (_ connectionToSourceKitLSP: any Connection) async throws -> BuiltInBuildServer? + _ createBuildServer: @Sendable (_ connectionToSourceKitLSP: any Connection) async throws -> ( + any BuiltInBuildServer + )? ) async -> BuildServerAdapter? { let connectionToSourceKitLSP = LocalConnection( receiverName: "BuildServerManager for \(projectRoot.lastPathComponent)", @@ -327,7 +329,7 @@ package actor BuildServerManager: QueueBasedMessageHandler { /// get `fileBuildSettingsChanged` and `filesDependenciesUpdated` callbacks. private var watchedFiles: [DocumentURI: (mainFile: DocumentURI, language: Language)] = [:] - private var connectionToClient: BuildServerManagerConnectionToClient + private var connectionToClient: any BuildServerManagerConnectionToClient /// The build serer adapter that is used to answer build server queries. private var buildServerAdapter: BuildServerAdapter? @@ -347,7 +349,7 @@ package actor BuildServerManager: QueueBasedMessageHandler { /// Provider of file to main file mappings. /// /// Force-unwrapped optional because initializing it requires access to `self`. - private var mainFilesProvider: Task! { + private var mainFilesProvider: Task<(any MainFilesProvider)?, Never>! { didSet { // Must only be set once precondition(oldValue == nil) @@ -367,7 +369,7 @@ package actor BuildServerManager: QueueBasedMessageHandler { } /// Build server delegate that will receive notifications about setting changes, etc. - private weak var delegate: BuildServerManagerDelegate? + private weak var delegate: (any BuildServerManagerDelegate)? private let buildSettingsLogger = BuildSettingsLogger() @@ -485,12 +487,12 @@ package actor BuildServerManager: QueueBasedMessageHandler { buildServerSpec: BuildServerSpec?, toolchainRegistry: ToolchainRegistry, options: SourceKitLSPOptions, - connectionToClient: BuildServerManagerConnectionToClient, + connectionToClient: any BuildServerManagerConnectionToClient, buildServerHooks: BuildServerHooks, createMainFilesProvider: @escaping @Sendable ( SourceKitInitializeBuildResponseData?, _ mainFilesChangedCallback: @escaping @Sendable () async -> Void - ) async -> MainFilesProvider? + ) async -> (any MainFilesProvider)? ) async { self.toolchainRegistry = toolchainRegistry self.options = options @@ -656,7 +658,7 @@ package actor BuildServerManager: QueueBasedMessageHandler { /// - Note: Needed because `BuildSererManager` is created before `Workspace` is initialized and `Workspace` needs to /// create the `BuildServerManager`, then initialize itself and then set itself as the delegate. - package func setDelegate(_ delegate: BuildServerManagerDelegate?) { + package func setDelegate(_ delegate: (any BuildServerManagerDelegate)?) { self.delegate = delegate } diff --git a/Sources/BuildServerIntegration/BuiltInBuildServerAdapter.swift b/Sources/BuildServerIntegration/BuiltInBuildServerAdapter.swift index 3cc3a0718..11023100b 100644 --- a/Sources/BuildServerIntegration/BuiltInBuildServerAdapter.swift +++ b/Sources/BuildServerIntegration/BuiltInBuildServerAdapter.swift @@ -59,7 +59,7 @@ actor BuiltInBuildServerAdapter: QueueBasedMessageHandler { package let messageHandlingQueue = AsyncQueue() /// The underlying build server - private var underlyingBuildServer: BuiltInBuildServer + private var underlyingBuildServer: any BuiltInBuildServer /// The connection with which messages are sent to `BuildServerManager`. private let connectionToSourceKitLSP: LocalConnection @@ -69,7 +69,7 @@ actor BuiltInBuildServerAdapter: QueueBasedMessageHandler { /// Create a `BuiltInBuildServerAdapter` form an existing `BuiltInBuildServer` and connection to communicate messages /// from the build server to SourceKit-LSP. init( - underlyingBuildServer: BuiltInBuildServer, + underlyingBuildServer: any BuiltInBuildServer, connectionToSourceKitLSP: LocalConnection, buildServerHooks: BuildServerHooks ) { diff --git a/Sources/BuildServerIntegration/CompilationDatabase.swift b/Sources/BuildServerIntegration/CompilationDatabase.swift index d9840911b..0ec2f5b56 100644 --- a/Sources/BuildServerIntegration/CompilationDatabase.swift +++ b/Sources/BuildServerIntegration/CompilationDatabase.swift @@ -52,7 +52,7 @@ package struct CompilationDatabaseCompileCommand: Equatable, Codable { case output } - package init(from decoder: Decoder) throws { + package init(from decoder: any Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) self.directory = try container.decode(String.self, forKey: .directory) self.filename = try container.decode(String.self, forKey: .file) @@ -70,7 +70,7 @@ package struct CompilationDatabaseCompileCommand: Equatable, Codable { } } - package func encode(to encoder: Encoder) throws { + package func encode(to encoder: any Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(directory, forKey: .directory) try container.encode(filename, forKey: .file) @@ -140,7 +140,7 @@ package struct JSONCompilationDatabase: Equatable, Codable { /// /// A `URL` representing the directory that contains the `compile_commands.json` must be passed in the decoder's /// `userInfo` via the `compileCommandsDirectoryKey`. - package init(from decoder: Decoder) throws { + package init(from decoder: any Decoder) throws { guard let compileCommandsDirectory = decoder.userInfo[.compileCommandsDirectoryKey] as? URL else { struct MissingCompileCommandsDirectoryKeyError: Error {} throw MissingCompileCommandsDirectoryKeyError() @@ -169,7 +169,7 @@ package struct JSONCompilationDatabase: Equatable, Codable { self = try decoder.decode(JSONCompilationDatabase.self, from: data) } - package func encode(to encoder: Encoder) throws { + package func encode(to encoder: any Encoder) throws { var container = encoder.unkeyedContainer() for command in commands { try container.encode(command) diff --git a/Sources/BuildServerIntegration/ExternalBuildServerAdapter.swift b/Sources/BuildServerIntegration/ExternalBuildServerAdapter.swift index 920a54dd3..562969663 100644 --- a/Sources/BuildServerIntegration/ExternalBuildServerAdapter.swift +++ b/Sources/BuildServerIntegration/ExternalBuildServerAdapter.swift @@ -93,7 +93,7 @@ actor ExternalBuildServerAdapter { private let configPath: URL /// The `BuildServerManager` that handles messages from the BSP server to SourceKit-LSP. - var messagesToSourceKitLSPHandler: MessageHandler + var messagesToSourceKitLSPHandler: any MessageHandler /// The JSON-RPC connection between SourceKit-LSP and the BSP server. private(set) var connectionToBuildServer: JSONRPCConnection? @@ -124,7 +124,7 @@ actor ExternalBuildServerAdapter { init( projectRoot: URL, configPath: URL, - messagesToSourceKitLSPHandler: MessageHandler + messagesToSourceKitLSPHandler: any MessageHandler ) async throws { self.projectRoot = projectRoot self.configPath = configPath @@ -135,7 +135,7 @@ actor ExternalBuildServerAdapter { /// Change the handler that handles messages from the build server. /// /// The intended use of this is to intercept messages from the build server by `LegacyBuildServer`. - func changeMessageToSourceKitLSPHandler(to newHandler: MessageHandler) { + func changeMessageToSourceKitLSPHandler(to newHandler: any MessageHandler) { messagesToSourceKitLSPHandler = newHandler connectionToBuildServer?.changeReceiveHandler(messagesToSourceKitLSPHandler) } diff --git a/Sources/BuildServerIntegration/SwiftPMBuildServer.swift b/Sources/BuildServerIntegration/SwiftPMBuildServer.swift index bc3f10270..960f8c008 100644 --- a/Sources/BuildServerIntegration/SwiftPMBuildServer.swift +++ b/Sources/BuildServerIntegration/SwiftPMBuildServer.swift @@ -135,7 +135,7 @@ package actor SwiftPMBuildServer: BuiltInBuildServer { private var buildDescription: SourceKitLSPAPI.BuildDescription? /// Maps target ids to their SwiftPM build target. - private var swiftPMTargets: [BuildTargetIdentifier: SwiftBuildTarget] = [:] + private var swiftPMTargets: [BuildTargetIdentifier: any SwiftBuildTarget] = [:] private var targetDependencies: [BuildTargetIdentifier: Set] = [:] diff --git a/Sources/BuildServerIntegration/SwiftlyResolver.swift b/Sources/BuildServerIntegration/SwiftlyResolver.swift index 52372a5d1..48767741f 100644 --- a/Sources/BuildServerIntegration/SwiftlyResolver.swift +++ b/Sources/BuildServerIntegration/SwiftlyResolver.swift @@ -27,7 +27,7 @@ actor SwiftlyResolver { let workingDirectory: URL? } - private var cache: LRUCache> = LRUCache(capacity: 100) + private var cache: LRUCache> = LRUCache(capacity: 100) /// Check if `compiler` is a symlink to `swiftly`. If so, find the executable in the toolchain that swiftly resolves /// to within the given working directory and return the URL of the corresponding compiler in that toolchain. @@ -37,7 +37,7 @@ actor SwiftlyResolver { if let cached = cache[cacheKey] { return try cached.get() } - let computed: Result + let computed: Result do { computed = .success( try await resolveSwiftlyTrampolineImpl(compiler: compiler, workingDirectory: workingDirectory) diff --git a/Sources/ClangLanguageService/ClangLanguageService.swift b/Sources/ClangLanguageService/ClangLanguageService.swift index 1997fc9df..8f414222b 100644 --- a/Sources/ClangLanguageService/ClangLanguageService.swift +++ b/Sources/ClangLanguageService/ClangLanguageService.swift @@ -54,7 +54,7 @@ package actor ClangLanguageService: LanguageService, MessageHandler { private weak var sourceKitLSPServer: SourceKitLSPServer? /// The connection to the clangd LSP. `nil` until `startClangdProcesss` has been called. - var clangd: Connection! + var clangd: (any Connection)! /// Capabilities of the clangd LSP, if received. var capabilities: ServerCapabilities? = nil diff --git a/Sources/CompletionScoring/Semantics/SemanticClassification.swift b/Sources/CompletionScoring/Semantics/SemanticClassification.swift index 5656717d3..e139cf824 100644 --- a/Sources/CompletionScoring/Semantics/SemanticClassification.swift +++ b/Sources/CompletionScoring/Semantics/SemanticClassification.swift @@ -76,7 +76,7 @@ package struct SemanticClassification: Equatable { package let scoreComponent: Double } - private var scoreComponents: [CompletionScoreComponent] { + private var scoreComponents: [any CompletionScoreComponent] { return [ availability, completionKind, diff --git a/Sources/Diagnose/CommandLineArgumentsReducer.swift b/Sources/Diagnose/CommandLineArgumentsReducer.swift index de92cf9f6..f5b985686 100644 --- a/Sources/Diagnose/CommandLineArgumentsReducer.swift +++ b/Sources/Diagnose/CommandLineArgumentsReducer.swift @@ -18,7 +18,7 @@ import Foundation extension RequestInfo { @MainActor func reduceCommandLineArguments( - using executor: SourceKitRequestExecutor, + using executor: any SourceKitRequestExecutor, progressUpdate: (_ progress: Double, _ message: String) -> Void ) async throws -> RequestInfo { try await withoutActuallyEscaping(progressUpdate) { progressUpdate in @@ -34,7 +34,7 @@ extension RequestInfo { private class CommandLineArgumentReducer { /// The executor that is used to run a sourcekitd request and check whether it /// still crashes. - private let sourcekitdExecutor: SourceKitRequestExecutor + private let sourcekitdExecutor: any SourceKitRequestExecutor /// A callback to be called when the reducer has made progress reducing the request private let progressUpdate: (_ progress: Double, _ message: String) -> Void @@ -43,7 +43,7 @@ private class CommandLineArgumentReducer { private var initialCommandLineCount: Int = 0 init( - sourcekitdExecutor: SourceKitRequestExecutor, + sourcekitdExecutor: any SourceKitRequestExecutor, progressUpdate: @escaping (_ progress: Double, _ message: String) -> Void ) { self.sourcekitdExecutor = sourcekitdExecutor diff --git a/Sources/Diagnose/MergeSwiftFiles.swift b/Sources/Diagnose/MergeSwiftFiles.swift index 13cc0834e..460433815 100644 --- a/Sources/Diagnose/MergeSwiftFiles.swift +++ b/Sources/Diagnose/MergeSwiftFiles.swift @@ -19,7 +19,7 @@ extension RequestInfo { /// Returns `nil` if the issue didn't reproduce with all `.swift` files merged. @MainActor func mergeSwiftFiles( - using executor: SourceKitRequestExecutor, + using executor: any SourceKitRequestExecutor, progressUpdate: (_ progress: Double, _ message: String) -> Void ) async throws -> RequestInfo? { let swiftFilePaths = compilerArgs.filter { $0.hasSuffix(".swift") } diff --git a/Sources/Diagnose/OSLogScraper.swift b/Sources/Diagnose/OSLogScraper.swift index a2ffb2c73..b0b16d752 100644 --- a/Sources/Diagnose/OSLogScraper.swift +++ b/Sources/Diagnose/OSLogScraper.swift @@ -28,7 +28,7 @@ struct OSLogScraper { .getEntries( at: startPoint, matching: predicate - ).compactMap { $0 as? (OSLogEntryWithPayload & OSLogEntry) } + ).compactMap { $0 as? (any OSLogEntryWithPayload & OSLogEntry) } } private func crashedSourceKitLSPRequests() throws -> [(name: String, logCategory: String)] { diff --git a/Sources/Diagnose/ReduceSourceKitDRequest.swift b/Sources/Diagnose/ReduceSourceKitDRequest.swift index b532254da..ed705dc2f 100644 --- a/Sources/Diagnose/ReduceSourceKitDRequest.swift +++ b/Sources/Diagnose/ReduceSourceKitDRequest.swift @@ -14,7 +14,7 @@ extension RequestInfo { /// Reduce the input file of this request and the command line arguments. @MainActor func reduce( - using executor: SourceKitRequestExecutor, + using executor: any SourceKitRequestExecutor, progressUpdate: (_ progress: Double, _ message: String) -> Void ) async throws -> RequestInfo { var requestInfo = self diff --git a/Sources/Diagnose/ReduceSwiftFrontend.swift b/Sources/Diagnose/ReduceSwiftFrontend.swift index 03c6f3b8a..c1461bd3d 100644 --- a/Sources/Diagnose/ReduceSwiftFrontend.swift +++ b/Sources/Diagnose/ReduceSwiftFrontend.swift @@ -13,7 +13,7 @@ @MainActor package func reduceFrontendIssue( frontendArgs: [String], - using executor: SourceKitRequestExecutor, + using executor: any SourceKitRequestExecutor, progressUpdate: (_ progress: Double, _ message: String) -> Void ) async throws -> RequestInfo { let requestInfo = try RequestInfo(frontendArgs: frontendArgs) diff --git a/Sources/Diagnose/SourceReducer.swift b/Sources/Diagnose/SourceReducer.swift index 5d8d78727..220b8364c 100644 --- a/Sources/Diagnose/SourceReducer.swift +++ b/Sources/Diagnose/SourceReducer.swift @@ -23,7 +23,7 @@ import SwiftSyntax extension RequestInfo { @MainActor package func reduceInputFile( - using executor: SourceKitRequestExecutor, + using executor: any SourceKitRequestExecutor, progressUpdate: (_ progress: Double, _ message: String) -> Void ) async throws -> RequestInfo { try await withoutActuallyEscaping(progressUpdate) { progressUpdate in @@ -66,7 +66,7 @@ private enum ReductionStepResult { private class SourceReducer { /// The executor that is used to run a sourcekitd request and check whether it /// still crashes. - private let sourcekitdExecutor: SourceKitRequestExecutor + private let sourcekitdExecutor: any SourceKitRequestExecutor /// A callback to call to report progress private let progressUpdate: (_ progress: Double, _ message: String) -> Void @@ -78,7 +78,7 @@ private class SourceReducer { private var fileSizeAfterLastImportInline: Int = 0 init( - sourcekitdExecutor: SourceKitRequestExecutor, + sourcekitdExecutor: any SourceKitRequestExecutor, progressUpdate: @escaping (_ progress: Double, _ message: String) -> Void ) { self.sourcekitdExecutor = sourcekitdExecutor @@ -616,7 +616,7 @@ private class FirstImportFinder: SyntaxAnyVisitor { @MainActor private func getSwiftInterface( _ moduleName: String, - executor: SourceKitRequestExecutor, + executor: any SourceKitRequestExecutor, compilerArgs: [String], areFallbackArgs: Bool = false ) async throws -> String { @@ -690,7 +690,7 @@ private func getSwiftInterface( @MainActor private func inlineFirstImport( in tree: SourceFileSyntax, - executor: SourceKitRequestExecutor, + executor: any SourceKitRequestExecutor, compilerArgs: [String] ) async -> ReducerResult { guard let firstImport = FirstImportFinder.findFirstImport(in: tree) else { diff --git a/Sources/DocumentationLanguageService/DocCServer.swift b/Sources/DocumentationLanguageService/DocCServer.swift index 9471c8e26..fc1fed666 100644 --- a/Sources/DocumentationLanguageService/DocCServer.swift +++ b/Sources/DocumentationLanguageService/DocCServer.swift @@ -174,12 +174,12 @@ struct ConvertResponse: Sendable, Codable { /// Represents a potential error that the ``DocCServer`` could encounter while processing requests enum DocCServerError: LocalizedError { - case encodingFailure(_ encodingError: Error) - case decodingFailure(_ decodingError: Error) - case messagePayloadDecodingFailure(messageType: String, decodingError: Error) + case encodingFailure(_ encodingError: any Error) + case decodingFailure(_ decodingError: any Error) + case messagePayloadDecodingFailure(messageType: String, decodingError: any Error) case unknownMessageType(_ messageType: String) case unexpectedlyNilPayload(_ messageType: String) - case internalError(_ underlyingError: LocalizedError) + case internalError(_ underlyingError: any LocalizedError) var errorDescription: String? { switch self { diff --git a/Sources/SKTestSupport/Assertions.swift b/Sources/SKTestSupport/Assertions.swift index 4d6217069..d992f0cbb 100644 --- a/Sources/SKTestSupport/Assertions.swift +++ b/Sources/SKTestSupport/Assertions.swift @@ -42,7 +42,7 @@ package func assertThrowsError( _ message: @autoclosure () -> String = "", file: StaticString = #filePath, line: UInt = #line, - errorHandler: (_ error: Error) -> Void = { _ in } + errorHandler: (_ error: any Error) -> Void = { _ in } ) async { let didThrow: Bool do { diff --git a/Sources/SKTestSupport/Expectations.swift b/Sources/SKTestSupport/Expectations.swift index 9cdf0fa6a..32683c3b5 100644 --- a/Sources/SKTestSupport/Expectations.swift +++ b/Sources/SKTestSupport/Expectations.swift @@ -16,7 +16,7 @@ public func expectThrowsError( _ expression: @autoclosure () async throws -> T, _ message: @autoclosure () -> String = "", sourceLocation: SourceLocation = #_sourceLocation, - errorHandler: (_ error: Error) -> Void = { _ in } + errorHandler: (_ error: any Error) -> Void = { _ in } ) async { do { _ = try await expression() diff --git a/Sources/SKTestSupport/TestJSONRPCConnection.swift b/Sources/SKTestSupport/TestJSONRPCConnection.swift index 9ddf4fcd7..19a45e466 100644 --- a/Sources/SKTestSupport/TestJSONRPCConnection.swift +++ b/Sources/SKTestSupport/TestJSONRPCConnection.swift @@ -97,7 +97,7 @@ package struct TestLocalConnection { package actor TestClient: MessageHandler { /// The connection to the LSP server. - package let connectionToServer: Connection + package let connectionToServer: any Connection private let messageHandlingQueue = AsyncQueue() @@ -105,7 +105,7 @@ package actor TestClient: MessageHandler { private let allowUnexpectedNotification: Bool - package init(connectionToServer: Connection, allowUnexpectedNotification: Bool = true) { + package init(connectionToServer: any Connection, allowUnexpectedNotification: Bool = true) { self.connectionToServer = connectionToServer self.allowUnexpectedNotification = allowUnexpectedNotification } @@ -159,9 +159,9 @@ package actor TestClient: MessageHandler { } package final class TestServer: MessageHandler { - package let client: Connection + package let client: any Connection - init(client: Connection) { + init(client: any Connection) { self.client = client } diff --git a/Sources/SKTestSupport/TestSourceKitLSPClient.swift b/Sources/SKTestSupport/TestSourceKitLSPClient.swift index 64134d3e3..a41041e2e 100644 --- a/Sources/SKTestSupport/TestSourceKitLSPClient.swift +++ b/Sources/SKTestSupport/TestSourceKitLSPClient.swift @@ -107,7 +107,7 @@ package final class TestSourceKitLSPClient: MessageHandler, Sendable { /// /// `isOneShort` if the request handler should only serve a single request and should be removed from /// `requestHandlers` after it has been called. - private let requestHandlers: ThreadSafeBox<[(requestHandler: Sendable, isOneShot: Bool)]> = + private let requestHandlers: ThreadSafeBox<[(requestHandler: any Sendable, isOneShot: Bool)]> = ThreadSafeBox(initialValue: []) /// A closure that is called when the `TestSourceKitLSPClient` is destructed. diff --git a/Sources/SemanticIndex/CheckedIndex.swift b/Sources/SemanticIndex/CheckedIndex.swift index f7d27f61f..2ece6bcaa 100644 --- a/Sources/SemanticIndex/CheckedIndex.swift +++ b/Sources/SemanticIndex/CheckedIndex.swift @@ -42,7 +42,7 @@ package enum IndexCheckLevel { /// Consider the index out-of-date if the source file has been deleted or modified on disk or if there are /// in-memory modifications in the given `DocumentManager`. - case inMemoryModifiedFiles(InMemoryDocumentManager) + case inMemoryModifiedFiles(any InMemoryDocumentManager) } /// A wrapper around `IndexStoreDB` that checks if returned symbol occurrences are up-to-date with regard to a @@ -496,7 +496,7 @@ private struct IndexOutOfDateChecker { /// `CheckLevel.imMemoryModifiedFiles`, which is constant. private mutating func fileHasInMemoryModifications( _ uri: DocumentURI, - documentManager: InMemoryDocumentManager + documentManager: any InMemoryDocumentManager ) -> Bool { if let cached = fileHasInMemoryModificationsCache[uri] { return cached diff --git a/Sources/SemanticIndex/IndexHooks.swift b/Sources/SemanticIndex/IndexHooks.swift index 403a5b3dc..d1871c9ff 100644 --- a/Sources/SemanticIndex/IndexHooks.swift +++ b/Sources/SemanticIndex/IndexHooks.swift @@ -20,7 +20,7 @@ package protocol IndexInjector: Sendable { storePath: URL, databasePath: URL, indexStoreLibraryPath: URL, - delegate: IndexDelegate, + delegate: any IndexDelegate, prefixMappings: [PathMapping] ) async throws -> IndexStoreDB @@ -31,7 +31,7 @@ package protocol IndexInjector: Sendable { /// Callbacks that allow inspection of internal state modifications during testing. package struct IndexHooks: Sendable { - package var indexInjector: IndexInjector? + package var indexInjector: (any IndexInjector)? package var buildGraphGenerationDidStart: (@Sendable () async -> Void)? @@ -47,7 +47,7 @@ package struct IndexHooks: Sendable { package var updateIndexStoreTaskDidFinish: (@Sendable (UpdateIndexStoreTaskDescription) async -> Void)? package init( - indexInjector: IndexInjector? = nil, + indexInjector: (any IndexInjector)? = nil, buildGraphGenerationDidStart: (@Sendable () async -> Void)? = nil, buildGraphGenerationDidFinish: (@Sendable () async -> Void)? = nil, preparationTaskDidStart: (@Sendable (PreparationTaskDescription) async -> Void)? = nil, diff --git a/Sources/SourceKitD/SKDRequestArray.swift b/Sources/SourceKitD/SKDRequestArray.swift index 515bc1fdc..26d982ab4 100644 --- a/Sources/SourceKitD/SKDRequestArray.swift +++ b/Sources/SourceKitD/SKDRequestArray.swift @@ -26,7 +26,7 @@ import Bionic extension SourceKitD { /// Create a `SKDRequestArray` from the given array. - nonisolated package func array(_ array: [SKDRequestValue]) -> SKDRequestArray { + nonisolated package func array(_ array: [any SKDRequestValue]) -> SKDRequestArray { let result = SKDRequestArray(sourcekitd: self) for element in array { result.append(element) @@ -48,7 +48,7 @@ package final class SKDRequestArray: Sendable { sourcekitd.api.request_release(array) } - package func append(_ newValue: SKDRequestValue) { + package func append(_ newValue: any SKDRequestValue) { switch newValue { case let newValue as String: sourcekitd.api.request_array_set_string(array, -1, newValue) @@ -60,11 +60,11 @@ package final class SKDRequestArray: Sendable { sourcekitd.api.request_array_set_value(array, -1, newValue.dict) case let newValue as SKDRequestArray: sourcekitd.api.request_array_set_value(array, -1, newValue.array) - case let newValue as [SKDRequestValue]: + case let newValue as [any SKDRequestValue]: self.append(sourcekitd.array(newValue)) - case let newValue as [sourcekitd_api_uid_t: SKDRequestValue]: + case let newValue as [sourcekitd_api_uid_t: any SKDRequestValue]: self.append(sourcekitd.dictionary(newValue)) - case let newValue as SKDRequestValue?: + case let newValue as (any SKDRequestValue)?: if let newValue { self.append(newValue) } @@ -73,7 +73,7 @@ package final class SKDRequestArray: Sendable { } } - package static func += (array: SKDRequestArray, other: some Sequence) { + package static func += (array: SKDRequestArray, other: some Sequence) { for item in other { array.append(item) } diff --git a/Sources/SourceKitD/SKDRequestDictionary.swift b/Sources/SourceKitD/SKDRequestDictionary.swift index c1504f348..2d400e2ac 100644 --- a/Sources/SourceKitD/SKDRequestDictionary.swift +++ b/Sources/SourceKitD/SKDRequestDictionary.swift @@ -44,7 +44,7 @@ extension Optional: SKDRequestValue where Wrapped: SKDRequestValue {} extension SourceKitD { /// Create a `SKDRequestDictionary` from the given dictionary. - nonisolated package func dictionary(_ dict: [sourcekitd_api_uid_t: SKDRequestValue]) -> SKDRequestDictionary { + nonisolated package func dictionary(_ dict: [sourcekitd_api_uid_t: any SKDRequestValue]) -> SKDRequestDictionary { let result = SKDRequestDictionary(sourcekitd: self) for (key, value) in dict { result.set(key, to: value) @@ -66,7 +66,7 @@ package final class SKDRequestDictionary: Sendable { sourcekitd.api.request_release(dict) } - package func set(_ key: sourcekitd_api_uid_t, to newValue: SKDRequestValue) { + package func set(_ key: sourcekitd_api_uid_t, to newValue: any SKDRequestValue) { switch newValue { case let newValue as String: sourcekitd.api.request_dictionary_set_string(dict, key, newValue) @@ -78,11 +78,11 @@ package final class SKDRequestDictionary: Sendable { sourcekitd.api.request_dictionary_set_value(dict, key, newValue.dict) case let newValue as SKDRequestArray: sourcekitd.api.request_dictionary_set_value(dict, key, newValue.array) - case let newValue as [SKDRequestValue]: + case let newValue as [any SKDRequestValue]: self.set(key, to: sourcekitd.array(newValue)) - case let newValue as [sourcekitd_api_uid_t: SKDRequestValue]: + case let newValue as [sourcekitd_api_uid_t: any SKDRequestValue]: self.set(key, to: sourcekitd.dictionary(newValue)) - case let newValue as SKDRequestValue?: + case let newValue as (any SKDRequestValue)?: if let newValue { self.set(key, to: newValue) } diff --git a/Sources/SourceKitD/SourceKitD.swift b/Sources/SourceKitD/SourceKitD.swift index 56785f2a2..f2ef17f9f 100644 --- a/Sources/SourceKitD/SourceKitD.swift +++ b/Sources/SourceKitD/SourceKitD.swift @@ -115,7 +115,7 @@ package actor SourceKitD { /// This must not be referenced outside of `SwiftSourceKitPlugin`, `SwiftSourceKitPluginCommon`, or /// `SwiftSourceKitClientPlugin`. package nonisolated var pluginApi: sourcekitd_plugin_api_functions_t { try! pluginApiResult.get() } - private let pluginApiResult: Result + private let pluginApiResult: Result /// The API with which the SourceKit plugin handles requests. /// @@ -123,13 +123,13 @@ package actor SourceKitD { package nonisolated var servicePluginApi: sourcekitd_service_plugin_api_functions_t { try! servicePluginApiResult.get() } - private let servicePluginApiResult: Result + private let servicePluginApiResult: Result /// The API with which the SourceKit plugin communicates with the type-checker in-process. /// /// This must not be referenced outside of `SwiftSourceKitPlugin`. package nonisolated var ideApi: sourcekitd_ide_api_functions_t { try! ideApiResult.get() } - private let ideApiResult: Result + private let ideApiResult: Result /// Convenience for accessing known keys. /// @@ -247,13 +247,13 @@ package actor SourceKitD { } /// Adds a new notification handler (referenced weakly). - package func addNotificationHandler(_ handler: SKDNotificationHandler) { + package func addNotificationHandler(_ handler: any SKDNotificationHandler) { notificationHandlers.removeAll(where: { $0.value == nil }) notificationHandlers.append(.init(handler)) } /// Removes a previously registered notification handler. - package func removeNotificationHandler(_ handler: SKDNotificationHandler) { + package func removeNotificationHandler(_ handler: any SKDNotificationHandler) { notificationHandlers.removeAll(where: { $0.value == nil || $0.value === handler }) } @@ -475,8 +475,8 @@ package protocol SKDNotificationHandler: AnyObject, Sendable { } struct WeakSKDNotificationHandler: Sendable { - weak private(set) var value: SKDNotificationHandler? - init(_ value: SKDNotificationHandler) { + weak private(set) var value: (any SKDNotificationHandler)? + init(_ value: any SKDNotificationHandler) { self.value = value } } diff --git a/Sources/SourceKitLSP/LanguageServiceRegistry.swift b/Sources/SourceKitLSP/LanguageServiceRegistry.swift index 1ab81505e..9be456e6c 100644 --- a/Sources/SourceKitLSP/LanguageServiceRegistry.swift +++ b/Sources/SourceKitLSP/LanguageServiceRegistry.swift @@ -16,7 +16,7 @@ import IndexStoreDB /// Wrapper around `LanguageService.Type`, making it conform to `Hashable`. struct LanguageServiceType: Hashable { - let type: LanguageService.Type + let type: any LanguageService.Type init(_ type: any LanguageService.Type) { self.type = type @@ -38,7 +38,7 @@ package struct LanguageServiceRegistry { package init() {} - package mutating func register(_ languageService: LanguageService.Type, for languages: [Language]) { + package mutating func register(_ languageService: any LanguageService.Type, for languages: [Language]) { for language in languages { let services = byLanguage[language] ?? [] if services.contains(LanguageServiceType(languageService)) { @@ -57,7 +57,7 @@ package struct LanguageServiceRegistry { /// services), that's the preferred choice. /// Otherwise the language services occurring early in the array should be given precedence and the results of the /// first language service that produces some should be returned. - func languageServices(for language: Language) -> [LanguageService.Type] { + func languageServices(for language: Language) -> [any LanguageService.Type] { return byLanguage[language]?.map(\.type) ?? [] } diff --git a/Sources/SourceKitLSP/ReferenceDocumentURL.swift b/Sources/SourceKitLSP/ReferenceDocumentURL.swift index 351d2551e..360628852 100644 --- a/Sources/SourceKitLSP/ReferenceDocumentURL.swift +++ b/Sources/SourceKitLSP/ReferenceDocumentURL.swift @@ -38,7 +38,7 @@ package enum ReferenceDocumentURL { var url: URL { get throws { - let data: ReferenceURLData = + let data: any ReferenceURLData = switch self { case .macroExpansion(let data): data case .generatedInterface(let data): data diff --git a/Sources/SourceKitLSP/Rename.swift b/Sources/SourceKitLSP/Rename.swift index 7c5997c32..25854e69d 100644 --- a/Sources/SourceKitLSP/Rename.swift +++ b/Sources/SourceKitLSP/Rename.swift @@ -107,7 +107,7 @@ extension SourceKitLSPServer { usr: String, index: CheckedIndex, workspace: Workspace - ) async -> (swiftLanguageService: NameTranslatorService, snapshot: DocumentSnapshot, location: SymbolLocation)? { + ) async -> (swiftLanguageService: any NameTranslatorService, snapshot: DocumentSnapshot, location: SymbolLocation)? { var reference: SymbolOccurrence? = nil index.forEachSymbolOccurrence(byUSR: usr, roles: renameRoles) { if $0.symbolProvider == .swift { @@ -126,7 +126,7 @@ extension SourceKitLSPServer { return nil } let swiftLanguageService = await orLog("Getting NameTranslatorService") { - try await self.primaryLanguageService(for: uri, .swift, in: workspace) as? NameTranslatorService + try await self.primaryLanguageService(for: uri, .swift, in: workspace) as? (any NameTranslatorService) } guard let swiftLanguageService else { return nil @@ -217,7 +217,7 @@ extension SourceKitLSPServer { for: definitionDocumentUri, definitionLanguage, in: workspace - ) as? NameTranslatorService + ) as? (any NameTranslatorService) else { throw ResponseError.unknown("Failed to get language service for the document defining \(usr)") } @@ -435,7 +435,7 @@ extension SourceKitLSPServer { func prepareRename( _ request: PrepareRenameRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> PrepareRenameResponse? { guard let languageServicePrepareRename = try await languageService.prepareRename(request) else { return nil @@ -464,7 +464,7 @@ extension SourceKitLSPServer { func indexedRename( _ request: IndexedRenameRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> WorkspaceEdit? { return try await languageService.indexedRename(request) } diff --git a/Sources/SourceKitLSP/SourceKitLSPServer.swift b/Sources/SourceKitLSP/SourceKitLSPServer.swift index e58186f41..8bf87cb8f 100644 --- a/Sources/SourceKitLSP/SourceKitLSPServer.swift +++ b/Sources/SourceKitLSP/SourceKitLSPServer.swift @@ -54,7 +54,7 @@ package actor SourceKitLSPServer { private let workspaceQueue = AsyncQueue() /// The connection to the editor. - package nonisolated let client: Connection + package nonisolated let client: any Connection /// Set to `true` after the `SourceKitLSPServer` has send the reply to the `InitializeRequest`. /// @@ -74,7 +74,7 @@ package actor SourceKitLSPServer { let languageServiceRegistry: LanguageServiceRegistry - var languageServices: [LanguageServiceType: [LanguageService]] = [:] + var languageServices: [LanguageServiceType: [any LanguageService]] = [:] package nonisolated let documentManager = DocumentManager() @@ -160,7 +160,7 @@ package actor SourceKitLSPServer { /// Creates a language server for the given client. package init( - client: Connection, + client: any Connection, toolchainRegistry: ToolchainRegistry, languageServerRegistry: LanguageServiceRegistry, options: SourceKitLSPOptions, @@ -366,7 +366,7 @@ package actor SourceKitLSPServer { /// and language that handle this document. private func withLanguageServiceAndWorkspace( for notification: NotificationType, - notificationHandler: @escaping (NotificationType, LanguageService) async -> Void + notificationHandler: @escaping (NotificationType, any LanguageService) async -> Void ) async { let doc = notification.textDocument.uri guard let workspace = await self.workspaceForDocument(uri: doc) else { @@ -384,7 +384,7 @@ package actor SourceKitLSPServer { for request: RequestAndReply, requestHandler: @Sendable @escaping ( - RequestType, Workspace, LanguageService + RequestType, Workspace, any LanguageService ) async throws -> RequestType.Response ) async { @@ -421,7 +421,7 @@ package actor SourceKitLSPServer { } /// After the language service has crashed, send `DidOpenTextDocumentNotification`s to a newly instantiated language service for previously open documents. - package func reopenDocuments(for languageService: LanguageService) async { + package func reopenDocuments(for languageService: any LanguageService) async { for documentUri in self.documentManager.openDocuments { guard let workspace = await self.workspaceForDocument(uri: documentUri) else { continue @@ -454,10 +454,10 @@ package actor SourceKitLSPServer { /// If a language service of type `serverType` that can handle `workspace` using the given toolchain has already been /// started, return it, otherwise return `nil`. private func existingLanguageService( - _ serverType: LanguageService.Type, + _ serverType: any LanguageService.Type, toolchain: Toolchain, workspace: Workspace - ) -> LanguageService? { + ) -> (any LanguageService)? { for languageService in languageServices[LanguageServiceType(serverType), default: []] { if languageService.canHandle(workspace: workspace, toolchain: toolchain) { return languageService @@ -473,7 +473,7 @@ package actor SourceKitLSPServer { for toolchain: Toolchain, _ language: Language, in workspace: Workspace - ) async -> [LanguageService] { + ) async -> [any LanguageService] { var result: [any LanguageService] = [] for serverType in languageServiceRegistry.languageServices(for: language) { if let languageService = existingLanguageService(serverType, toolchain: toolchain, workspace: workspace) { @@ -565,7 +565,7 @@ package actor SourceKitLSPServer { for uri: DocumentURI, _ language: Language, in workspace: Workspace - ) async -> [LanguageService] { + ) async -> [any LanguageService] { let existingLanguageServices = workspace.languageServices(for: uri) if !existingLanguageServices.isEmpty { return existingLanguageServices @@ -604,7 +604,7 @@ package actor SourceKitLSPServer { for uri: DocumentURI, _ language: Language, in workspace: Workspace - ) async throws -> LanguageService { + ) async throws -> any LanguageService { guard let languageService = await languageServices(for: uri, language, in: workspace).first else { throw ResponseError.unknown("No language service found for \(uri)") } @@ -1476,14 +1476,14 @@ extension SourceKitLSPServer { func willSaveDocument( _ notification: WillSaveTextDocumentNotification, - languageService: LanguageService + languageService: any LanguageService ) async { await languageService.willSaveDocument(notification) } func didSaveDocument( _ notification: DidSaveTextDocumentNotification, - languageService: LanguageService + languageService: any LanguageService ) async { await languageService.didSaveDocument(notification) } @@ -1611,7 +1611,7 @@ extension SourceKitLSPServer { func completion( _ req: CompletionRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> CompletionList { return try await languageService.completion(req) } @@ -1635,7 +1635,7 @@ extension SourceKitLSPServer { func doccDocumentation( _ req: DoccDocumentationRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> DoccDocumentationResponse { return try await languageService.doccDocumentation(req) } @@ -1643,7 +1643,7 @@ extension SourceKitLSPServer { func hover( _ req: HoverRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> HoverResponse? { return try await languageService.hover(req) } @@ -1651,7 +1651,7 @@ extension SourceKitLSPServer { func signatureHelp( _ req: SignatureHelpRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> SignatureHelp? { return try await languageService.signatureHelp(req) } @@ -1733,7 +1733,7 @@ extension SourceKitLSPServer { func symbolInfo( _ req: SymbolInfoRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> [SymbolDetails] { return try await languageService.symbolInfo(req) } @@ -1741,7 +1741,7 @@ extension SourceKitLSPServer { func documentSymbolHighlight( _ req: DocumentHighlightRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> [DocumentHighlight]? { return try await languageService.documentSymbolHighlight(req) } @@ -1749,7 +1749,7 @@ extension SourceKitLSPServer { func foldingRange( _ req: FoldingRangeRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> [FoldingRange]? { return try await languageService.foldingRange(req) } @@ -1757,7 +1757,7 @@ extension SourceKitLSPServer { func documentSymbol( _ req: DocumentSymbolRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> DocumentSymbolResponse? { return try await languageService.documentSymbol(req) } @@ -1765,7 +1765,7 @@ extension SourceKitLSPServer { func documentColor( _ req: DocumentColorRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> [ColorInformation] { return try await languageService.documentColor(req) } @@ -1773,7 +1773,7 @@ extension SourceKitLSPServer { func documentSemanticTokens( _ req: DocumentSemanticTokensRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> DocumentSemanticTokensResponse? { return try await languageService.documentSemanticTokens(req) } @@ -1781,7 +1781,7 @@ extension SourceKitLSPServer { func documentSemanticTokensDelta( _ req: DocumentSemanticTokensDeltaRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> DocumentSemanticTokensDeltaResponse? { return try await languageService.documentSemanticTokensDelta(req) } @@ -1789,7 +1789,7 @@ extension SourceKitLSPServer { func documentSemanticTokensRange( _ req: DocumentSemanticTokensRangeRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> DocumentSemanticTokensResponse? { return try await languageService.documentSemanticTokensRange(req) } @@ -1797,7 +1797,7 @@ extension SourceKitLSPServer { func documentFormatting( _ req: DocumentFormattingRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> [TextEdit]? { return try await languageService.documentFormatting(req) } @@ -1805,7 +1805,7 @@ extension SourceKitLSPServer { func documentRangeFormatting( _ req: DocumentRangeFormattingRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> [TextEdit]? { return try await languageService.documentRangeFormatting(req) } @@ -1813,7 +1813,7 @@ extension SourceKitLSPServer { func documentOnTypeFormatting( _ req: DocumentOnTypeFormattingRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> [TextEdit]? { return try await languageService.documentOnTypeFormatting(req) } @@ -1821,7 +1821,7 @@ extension SourceKitLSPServer { func colorPresentation( _ req: ColorPresentationRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> [ColorPresentation] { return try await languageService.colorPresentation(req) } @@ -1879,7 +1879,7 @@ extension SourceKitLSPServer { func codeAction( _ req: CodeActionRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> CodeActionRequestResponse? { let response = try await languageService.codeAction(req) return req.injectMetadata(toResponse: response) @@ -1888,7 +1888,7 @@ extension SourceKitLSPServer { func codeLens( _ req: CodeLensRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> [CodeLens] { return try await languageService.codeLens(req) } @@ -1896,7 +1896,7 @@ extension SourceKitLSPServer { func inlayHint( _ req: InlayHintRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> [InlayHint] { return try await languageService.inlayHint(req) } @@ -1904,7 +1904,7 @@ extension SourceKitLSPServer { func documentDiagnostic( _ req: DocumentDiagnosticsRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> DocumentDiagnosticReport { return try await languageService.documentDiagnostic(req) } @@ -1933,7 +1933,7 @@ extension SourceKitLSPServer { func declaration( _ req: DeclarationRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> LocationsOrLocationLinksResponse? { return try await languageService.declaration(req) } @@ -1942,7 +1942,7 @@ extension SourceKitLSPServer { private func definitionLocations( for symbol: SymbolDetails, in uri: DocumentURI, - languageService: LanguageService + languageService: any LanguageService ) async throws -> [Location] { // If this symbol is a module then generate a textual interface if symbol.kind == .module { @@ -2037,7 +2037,7 @@ extension SourceKitLSPServer { private func indexBasedDefinition( _ req: DefinitionRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> [Location] { let symbols = try await languageService.symbolInfo( SymbolInfoRequest( @@ -2131,7 +2131,7 @@ extension SourceKitLSPServer { func definition( _ req: DefinitionRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> LocationsOrLocationLinksResponse? { let indexBasedResponse = try await indexBasedDefinition(req, workspace: workspace, languageService: languageService) // If we're unable to handle the definition request using our index, see if the @@ -2159,7 +2159,7 @@ extension SourceKitLSPServer { groupName: String?, symbolUSR: String?, originatorUri: DocumentURI, - languageService: LanguageService + languageService: any LanguageService ) async throws -> Location { // Let openGeneratedInterface handle all the logic, including checking if we're already in the right interface let documentForBuildSettings = originatorUri.buildSettingsFile @@ -2182,7 +2182,7 @@ extension SourceKitLSPServer { func implementation( _ req: ImplementationRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> LocationsOrLocationLinksResponse? { let symbols = try await languageService.symbolInfo( SymbolInfoRequest( @@ -2208,7 +2208,7 @@ extension SourceKitLSPServer { func references( _ req: ReferencesRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> [Location] { let symbols = try await languageService.symbolInfo( SymbolInfoRequest( @@ -2259,7 +2259,7 @@ extension SourceKitLSPServer { func prepareCallHierarchy( _ req: CallHierarchyPrepareRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> [CallHierarchyItem]? { let symbols = try await languageService.symbolInfo( SymbolInfoRequest( @@ -2468,7 +2468,7 @@ extension SourceKitLSPServer { func prepareTypeHierarchy( _ req: TypeHierarchyPrepareRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> [TypeHierarchyItem]? { let symbols = try await languageService.symbolInfo( SymbolInfoRequest( diff --git a/Sources/SourceKitLSP/TestDiscovery.swift b/Sources/SourceKitLSP/TestDiscovery.swift index e0a2dd1c2..947d50d6e 100644 --- a/Sources/SourceKitLSP/TestDiscovery.swift +++ b/Sources/SourceKitLSP/TestDiscovery.swift @@ -308,7 +308,7 @@ extension SourceKitLSPServer { func documentTests( _ req: DocumentTestsRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> [TestItem] { return try await documentTestsWithoutMergingExtensions(req, workspace: workspace, languageService: languageService) .prefixTestsWithModuleName(workspace: workspace) @@ -319,7 +319,7 @@ extension SourceKitLSPServer { private func documentTestsWithoutMergingExtensions( _ req: DocumentTestsRequest, workspace: Workspace, - languageService: LanguageService + languageService: any LanguageService ) async throws -> [AnnotatedTestItem] { let snapshot = try self.documentManager.latestSnapshot(req.textDocument.uri) let mainFileUri = await workspace.buildServerManager.mainFile( diff --git a/Sources/SourceKitLSP/Workspace.swift b/Sources/SourceKitLSP/Workspace.swift index 760a6356d..fc6185c8a 100644 --- a/Sources/SourceKitLSP/Workspace.swift +++ b/Sources/SourceKitLSP/Workspace.swift @@ -188,7 +188,7 @@ package final class Workspace: Sendable, BuildServerManagerDelegate { let syntacticTestIndex: SyntacticTestIndex /// Language service for an open document, if available. - private let languageServices: ThreadSafeBox<[DocumentURI: [LanguageService]]> = ThreadSafeBox(initialValue: [:]) + private let languageServices: ThreadSafeBox<[DocumentURI: [any LanguageService]]> = ThreadSafeBox(initialValue: [:]) /// The task that constructs the `SemanticIndexManager`, which keeps track of whose file's index is up-to-date in the /// workspace and schedules indexing and preparation tasks for files with out-of-date index. @@ -355,7 +355,7 @@ package final class Workspace: Sendable, BuildServerManagerDelegate { options: options, connectionToClient: ConnectionToClient(sourceKitLSPServer: sourceKitLSPServer), buildServerHooks: hooks.buildServerHooks, - createMainFilesProvider: { (initializationData, mainFilesChangedCallback) -> MainFilesProvider? in + createMainFilesProvider: { (initializationData, mainFilesChangedCallback) -> (any MainFilesProvider)? in await createIndex( initializationData: initializationData, mainFilesChangedCallback: mainFilesChangedCallback, @@ -414,12 +414,12 @@ package final class Workspace: Sendable, BuildServerManagerDelegate { /// The language services that can handle the given document. Callers should try to merge the results from the /// different language service or prefer results from language services that occur earlier in this array, whichever is /// more suitable. - func languageServices(for uri: DocumentURI) -> [LanguageService] { + func languageServices(for uri: DocumentURI) -> [any LanguageService] { return languageServices.value[uri.buildSettingsFile] ?? [] } /// The language service with the highest precedence that can handle the given document. - func primaryLanguageService(for uri: DocumentURI) -> LanguageService? { + func primaryLanguageService(for uri: DocumentURI) -> (any LanguageService)? { return languageServices(for: uri).first } @@ -428,7 +428,7 @@ package final class Workspace: Sendable, BuildServerManagerDelegate { /// If language services already exist for this document, eg. because two requests start creating a language /// service for a document and race, `newLanguageServices` is dropped and the existing language services for the /// document are returned. - func setLanguageServices(for uri: DocumentURI, _ newLanguageService: [any LanguageService]) -> [LanguageService] { + func setLanguageServices(for uri: DocumentURI, _ newLanguageService: [any LanguageService]) -> [any LanguageService] { return languageServices.withLock { languageServices in if let languageService = languageServices[uri] { return languageService @@ -455,7 +455,7 @@ package final class Workspace: Sendable, BuildServerManagerDelegate { /// We inform the respective language services as long as the given file is open /// (not queued for opening). package func filesDependenciesUpdated(_ changedFiles: Set) async { - var documentsByService: [ObjectIdentifier: (Set, LanguageService)] = [:] + var documentsByService: [ObjectIdentifier: (Set, any LanguageService)] = [:] for uri in changedFiles { logger.log("Dependencies updated for file \(uri.forLogging)") for languageService in languageServices(for: uri) { diff --git a/Sources/SwiftExtensions/AsyncUtils.swift b/Sources/SwiftExtensions/AsyncUtils.swift index 45a3b7964..fd32bbfa9 100644 --- a/Sources/SwiftExtensions/AsyncUtils.swift +++ b/Sources/SwiftExtensions/AsyncUtils.swift @@ -28,9 +28,9 @@ package func withTimeout( // launched with a low priority, then the priority gets elevated before we call with `withTaskPriorityChangedHandler`, // we thus don't receive a `taskPriorityChanged` and hence never increase the priority of `bodyTask`. let priority = Task.currentPriority - var mutableTasks: [Task] = [] - let stream = AsyncThrowingStream { continuation in - let bodyTask = Task(priority: priority) { + var mutableTasks: [Task] = [] + let stream = AsyncThrowingStream { continuation in + let bodyTask = Task(priority: priority) { do { let result = try await body() continuation.yield(result) @@ -96,7 +96,7 @@ package func withTimeoutResult( ) async throws -> WithTimeoutResult { let didHitTimeout = AtomicBool(initialValue: false) - let stream = AsyncThrowingStream, Error> { continuation in + let stream = AsyncThrowingStream, any Error> { continuation in Task { try await Task.sleep(for: timeout) didHitTimeout.value = true diff --git a/Sources/SwiftExtensions/Cache.swift b/Sources/SwiftExtensions/Cache.swift index 5b93bf2f0..350aa35b5 100644 --- a/Sources/SwiftExtensions/Cache.swift +++ b/Sources/SwiftExtensions/Cache.swift @@ -12,7 +12,7 @@ /// Essentially a dictionary where results are asynchronously computed on access. package class Cache { - private var storage: [Key: Task] = [:] + private var storage: [Key: Task] = [:] package init() {} @@ -21,7 +21,7 @@ package class Cache { isolation: isolated any Actor, compute: @Sendable @escaping (Key) async throws -> Result ) async throws -> Result { - let task: Task + let task: Task if let cached = storage[key] { task = cached } else { diff --git a/Sources/SwiftLanguageService/CodeActions/RemoveUnusedImports.swift b/Sources/SwiftLanguageService/CodeActions/RemoveUnusedImports.swift index ec39eea75..b375b755c 100644 --- a/Sources/SwiftLanguageService/CodeActions/RemoveUnusedImports.swift +++ b/Sources/SwiftLanguageService/CodeActions/RemoveUnusedImports.swift @@ -159,7 +159,7 @@ extension SwiftLanguageService { sourcekitdRequest: \.diagnostics, sourcekitd.dictionary([ keys.sourceFile: temporaryDocUri.pseudoPath, - keys.compilerArgs: patchedCompileCommand.compilerArgs as [SKDRequestValue], + keys.compilerArgs: patchedCompileCommand.compilerArgs as [any SKDRequestValue], ]), snapshot: nil ) diff --git a/Sources/SwiftLanguageService/CodeActions/SyntaxCodeActions.swift b/Sources/SwiftLanguageService/CodeActions/SyntaxCodeActions.swift index 82a6f6ae1..e8484d751 100644 --- a/Sources/SwiftLanguageService/CodeActions/SyntaxCodeActions.swift +++ b/Sources/SwiftLanguageService/CodeActions/SyntaxCodeActions.swift @@ -14,8 +14,8 @@ import SwiftRefactor /// List of all of the syntactic code action providers, which can be used /// to produce code actions using only the swift-syntax tree of a file. -let allSyntaxCodeActions: [SyntaxCodeActionProvider.Type] = { - var result: [SyntaxCodeActionProvider.Type] = [ +let allSyntaxCodeActions: [any SyntaxCodeActionProvider.Type] = { + var result: [any SyntaxCodeActionProvider.Type] = [ AddDocumentation.self, AddSeparatorsToIntegerLiteral.self, ConvertComputedPropertyToZeroParameterFunction.self, diff --git a/Sources/SwiftLanguageService/CodeCompletionSession.swift b/Sources/SwiftLanguageService/CodeCompletionSession.swift index 11133e998..26d42e686 100644 --- a/Sources/SwiftLanguageService/CodeCompletionSession.swift +++ b/Sources/SwiftLanguageService/CodeCompletionSession.swift @@ -378,7 +378,7 @@ class CodeCompletionSession { // MARK: - Helpers private func send( - sourceKitDRequest requestUid: KeyPath & Sendable, + sourceKitDRequest requestUid: any KeyPath & Sendable, _ request: SKDRequestDictionary, snapshot: DocumentSnapshot? ) async throws -> SKDResponseDictionary { diff --git a/Sources/SwiftLanguageService/CursorInfo.swift b/Sources/SwiftLanguageService/CursorInfo.swift index 2e19c2755..dc6c2027b 100644 --- a/Sources/SwiftLanguageService/CursorInfo.swift +++ b/Sources/SwiftLanguageService/CursorInfo.swift @@ -165,7 +165,7 @@ extension SwiftLanguageService { keys.sourceFile: snapshot.uri.sourcekitdSourceFile, keys.primaryFile: snapshot.uri.primaryFile?.pseudoPath, keys.retrieveSymbolGraph: includeSymbolGraph ? 1 : 0, - keys.compilerArgs: compileCommand?.compilerArgs as [SKDRequestValue]?, + keys.compilerArgs: compileCommand?.compilerArgs as [any SKDRequestValue]?, ]) appendAdditionalParameters?(skreq) diff --git a/Sources/SwiftLanguageService/DiagnosticReportManager.swift b/Sources/SwiftLanguageService/DiagnosticReportManager.swift index 05cca8e6a..f0045dc5b 100644 --- a/Sources/SwiftLanguageService/DiagnosticReportManager.swift +++ b/Sources/SwiftLanguageService/DiagnosticReportManager.swift @@ -113,7 +113,7 @@ actor DiagnosticReportManager { let skreq = sourcekitd.dictionary([ keys.sourceFile: snapshot.uri.sourcekitdSourceFile, keys.primaryFile: snapshot.uri.primaryFile?.pseudoPath, - keys.compilerArgs: compilerArgs as [SKDRequestValue], + keys.compilerArgs: compilerArgs as [any SKDRequestValue], ]) let dict: SKDResponseDictionary diff --git a/Sources/SwiftLanguageService/DocumentSymbols.swift b/Sources/SwiftLanguageService/DocumentSymbols.swift index 7d991d82e..9945e7624 100644 --- a/Sources/SwiftLanguageService/DocumentSymbols.swift +++ b/Sources/SwiftLanguageService/DocumentSymbols.swift @@ -100,7 +100,7 @@ private final class DocumentSymbolsFinder: SyntaxAnyVisitor { } override func visitAny(_ node: Syntax) -> SyntaxVisitorContinueKind { - guard let node = node.asProtocol(NamedDeclSyntax.self) else { + guard let node = node.asProtocol((any NamedDeclSyntax).self) else { return .visitChildren } let symbolKind: SymbolKind? = diff --git a/Sources/SwiftLanguageService/FoldingRange.swift b/Sources/SwiftLanguageService/FoldingRange.swift index 6c0890447..51e405d7c 100644 --- a/Sources/SwiftLanguageService/FoldingRange.swift +++ b/Sources/SwiftLanguageService/FoldingRange.swift @@ -127,13 +127,13 @@ private final class FoldingRangeFinder: SyntaxAnyVisitor { } override func visitAny(_ node: Syntax) -> SyntaxVisitorContinueKind { - if let braced = node.asProtocol(BracedSyntax.self) { + if let braced = node.asProtocol((any BracedSyntax).self) { return self.addFoldingRange( start: braced.leftBrace.endPositionBeforeTrailingTrivia, end: braced.rightBrace.positionAfterSkippingLeadingTrivia ) } - if let parenthesized = node.asProtocol(ParenthesizedSyntax.self) { + if let parenthesized = node.asProtocol((any ParenthesizedSyntax).self) { return self.addFoldingRange( start: parenthesized.leftParen.endPositionBeforeTrailingTrivia, end: parenthesized.rightParen.positionAfterSkippingLeadingTrivia diff --git a/Sources/SwiftLanguageService/GeneratedInterfaceManager.swift b/Sources/SwiftLanguageService/GeneratedInterfaceManager.swift index ac23955f4..460ee5423 100644 --- a/Sources/SwiftLanguageService/GeneratedInterfaceManager.swift +++ b/Sources/SwiftLanguageService/GeneratedInterfaceManager.swift @@ -120,7 +120,7 @@ actor GeneratedInterfaceManager { keys.name: document.sourcekitdDocumentName, keys.synthesizedExtension: 1, keys.compilerArgs: await swiftLanguageService.compileCommand(for: try document.uri, fallbackAfterTimeout: false)? - .compilerArgs as [SKDRequestValue]?, + .compilerArgs as [any SKDRequestValue]?, ]) let dict = try await swiftLanguageService.send(sourcekitdRequest: \.editorOpenInterface, skreq, snapshot: nil) diff --git a/Sources/SwiftLanguageService/MacroExpansion.swift b/Sources/SwiftLanguageService/MacroExpansion.swift index 679d3e70c..d7829b94e 100644 --- a/Sources/SwiftLanguageService/MacroExpansion.swift +++ b/Sources/SwiftLanguageService/MacroExpansion.swift @@ -106,7 +106,7 @@ actor MacroExpansionManager { keys.column: utf8Column + 1, keys.length: length, keys.actionUID: swiftLanguageService.sourcekitd.api.uid_get_from_cstr("source.refactoring.kind.expand.macro")!, - keys.compilerArgs: buildSettings?.compilerArgs as [SKDRequestValue]?, + keys.compilerArgs: buildSettings?.compilerArgs as [any SKDRequestValue]?, ]) let dict = try await swiftLanguageService.send(sourcekitdRequest: \.semanticRefactoring, skreq, snapshot: snapshot) diff --git a/Sources/SwiftLanguageService/RefactoringResponse.swift b/Sources/SwiftLanguageService/RefactoringResponse.swift index 34befa838..d36a8b64b 100644 --- a/Sources/SwiftLanguageService/RefactoringResponse.swift +++ b/Sources/SwiftLanguageService/RefactoringResponse.swift @@ -133,7 +133,7 @@ extension SwiftLanguageService { keys.length: snapshot.utf8OffsetRange(of: refactorCommand.positionRange).count, keys.actionUID: self.sourcekitd.api.uid_get_from_cstr(refactorCommand.actionString)!, keys.compilerArgs: await self.compileCommand(for: snapshot.uri, fallbackAfterTimeout: true)?.compilerArgs - as [SKDRequestValue]?, + as [any SKDRequestValue]?, ]) let dict = try await send(sourcekitdRequest: \.semanticRefactoring, skreq, snapshot: snapshot) diff --git a/Sources/SwiftLanguageService/RelatedIdentifiers.swift b/Sources/SwiftLanguageService/RelatedIdentifiers.swift index cdb21620f..d8023f72b 100644 --- a/Sources/SwiftLanguageService/RelatedIdentifiers.swift +++ b/Sources/SwiftLanguageService/RelatedIdentifiers.swift @@ -74,7 +74,7 @@ extension SwiftLanguageService { keys.primaryFile: snapshot.uri.primaryFile?.pseudoPath, keys.includeNonEditableBaseNames: includeNonEditableBaseNames ? 1 : 0, keys.compilerArgs: await self.compileCommand(for: snapshot.uri, fallbackAfterTimeout: true)?.compilerArgs - as [SKDRequestValue]?, + as [any SKDRequestValue]?, ]) let dict = try await send(sourcekitdRequest: \.relatedIdents, skreq, snapshot: snapshot) diff --git a/Sources/SwiftLanguageService/Rename.swift b/Sources/SwiftLanguageService/Rename.swift index 43ba8211f..5bab12327 100644 --- a/Sources/SwiftLanguageService/Rename.swift +++ b/Sources/SwiftLanguageService/Rename.swift @@ -361,7 +361,7 @@ extension SwiftLanguageService: NameTranslatorService { let req = sourcekitd.dictionary([ keys.sourceFile: snapshot.uri.pseudoPath, keys.compilerArgs: await self.compileCommand(for: snapshot.uri, fallbackAfterTimeout: false)?.compilerArgs - as [SKDRequestValue]?, + as [any SKDRequestValue]?, keys.offset: snapshot.utf8Offset(of: snapshot.position(of: symbolLocation)), keys.nameKind: sourcekitd.values.nameSwift, keys.baseName: name.baseName, @@ -412,7 +412,7 @@ extension SwiftLanguageService: NameTranslatorService { let req = sourcekitd.dictionary([ keys.sourceFile: snapshot.uri.pseudoPath, keys.compilerArgs: await self.compileCommand(for: snapshot.uri, fallbackAfterTimeout: false)?.compilerArgs - as [SKDRequestValue]?, + as [any SKDRequestValue]?, keys.offset: snapshot.utf8Offset(of: snapshot.position(of: symbolLocation)), keys.nameKind: sourcekitd.values.nameObjc, ]) diff --git a/Sources/SwiftLanguageService/SemanticTokens.swift b/Sources/SwiftLanguageService/SemanticTokens.swift index b9fe22a2d..8323b3e7b 100644 --- a/Sources/SwiftLanguageService/SemanticTokens.swift +++ b/Sources/SwiftLanguageService/SemanticTokens.swift @@ -30,7 +30,7 @@ extension SwiftLanguageService { let skreq = sourcekitd.dictionary([ keys.sourceFile: snapshot.uri.sourcekitdSourceFile, keys.primaryFile: snapshot.uri.primaryFile?.pseudoPath, - keys.compilerArgs: compileCommand.compilerArgs as [SKDRequestValue], + keys.compilerArgs: compileCommand.compilerArgs as [any SKDRequestValue], ]) let dict = try await send(sourcekitdRequest: \.semanticTokens, skreq, snapshot: snapshot) diff --git a/Sources/SwiftLanguageService/SignatureHelp.swift b/Sources/SwiftLanguageService/SignatureHelp.swift index 7d91a8451..7ae1c2b58 100644 --- a/Sources/SwiftLanguageService/SignatureHelp.swift +++ b/Sources/SwiftLanguageService/SignatureHelp.swift @@ -144,7 +144,7 @@ extension SwiftLanguageService { keys.offset: snapshot.utf8Offset(of: adjustedPosition), keys.sourceFile: snapshot.uri.sourcekitdSourceFile, keys.primaryFile: snapshot.uri.primaryFile?.pseudoPath, - keys.compilerArgs: compileCommand?.compilerArgs as [SKDRequestValue]?, + keys.compilerArgs: compileCommand?.compilerArgs as [any SKDRequestValue]?, ]) let dict = try await send(sourcekitdRequest: \.signatureHelp, skreq, snapshot: snapshot) diff --git a/Sources/SwiftLanguageService/SwiftLanguageService.swift b/Sources/SwiftLanguageService/SwiftLanguageService.swift index 5e647d20f..e895242be 100644 --- a/Sources/SwiftLanguageService/SwiftLanguageService.swift +++ b/Sources/SwiftLanguageService/SwiftLanguageService.swift @@ -317,7 +317,7 @@ package actor SwiftLanguageService: LanguageService, Sendable { } func send( - sourcekitdRequest requestUid: KeyPath & Sendable, + sourcekitdRequest requestUid: any KeyPath & Sendable, _ request: SKDRequestDictionary, snapshot: DocumentSnapshot? ) async throws -> SKDResponseDictionary { @@ -534,7 +534,7 @@ extension SwiftLanguageService { keys.enableStructure: 0, keys.enableDiagnostics: 0, keys.syntacticOnly: 1, - keys.compilerArgs: compileCommand?.compilerArgs as [SKDRequestValue]?, + keys.compilerArgs: compileCommand?.compilerArgs as [any SKDRequestValue]?, ]) } diff --git a/Sources/SwiftLanguageService/SwiftTestingScanner.swift b/Sources/SwiftLanguageService/SwiftTestingScanner.swift index 93717cfb5..a8a6329bb 100644 --- a/Sources/SwiftLanguageService/SwiftTestingScanner.swift +++ b/Sources/SwiftLanguageService/SwiftTestingScanner.swift @@ -220,7 +220,7 @@ final class SyntacticSwiftTestingTestScanner: SyntaxVisitor { /// extended type. For example, `extension Foo.Bar {}` passes `["Foo", "Bar"]` as `typeNames`. /// `typeNames` must not be empty. private func visitTypeOrExtensionDecl( - _ node: DeclGroupSyntax, + _ node: any DeclGroupSyntax, typeNames: [String] ) -> SyntaxVisitorContinueKind { precondition(!typeNames.isEmpty) diff --git a/Sources/SwiftLanguageService/SymbolGraph.swift b/Sources/SwiftLanguageService/SymbolGraph.swift index bdd1514c1..9f1781158 100644 --- a/Sources/SwiftLanguageService/SymbolGraph.swift +++ b/Sources/SwiftLanguageService/SymbolGraph.swift @@ -95,7 +95,7 @@ private struct DocumentableSymbol { } init?(node: any SyntaxProtocol) { - if let namedDecl = node.asProtocol(NamedDeclSyntax.self) { + if let namedDecl = node.asProtocol((any NamedDeclSyntax).self) { self = DocumentableSymbol(node: namedDecl, position: namedDecl.name.positionAfterSkippingLeadingTrivia) } else if let initDecl = node.as(InitializerDeclSyntax.self) { self = DocumentableSymbol(node: initDecl, position: initDecl.initKeyword.positionAfterSkippingLeadingTrivia) diff --git a/Sources/SwiftLanguageService/VariableTypeInfo.swift b/Sources/SwiftLanguageService/VariableTypeInfo.swift index 0cf1b5b40..6bc1d1019 100644 --- a/Sources/SwiftLanguageService/VariableTypeInfo.swift +++ b/Sources/SwiftLanguageService/VariableTypeInfo.swift @@ -91,7 +91,7 @@ extension SwiftLanguageService { keys.sourceFile: snapshot.uri.sourcekitdSourceFile, keys.primaryFile: snapshot.uri.primaryFile?.pseudoPath, keys.compilerArgs: await self.compileCommand(for: uri, fallbackAfterTimeout: false)?.compilerArgs - as [SKDRequestValue]?, + as [any SKDRequestValue]?, ]) if let range = range { diff --git a/Sources/SwiftSourceKitPlugin/CompletionProvider.swift b/Sources/SwiftSourceKitPlugin/CompletionProvider.swift index 19399c0ba..a30df2aec 100644 --- a/Sources/SwiftSourceKitPlugin/CompletionProvider.swift +++ b/Sources/SwiftSourceKitPlugin/CompletionProvider.swift @@ -268,7 +268,7 @@ actor CompletionProvider { request.sourcekitd.keys.docBrief: info.briefDocumentation, request.sourcekitd.keys.docFullAsXML: info.fullDocumentationAsXML, request.sourcekitd.keys.docComment: info.rawDocumentation, - request.sourcekitd.keys.associatedUSRs: info.associatedUSRs as [SKDResponseValue]?, + request.sourcekitd.keys.associatedUSRs: info.associatedUSRs as [any SKDResponseValue]?, ]) } @@ -376,7 +376,7 @@ actor CompletionProvider { keys.hasDiagnostic: item.hasDiagnostic ? 1 : 0, keys.groupId: item.groupID, ]) - } as [SKDResponseValue] + } as [any SKDResponseValue] resp.set(sourcekitd.keys.results, to: results) } @@ -417,7 +417,7 @@ actor CompletionProvider { let keys = sourcekitd.keys var response = sourcekitd.responseDictionary([ keys.unfilteredResultCount: session.totalCount, - keys.memberAccessTypes: session.memberAccessTypes as [SKDResponseValue], + keys.memberAccessTypes: session.memberAccessTypes as [any SKDResponseValue], ]) let filterText = options?[keys.filterText] ?? "" diff --git a/Sources/SwiftSourceKitPlugin/SKDResponse.swift b/Sources/SwiftSourceKitPlugin/SKDResponse.swift index d549e2642..d76a03f68 100644 --- a/Sources/SwiftSourceKitPlugin/SKDResponse.swift +++ b/Sources/SwiftSourceKitPlugin/SKDResponse.swift @@ -55,8 +55,8 @@ final class SKDResponse: CustomStringConvertible, Sendable { self.init(takingUnderlyingResponse: resp, sourcekitd: sourcekitd) } - static func from(error: Error, sourcekitd: SourceKitD) -> SKDResponse { - if let error = error as? SourceKitPluginError { + static func from(error: any Error, sourcekitd: SourceKitD) -> SKDResponse { + if let error = error as? (any SourceKitPluginError) { return error.response(sourcekitd: sourcekitd) } else if error is CancellationError { return SKDResponse(error: .cancelled, description: "Request cancelled", sourcekitd: sourcekitd) diff --git a/Sources/SwiftSourceKitPlugin/SKDResponseArrayBuilder.swift b/Sources/SwiftSourceKitPlugin/SKDResponseArrayBuilder.swift index 4fceadb35..7ae04ef77 100644 --- a/Sources/SwiftSourceKitPlugin/SKDResponseArrayBuilder.swift +++ b/Sources/SwiftSourceKitPlugin/SKDResponseArrayBuilder.swift @@ -14,7 +14,7 @@ import Csourcekitd import SourceKitD extension SourceKitD { - nonisolated func responseArray(_ array: [SKDResponseValue]) -> SKDResponseArrayBuilder { + nonisolated func responseArray(_ array: [any SKDResponseValue]) -> SKDResponseArrayBuilder { let result = SKDResponseArrayBuilder(sourcekitd: self) for element in array { result.append(element) @@ -37,7 +37,7 @@ struct SKDResponseArrayBuilder { ) } - func append(_ newValue: SKDResponseValue) { + func append(_ newValue: any SKDResponseValue) { switch newValue { case let newValue as String: sourcekitd.servicePluginApi.response_array_set_string(value, -1, newValue) @@ -55,11 +55,11 @@ struct SKDResponseArrayBuilder { sourcekitd.servicePluginApi.response_array_set_value(value, -1, newValue.value) case let newValue as SKDResponseArrayBuilder: sourcekitd.servicePluginApi.response_array_set_value(value, -1, newValue.value) - case let newValue as [SKDResponseValue]: + case let newValue as [any SKDResponseValue]: self.append(sourcekitd.responseArray(newValue)) - case let newValue as [sourcekitd_api_uid_t: SKDResponseValue]: + case let newValue as [sourcekitd_api_uid_t: any SKDResponseValue]: self.append(sourcekitd.responseDictionary(newValue)) - case let newValue as SKDResponseValue?: + case let newValue as (any SKDResponseValue)?: if let newValue { self.append(newValue) } diff --git a/Sources/SwiftSourceKitPlugin/SKDResponseDictionaryBuilder.swift b/Sources/SwiftSourceKitPlugin/SKDResponseDictionaryBuilder.swift index 4a4d9333b..42491aa96 100644 --- a/Sources/SwiftSourceKitPlugin/SKDResponseDictionaryBuilder.swift +++ b/Sources/SwiftSourceKitPlugin/SKDResponseDictionaryBuilder.swift @@ -16,7 +16,7 @@ import SwiftSourceKitPluginCommon extension SourceKitD { nonisolated func responseDictionary( - _ dict: [sourcekitd_api_uid_t: SKDResponseValue] + _ dict: [sourcekitd_api_uid_t: any SKDResponseValue] ) -> SKDResponseDictionaryBuilder { let result = SKDResponseDictionaryBuilder(sourcekitd: self) for (key, value) in dict { @@ -40,7 +40,7 @@ struct SKDResponseDictionaryBuilder { ) } - func set(_ key: sourcekitd_api_uid_t, to newValue: SKDResponseValue) { + func set(_ key: sourcekitd_api_uid_t, to newValue: any SKDResponseValue) { switch newValue { case let newValue as String: sourcekitd.servicePluginApi.response_dictionary_set_string(value, key, newValue) @@ -58,11 +58,11 @@ struct SKDResponseDictionaryBuilder { sourcekitd.servicePluginApi.response_dictionary_set_value(value, key, newValue.value) case let newValue as SKDResponseArrayBuilder: sourcekitd.servicePluginApi.response_dictionary_set_value(value, key, newValue.value) - case let newValue as [SKDResponseValue]: + case let newValue as [any SKDResponseValue]: self.set(key, to: sourcekitd.responseArray(newValue)) - case let newValue as [sourcekitd_api_uid_t: SKDResponseValue]: + case let newValue as [sourcekitd_api_uid_t: any SKDResponseValue]: self.set(key, to: sourcekitd.responseDictionary(newValue)) - case let newValue as SKDResponseValue?: + case let newValue as (any SKDResponseValue)?: if let newValue { self.set(key, to: newValue) } diff --git a/Sources/ToolchainRegistry/XCToolchainPlist.swift b/Sources/ToolchainRegistry/XCToolchainPlist.swift index 2c88c7289..d301970d0 100644 --- a/Sources/ToolchainRegistry/XCToolchainPlist.swift +++ b/Sources/ToolchainRegistry/XCToolchainPlist.swift @@ -90,7 +90,7 @@ extension XCToolchainPlist: Codable { case DisplayName } - package init(from decoder: Decoder) throws { + package init(from decoder: any Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) if let identifier = try container.decodeIfPresent(String.self, forKey: .Identifier) { self.identifier = identifier @@ -103,7 +103,7 @@ extension XCToolchainPlist: Codable { /// Encode the info plist. /// /// For testing purposes only. - package func encode(to encoder: Encoder) throws { + package func encode(to encoder: any Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) if identifier.starts(with: "com.apple") { try container.encode(identifier, forKey: .Identifier) diff --git a/Tests/SwiftSourceKitPluginTests/SwiftSourceKitPluginTests.swift b/Tests/SwiftSourceKitPluginTests/SwiftSourceKitPluginTests.swift index 72f534264..881e6112f 100644 --- a/Tests/SwiftSourceKitPluginTests/SwiftSourceKitPluginTests.swift +++ b/Tests/SwiftSourceKitPluginTests/SwiftSourceKitPluginTests.swift @@ -1945,7 +1945,7 @@ fileprivate extension SourceKitD { keys.name: name, keys.sourceText: textWithoutMarkers, keys.syntacticOnly: 1, - keys.compilerArgs: compilerArguments as [SKDRequestValue], + keys.compilerArgs: compilerArguments as [any SKDRequestValue], ]) _ = try await send(\.editorOpen, req) return DocumentPositions(markers: markers, textWithoutMarkers: textWithoutMarkers) @@ -1972,7 +1972,7 @@ fileprivate extension SourceKitD { } nonisolated func completeImpl( - requestUID: KeyPath & Sendable, + requestUID: any KeyPath & Sendable, path: String, position: Position, filter: String, @@ -1989,7 +1989,7 @@ fileprivate extension SourceKitD { keys.addCallWithNoDefaultArgs: flags.contains(.addCallWithNoDefaultArgs) ? 1 : 0, keys.includeSemanticComponents: flags.contains(.includeSemanticComponents) ? 1 : 0, keys.filterText: filter, - keys.recentCompletions: recentCompletions as [SKDRequestValue]?, + keys.recentCompletions: recentCompletions as [any SKDRequestValue]?, keys.maxResults: maxResults, ]) @@ -1999,7 +1999,7 @@ fileprivate extension SourceKitD { keys.column: position.utf16index + 1, keys.sourceFile: path, keys.codeCompleteOptions: options, - keys.compilerArgs: compilerArguments as [SKDRequestValue]?, + keys.compilerArgs: compilerArguments as [any SKDRequestValue]?, ]) let res = try await send(requestUID, req) @@ -2080,8 +2080,8 @@ fileprivate extension SourceKitD { nonisolated func setPopularAPI(popular: [String], unpopular: [String]) async throws { let req = dictionary([ keys.codeCompleteOptions: dictionary([keys.useNewAPI: 1]), - keys.popular: popular as [SKDRequestValue], - keys.unpopular: unpopular as [SKDRequestValue], + keys.popular: popular as [any SKDRequestValue], + keys.unpopular: unpopular as [any SKDRequestValue], ]) let resp = try await send(\.codeCompleteSetPopularAPI, req) @@ -2096,8 +2096,8 @@ fileprivate extension SourceKitD { let req = dictionary([ keys.codeCompleteOptions: dictionary([keys.useNewAPI: 1]), keys.scopedPopularityTablePath: scopedPopularityDataPath, - keys.popularModules: popularModules as [SKDRequestValue], - keys.notoriousModules: notoriousModules as [SKDRequestValue], + keys.popularModules: popularModules as [any SKDRequestValue], + keys.notoriousModules: notoriousModules as [any SKDRequestValue], ]) let resp = try await send(\.codeCompleteSetPopularAPI, req) @@ -2119,8 +2119,8 @@ fileprivate extension SourceKitD { } let req = dictionary([ keys.codeCompleteOptions: dictionary([keys.useNewAPI: 1]), - keys.symbolPopularity: symbolPopularity as [SKDRequestValue], - keys.modulePopularity: modulePopularity as [SKDRequestValue], + keys.symbolPopularity: symbolPopularity as [any SKDRequestValue], + keys.modulePopularity: modulePopularity as [any SKDRequestValue], ]) let resp = try await send(\.codeCompleteSetPopularAPI, req) @@ -2173,7 +2173,7 @@ private struct ExpectationNotFulfilledError: Error {} /// Run the given async block and block the current function until `body` terminates. private func runAsync(_ body: @escaping @Sendable () async throws -> T) throws -> T { - nonisolated(unsafe) var result: Result! + nonisolated(unsafe) var result: Result! let expectation = XCTestExpectation(description: "") Task { do {