//===--- Transport.h - Sending and Receiving LSP messages -------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // The language server protocol is usually implemented by writing messages as // JSON-RPC over the stdin/stdout of a subprocess. This file contains a JSON // transport interface that handles this communication. // //===----------------------------------------------------------------------===// #ifndef MLIR_TOOLS_LSPSERVERSUPPORT_TRANSPORT_H #define MLIR_TOOLS_LSPSERVERSUPPORT_TRANSPORT_H #include "mlir/Support/DebugStringHelper.h" #include "mlir/Support/LLVM.h" #include "mlir/Tools/lsp-server-support/Logging.h" #include "mlir/Tools/lsp-server-support/Protocol.h" #include "llvm/ADT/FunctionExtras.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/FormatAdapters.h" #include "llvm/Support/JSON.h" #include "llvm/Support/raw_ostream.h" #include <atomic> namespace mlir { namespace lsp { class MessageHandler; //===----------------------------------------------------------------------===// // JSONTransport //===----------------------------------------------------------------------===// /// The encoding style of the JSON-RPC messages (both input and output). enum JSONStreamStyle { … }; /// A transport class that performs the JSON-RPC communication with the LSP /// client. class JSONTransport { … }; //===----------------------------------------------------------------------===// // MessageHandler //===----------------------------------------------------------------------===// /// A Callback<T> is a void function that accepts Expected<T>. This is /// accepted by functions that logically return T. Callback; /// An OutgoingNotification<T> is a function used for outgoing notifications /// send to the client. OutgoingNotification; /// An OutgoingRequest<T> is a function used for outgoing requests to send to /// the client. OutgoingRequest; /// An `OutgoingRequestCallback` is invoked when an outgoing request to the /// client receives a response in turn. It is passed the original request's ID, /// as well as the response result. OutgoingRequestCallback; /// A handler used to process the incoming transport messages. class MessageHandler { … }; } // namespace lsp } // namespace mlir #endif