Skip to content

Commit 38ffd87

Browse files
committed
Fix ranged semantic tokens requests
1 parent dd37412 commit 38ffd87

File tree

2 files changed

+14
-14
lines changed

2 files changed

+14
-14
lines changed

server/src/main/kotlin/org/javacs/kt/semantictokens/SemanticTokens.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,10 @@ private fun elementTokens(element: PsiElement, bindingContext: BindingContext, r
115115
val file = element.containingFile
116116
val textRange = range?.let { TextRange(offset(file.text, it.start), offset(file.text, it.end)) }
117117
return element
118-
.preOrderTraversal { elem -> textRange?.let { it.contains(elem.textRange) } ?: true }
118+
// TODO: Ideally we would like to cut-off subtrees outside our range, but this doesn't quite seem to work
119+
// .preOrderTraversal { elem -> textRange?.let { it.contains(elem.textRange) } ?: true }
120+
.preOrderTraversal()
121+
.filter { elem -> textRange?.let { it.contains(elem.textRange) } ?: true }
119122
.mapNotNull { elementToken(it, bindingContext) }
120123
}
121124

server/src/test/kotlin/org/javacs/kt/SemanticTokensTest.kt

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,38 +15,35 @@ class SemanticTokensTest : SingleFileTestFixture("semantictokens", "SemanticToke
1515
val classLine = 4
1616
val funLine = 6
1717

18-
val expectedVar = encodeTokens(sequenceOf(
18+
val expectedVar = sequenceOf(
1919
SemanticToken(range(varLine, 5, varLine, 13), SemanticTokenType.PROPERTY, setOf(SemanticTokenModifier.DECLARATION)), // variable
20-
))
21-
val expectedConst = encodeTokens(sequenceOf(
20+
)
21+
val expectedConst = sequenceOf(
2222
SemanticToken(range(constLine, 5, constLine, 13), SemanticTokenType.PROPERTY, setOf(SemanticTokenModifier.DECLARATION, SemanticTokenModifier.READONLY)), // constant
2323
SemanticToken(range(constLine, 15, constLine, 21), SemanticTokenType.CLASS), // String
2424
SemanticToken(range(constLine, 24, constLine, 40), SemanticTokenType.STRING), // "test $variable"
2525
SemanticToken(range(constLine, 30, constLine, 39), SemanticTokenType.INTERPOLATION_ENTRY), // $variable
2626
SemanticToken(range(constLine, 31, constLine, 39), SemanticTokenType.PROPERTY), // variable
27-
))
28-
val expectedClass = encodeTokens(sequenceOf(
27+
)
28+
val expectedClass = sequenceOf(
2929
SemanticToken(range(classLine, 12, classLine, 16), SemanticTokenType.CLASS, setOf(SemanticTokenModifier.DECLARATION)), // Type
3030
SemanticToken(range(classLine, 21, classLine, 29), SemanticTokenType.PARAMETER, setOf(SemanticTokenModifier.DECLARATION, SemanticTokenModifier.READONLY)), // property
3131
SemanticToken(range(classLine, 31, classLine, 34), SemanticTokenType.CLASS), // Int
32-
))
33-
val expectedFun = encodeTokens(sequenceOf(
32+
)
33+
val expectedFun = sequenceOf(
3434
SemanticToken(range(funLine, 5, funLine, 6), SemanticTokenType.FUNCTION, setOf(SemanticTokenModifier.DECLARATION)), // f
3535
SemanticToken(range(funLine, 7, funLine, 8), SemanticTokenType.PARAMETER, setOf(SemanticTokenModifier.DECLARATION, SemanticTokenModifier.READONLY)), // x
3636
SemanticToken(range(funLine, 10, funLine, 13), SemanticTokenType.CLASS), // Int?
3737
SemanticToken(range(funLine, 24, funLine, 27), SemanticTokenType.CLASS), // Int
3838
SemanticToken(range(funLine, 30, funLine, 31), SemanticTokenType.FUNCTION), // f
3939
SemanticToken(range(funLine, 32, funLine, 33), SemanticTokenType.VARIABLE, setOf(SemanticTokenModifier.READONLY)), // x
40-
))
40+
)
4141

42-
val partialExpected = expectedConst + expectedClass
42+
val partialExpected = encodeTokens(expectedConst + expectedClass)
4343
val partialResponse = languageServer.textDocumentService.semanticTokensRange(semanticTokensRangeParams(file, range(constLine, 0, classLine + 1, 0))).get()!!
44-
// DEBUG
45-
println(partialExpected)
46-
println(partialResponse.data)
4744
assertThat(partialResponse.data, contains(*partialExpected.toTypedArray()))
4845

49-
val fullExpected = expectedVar + expectedConst + expectedClass + expectedFun
46+
val fullExpected = encodeTokens(expectedVar + expectedConst + expectedClass + expectedFun)
5047
val fullResponse = languageServer.textDocumentService.semanticTokensFull(semanticTokensParams(file)).get()!!
5148
assertThat(fullResponse.data, contains(*fullExpected.toTypedArray()))
5249
}

0 commit comments

Comments
 (0)