Skip to content

Commit f9b9d39

Browse files
committed
Make actions on markers directly
1 parent 3ab1dc4 commit f9b9d39

File tree

11 files changed

+54
-23
lines changed

11 files changed

+54
-23
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ class PositionContext(positionMap: Map[CodeMarker, (TestFile, Int, Int)]) {
1818
}
1919

2020
def contains(pos: CodeMarker): Boolean = positionMap.contains(pos)
21+
22+
def withPos(marker: CodeMarker, pos: (TestFile, Int, Int)) =
23+
new PositionContext(positionMap.updated(marker, pos))
2124
}
2225

2326
object PositionContext {
Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
11
package dotty.tools.languageserver.util.actions
22

33
import dotty.tools.languageserver.util.embedded.CodeMarker
4-
import dotty.tools.languageserver.util.server.TestFile
54

65
trait ActionOnMarker extends Action {
76

87
def marker: CodeMarker
9-
def onMarker(file: TestFile, line: Int, char: Int): Exec
10-
11-
def execute(): Exec =
12-
onMarker(marker.file, marker.line, marker.character)
138

149
}
Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,30 @@
11
package dotty.tools.languageserver.util.actions
22

33
import dotty.tools.languageserver.util.server.TestFile
4-
import dotty.tools.languageserver.util.CodeRange
4+
import dotty.tools.languageserver.util.{CodeRange, PositionContext}
5+
import dotty.tools.languageserver.util.embedded.CodeMarker
56

67
trait ActionOnRange extends Action {
78

89
def range: CodeRange
9-
def onPosition(file: TestFile, line: Int, char: Int): Exec
10+
def onMarker(marker: CodeMarker): Exec
1011

1112
def execute(): Exec = {
13+
val posCtx = implicitly[PositionContext]
1214
range.check()
1315
val file = range.file
14-
val startLine = range.start.line
15-
val startCharacter = range.start.character
16+
val start = range.start
17+
val startLine = start.line
18+
val startCharacter = start.character
1619
val endLine = range.end.line
1720
val endCharacter = range.end.character
1821
assert(startLine <= endLine)
1922
assert(startLine != endLine || startCharacter < endCharacter)
2023
assert(startLine == endLine, "multiline ranges not supported") // TODO implement multiline
21-
(startCharacter until endCharacter).foreach(char => onPosition(file, startLine, char))
24+
(startCharacter until endCharacter).foreach { char =>
25+
val marker = new CodeMarker(start.name + "-with-offset=" + (char - startCharacter))
26+
implicit def posCtx2: PositionContext = posCtx.withPos(marker, (file, startLine, char))
27+
onMarker(marker)
28+
}
2229
}
2330
}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ import scala.collection.JavaConverters._
88

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

11-
override def onMarker(file: TestFile, line: Int, char: Int): Exec = {
11+
override def execute(): Exec = {
12+
val file: TestFile = marker.file
13+
val line: Int = marker.line
14+
val char: Int = marker.character
1215
val res = implicitly[TestServer].completion(file, line, char)
1316
assert(res.isRight, res)
1417
val cList = res.getRight

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

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

33
import dotty.tools.languageserver.util._
4+
import dotty.tools.languageserver.util.embedded.CodeMarker
45
import dotty.tools.languageserver.util.server.{TestFile, TestServer}
56

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

8-
override def onPosition(file: TestFile, line: Int, char: Int): Exec = {
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
913
val res = implicitly[TestServer].definition(file, line, char)
1014
assert(res.size() == refOpt.size, res)
1115
refOpt.foreach(ref => assert(res.get(0) == ref.toLSPLocation, res))

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

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

3+
import dotty.tools.languageserver.util.embedded.CodeMarker
34
import dotty.tools.languageserver.util.server.{TestFile, TestServer}
45
import dotty.tools.languageserver.util.{CodeRange, PositionContext}
56
import org.eclipse.lsp4j._
@@ -8,7 +9,10 @@ import scala.collection.JavaConverters._
89

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

11-
override def onPosition(file: TestFile, line: Int, char: Int): Exec = {
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
1216
val (refs, kinds) = highs.unzip
1317
val res = implicitly[TestServer].documentHighlight(file, line, char)
1418
assert(res.size() == refs.size, res)

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ import scala.collection.JavaConverters._
88

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

11-
override def onMarker(file: TestFile, line: Int, char: Int): Exec = {
11+
override def execute(): Exec = {
12+
val file: TestFile = marker.file
13+
val line: Int = marker.line
14+
val char: Int = marker.character
1215
val res = implicitly[TestServer].documentSymbol(file)
1316
assert(res.size() == symbols.size, res)
1417
for ((symInfo, (name, kind, range)) <- res.asScala.zip(symbols)) {

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

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

3+
import dotty.tools.languageserver.util.embedded.CodeMarker
34
import dotty.tools.languageserver.util.server.{TestFile, TestServer}
45
import dotty.tools.languageserver.util.{CodeRange, PositionContext}
56

67
class CodeHover(val range: CodeRange, expected: String) extends ActionOnRange {
78

8-
override def onPosition(file: TestFile, line: Int, char: Int): Exec = {
9-
val obj = implicitly[TestServer].hover(file, line, char)
10-
assert(obj.getRange == null)
11-
if (expected == "") assert(obj.getContents == null, "Expected null contents in " + obj)
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)
14+
assert(res.getRange == null)
15+
if (expected == "") assert(res.getContents == null, "Expected null contents in " + res)
1216
else {
13-
assert(obj.getContents.size() == 1, obj)
14-
val content = obj.getContents.get(0)
17+
assert(res.getContents.size() == 1, res)
18+
val content = res.getContents.get(0)
1519
assert(content.isLeft, "Expected left but was " + content)
1620
assert(content.getLeft == expected, s"Expected $expected but was ${content.getLeft}")
1721
}

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

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

3+
import dotty.tools.languageserver.util.embedded.CodeMarker
34
import dotty.tools.languageserver.util.server.{TestFile, TestServer}
45
import dotty.tools.languageserver.util.{CodeRange, PositionContext}
56

67
import scala.collection.JavaConverters._
78

89
class CodeReferences(val range: CodeRange, refs: List[CodeRange], withDecl: Boolean) extends ActionOnRange {
9-
override def onPosition(file: TestFile, line: Int, char: Int): Exec = {
10+
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
1015
val res = implicitly[TestServer].references(file, line, char, withDecl)
1116
assert(res.size() == refs.size)
1217
res.asScala.zip(refs).foreach { case (loc, ref) => assert(loc == ref.toLSPLocation, res) }

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ import scala.collection.JavaConverters._
88

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

11-
override def onMarker(file: TestFile, line: Int, char: Int): Exec = {
11+
override def execute(): Exec = {
12+
val file: TestFile = marker.file
13+
val line: Int = marker.line
14+
val char: Int = marker.character
1215
val res = implicitly[TestServer].rename(file, line, char, newName)
1316
assert(res.getDocumentChanges == null, res)
1417
val editItems = res.getChanges.values().asScala.flatMap(_.asScala) // TDO use a Map

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import org.eclipse.lsp4j._
88
import PositionContext._
99

1010
/** Used to mark positions in the code */
11-
class CodeMarker(name: String) extends Embedded {
11+
class CodeMarker(val name: String) extends Embedded {
1212

1313
def to(other: CodeMarker): CodeRange = CodeRange(this, other)
1414

0 commit comments

Comments
 (0)