Skip to content

Commit 5f8d2d4

Browse files
committed
Mark deprecated symbols as such in completion
1 parent 8b80e75 commit 5f8d2d4

File tree

4 files changed

+32
-10
lines changed

4 files changed

+32
-10
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import scala.io.Codec
1919
import dotc._
2020
import ast.{Trees, tpd}
2121
import core._, core.Decorators.{sourcePos => _, _}
22+
import Annotations.AnnotInfo
2223
import Comments._, Constants._, Contexts._, Flags._, Names._, NameOps._, Symbols._, SymDenotations._, Trees._, Types._
2324
import classpath.ClassPathEntries
2425
import reporting._, reporting.diagnostic.{Message, MessageContainer, messages}
@@ -799,6 +800,7 @@ object DottyLanguageServer {
799800
ParsedComment.docOf(sym).foreach { doc =>
800801
item.setDocumentation(markupContent(doc.renderAsMarkdown))
801802
}
803+
item.setDeprecated(sym.isDeprecated)
802804
item.setKind(completionItemKind(sym))
803805
item
804806
}

language-server/test/dotty/tools/languageserver/CompletionTest.scala

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package dotty.tools.languageserver
22

3-
import org.junit.Assert.{assertTrue, assertFalse}
3+
import org.junit.Assert.{assertEquals, assertTrue, assertFalse}
44
import org.junit.Test
55
import org.eclipse.lsp4j.CompletionItemKind._
66

77
import dotty.tools.languageserver.util.Code._
8+
import dotty.tools.languageserver.util.actions.CodeCompletion
89

910
class CompletionTest {
1011

@@ -32,7 +33,8 @@ class CompletionTest {
3233
withSources(
3334
code"""object Foo { class MyClass }""",
3435
code"""import Foo.${m1}"""
35-
).completion(m1, results => {
36+
).completion(m1, completionItems => {
37+
val results = CodeCompletion.simplifyResults(completionItems)
3638
val myClass = ("MyClass", Class, "Foo.MyClass")
3739
assertTrue(results.contains(("MyClass", Class, "Foo.MyClass")))
3840

@@ -143,4 +145,18 @@ class CompletionTest {
143145
code"""import java.io.{FileDesc${m1} => Foo}""".withSource
144146
.completion(m1, Set(("FileDescriptor", Class, "java.io.FileDescriptor")))
145147
}
148+
149+
@Test def markDeprecatedSymbols: Unit = {
150+
code"""object Foo {
151+
@deprecated
152+
val bar = 0
153+
}
154+
import Foo.ba${m1}""".withSource
155+
.completion(m1, results => {
156+
assertEquals(1, results.size)
157+
val result = results.head
158+
assertEquals("bar", result.getLabel)
159+
assertTrue("bar was not deprecated", result.getDeprecated)
160+
})
161+
}
146162
}

language-server/test/dotty/tools/languageserver/util/CodeTester.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import dotty.tools.languageserver.util.server.{TestFile, TestServer}
77

88
import dotty.tools.dotc.util.Signatures.Signature
99

10-
import org.eclipse.lsp4j.{CompletionItemKind, DocumentHighlightKind}
10+
import org.eclipse.lsp4j.{CompletionItem, CompletionItemKind, DocumentHighlightKind}
1111

1212
import org.junit.Assert.assertEquals
1313

@@ -88,7 +88,7 @@ class CodeTester(projects: List[Project]) {
8888
* @see dotty.tools.languageserver.util.actions.CodeCompletion
8989
*/
9090
def completion(marker: CodeMarker, expected: Set[(String, CompletionItemKind, String)]): this.type =
91-
completion(marker, assertEquals(expected, _))
91+
completion(marker, results => assertEquals(expected, CodeCompletion.simplifyResults(results)))
9292

9393
/**
9494
* Requests completion at the position defined by `marker`, and pass the results to
@@ -99,7 +99,7 @@ class CodeTester(projects: List[Project]) {
9999
*
100100
* @see dotty.tools.languageserver.util.actions.CodeCompletion
101101
*/
102-
def completion(marker: CodeMarker, checkResults: Set[(String, CompletionItemKind, String)] => Unit): this.type =
102+
def completion(marker: CodeMarker, checkResults: Set[CompletionItem] => Unit): this.type =
103103
doAction(new CodeCompletion(marker, checkResults))
104104

105105
/**

language-server/test/dotty/tools/languageserver/util/actions/CodeCompletion.scala

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import dotty.tools.languageserver.util.PositionContext
44
import dotty.tools.languageserver.util.embedded.CodeMarker
55
import dotty.tools.languageserver.util.server.TestFile
66

7-
import org.eclipse.lsp4j.CompletionItemKind
7+
import org.eclipse.lsp4j.{CompletionItem, CompletionItemKind}
88
import org.junit.Assert.{assertEquals, assertFalse, assertTrue}
99

1010
import scala.collection.JavaConverters._
@@ -18,19 +18,23 @@ import scala.collection.JavaConverters._
1818
* expectations.
1919
*/
2020
class CodeCompletion(override val marker: CodeMarker,
21-
checkResults: Set[(String, CompletionItemKind, String)] => Unit)
21+
checkResults: Set[CompletionItem] => Unit)
2222
extends ActionOnMarker {
2323

2424
override def execute(): Exec[Unit] = {
2525
val result = server.completion(marker.toCompletionParams).get()
2626
assertTrue(s"Completion results were not 'right': $result", result.isRight)
2727
assertFalse(s"Completion results were 'incomplete': $result", result.getRight.isIncomplete)
28-
val completionResults = result.getRight.getItems.asScala.toSet.map { item =>
29-
(item.getLabel, item.getKind, item.getDetail)
30-
}
28+
val completionResults = result.getRight.getItems.asScala.toSet
3129
checkResults(completionResults)
3230
}
3331

3432
override def show: PositionContext.PosCtx[String] =
3533
s"CodeCompletion(${marker.show}, $checkResults)"
3634
}
35+
36+
object CodeCompletion {
37+
/** Extract the (label, kind, details) of each `CompletionItem`. */
38+
def simplifyResults(items: Set[CompletionItem]): Set[(String, CompletionItemKind, String)] =
39+
items.map(item => (item.getLabel, item.getKind, item.getDetail))
40+
}

0 commit comments

Comments
 (0)