Skip to content

Commit 0181498

Browse files
committed
Reset cache for reportTasks if needed
1 parent cbc0648 commit 0181498

File tree

3 files changed

+19
-11
lines changed

3 files changed

+19
-11
lines changed

Sources/SourceKitLSP/Swift/DiagnosticReportManager.swift

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,9 @@ actor DiagnosticReportManager {
5858

5959
func diagnosticReport(
6060
for snapshot: DocumentSnapshot,
61-
buildSettings: SwiftCompileCommand?,
62-
useCache: Bool = false
61+
buildSettings: SwiftCompileCommand?
6362
) async throws -> RelatedFullDocumentDiagnosticReport {
64-
if useCache, let report = try await reportTask(for: snapshot.id, buildSettings: buildSettings)?.value {
63+
if let report = try await reportTask(for: snapshot.id, buildSettings: buildSettings)?.value {
6564
return report
6665
}
6766
let reportTask: Task<RelatedFullDocumentDiagnosticReport, Error>
@@ -85,6 +84,13 @@ actor DiagnosticReportManager {
8584
return try await reportTask.value
8685
}
8786

87+
func resetCache() async {
88+
for item in reportTaskCache {
89+
item.reportTask.cancel()
90+
}
91+
reportTaskCache.removeAll()
92+
}
93+
8894
private func requestReport(
8995
with snapshot: DocumentSnapshot,
9096
compilerArgs: [String]

Sources/SourceKitLSP/Swift/SwiftLanguageServer.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@ extension SwiftLanguageServer {
277277

278278
private func reopenDocument(_ snapshot: DocumentSnapshot, _ compileCmd: SwiftCompileCommand?) async {
279279
cancelInFlightPublishDiagnosticsTask(for: snapshot.uri)
280+
await diagnosticReportManager.resetCache()
280281

281282
let keys = self.keys
282283
let path = snapshot.uri.pseudoPath
@@ -324,6 +325,7 @@ extension SwiftLanguageServer {
324325

325326
public func openDocument(_ note: DidOpenTextDocumentNotification) async {
326327
cancelInFlightPublishDiagnosticsTask(for: note.textDocument.uri)
328+
await diagnosticReportManager.resetCache()
327329

328330
let keys = self.keys
329331

@@ -351,6 +353,7 @@ extension SwiftLanguageServer {
351353
public func closeDocument(_ note: DidCloseTextDocumentNotification) async {
352354
cancelInFlightPublishDiagnosticsTask(for: note.textDocument.uri)
353355
inFlightPublishDiagnosticsTasks[note.textDocument.uri] = nil
356+
await diagnosticReportManager.resetCache()
354357

355358
let keys = self.keys
356359

@@ -982,8 +985,7 @@ extension SwiftLanguageServer {
982985
let buildSettings = await self.buildSettings(for: params.textDocument.uri)
983986
let diagnosticReport = try await self.diagnosticReportManager.diagnosticReport(
984987
for: snapshot,
985-
buildSettings: buildSettings,
986-
useCache: true
988+
buildSettings: buildSettings
987989
)
988990

989991
let codeActions = diagnosticReport.items.flatMap { (diag) -> [CodeAction] in

Tests/SourceKitLSPTests/LocalSwiftTests.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ final class LocalSwiftTests: XCTestCase {
8686

8787
testClient.send(
8888
DidChangeTextDocumentNotification(
89-
textDocument: .init(uri, version: 14),
89+
textDocument: .init(uri, version: 15),
9090
contentChanges: [
9191
.init(range: Position(line: 1, utf16index: 0)..<Position(line: 1, utf16index: 3), text: "foo")
9292
]
@@ -105,7 +105,7 @@ final class LocalSwiftTests: XCTestCase {
105105

106106
testClient.send(
107107
DidChangeTextDocumentNotification(
108-
textDocument: .init(uri, version: 15),
108+
textDocument: .init(uri, version: 16),
109109
contentChanges: [
110110
.init(range: Position(line: 1, utf16index: 0)..<Position(line: 1, utf16index: 3), text: "fooTypo")
111111
]
@@ -128,7 +128,7 @@ final class LocalSwiftTests: XCTestCase {
128128

129129
testClient.send(
130130
DidChangeTextDocumentNotification(
131-
textDocument: .init(uri, version: 16),
131+
textDocument: .init(uri, version: 17),
132132
contentChanges: [
133133
.init(
134134
range: nil,
@@ -210,7 +210,7 @@ final class LocalSwiftTests: XCTestCase {
210210

211211
testClient.send(
212212
DidChangeTextDocumentNotification(
213-
textDocument: .init(uri, version: 14),
213+
textDocument: .init(uri, version: 15),
214214
contentChanges: [
215215
.init(range: Position(line: 1, utf16index: 0)..<Position(line: 1, utf16index: 3), text: "foo")
216216
]
@@ -229,7 +229,7 @@ final class LocalSwiftTests: XCTestCase {
229229

230230
testClient.send(
231231
DidChangeTextDocumentNotification(
232-
textDocument: .init(uri, version: 15),
232+
textDocument: .init(uri, version: 16),
233233
contentChanges: [
234234
.init(range: Position(line: 1, utf16index: 0)..<Position(line: 1, utf16index: 3), text: "fooTypo")
235235
]
@@ -251,7 +251,7 @@ final class LocalSwiftTests: XCTestCase {
251251

252252
testClient.send(
253253
DidChangeTextDocumentNotification(
254-
textDocument: .init(uri, version: 16),
254+
textDocument: .init(uri, version: 17),
255255
contentChanges: [
256256
.init(
257257
range: nil,

0 commit comments

Comments
 (0)