blob: ec4e4e7ceb5c1dce087f8705a1cb1068430ba7ae [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2016-2018 TypeFox and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
******************************************************************************/
package org.eclipse.lsp4j.services;
import java.util.concurrent.CompletableFuture;
import org.eclipse.lsp4j.InitializeParams;
import org.eclipse.lsp4j.InitializeResult;
import org.eclipse.lsp4j.InitializedParams;
import org.eclipse.lsp4j.SetTraceParams;
import org.eclipse.lsp4j.WorkDoneProgressCancelParams;
import org.eclipse.lsp4j.jsonrpc.services.JsonDelegate;
import org.eclipse.lsp4j.jsonrpc.services.JsonNotification;
import org.eclipse.lsp4j.jsonrpc.services.JsonRequest;
/**
* Interface for implementations of
* https://github.com/Microsoft/vscode-languageserver-protocol
*/
public interface LanguageServer {
/**
* The initialize request is sent as the first request from the client to
* the server.
*
* If the server receives requests or notifications before the initialize request, it should act as follows:
* - for a request, the response should be errored with:
* {@link org.eclipse.lsp4j.jsonrpc.messages.ResponseErrorCode#serverNotInitialized}.
* The message can be picked by the server.
* - notifications should be dropped, except for the exit notification.
* This will allow the client to exit a server without an initialize request.
*
* Until the server has responded to the initialize request with an InitializeResult,
* the client must not send any additional requests or notifications to the server.
*
* During the initialize request, the server is allowed to send the notifications window/showMessage,
* window/logMessage, and telemetry/event, as well as the request window/showMessageRequest, to the client.
*/
@JsonRequest
CompletableFuture<InitializeResult> initialize(InitializeParams params);
/**
* The initialized notification is sent from the client to the server after
* the client received the result of the initialize request, but before the
* client is sending any other request or notification to the server. The
* server can use the initialized notification, for example, to dynamically
* register capabilities.
*/
@JsonNotification
default void initialized(InitializedParams params) {
initialized();
}
/**
* @deprecated see initialized(InitializedParams)
*/
@Deprecated
default void initialized() {
}
/**
* The shutdown request is sent from the client to the server. It asks the
* server to shutdown, but to not exit (otherwise the response might not be
* delivered correctly to the client). There is a separate exit notification
* that asks the server to exit.
*/
@JsonRequest
CompletableFuture<Object> shutdown();
/**
* A notification to ask the server to exit its process.
*/
@JsonNotification
void exit();
/**
* Provides access to the textDocument services.
*/
@JsonDelegate
TextDocumentService getTextDocumentService();
/**
* Provides access to the workspace services.
*/
@JsonDelegate
WorkspaceService getWorkspaceService();
/**
* This notification is sent from the client to the server to cancel a progress initiated on the server side.
*/
@JsonNotification("window/workDoneProgress/cancel")
default void cancelProgress(WorkDoneProgressCancelParams params) {
throw new UnsupportedOperationException();
}
/**
* A notification that should be used by the client to modify the trace setting of the server.
*
* Since 3.16.0
*/
@JsonNotification("$/setTrace")
default void setTrace(SetTraceParams params) {
throw new UnsupportedOperationException();
}
}