forked from OSchip/llvm-project
[clangd] Also accept flags from CLANGD_FLAGS variable.
This simplifies various workflows, particularly in debugging/development. e.g. editors will tend to propagate flags, so you can run `env CLANGD_FLAGS=-input-mirror-file=/tmp/mirror vim foo.cc` rather than change the configuration in a persistent way. (This also gives us a generic lever when we don't know how to customize the flags in some particular LSP client). While here, add a test for this and other startup logging, and fix a couple of direct writes to errs() that should have been logs. Differential Revision: https://reviews.llvm.org/D65153 llvm-svn: 366991
This commit is contained in:
parent
5c8af53806
commit
8faffec4e2
|
@ -690,7 +690,7 @@ std::unique_ptr<SymbolIndex> loadIndex(llvm::StringRef SymbolFilename,
|
|||
trace::Span OverallTracer("LoadIndex");
|
||||
auto Buffer = llvm::MemoryBuffer::getFile(SymbolFilename);
|
||||
if (!Buffer) {
|
||||
llvm::errs() << "Can't open " << SymbolFilename << "\n";
|
||||
elog("Can't open {0}", SymbolFilename);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
@ -707,7 +707,7 @@ std::unique_ptr<SymbolIndex> loadIndex(llvm::StringRef SymbolFilename,
|
|||
if (I->Relations)
|
||||
Relations = std::move(*I->Relations);
|
||||
} else {
|
||||
llvm::errs() << "Bad Index: " << llvm::toString(I.takeError()) << "\n";
|
||||
elog("Bad Index: {0}", I.takeError());
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
# RUN: not env CLANGD_FLAGS=-index-file=no-such-index clangd -lit-test </dev/null 2>&1 >/dev/null | FileCheck %s
|
||||
CHECK: I[{{.*}}] clangd version {{.*}}
|
||||
CHECK: Working directory: {{.*}}
|
||||
CHECK: argv[0]: clangd
|
||||
CHECK: argv[1]: -lit-test
|
||||
CHECK: CLANGD_FLAGS: -index-file=no-such-index
|
||||
CHECK: E[{{.*}}] Can't open no-such-index
|
||||
CHECK: Starting LSP over stdin/stdout
|
||||
|
|
@ -22,6 +22,7 @@
|
|||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Support/Path.h"
|
||||
#include "llvm/Support/Process.h"
|
||||
#include "llvm/Support/Program.h"
|
||||
#include "llvm/Support/Signals.h"
|
||||
#include "llvm/Support/TargetSelect.h"
|
||||
|
@ -433,15 +434,19 @@ int main(int argc, char *argv[]) {
|
|||
llvm::cl::SetVersionPrinter([](llvm::raw_ostream &OS) {
|
||||
OS << clang::getClangToolFullVersion("clangd") << "\n";
|
||||
});
|
||||
const char *FlagsEnvVar = "CLANGD_FLAGS";
|
||||
const char *Overview =
|
||||
R"(clangd is a language server that provides IDE-like features to editors.
|
||||
|
||||
It should be used via an editor plugin rather than invoked directly. For more information, see:
|
||||
https://clang.llvm.org/extra/clangd/
|
||||
https://microsoft.github.io/language-server-protocol/
|
||||
|
||||
clangd accepts flags on the commandline, and in the CLANGD_FLAGS environment variable.
|
||||
)";
|
||||
llvm::cl::HideUnrelatedOptions(ClangdCategories);
|
||||
llvm::cl::ParseCommandLineOptions(
|
||||
argc, argv,
|
||||
"clangd is a language server that provides IDE-like features to editors. "
|
||||
"\n\nIt should be used via an editor plugin rather than invoked "
|
||||
"directly. "
|
||||
"For more information, see:"
|
||||
"\n\thttps://clang.llvm.org/extra/clangd.html"
|
||||
"\n\thttps://microsoft.github.io/language-server-protocol/");
|
||||
llvm::cl::ParseCommandLineOptions(argc, argv, Overview,
|
||||
/*Errs=*/nullptr, FlagsEnvVar);
|
||||
if (Test) {
|
||||
Sync = true;
|
||||
InputStyle = JSONStreamStyle::Delimited;
|
||||
|
@ -526,6 +531,8 @@ int main(int argc, char *argv[]) {
|
|||
}
|
||||
for (int I = 0; I < argc; ++I)
|
||||
log("argv[{0}]: {1}", I, argv[I]);
|
||||
if (auto EnvFlags = llvm::sys::Process::GetEnv(FlagsEnvVar))
|
||||
log("{0}: {1}", FlagsEnvVar, *EnvFlags);
|
||||
|
||||
// If --compile-commands-dir arg was invoked, check value and override default
|
||||
// path.
|
||||
|
|
Loading…
Reference in New Issue