Skip to content

Commit b3729ff

Browse files
committed
Remove a layer of indirection
1 parent f9b9d39 commit b3729ff

14 files changed

+52
-101
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ case class CodeRange(start: CodeMarker, end: CodeMarker) {
3232

3333
def toLSPRange: PosCtx[Range] = {
3434
check()
35-
new Range(start.toLSP, end.toLSP)
35+
new Range(start.toPosition, end.toPosition)
3636
}
3737

3838
def toLSPLocation: PosCtx[Location] = {

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package dotty.tools.languageserver.util
22

3-
import dotty.tools.dotc.printing.Highlighting
43
import dotty.tools.languageserver.util.Code.SourceWithPositions
54
import dotty.tools.languageserver.util.actions._
65
import dotty.tools.languageserver.util.embedded.CodeMarker
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package dotty.tools.languageserver.util.actions
22

3+
import dotty.tools.languageserver.DottyLanguageServer
34
import dotty.tools.languageserver.util.PositionContext
45
import dotty.tools.languageserver.util.server.TestServer
56

7+
import PositionContext._
8+
69
trait Action {
7-
type Exec = implicit (TestServer, PositionContext) => Unit
8-
def execute(): Exec
9-
def show: PositionContext.PosCtx[String]
10+
type Exec[T] = implicit (TestServer, PositionContext) => T
11+
def execute(): Exec[Unit]
12+
def show: PosCtx[String]
13+
def server: Exec[DottyLanguageServer] = implicitly[TestServer].server
1014
}

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package dotty.tools.languageserver.util.actions
22

3-
import dotty.tools.languageserver.util.server.TestFile
43
import dotty.tools.languageserver.util.{CodeRange, PositionContext}
54
import dotty.tools.languageserver.util.embedded.CodeMarker
65

76
trait ActionOnRange extends Action {
87

98
def range: CodeRange
10-
def onMarker(marker: CodeMarker): Exec
9+
def onMarker(marker: CodeMarker): Exec[Unit]
1110

12-
def execute(): Exec = {
11+
def execute(): Exec[Unit] = {
1312
val posCtx = implicitly[PositionContext]
1413
range.check()
1514
val file = range.file
@@ -18,8 +17,8 @@ trait ActionOnRange extends Action {
1817
val startCharacter = start.character
1918
val endLine = range.end.line
2019
val endCharacter = range.end.character
21-
assert(startLine <= endLine)
22-
assert(startLine != endLine || startCharacter < endCharacter)
20+
assert(startLine <= endLine, "Start of range should be before end " + range.show)
21+
assert(startLine != endLine || startCharacter < endCharacter, "Start of range should be before end " + range.show)
2322
assert(startLine == endLine, "multiline ranges not supported") // TODO implement multiline
2423
(startCharacter until endCharacter).foreach { char =>
2524
val marker = new CodeMarker(start.name + "-with-offset=" + (char - startCharacter))

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,14 @@ package dotty.tools.languageserver.util.actions
22

33
import dotty.tools.languageserver.util.PositionContext
44
import dotty.tools.languageserver.util.embedded.CodeMarker
5-
import dotty.tools.languageserver.util.server.{TestFile, TestServer}
5+
import dotty.tools.languageserver.util.server.TestFile
66

77
import scala.collection.JavaConverters._
88

99
class CodeCompletion(val marker: CodeMarker, completions: List[(String, String, String)]) extends ActionOnMarker {
1010

11-
override def execute(): Exec = {
12-
val file: TestFile = marker.file
13-
val line: Int = marker.line
14-
val char: Int = marker.character
15-
val res = implicitly[TestServer].completion(file, line, char)
11+
override def execute(): Exec[Unit] = {
12+
val res = server.completion(marker.toTextDocumentPositionParams).get()
1613
assert(res.isRight, res)
1714
val cList = res.getRight
1815
assert(!cList.isIncomplete, res)

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,11 @@ package dotty.tools.languageserver.util.actions
22

33
import dotty.tools.languageserver.util._
44
import dotty.tools.languageserver.util.embedded.CodeMarker
5-
import dotty.tools.languageserver.util.server.{TestFile, TestServer}
65

76
class CodeDefinition(val range: CodeRange, refOpt: Option[CodeRange]) extends ActionOnRange {
87

9-
override def onMarker(marker: CodeMarker): Exec = {
10-
val file: TestFile = marker.file
11-
val line: Int = marker.line
12-
val char: Int = marker.character
13-
val res = implicitly[TestServer].definition(file, line, char)
8+
override def onMarker(marker: CodeMarker): Exec[Unit] = {
9+
val res = server.definition(marker.toTextDocumentPositionParams).get()
1410
assert(res.size() == refOpt.size, res)
1511
refOpt.foreach(ref => assert(res.get(0) == ref.toLSPLocation, res))
1612
}

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,16 @@
11
package dotty.tools.languageserver.util.actions
22

33
import dotty.tools.languageserver.util.embedded.CodeMarker
4-
import dotty.tools.languageserver.util.server.{TestFile, TestServer}
54
import dotty.tools.languageserver.util.{CodeRange, PositionContext}
65
import org.eclipse.lsp4j._
76

87
import scala.collection.JavaConverters._
98

109
class CodeDocumentHighlight(val range: CodeRange, highs: Seq[(CodeRange, String)]) extends ActionOnRange {
1110

12-
override def onMarker(marker: CodeMarker): Exec = {
13-
val file: TestFile = marker.file
14-
val line: Int = marker.line
15-
val char: Int = marker.character
11+
override def onMarker(marker: CodeMarker): Exec[Unit] = {
1612
val (refs, kinds) = highs.unzip
17-
val res = implicitly[TestServer].documentHighlight(file, line, char)
13+
val res = server.documentHighlight(marker.toTextDocumentPositionParams).get()
1814
assert(res.size() == refs.size, res)
1915
assert(refs.size == kinds.length, res)
2016
res.asScala.zip(refs).zip(kinds).foreach { case ((dhl, ref), kind) =>

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

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

33
import dotty.tools.languageserver.util.embedded.CodeMarker
4-
import dotty.tools.languageserver.util.server.{TestFile, TestServer}
54
import dotty.tools.languageserver.util.{CodeRange, PositionContext}
65

76
import scala.collection.JavaConverters._
87

98
class CodeDocumentSymbol(val marker: CodeMarker, symbols: Seq[(String, String, CodeRange)]) extends ActionOnMarker {
109

11-
override def execute(): Exec = {
12-
val file: TestFile = marker.file
13-
val line: Int = marker.line
14-
val char: Int = marker.character
15-
val res = implicitly[TestServer].documentSymbol(file)
10+
override def execute(): Exec[Unit] = {
11+
val res = server.documentSymbol(marker.toDocumentSymbolParams).get()
1612
assert(res.size() == symbols.size, res)
1713
for ((symInfo, (name, kind, range)) <- res.asScala.zip(symbols)) {
1814
assert(symInfo.getName == name, res)
Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
11
package dotty.tools.languageserver.util.actions
22

33
import dotty.tools.languageserver.util.embedded.CodeMarker
4-
import dotty.tools.languageserver.util.server.{TestFile, TestServer}
54
import dotty.tools.languageserver.util.{CodeRange, PositionContext}
65

76
class CodeHover(val range: CodeRange, expected: String) extends ActionOnRange {
87

9-
override def onMarker(marker: CodeMarker): Exec = {
10-
val file: TestFile = marker.file
11-
val line: Int = marker.line
12-
val char: Int = marker.character
13-
val res = implicitly[TestServer].hover(file, line, char)
8+
override def onMarker(marker: CodeMarker): Exec[Unit] = {
9+
val res = server.hover(marker.toTextDocumentPositionParams).get()
1410
assert(res.getRange == null)
1511
if (expected == "") assert(res.getContents == null, "Expected null contents in " + res)
1612
else {
@@ -21,6 +17,6 @@ class CodeHover(val range: CodeRange, expected: String) extends ActionOnRange {
2117
}
2218
}
2319

24-
override def show: PositionContext.PosCtx[String] =
25-
s"CodeHover(${range.show}, $expected"
20+
override def show: PositionContext.PosCtx[String] =
21+
s"CodeHover(${range.show}, $expected"
2622
}

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

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

33
import dotty.tools.languageserver.util.embedded.CodeMarker
4-
import dotty.tools.languageserver.util.server.{TestFile, TestServer}
54
import dotty.tools.languageserver.util.{CodeRange, PositionContext}
65

76
import scala.collection.JavaConverters._
87

98
class CodeReferences(val range: CodeRange, refs: List[CodeRange], withDecl: Boolean) extends ActionOnRange {
109

11-
override def onMarker(marker: CodeMarker): Exec = {
12-
val file: TestFile = marker.file
13-
val line: Int = marker.line
14-
val char: Int = marker.character
15-
val res = implicitly[TestServer].references(file, line, char, withDecl)
10+
override def onMarker(marker: CodeMarker): Exec[Unit] = {
11+
val res = server.references(marker.toReferenceParams(withDecl)).get()
1612
assert(res.size() == refs.size)
1713
res.asScala.zip(refs).foreach { case (loc, ref) => assert(loc == ref.toLSPLocation, res) }
1814
}

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,13 @@ package dotty.tools.languageserver.util.actions
22

33
import dotty.tools.languageserver.util.embedded.CodeMarker
44
import dotty.tools.languageserver.util.{CodeRange, PositionContext}
5-
import dotty.tools.languageserver.util.server.{TestFile, TestServer}
65

76
import scala.collection.JavaConverters._
87

98
class CodeRename(val marker: CodeMarker, newName: String, expected: List[CodeRange]) extends ActionOnMarker {
109

11-
override def execute(): Exec = {
12-
val file: TestFile = marker.file
13-
val line: Int = marker.line
14-
val char: Int = marker.character
15-
val res = implicitly[TestServer].rename(file, line, char, newName)
10+
override def execute(): Exec[Unit] = {
11+
val res = server.rename(marker.toRenameParams(newName)).get()
1612
assert(res.getDocumentChanges == null, res)
1713
val editItems = res.getChanges.values().asScala.flatMap(_.asScala) // TDO use a Map
1814
assert(expected.forall { exp =>

language-server/test/dotty/tools/languageserver/util/embedded/CodeMarker.scala

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,31 @@ class CodeMarker(val name: String) extends Embedded {
1313
def to(other: CodeMarker): CodeRange = CodeRange(this, other)
1414

1515
def file: PosCtx[TestFile] = implicitly[PositionContext].positionOf(this)._1
16+
1617
def line: PosCtx[Int] = implicitly[PositionContext].positionOf(this)._2
18+
1719
def character: PosCtx[Int] = implicitly[PositionContext].positionOf(this)._3
1820

19-
def toLSP: PosCtx[Position] = new Position(line, character)
21+
def toPosition: PosCtx[Position] = new Position(line, character)
22+
23+
def toTextDocumentPositionParams: PosCtx[TextDocumentPositionParams] =
24+
new TextDocumentPositionParams(toTextDocumentIdentifier, toPosition)
25+
26+
def toDocumentSymbolParams: PosCtx[DocumentSymbolParams] =
27+
new DocumentSymbolParams(toTextDocumentIdentifier)
28+
29+
def toRenameParams(newName: String): PosCtx[RenameParams] =
30+
new RenameParams(toTextDocumentIdentifier, toPosition, newName)
31+
32+
def toTextDocumentIdentifier: PosCtx[TextDocumentIdentifier] =
33+
new TextDocumentIdentifier(file.uri)
34+
35+
def toReferenceParams(withDecl: Boolean): PosCtx[ReferenceParams] = {
36+
val rp = new ReferenceParams(new ReferenceContext(withDecl))
37+
rp.setTextDocument(toTextDocumentIdentifier)
38+
rp.setPosition(toPosition)
39+
rp
40+
}
2041

2142
def show: PosCtx[String] = s"($name,line=$line,char=$character)"
2243
override def toString: String = s"CodePosition($name)"

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import org.eclipse.lsp4j.TextDocumentIdentifier
66

77
class TestFile(val file: String) extends AnyVal {
88
def uri: String = s"file://${TestFile.sourceDir}/$file"
9-
def textDocumentIdentifier: TextDocumentIdentifier = new TextDocumentIdentifier(uri)
109
}
1110

1211
object TestFile {

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

Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class TestServer(testFolder: Path) {
3333
testFolder.resolve("out").toFile.mkdirs()
3434
new PrintWriter(configFile.toString) { write(dottyIdeJson); close() }
3535

36-
private val server = new DottyLanguageServer
36+
val server = new DottyLanguageServer
3737
private val client = new TestClient
3838
server.connect(client)
3939

@@ -57,48 +57,4 @@ class TestServer(testFolder: Path) {
5757
testFile
5858
}
5959

60-
def definition(file: TestFile, line: Int, character: Int): util.List[Location] =
61-
server.definition(pos(file, line, character)).get().asInstanceOf[util.List[Location]]
62-
63-
def hover(file: TestFile, line: Int, character: Int): Hover =
64-
server.hover(pos(file, line, character)).get()
65-
66-
def references(file: TestFile, line: Int, character: Int, withDecl: Boolean): util.List[Location] = {
67-
val rp = new ReferenceParams()
68-
rp.setContext(new ReferenceContext(withDecl))
69-
rp.setTextDocument(file.textDocumentIdentifier)
70-
rp.setPosition(new Position(line, character))
71-
server.references(rp).get().asInstanceOf[util.List[Location]]
72-
}
73-
74-
def documentHighlight(file: TestFile, line: Int, character: Int): util.List[DocumentHighlight] = {
75-
val tdpp = new TextDocumentPositionParams()
76-
tdpp.setTextDocument(file.textDocumentIdentifier)
77-
tdpp.setPosition(new Position(line, character))
78-
server.documentHighlight(tdpp).get().asInstanceOf[util.List[DocumentHighlight]]
79-
}
80-
81-
def completion(file: TestFile, line: Int, character: Int) =
82-
server.completion(pos(file, line, character)).get()
83-
84-
def rename(file: TestFile, line: Int, character: Int, newName: String) = {
85-
val rp = new RenameParams()
86-
rp.setTextDocument(file.textDocumentIdentifier)
87-
rp.setPosition(new Position(line, character))
88-
rp.setNewName(newName)
89-
server.rename(rp).get()
90-
}
91-
92-
def documentSymbol(file: TestFile) = {
93-
val dsp = new DocumentSymbolParams()
94-
dsp.setTextDocument(file.textDocumentIdentifier)
95-
server.documentSymbol(dsp).get()
96-
}
97-
98-
private def pos(file: TestFile, line: Int, character: Int) = {
99-
val tdpp = new TextDocumentPositionParams
100-
tdpp.setTextDocument(file.textDocumentIdentifier)
101-
tdpp.setPosition(new Position(line, character))
102-
tdpp
103-
}
10460
}

0 commit comments

Comments
 (0)