[Mlir-commits] [mlir] 857b0a1 - [mlir-lsp] Add client information to the InitializationParams

River Riddle llvmlistbot at llvm.org
Tue Jul 18 12:27:57 PDT 2023


Author: River Riddle
Date: 2023-07-18T12:27:01-07:00
New Revision: 857b0a1f400b385b27d6c252f74a80f121f46227

URL: https://github.com/llvm/llvm-project/commit/857b0a1f400b385b27d6c252f74a80f121f46227
DIFF: https://github.com/llvm/llvm-project/commit/857b0a1f400b385b27d6c252f74a80f121f46227.diff

LOG: [mlir-lsp] Add client information to the InitializationParams

This is specified in the spec, but we just never really needed it. This
allows for users of the LSP libraries to inspect information about the
client that is connected to the server.

Differential Revision: https://reviews.llvm.org/D155566

Added: 
    

Modified: 
    mlir/include/mlir/Tools/lsp-server-support/Protocol.h
    mlir/lib/Tools/lsp-server-support/Protocol.cpp
    mlir/test/mlir-lsp-server/initialize-params-invalid.test
    mlir/test/mlir-lsp-server/initialize-params.test

Removed: 
    


################################################################################
diff  --git a/mlir/include/mlir/Tools/lsp-server-support/Protocol.h b/mlir/include/mlir/Tools/lsp-server-support/Protocol.h
index 7e8360eba9da90..839d82bb02b878 100644
--- a/mlir/include/mlir/Tools/lsp-server-support/Protocol.h
+++ b/mlir/include/mlir/Tools/lsp-server-support/Protocol.h
@@ -167,6 +167,22 @@ struct ClientCapabilities {
 bool fromJSON(const llvm::json::Value &value, ClientCapabilities &result,
               llvm::json::Path path);
 
+//===----------------------------------------------------------------------===//
+// ClientInfo
+//===----------------------------------------------------------------------===//
+
+struct ClientInfo {
+  /// The name of the client as defined by the client.
+  std::string name;
+
+  /// The client's version as defined by the client.
+  std::optional<std::string> version;
+};
+
+/// Add support for JSON serialization.
+bool fromJSON(const llvm::json::Value &value, ClientInfo &result,
+              llvm::json::Path path);
+
 //===----------------------------------------------------------------------===//
 // InitializeParams
 //===----------------------------------------------------------------------===//
@@ -185,6 +201,9 @@ struct InitializeParams {
   /// The capabilities provided by the client (editor or tool).
   ClientCapabilities capabilities;
 
+  /// Information about the client.
+  std::optional<ClientInfo> clientInfo;
+
   /// The initial trace setting. If omitted trace is disabled ('off').
   std::optional<TraceLevel> trace;
 };

diff  --git a/mlir/lib/Tools/lsp-server-support/Protocol.cpp b/mlir/lib/Tools/lsp-server-support/Protocol.cpp
index e23c124d4983ca..6d8cec6a54d1a4 100644
--- a/mlir/lib/Tools/lsp-server-support/Protocol.cpp
+++ b/mlir/lib/Tools/lsp-server-support/Protocol.cpp
@@ -294,6 +294,21 @@ bool mlir::lsp::fromJSON(const llvm::json::Value &value,
   return true;
 }
 
+//===----------------------------------------------------------------------===//
+// ClientInfo
+//===----------------------------------------------------------------------===//
+
+bool mlir::lsp::fromJSON(const llvm::json::Value &value, ClientInfo &result,
+                         llvm::json::Path path) {
+  llvm::json::ObjectMapper o(value, path);
+  if (!o || !o.map("name", result.name))
+    return false;
+
+  // Don't fail if we can't parse version.
+  o.map("version", result.version);
+  return true;
+}
+
 //===----------------------------------------------------------------------===//
 // InitializeParams
 //===----------------------------------------------------------------------===//
@@ -325,6 +340,8 @@ bool mlir::lsp::fromJSON(const llvm::json::Value &value,
   // We deliberately don't fail if we can't parse individual fields.
   o.map("capabilities", result.capabilities);
   o.map("trace", result.trace);
+  mapOptOrNull(value, "clientInfo", result.clientInfo, path);
+
   return true;
 }
 

diff  --git a/mlir/test/mlir-lsp-server/initialize-params-invalid.test b/mlir/test/mlir-lsp-server/initialize-params-invalid.test
index aa4d91651bcab0..5cf317661ae1db 100644
--- a/mlir/test/mlir-lsp-server/initialize-params-invalid.test
+++ b/mlir/test/mlir-lsp-server/initialize-params-invalid.test
@@ -1,6 +1,6 @@
 // RUN: mlir-lsp-server -lit-test < %s | FileCheck -strict-whitespace %s
 // Test with invalid initialize request parameters
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":"","rootUri":"test:///workspace","capabilities":{},"trace":"verbose"}}
+{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":"","rootUri":"test:///workspace","capabilities":{},"clientInfo":{"name": 10},"trace":"verbose"}}
 //      CHECK:  "id": 0,
 // CHECK-NEXT:  "jsonrpc": "2.0",
 // CHECK-NEXT:  "result": {

diff  --git a/mlir/test/mlir-lsp-server/initialize-params.test b/mlir/test/mlir-lsp-server/initialize-params.test
index 515a1e6908073e..4712c1f1fd7337 100644
--- a/mlir/test/mlir-lsp-server/initialize-params.test
+++ b/mlir/test/mlir-lsp-server/initialize-params.test
@@ -1,6 +1,6 @@
 // RUN: mlir-lsp-server -lit-test < %s | FileCheck -strict-whitespace %s
 // Test initialize request parameters with rootUri
-{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootUri":"test:///workspace","capabilities":{},"trace":"off"}}
+{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootUri":"test:///workspace","capabilities":{},"clientInfo":{"name": "test", "version": "1.2.3"},"trace":"off"}}
 //      CHECK:  "id": 0,
 // CHECK-NEXT:  "jsonrpc": "2.0",
 // CHECK-NEXT:  "result": {


        


More information about the Mlir-commits mailing list