//===- MlirLspServerMain.cpp - MLIR Language Server main ------------------===// // // 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 // //===----------------------------------------------------------------------===// #include "mlir/Tools/mlir-lsp-server/MlirLspServerMain.h" #include "LSPServer.h" #include "MLIRServer.h" #include "mlir/IR/Dialect.h" #include "mlir/Tools/lsp-server-support/Logging.h" #include "mlir/Tools/lsp-server-support/Transport.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Program.h" using namespace mlir; using namespace mlir::lsp; LogicalResult mlir::MlirLspServerMain(int argc, char **argv, DialectRegistry ®istry) { llvm::cl::opt inputStyle{ "input-style", llvm::cl::desc("Input JSON stream encoding"), llvm::cl::values(clEnumValN(JSONStreamStyle::Standard, "standard", "usual LSP protocol"), clEnumValN(JSONStreamStyle::Delimited, "delimited", "messages delimited by `// -----` lines, " "with // comment support")), llvm::cl::init(JSONStreamStyle::Standard), llvm::cl::Hidden, }; llvm::cl::opt litTest{ "lit-test", llvm::cl::desc( "Abbreviation for -input-style=delimited -pretty -log=verbose. " "Intended to simplify lit tests"), llvm::cl::init(false), }; llvm::cl::opt logLevel{ "log", llvm::cl::desc("Verbosity of log messages written to stderr"), llvm::cl::values( clEnumValN(Logger::Level::Error, "error", "Error messages only"), clEnumValN(Logger::Level::Info, "info", "High level execution tracing"), clEnumValN(Logger::Level::Debug, "verbose", "Low level details")), llvm::cl::init(Logger::Level::Info), }; llvm::cl::opt prettyPrint{ "pretty", llvm::cl::desc("Pretty-print JSON output"), llvm::cl::init(false), }; llvm::cl::ParseCommandLineOptions(argc, argv, "MLIR LSP Language Server"); if (litTest) { inputStyle = JSONStreamStyle::Delimited; logLevel = Logger::Level::Debug; prettyPrint = true; } // Configure the logger. Logger::setLogLevel(logLevel); // Configure the transport used for communication. llvm::sys::ChangeStdinToBinary(); JSONTransport transport(stdin, llvm::outs(), inputStyle, prettyPrint); // Register the additionally supported URI schemes for the MLIR server. URIForFile::registerSupportedScheme("mlir.bytecode-mlir"); // Configure the servers and start the main language server. MLIRServer server(registry); return runMlirLSPServer(server, transport); }