@@ -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