//===- TableGenLspServerMain.cpp - TableGen 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/tblgen-lsp-server/TableGenLspServerMain.h" #include "LSPServer.h" #include "TableGenServer.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::TableGenLspServerMain(int argc, char **argv) { 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::list extraIncludeDirs( "tablegen-extra-dir", llvm::cl::desc("Extra directory of include files"), llvm::cl::value_desc("directory"), llvm::cl::Prefix); llvm::cl::list compilationDatabases( "tablegen-compilation-database", llvm::cl::desc("Compilation YAML databases containing additional " "compilation information for .td files")); llvm::cl::ParseCommandLineOptions(argc, argv, "TableGen 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); // Configure the servers and start the main language server. TableGenServer::Options options(compilationDatabases, extraIncludeDirs); TableGenServer server(options); return runTableGenLSPServer(server, transport); }