Skip to content

Commit 506d699

Browse files
committed
Cancel worksheet execution on didChange
1 parent 5b467f5 commit 506d699

File tree

1 file changed

+20
-14
lines changed

1 file changed

+20
-14
lines changed

language-server/src/dotty/tools/languageserver/DottyLanguageServer.scala

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,6 @@ class DottyLanguageServer extends LanguageServer
5959
private[this] var myClient: WorksheetClient = _
6060
def client: WorksheetClient = myClient
6161

62-
private[this] val worksheets: ConcurrentHashMap[URI, CompletableFuture[_]] = new ConcurrentHashMap()
63-
6462
private[this] var myDrivers: mutable.Map[ProjectConfig, InteractiveDriver] = _
6563

6664
def drivers: Map[ProjectConfig, InteractiveDriver] = thisServer.synchronized {
@@ -198,25 +196,33 @@ class DottyLanguageServer extends LanguageServer
198196
diags.flatMap(diagnostic(_, positionMapper)).asJava))
199197
}
200198

201-
override def didChange(params: DidChangeTextDocumentParams): Unit = thisServer.synchronized {
202-
checkMemory()
199+
override def didChange(params: DidChangeTextDocumentParams): Unit = {
203200
val document = params.getTextDocument
204201
val uri = new URI(document.getUri)
205-
val driver = driverFor(uri)
206202
val worksheetMode = isWorksheet(uri)
207203

208-
val change = params.getContentChanges.get(0)
209-
assert(change.getRange == null, "TextDocumentSyncKind.Incremental support is not implemented")
204+
if (worksheetMode) {
205+
Option(worksheets.get(uri)).foreach(_.cancel(true))
206+
}
210207

211-
val (text, positionMapper) =
212-
if (worksheetMode) (wrapWorksheet(change.getText), Some(toUnwrappedPosition _))
213-
else (change.getText, None)
208+
thisServer.synchronized {
209+
checkMemory()
214210

215-
val diags = driver.run(uri, text)
211+
val driver = driverFor(uri)
216212

217-
client.publishDiagnostics(new PublishDiagnosticsParams(
218-
document.getUri,
219-
diags.flatMap(diagnostic(_, positionMapper)).asJava))
213+
val change = params.getContentChanges.get(0)
214+
assert(change.getRange == null, "TextDocumentSyncKind.Incremental support is not implemented")
215+
216+
val (text, positionMapper) =
217+
if (worksheetMode) (wrapWorksheet(change.getText), Some(toUnwrappedPosition _))
218+
else (change.getText, None)
219+
220+
val diags = driver.run(uri, text)
221+
222+
client.publishDiagnostics(new PublishDiagnosticsParams(
223+
document.getUri,
224+
diags.flatMap(diagnostic(_, positionMapper)).asJava))
225+
}
220226
}
221227

222228
override def didClose(params: DidCloseTextDocumentParams): Unit = thisServer.synchronized {

0 commit comments

Comments
 (0)