@@ -288,7 +288,7 @@ class DottyLanguageServer extends LanguageServer
288
288
(Nil , Include .overriding)
289
289
}
290
290
val defs = Interactive .namedTrees(trees, include, sym)
291
- defs.map (d => location(d.namePos)).asJava
291
+ defs.flatMap (d => location(d.namePos)).asJava
292
292
}
293
293
}
294
294
@@ -311,7 +311,7 @@ class DottyLanguageServer extends LanguageServer
311
311
Include .references | Include .overriding | (if (includeDeclaration) Include .definitions else 0 )
312
312
val refs = Interactive .findTreesMatching(trees, includes, sym)
313
313
314
- refs.map (ref => location(ref.namePos)).asJava
314
+ refs.flatMap (ref => location(ref.namePos)).asJava
315
315
}
316
316
}
317
317
@@ -331,7 +331,10 @@ class DottyLanguageServer extends LanguageServer
331
331
Include .references | Include .definitions | Include .linkedClass | Include .overriding
332
332
val refs = Interactive .findTreesMatching(trees, includes, sym)
333
333
334
- val changes = refs.groupBy(ref => toUri(ref.source).toString).mapValues(_.map(ref => new TextEdit (range(ref.namePos), newName)).asJava)
334
+ val changes = refs.groupBy(ref => toUri(ref.source).toString)
335
+ .mapValues(refs =>
336
+ refs.flatMap(ref =>
337
+ range(ref.namePos).map(nameRange => new TextEdit (nameRange, newName))).asJava)
335
338
336
339
new WorkspaceEdit (changes.asJava)
337
340
}
@@ -349,9 +352,10 @@ class DottyLanguageServer extends LanguageServer
349
352
if (sym == NoSymbol ) Nil .asJava
350
353
else {
351
354
val refs = Interactive .namedTrees(uriTrees, Include .references | Include .overriding, sym)
352
- ( for (ref <- refs if ref.namePos.exists)
353
- yield new DocumentHighlight (range(ref.namePos), DocumentHighlightKind .Read )
354
- ).asJava
355
+ (for {
356
+ ref <- refs
357
+ nameRange <- range(ref.namePos)
358
+ } yield new DocumentHighlight (nameRange, DocumentHighlightKind .Read )).asJava
355
359
}
356
360
}
357
361
@@ -382,7 +386,10 @@ class DottyLanguageServer extends LanguageServer
382
386
val uriTrees = driver.openedTrees(uri)
383
387
384
388
val defs = Interactive .namedTrees(uriTrees, includeReferences = false , _ => true )
385
- defs.map(d => JEither .forLeft(symbolInfo(d.tree.symbol, d.namePos))).asJava
389
+ (for {
390
+ d <- defs
391
+ info <- symbolInfo(d.tree.symbol, d.namePos)
392
+ } yield JEither .forLeft(info)).asJava
386
393
}
387
394
388
395
override def symbol (params : WorkspaceSymbolParams ) = computeAsync { cancelToken =>
@@ -393,7 +400,7 @@ class DottyLanguageServer extends LanguageServer
393
400
394
401
val trees = driver.allTrees
395
402
val defs = Interactive .namedTrees(trees, includeReferences = false , nameSubstring = query)
396
- defs.map (d => symbolInfo(d.tree.symbol, d.namePos))
403
+ defs.flatMap (d => symbolInfo(d.tree.symbol, d.namePos))
397
404
}.asJava
398
405
}
399
406
@@ -427,15 +434,18 @@ object DottyLanguageServer {
427
434
}
428
435
429
436
/** Convert a SourcePosition to an lsp4j.Range */
430
- def range (p : SourcePosition ): lsp4j.Range =
431
- new lsp4j.Range (
432
- new lsp4j.Position (p.startLine, p.startColumn),
433
- new lsp4j.Position (p.endLine, p.endColumn)
434
- )
437
+ def range (p : SourcePosition ): Option [lsp4j.Range ] =
438
+ if (p.exists)
439
+ Some (new lsp4j.Range (
440
+ new lsp4j.Position (p.startLine, p.startColumn),
441
+ new lsp4j.Position (p.endLine, p.endColumn)
442
+ ))
443
+ else
444
+ None
435
445
436
446
/** Convert a SourcePosition to an lsp4.Location */
437
- def location (p : SourcePosition ): lsp4j.Location =
438
- new lsp4j.Location (toUri(p.source).toString, range(p ))
447
+ def location (p : SourcePosition ): Option [ lsp4j.Location ] =
448
+ range(p).map(r => new lsp4j.Location (toUri(p.source).toString, r ))
439
449
440
450
/** Convert a MessageContainer to an lsp4j.Diagnostic */
441
451
def diagnostic (mc : MessageContainer ): Option [lsp4j.Diagnostic ] =
@@ -457,8 +467,9 @@ object DottyLanguageServer {
457
467
}
458
468
459
469
val code = mc.contained().errorId.errorNumber.toString
460
- Some (new lsp4j.Diagnostic (
461
- range(mc.pos), mc.message, severity(mc.level), /* source =*/ " " , code))
470
+ range(mc.pos).map(r =>
471
+ new lsp4j.Diagnostic (
472
+ r, mc.message, severity(mc.level), /* source =*/ " " , code))
462
473
}
463
474
464
475
/** Create an lsp4j.CompletionItem from a Symbol */
@@ -506,7 +517,7 @@ object DottyLanguageServer {
506
517
}
507
518
508
519
/** Create an lsp4j.SymbolInfo from a Symbol and a SourcePosition */
509
- def symbolInfo (sym : Symbol , pos : SourcePosition )(implicit ctx : Context ): lsp4j.SymbolInformation = {
520
+ def symbolInfo (sym : Symbol , pos : SourcePosition )(implicit ctx : Context ): Option [ lsp4j.SymbolInformation ] = {
510
521
def symbolKind (sym : Symbol )(implicit ctx : Context ): lsp4j.SymbolKind = {
511
522
import lsp4j .{SymbolKind => SK }
512
523
@@ -531,6 +542,6 @@ object DottyLanguageServer {
531
542
else
532
543
null
533
544
534
- new lsp4j.SymbolInformation (name, symbolKind(sym), location(pos) , containerName)
545
+ location(pos).map(l => new lsp4j.SymbolInformation (name, symbolKind(sym), l , containerName) )
535
546
}
536
547
}
0 commit comments