From d495cc70fcd3044faa4ad386ad3237dab03bcd4b Mon Sep 17 00:00:00 2001 From: Martin Azpillaga Aldalur Date: Tue, 11 Jun 2024 18:25:16 +0200 Subject: [PATCH] initialize capabilities with full semantic legend and use encoding in semantics request --- .../com/strumenta/kuki/languageserver/Main.kt | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/language-server/src/main/kotlin/com/strumenta/kuki/languageserver/Main.kt b/language-server/src/main/kotlin/com/strumenta/kuki/languageserver/Main.kt index 445bcee..10fdd9b 100644 --- a/language-server/src/main/kotlin/com/strumenta/kuki/languageserver/Main.kt +++ b/language-server/src/main/kotlin/com/strumenta/kuki/languageserver/Main.kt @@ -5,6 +5,10 @@ import com.strumenta.kolasu.languageserver.KolasuServer import com.strumenta.kolasu.model.Node import com.strumenta.kuki.ast.* import com.strumenta.kuki.codegenerator.KukiCodeGenerator +import com.strumenta.kuki.semanticHighlighting.SemanticToken +import com.strumenta.kuki.semanticHighlighting.SemanticTokenModifier +import com.strumenta.kuki.semanticHighlighting.SemanticTokenType +import com.strumenta.kuki.semanticHighlighting.encode import org.eclipse.lsp4j.* import org.eclipse.lsp4j.jsonrpc.messages.Either import org.eclipse.lsp4j.jsonrpc.messages.Either3 @@ -45,20 +49,20 @@ class KukiServer : KolasuServer(KukiKolasuParser(), "kuki", listOf("kuki capabilities.setDefinitionProvider(true) capabilities.setReferencesProvider(true) - val semanticHighlighting = SemanticTokensWithRegistrationOptions() - semanticHighlighting.legend = SemanticTokensLegend(listOf("type", "class", "interface", "enum", "function", "variable"), listOf()); - semanticHighlighting.full = Either.forLeft(true) - capabilities.semanticTokensProvider = semanticHighlighting + capabilities.semanticTokensProvider = SemanticTokensWithRegistrationOptions().apply { + legend = SemanticTokensLegend(SemanticTokenType.values().map { it.legendName }, SemanticTokenModifier.values().map { it.legendName }); + full = Either.forLeft(true) + } return CompletableFuture.completedFuture(InitializeResult(capabilities)) } override fun semanticTokensFull(params: SemanticTokensParams): CompletableFuture { - val data = mutableListOf() - val recipe = files[params.textDocument.uri]?.root ?: return CompletableFuture.completedFuture(SemanticTokens(data)) - val p = recipe.name.position ?: return CompletableFuture.completedFuture(SemanticTokens(data)) - data.addAll(listOf(p.start.line - 1, p.start.column, p.end.column - p.start.column, 0, 0)) - return CompletableFuture.completedFuture(SemanticTokens(data)) - } -} + val tokens = mutableListOf() + val recipe = files[params.textDocument.uri]?.root ?: return CompletableFuture.completedFuture(encode(tokens)) + val p = recipe.name.position ?: return CompletableFuture.completedFuture(encode(tokens)) + tokens.add(SemanticToken(p, SemanticTokenType.TYPE, listOf())) + return CompletableFuture.completedFuture(encode(tokens)) + } +} \ No newline at end of file