Skip to content

Commit 8739b55

Browse files
committed
Create a SwiftUtilities module
This allows us to share common Swift utility functions between SourceKit-LSP and LSPLogging.
1 parent af37a84 commit 8739b55

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+66
-8
lines changed

Package.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ let package = Package(
8080
"SKSupport",
8181
"SourceKitD",
8282
"SourceKitLSP",
83+
"SwiftUtilities",
8384
.product(name: "ArgumentParser", package: "swift-argument-parser"),
8485
.product(name: "SwiftIDEUtils", package: "swift-syntax"),
8586
.product(name: "SwiftSyntax", package: "swift-syntax"),
@@ -183,6 +184,7 @@ let package = Package(
183184
"LanguageServerProtocol",
184185
"LanguageServerProtocolJSONRPC",
185186
"SKSupport",
187+
"SwiftUtilities",
186188
]
187189
),
188190

@@ -195,6 +197,7 @@ let package = Package(
195197
"LanguageServerProtocol",
196198
"LSPLogging",
197199
"SKCore",
200+
"SwiftUtilities",
198201
.product(name: "IndexStoreDB", package: "indexstore-db"),
199202
],
200203
exclude: ["CMakeLists.txt"]
@@ -221,6 +224,7 @@ let package = Package(
221224
"LSPLogging",
222225
"SKSupport",
223226
"SourceKitD",
227+
"SwiftUtilities",
224228
.product(name: "SwiftPMDataModel-auto", package: "swift-package-manager"),
225229
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"),
226230
],
@@ -246,6 +250,7 @@ let package = Package(
246250
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"),
247251
"LanguageServerProtocol",
248252
"LSPLogging",
253+
"SwiftUtilities",
249254
],
250255
exclude: ["CMakeLists.txt"],
251256
swiftSettings: [.enableExperimentalFeature("StrictConcurrency")]
@@ -257,6 +262,7 @@ let package = Package(
257262
"LSPTestSupport",
258263
"SKSupport",
259264
"SKTestSupport",
265+
"SwiftUtilities",
260266
]
261267
),
262268

@@ -269,6 +275,7 @@ let package = Package(
269275
"LanguageServerProtocol",
270276
"LSPLogging",
271277
"SKCore",
278+
"SwiftUtilities",
272279
.product(name: "SwiftPM-auto", package: "swift-package-manager"),
273280
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"),
274281
],
@@ -302,6 +309,7 @@ let package = Package(
302309
"LSPLogging",
303310
"SKCore",
304311
"SourceKitLSP",
312+
"SwiftUtilities",
305313
.product(name: "ISDBTestSupport", package: "indexstore-db"),
306314
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"),
307315
],
@@ -319,6 +327,7 @@ let package = Package(
319327
"Csourcekitd",
320328
"LSPLogging",
321329
"SKSupport",
330+
"SwiftUtilities",
322331
.product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"),
323332
],
324333
exclude: ["CMakeLists.txt", "sourcekitd_uids.swift.gyb"],
@@ -331,6 +340,7 @@ let package = Package(
331340
"SourceKitD",
332341
"SKCore",
333342
"SKTestSupport",
343+
"SwiftUtilities",
334344
]
335345
),
336346

@@ -349,6 +359,7 @@ let package = Package(
349359
"SKSupport",
350360
"SKSwiftPMWorkspace",
351361
"SourceKitD",
362+
"SwiftUtilities",
352363
.product(name: "IndexStoreDB", package: "indexstore-db"),
353364
.product(name: "SwiftBasicFormat", package: "swift-syntax"),
354365
.product(name: "SwiftDiagnostics", package: "swift-syntax"),
@@ -387,6 +398,11 @@ let package = Package(
387398
.product(name: "SwiftSyntaxMacros", package: "swift-syntax"),
388399
]
389400
),
401+
402+
.target(
403+
name: "SwiftUtilities",
404+
exclude: ["CMakeLists.txt"]
405+
),
390406
]
391407
)
392408

