This commits adds a basic language server for PDLL to enable providing language features in IDEs such as VSCode. This initial commit only adds support for tracking definitions, references, and diagnostics, but followup commits will build upon this to provide more significant behavior. In addition to the server, this commit also updates mlir-vscode to support the PDLL language and invoke the server. Differential Revision: https://reviews.llvm.org/D121541
73 lines
2.6 KiB
C++
73 lines
2.6 KiB
C++
//===- MlirPdllLspServerMain.cpp - MLIR PDLL 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-pdll-lsp-server/MlirPdllLspServerMain.h"
|
|
#include "../lsp-server-support/Logging.h"
|
|
#include "../lsp-server-support/Transport.h"
|
|
#include "LSPServer.h"
|
|
#include "PDLLServer.h"
|
|
#include "llvm/Support/CommandLine.h"
|
|
#include "llvm/Support/Program.h"
|
|
|
|
using namespace mlir;
|
|
using namespace mlir::lsp;
|
|
|
|
LogicalResult mlir::MlirPdllLspServerMain(int argc, char **argv) {
|
|
llvm::cl::opt<JSONStreamStyle> 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<bool> 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<Logger::Level> 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<bool> 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);
|
|
|
|
// Configure the servers and start the main language server.
|
|
PDLLServer server;
|
|
return runPdllLSPServer(server, transport);
|
|
}
|