xref: /llvm-project/mlir/lib/Tools/mlir-pdll-lsp-server/Protocol.h (revision 305d718539659fb5fccd9b6e0771bbabc6c3c821)
1 //===--- Protocol.h - Language Server Protocol Implementation ---*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file contains structs for LSP commands that are specific to the PDLL
10 // server.
11 //
12 // Each struct has a toJSON and fromJSON function, that converts between
13 // the struct and a JSON representation. (See JSON.h)
14 //
15 // Some structs also have operator<< serialization. This is for debugging and
16 // tests, and is not generally machine-readable.
17 //
18 //===----------------------------------------------------------------------===//
19 
20 #ifndef LIB_MLIR_TOOLS_MLIRPDLLLSPSERVER_PROTOCOL_H_
21 #define LIB_MLIR_TOOLS_MLIRPDLLLSPSERVER_PROTOCOL_H_
22 
23 #include "mlir/Tools/lsp-server-support/Protocol.h"
24 
25 namespace mlir {
26 namespace lsp {
27 //===----------------------------------------------------------------------===//
28 // PDLLViewOutputParams
29 //===----------------------------------------------------------------------===//
30 
31 /// The type of output to view from PDLL.
32 enum class PDLLViewOutputKind {
33   AST,
34   MLIR,
35   CPP,
36 };
37 
38 /// Represents the parameters used when viewing the output of a PDLL file.
39 struct PDLLViewOutputParams {
40   /// The URI of the document to view the output of.
41   URIForFile uri;
42 
43   /// The kind of output to generate.
44   PDLLViewOutputKind kind;
45 };
46 
47 /// Add support for JSON serialization.
48 bool fromJSON(const llvm::json::Value &value, PDLLViewOutputKind &result,
49               llvm::json::Path path);
50 bool fromJSON(const llvm::json::Value &value, PDLLViewOutputParams &result,
51               llvm::json::Path path);
52 
53 //===----------------------------------------------------------------------===//
54 // PDLLViewOutputResult
55 //===----------------------------------------------------------------------===//
56 
57 /// Represents the result of viewing the output of a PDLL file.
58 struct PDLLViewOutputResult {
59   /// The string representation of the output.
60   std::string output;
61 };
62 
63 /// Add support for JSON serialization.
64 llvm::json::Value toJSON(const PDLLViewOutputResult &value);
65 
66 } // namespace lsp
67 } // namespace mlir
68 
69 #endif
70