Sources/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ add_subdirectory(SKSwiftPMWorkspace)
1313
add_subdirectory(SourceKitLSP)
1414
add_subdirectory(SourceKitD)
1515
add_subdirectory(sourcekit-lsp)
16+
add_subdirectory(SwiftUtilities)

Sources/Diagnose/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ target_link_libraries(Diagnose PUBLIC
2929
LSPLogging
3030
SKCore
3131
SourceKitD
32+
SwiftUtilities
3233
ArgumentParser
3334
SwiftSyntax::SwiftIDEUtils
3435
SwiftSyntax::SwiftSyntax

Sources/Diagnose/IndexCommand.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import LanguageServerProtocol
1717
import SKCore
1818
import SKSupport
1919
import SourceKitLSP
20+
import SwiftUtilities
2021

2122
import struct TSCBasic.AbsolutePath
2223
import class TSCBasic.Process

Sources/LSPTestSupport/TestJSONRPCConnection.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import InProcessClient
1414
import LanguageServerProtocol
1515
import LanguageServerProtocolJSONRPC
1616
import SKSupport
17+
import SwiftUtilities
1718
import XCTest
1819

1920
import class Foundation.Pipe

Sources/SKCore/BuildServerBuildSystem.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import LSPLogging
1616
import LanguageServerProtocol
1717
import LanguageServerProtocolJSONRPC
1818
import SKSupport
19+
import SwiftUtilities
1920

2021
import struct TSCBasic.AbsolutePath
2122
import protocol TSCBasic.FileSystem

Sources/SKCore/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,6 @@ target_link_libraries(SKCore PUBLIC
2828
LSPLogging
2929
SKSupport
3030
SourceKitD
31+
SwiftUtilities
3132
PackageModel
3233
TSCBasic)

Sources/SKCore/TaskScheduler.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import CAtomics
1414
import Foundation
1515
import LSPLogging
1616
import SKSupport
17+
import SwiftUtilities
1718

1819
/// See comment on ``TaskDescriptionProtocol/dependencies(to:taskPriority:)``
1920
public enum TaskDependencyAction<TaskDescription: TaskDescriptionProtocol> {

Sources/SKCore/Toolchain.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import LSPLogging
1414
import LanguageServerProtocol
1515
import RegexBuilder
1616
import SKSupport
17+
import SwiftUtilities
1718

1819
import enum PackageLoading.Platform
1920
import struct TSCBasic.AbsolutePath

Sources/SKSupport/CMakeLists.txt

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11

22
add_library(SKSupport STATIC
3-
AsyncQueue.swift
4-
AsyncUtils.swift
53
BuildConfiguration.swift
64
ByteString.swift
7-
Collection+Only.swift
8-
Collection+PartitionIntoBatches.swift
95
Connection+Send.swift
106
dlopen.swift
117
DocumentURI+CustomLogStringConvertible.swift
@@ -15,16 +11,14 @@ add_library(SKSupport STATIC
1511
Process+WaitUntilExitWithCancellation.swift
1612
Random.swift
1713
Result.swift
18-
Sequence+AsyncMap.swift
1914
SwitchableProcessResultExitStatus.swift
20-
Task+WithPriorityChangedHandler.swift
21-
ThreadSafeBox.swift
2215
WorkspaceType.swift
2316
)
2417
set_target_properties(SKSupport PROPERTIES
2518
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_Swift_MODULE_DIRECTORY})
2619
target_link_libraries(SKSupport PRIVATE
2720
LanguageServerProtocol
2821
LSPLogging
22+
SwiftUtilities
2923
TSCBasic
3024
$<$<NOT:$<PLATFORM_ID:Darwin>>:Foundation>)

Sources/SKSupport/Connection+Send.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
//===----------------------------------------------------------------------===//
1212

1313
import LanguageServerProtocol
14+
import SwiftUtilities
1415

1516
extension Connection {
1617
/// Send the given request to the connection and await its result.

Sources/SKSwiftPMWorkspace/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ target_link_libraries(SKSwiftPMWorkspace PRIVATE
88
LanguageServerProtocol
99
LSPLogging
1010
SKCore
11+
SwiftUtilities
1112
TSCBasic)
1213
target_link_libraries(SKSwiftPMWorkspace PUBLIC
1314
Build

Sources/SKSwiftPMWorkspace/SwiftPMBuildSystem.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import SKCore
2323
import SKSupport
2424
import SourceControl
2525
import SourceKitLSPAPI
26+
import SwiftUtilities
2627
import Workspace
2728

2829
import struct Basics.AbsolutePath
@@ -107,7 +108,9 @@ public actor SwiftPMBuildSystem {
107108
let fileSystem: FileSystem
108109
private let toolchainRegistry: ToolchainRegistry
109110

110-
private let swiftBuildSupportsPrepareForIndexingTask = SKSupport.ThreadSafeBox<Task<Bool, Never>?>(initialValue: nil)
111+
private let swiftBuildSupportsPrepareForIndexingTask = SwiftUtilities.ThreadSafeBox<Task<Bool, Never>?>(
112+
initialValue: nil
113+
)
111114

112115
#if compiler(>=6.1)
113116
#warning(

Sources/SKTestSupport/TestSourceKitLSPClient.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import LanguageServerProtocolJSONRPC
2020
import SKSupport
2121
import SourceKitLSP
2222
import SwiftSyntax
23+
import SwiftUtilities
2324
import XCTest
2425

2526
extension SourceKitLSPServer.Options {

Sources/SemanticIndex/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@ set_target_properties(SemanticIndex PROPERTIES
1414
target_link_libraries(SemanticIndex PRIVATE
1515
LSPLogging
1616
SKCore
17+
SwiftUtilities
1718
IndexStoreDB
1819
$<$<NOT:$<PLATFORM_ID:Darwin>>:Foundation>)

Sources/SemanticIndex/UpdateIndexStoreTaskDescription.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import LSPLogging
1616
import LanguageServerProtocol
1717
import SKCore
1818
import SKSupport
19+
import SwiftUtilities
1920

2021
import struct TSCBasic.AbsolutePath
2122
import class TSCBasic.Process

Sources/SourceKitD/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ target_link_libraries(SourceKitD PUBLIC
1717
target_link_libraries(SourceKitD PRIVATE
1818
LSPLogging
1919
SKSupport
20+
SwiftUtilities
2021
TSCBasic
2122
$<$<NOT:$<PLATFORM_ID:Darwin>>:Foundation>)

Sources/SourceKitD/DynamicallyLoadedSourceKitD.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import Foundation
1414
import LSPLogging
1515
import SKSupport
16+
import SwiftUtilities
1617

1718
import struct TSCBasic.AbsolutePath
1819

Sources/SourceKitD/SourceKitD.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import Dispatch
1515
import Foundation
1616
import SKSupport
17+
import SwiftUtilities
1718

1819
/// Access to sourcekitd API, taking care of initialization, shutdown, and notification handler
1920
/// multiplexing.

Sources/SourceKitLSP/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ target_link_libraries(SourceKitLSP PUBLIC
7575
SKSupport
7676
SKSwiftPMWorkspace
7777
SourceKitD
78+
SwiftUtilities
7879
IndexStoreDB
7980
SwiftSyntax::SwiftBasicFormat
8081
SwiftSyntax::SwiftDiagnostics

Sources/SourceKitLSP/Clang/ClangLanguageService.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import LanguageServerProtocol
1616
import LanguageServerProtocolJSONRPC
1717
import SKCore
1818
import SKSupport
19+
import SwiftUtilities
1920

2021
import struct TSCBasic.AbsolutePath
2122

Sources/SourceKitLSP/IndexProgressManager.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import LanguageServerProtocol
1515
import SKCore
1616
import SKSupport
1717
import SemanticIndex
18+
import SwiftUtilities
1819

1920
/// Listens for index status updates from `SemanticIndexManagers`. From that information, it manages a
2021
/// `WorkDoneProgress` that communicates the index progress to the editor.

Sources/SourceKitLSP/MessageHandlingDependencyTracker.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import LSPLogging
1414
import LanguageServerProtocol
1515
import SKSupport
16+
import SwiftUtilities
1617

1718
/// A lightweight way of describing tasks that are created from handling LSP
1819
/// requests or notifications for the purpose of dependency tracking.

Sources/SourceKitLSP/SourceKitIndexDelegate.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import IndexStoreDB
1515
import LSPLogging
1616
import SKCore
1717
import SKSupport
18+
import SwiftUtilities
1819

1920
/// `IndexDelegate` for the SourceKit workspace.
2021
///

Sources/SourceKitLSP/SourceKitLSPServer.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import SKSupport
2323
import SKSwiftPMWorkspace
2424
import SemanticIndex
2525
import SourceKitD
26+
import SwiftUtilities
2627

2728
import struct PackageModel.BuildFlags
2829
import struct TSCBasic.AbsolutePath

Sources/SourceKitLSP/Swift/CodeCompletionSession.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import SourceKitD
1818
import SwiftParser
1919
@_spi(SourceKitLSP) import SwiftRefactor
2020
import SwiftSyntax
21+
import SwiftUtilities
2122

2223
/// Represents a code-completion session for a given source location that can be efficiently
2324
/// re-filtered by calling `update()`.

Sources/SourceKitLSP/Swift/DiagnosticReportManager.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import LanguageServerProtocol
1515
import SKSupport
1616
import SourceKitD
1717
import SwiftParserDiagnostics
18+
import SwiftUtilities
1819

1920
actor DiagnosticReportManager {
2021
/// A task to produce diagnostics, either from a diagnostics request to `sourcektid` or by using the built-in swift-syntax.

Sources/SourceKitLSP/Swift/SwiftLanguageService.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import SourceKitD
2222
import SwiftParser
2323
import SwiftParserDiagnostics
2424
import SwiftSyntax
25+
import SwiftUtilities
2526

2627
import struct TSCBasic.AbsolutePath
2728

Sources/SourceKitLSP/Swift/SyntacticTestIndex.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import Foundation
1414
import LSPLogging
1515
import LanguageServerProtocol
1616
import SKSupport
17+
import SwiftUtilities
1718

1819
/// Task metadata for `SyntacticTestIndexer.indexingQueue`
1920
fileprivate enum TaskMetadata: DependencyTracker, Equatable {

Sources/SourceKitLSP/WorkDoneProgressManager.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import Foundation
1414
import LanguageServerProtocol
1515
import SKSupport
16+
import SwiftUtilities
1617

1718
/// Represents a single `WorkDoneProgress` task that gets communicated with the client.
1819
///

Sources/SourceKitLSP/WorkDoneProgressState.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import LSPLogging
1414
import LanguageServerProtocol
1515
import SKSupport
16+
import SwiftUtilities
1617

1718
/// Keeps track of the state to send work done progress updates to the client
1819
final actor WorkDoneProgressState {

Sources/SourceKitLSP/Workspace.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import LanguageServerProtocol
1616
import SKCore
1717
import SKSupport
1818
import SemanticIndex
19+
import SwiftUtilities
1920

2021
import struct TSCBasic.AbsolutePath
2122
import struct TSCBasic.RelativePath

Sources/SwiftUtilities/CMakeLists.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
2+
add_library(SwiftUtilities STATIC
3+
AsyncQueue.swift
4+
AsyncUtils.swift
5+
Collection+Only.swift
6+
Collection+PartitionIntoBatches.swift
7+
Sequence+AsyncMap.swift
8+
Task+WithPriorityChangedHandler.swift
9+
ThreadSafeBox.swift
10+
)
11+
set_target_properties(SwiftUtilities PROPERTIES
12+
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_Swift_MODULE_DIRECTORY})
13+
target_link_libraries(SwiftUtilities PRIVATE
14+
$<$<NOT:$<PLATFORM_ID:Darwin>>:Foundation>)

Tests/SKSupportTests/AsyncUtilsTests.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
import LSPTestSupport
1414
import SKSupport
15+
import SwiftUtilities
1516
import XCTest
1617

1718
final class AsyncUtilsTests: XCTestCase {

0 commit comments

Comments
 (0)