[PATCH] D83802: [clangd] Config: also propagate in sync (testing) mode
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 14 11:37:48 PDT 2020
sammccall created this revision.
sammccall added a reviewer: kadircet.
Herald added subscribers: cfe-commits, usaxena95, arphaman, jkorous, MaskRay, javed.absar, ilya-biryukov.
Herald added a project: clang.
Tests are coming (really!).
I hit this while trying to add a config-over-LSP lit test, which I think
is an appropriate way to test this feature.
That needs a few more changes though...
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D83802
Files:
clang-tools-extra/clangd/TUScheduler.cpp
clang-tools-extra/clangd/TUScheduler.h
Index: clang-tools-extra/clangd/TUScheduler.h
===================================================================
--- clang-tools-extra/clangd/TUScheduler.h
+++ clang-tools-extra/clangd/TUScheduler.h
@@ -313,7 +313,7 @@
private:
const GlobalCompilationDatabase &CDB;
- const Options Opts;
+ Options Opts;
std::unique_ptr<ParsingCallbacks> Callbacks; // not nullptr
Semaphore Barrier;
llvm::StringMap<std::unique_ptr<FileData>> Files;
Index: clang-tools-extra/clangd/TUScheduler.cpp
===================================================================
--- clang-tools-extra/clangd/TUScheduler.cpp
+++ clang-tools-extra/clangd/TUScheduler.cpp
@@ -965,6 +965,7 @@
if (RunSync) {
assert(!Done && "running a task after stop()");
trace::Span Tracer(Name + ":" + llvm::sys::path::filename(FileName));
+ WithContext WithProvidedContext(ContextProvider(FileName));
Task();
return;
}
@@ -1062,9 +1063,7 @@
Status.ASTActivity.K = ASTAction::RunningAction;
Status.ASTActivity.Name = CurrentRequest->Name;
});
- llvm::Optional<WithContext> WithProvidedContext;
- if (ContextProvider)
- WithProvidedContext.emplace(ContextProvider(FileName));
+ WithContext WithProvidedContext(ContextProvider(FileName));
CurrentRequest->Action();
}
@@ -1238,6 +1237,11 @@
Barrier(Opts.AsyncThreadsCount),
IdleASTs(
std::make_unique<ASTCache>(Opts.RetentionPolicy.MaxRetainedASTs)) {
+ // Avoid null checks everywhere.
+ if (!Opts.ContextProvider)
+ this->Opts.ContextProvider = [](llvm::StringRef) {
+ return Context::current().clone();
+ };
if (0 < Opts.AsyncThreadsCount) {
PreambleTasks.emplace();
WorkerThreads.emplace();
@@ -1300,16 +1304,16 @@
void TUScheduler::run(llvm::StringRef Name, llvm::StringRef Path,
llvm::unique_function<void()> Action) {
- if (!PreambleTasks)
+ if (!PreambleTasks) {
+ WithContext WithProvidedContext(Opts.ContextProvider(Path));
return Action();
+ }
PreambleTasks->runAsync(Name, [this, Ctx = Context::current().clone(),
Path(Path.str()),
Action = std::move(Action)]() mutable {
std::lock_guard<Semaphore> BarrierLock(Barrier);
WithContext WC(std::move(Ctx));
- llvm::Optional<WithContext> WithProvidedContext;
- if (Opts.ContextProvider)
- WithProvidedContext.emplace(Opts.ContextProvider(Path));
+ WithContext WithProvidedContext(Opts.ContextProvider(Path));
Action();
});
}
@@ -1344,6 +1348,7 @@
SPAN_ATTACH(Tracer, "file", File);
std::shared_ptr<const PreambleData> Preamble =
It->second->Worker->getPossiblyStalePreamble();
+ WithContext WithProvidedContext(Opts.ContextProvider(File));
Action(InputsAndPreamble{It->second->Contents,
It->second->Worker->getCurrentCompileCommand(),
Preamble.get()});
@@ -1370,9 +1375,7 @@
WithContext Guard(std::move(Ctx));
trace::Span Tracer(Name);
SPAN_ATTACH(Tracer, "file", File);
- llvm::Optional<WithContext> WithProvidedContext;
- if (Opts.ContextProvider)
- WithProvidedContext.emplace(Opts.ContextProvider(File));
+ WithContext WithProvidedContext(Opts.ContextProvider(File));
Action(InputsAndPreamble{Contents, Command, Preamble.get()});
};
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D83802.277920.patch
Type: text/x-patch
Size: 3455 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200714/cfe1a5e3/attachment-0001.bin>
More information about the cfe-commits
mailing list