diff --git a/LanguageServer/src/main/java/org/nittalab/dtram/languageserver/DTRAMLanguageServer.java b/LanguageServer/src/main/java/org/nittalab/dtram/languageserver/DTRAMLanguageServer.java index 6f68598..dc95a48 100644 --- a/LanguageServer/src/main/java/org/nittalab/dtram/languageserver/DTRAMLanguageServer.java +++ b/LanguageServer/src/main/java/org/nittalab/dtram/languageserver/DTRAMLanguageServer.java @@ -10,12 +10,12 @@ public class DTRAMLanguageServer implements LanguageServer, LanguageClientAware { private static final Logger logger = Logger.getLogger(DTRAMLanguageServer.class.getName()); - private final WorkspaceService workspaceService; - private final TextDocumentService textDocumentService; + private final DTRAMWorkspaceService workspaceService; + private final DTRAMTextDocumentService textDocumentService; public DTRAMLanguageServer() { - this.workspaceService = new DTRAMWorkspaceService(); this.textDocumentService = new DTRAMTextDocumentService(); + this.workspaceService = new DTRAMWorkspaceService(); } @Override @@ -28,16 +28,26 @@ logger.info("Connected to: " + clientInfo.getName() + " " + clientInfo.getVersion()); ServerCapabilities capabilities = new ServerCapabilities(); - - /* エディタに補完機能が利用できることを伝える **/ - CompletionOptions completionOptions = new CompletionOptions(); - completionOptions.setTriggerCharacters(List.of(".", " ")); // 入力補完を開始する文字 - capabilities.setTextDocumentSync(TextDocumentSyncKind.Full); // ファイルの同期方法を指定(毎回ドキュメント全体を送信してもらう) capabilities.setPositionEncoding(PositionEncodingKind.UTF16); // 文字列符号化方式を指定 + + /* Tells the client that code completion is available **/ + CompletionOptions completionOptions = new CompletionOptions(); + completionOptions.setTriggerCharacters(List.of(".", " ")); capabilities.setCompletionProvider(completionOptions); + /* Fetch all available token types from client and send them to tell the client that the server can analyze the token */ + List availableTokenTypes = params.getCapabilities().getTextDocument().getSemanticTokens().getTokenTypes(); + SemanticTokensWithRegistrationOptions semanticTokensOptions = new SemanticTokensWithRegistrationOptions(); + semanticTokensOptions.setFull(true); + semanticTokensOptions.setRange(false); + semanticTokensOptions.setLegend(new SemanticTokensLegend(availableTokenTypes, List.of())); + capabilities.setSemanticTokensProvider(semanticTokensOptions); + InitializeResult result = new InitializeResult(capabilities); + + textDocumentService.updateSupportedTokenTypes(availableTokenTypes); + return CompletableFuture.completedFuture(result); }