Skip to content

Commit f88ce07

Browse files
committed
[clangd] Make config::Provider::combine non-owning. NFC
This is a prerequisite for having ClangdLSPServer inject its own.
1 parent 77ee4b4 commit f88ce07

File tree

4 files changed

+11
-10
lines changed

4 files changed

+11
-10
lines changed

clang-tools-extra/clangd/ConfigProvider.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,9 +193,9 @@ Provider::fromAncestorRelativeYAMLFiles(llvm::StringRef RelPath,
193193
}
194194

195195
std::unique_ptr<Provider>
196-
Provider::combine(std::vector<std::unique_ptr<Provider>> Providers) {
196+
Provider::combine(std::vector<const Provider *> Providers) {
197197
struct CombinedProvider : Provider {
198-
std::vector<std::unique_ptr<Provider>> Providers;
198+
std::vector<const Provider *> Providers;
199199

200200
std::vector<CompiledFragment>
201201
getFragments(const Params &P, DiagnosticCallback DC) const override {

clang-tools-extra/clangd/ConfigProvider.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,7 @@ class Provider {
7676

7777
/// A provider that includes fragments from all the supplied providers.
7878
/// Order is preserved; later providers take precedence over earlier ones.
79-
static std::unique_ptr<Provider>
80-
combine(std::vector<std::unique_ptr<Provider>>);
79+
static std::unique_ptr<Provider> combine(std::vector<const Provider *>);
8180

8281
/// Build a config based on this provider.
8382
Config getConfig(const Params &, DiagnosticCallback) const;

clang-tools-extra/clangd/tool/ClangdMain.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -703,9 +703,9 @@ clangd accepts flags on the commandline, and in the CLANGD_FLAGS environment var
703703
CCOpts.RunParser = CodeCompletionParse;
704704

705705
RealThreadsafeFS TFS;
706+
std::vector<std::unique_ptr<config::Provider>> ProviderStack;
706707
std::unique_ptr<config::Provider> Config;
707708
if (EnableConfig) {
708-
std::vector<std::unique_ptr<config::Provider>> ProviderStack;
709709
ProviderStack.push_back(
710710
config::Provider::fromAncestorRelativeYAMLFiles(".clangd", TFS));
711711
llvm::SmallString<256> UserConfig;
@@ -716,7 +716,10 @@ clangd accepts flags on the commandline, and in the CLANGD_FLAGS environment var
716716
} else {
717717
elog("Couldn't determine user config file, not loading");
718718
}
719-
Config = config::Provider::combine(std::move(ProviderStack));
719+
std::vector<const config::Provider *> ProviderPointers;
720+
for (const auto& P : ProviderStack)
721+
ProviderPointers.push_back(P.get());
722+
Config = config::Provider::combine(std::move(ProviderPointers));
720723
Opts.ConfigProvider = Config.get();
721724
}
722725

clang-tools-extra/clangd/unittests/ConfigProviderTests.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,9 @@ std::vector<std::string> getAddedArgs(Config &C) {
5757
// cache their results.
5858
TEST(ProviderTest, Combine) {
5959
CapturedDiags Diags;
60-
std::vector<std::unique_ptr<Provider>> Providers;
61-
Providers.push_back(std::make_unique<FakeProvider>("foo"));
62-
Providers.push_back(std::make_unique<FakeProvider>("bar"));
63-
auto Combined = Provider::combine(std::move(Providers));
60+
FakeProvider Foo("foo");
61+
FakeProvider Bar("bar");
62+
auto Combined = Provider::combine({&Foo, &Bar});
6463
Config Cfg = Combined->getConfig(Params(), Diags.callback());
6564
EXPECT_THAT(Diags.Diagnostics,
6665
ElementsAre(DiagMessage("foo"), DiagMessage("bar")));

0 commit comments

Comments
 (0)