Skip to content

Commit abf456a

Browse files
committed
Make reloadPackageStatusCallback async
1 parent 7f4e10e commit abf456a

File tree

3 files changed

+15
-22
lines changed

3 files changed

+15
-22
lines changed

Sources/SKSwiftPMWorkspace/SwiftPMWorkspace.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public actor SwiftPMWorkspace {
8383
var watchedFiles: [DocumentURI: Language] = [:]
8484

8585
/// This callback is informed when `reloadPackage` starts and ends executing.
86-
var reloadPackageStatusCallback: (ReloadPackageStatus) -> Void
86+
var reloadPackageStatusCallback: (ReloadPackageStatus) async -> Void
8787

8888

8989
/// Creates a build system using the Swift Package Manager, if this workspace is a package.
@@ -99,7 +99,7 @@ public actor SwiftPMWorkspace {
9999
toolchainRegistry: ToolchainRegistry,
100100
fileSystem: FileSystem = localFileSystem,
101101
buildSetup: BuildSetup,
102-
reloadPackageStatusCallback: @escaping (ReloadPackageStatus) -> Void = { _ in }
102+
reloadPackageStatusCallback: @escaping (ReloadPackageStatus) async -> Void = { _ in }
103103
) async throws {
104104
self.workspacePath = workspacePath
105105
self.fileSystem = fileSystem
@@ -164,7 +164,7 @@ public actor SwiftPMWorkspace {
164164
url: URL,
165165
toolchainRegistry: ToolchainRegistry,
166166
buildSetup: BuildSetup,
167-
reloadPackageStatusCallback: @escaping (ReloadPackageStatus) -> Void
167+
reloadPackageStatusCallback: @escaping (ReloadPackageStatus) async -> Void
168168
) async {
169169
do {
170170
try await self.init(
@@ -189,11 +189,7 @@ extension SwiftPMWorkspace {
189189
/// (Re-)load the package settings by parsing the manifest and resolving all the targets and
190190
/// dependencies.
191191
func reloadPackage() async throws {
192-
reloadPackageStatusCallback(.start)
193-
defer {
194-
reloadPackageStatusCallback(.end)
195-
}
196-
192+
await reloadPackageStatusCallback(.start)
197193

198194
let observabilitySystem = ObservabilitySystem({ scope, diagnostic in
199195
log(diagnostic.description, level: diagnostic.severity.asLogLevel)
@@ -241,10 +237,14 @@ extension SwiftPMWorkspace {
241237
return td
242238
})
243239

244-
guard let delegate = self.delegate else { return }
240+
guard let delegate = self.delegate else {
241+
await reloadPackageStatusCallback(.end)
242+
return
243+
}
245244
let changedFiles = Set<DocumentURI>(self.watchedFiles.keys)
246245
await delegate.fileBuildSettingsChanged(changedFiles)
247246
await delegate.fileHandlingCapabilityChanged()
247+
await reloadPackageStatusCallback(.end)
248248
}
249249
}
250250

Sources/SourceKitLSP/SourceKitServer.swift

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -691,18 +691,11 @@ extension SourceKitServer {
691691
// Client doesn’t support work done progress
692692
return
693693
}
694-
// FIXME: (async) This can cause out-of-order notifications to be sent to the editor
695-
// if the scheduled tasks change order.
696-
// Make `reloadPackageStatusCallback` async and shift the responsibility for
697-
// guaranteeing in-order calls to `reloadPackageStatusCallback` to
698-
// `SwiftPMWorkspace.reloadPackage` once that method is async.
699-
Task {
700-
switch status {
701-
case .start:
702-
await self.packageLoadingWorkDoneProgress.startProgress(server: self)
703-
case .end:
704-
await self.packageLoadingWorkDoneProgress.endProgress(server: self)
705-
}
694+
switch status {
695+
case .start:
696+
await self.packageLoadingWorkDoneProgress.startProgress(server: self)
697+
case .end:
698+
await self.packageLoadingWorkDoneProgress.endProgress(server: self)
706699
}
707700
}
708701
)

Sources/SourceKitLSP/Workspace.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public final class Workspace {
9999
toolchainRegistry: ToolchainRegistry,
100100
buildSetup: BuildSetup,
101101
indexOptions: IndexOptions = IndexOptions(),
102-
reloadPackageStatusCallback: @escaping (ReloadPackageStatus) -> Void
102+
reloadPackageStatusCallback: @escaping (ReloadPackageStatus) async -> Void
103103
) async throws {
104104
var buildSystem: BuildSystem? = nil
105105
if let rootUrl = rootUri.fileURL, let rootPath = try? AbsolutePath(validating: rootUrl.path) {

0 commit comments

Comments
 (0)