Author: Sam McCall Date: 2020-07-14T20:45:02+02:00 New Revision: f88ce078f778886d8dc0408c4ed6344f3332bdd1
URL: https://github.com/llvm/llvm-project/commit/f88ce078f778886d8dc0408c4ed6344f3332bdd1 DIFF: https://github.com/llvm/llvm-project/commit/f88ce078f778886d8dc0408c4ed6344f3332bdd1.diff LOG: [clangd] Make config::Provider::combine non-owning. NFC This is a prerequisite for having ClangdLSPServer inject its own. Added: Modified: clang-tools-extra/clangd/ConfigProvider.cpp clang-tools-extra/clangd/ConfigProvider.h clang-tools-extra/clangd/tool/ClangdMain.cpp clang-tools-extra/clangd/unittests/ConfigProviderTests.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clangd/ConfigProvider.cpp b/clang-tools-extra/clangd/ConfigProvider.cpp index 1f0f727998e3..eec1ae992194 100644 --- a/clang-tools-extra/clangd/ConfigProvider.cpp +++ b/clang-tools-extra/clangd/ConfigProvider.cpp @@ -193,9 +193,9 @@ Provider::fromAncestorRelativeYAMLFiles(llvm::StringRef RelPath, } std::unique_ptr<Provider> -Provider::combine(std::vector<std::unique_ptr<Provider>> Providers) { +Provider::combine(std::vector<const Provider *> Providers) { struct CombinedProvider : Provider { - std::vector<std::unique_ptr<Provider>> Providers; + std::vector<const Provider *> Providers; std::vector<CompiledFragment> getFragments(const Params &P, DiagnosticCallback DC) const override { diff --git a/clang-tools-extra/clangd/ConfigProvider.h b/clang-tools-extra/clangd/ConfigProvider.h index f6c26bde9e0f..1ef33c79c1e8 100644 --- a/clang-tools-extra/clangd/ConfigProvider.h +++ b/clang-tools-extra/clangd/ConfigProvider.h @@ -76,8 +76,7 @@ class Provider { /// A provider that includes fragments from all the supplied providers. /// Order is preserved; later providers take precedence over earlier ones. - static std::unique_ptr<Provider> - combine(std::vector<std::unique_ptr<Provider>>); + static std::unique_ptr<Provider> combine(std::vector<const Provider *>); /// Build a config based on this provider. Config getConfig(const Params &, DiagnosticCallback) const; diff --git a/clang-tools-extra/clangd/tool/ClangdMain.cpp b/clang-tools-extra/clangd/tool/ClangdMain.cpp index 12d3e299868e..780495530856 100644 --- a/clang-tools-extra/clangd/tool/ClangdMain.cpp +++ b/clang-tools-extra/clangd/tool/ClangdMain.cpp @@ -703,9 +703,9 @@ clangd accepts flags on the commandline, and in the CLANGD_FLAGS environment var CCOpts.RunParser = CodeCompletionParse; RealThreadsafeFS TFS; + std::vector<std::unique_ptr<config::Provider>> ProviderStack; std::unique_ptr<config::Provider> Config; if (EnableConfig) { - std::vector<std::unique_ptr<config::Provider>> ProviderStack; ProviderStack.push_back( config::Provider::fromAncestorRelativeYAMLFiles(".clangd", TFS)); llvm::SmallString<256> UserConfig; @@ -716,7 +716,10 @@ clangd accepts flags on the commandline, and in the CLANGD_FLAGS environment var } else { elog("Couldn't determine user config file, not loading"); } - Config = config::Provider::combine(std::move(ProviderStack)); + std::vector<const config::Provider *> ProviderPointers; + for (const auto& P : ProviderStack) + ProviderPointers.push_back(P.get()); + Config = config::Provider::combine(std::move(ProviderPointers)); Opts.ConfigProvider = Config.get(); } diff --git a/clang-tools-extra/clangd/unittests/ConfigProviderTests.cpp b/clang-tools-extra/clangd/unittests/ConfigProviderTests.cpp index ff3198e8d335..0cf582410ff8 100644 --- a/clang-tools-extra/clangd/unittests/ConfigProviderTests.cpp +++ b/clang-tools-extra/clangd/unittests/ConfigProviderTests.cpp @@ -57,10 +57,9 @@ std::vector<std::string> getAddedArgs(Config &C) { // cache their results. TEST(ProviderTest, Combine) { CapturedDiags Diags; - std::vector<std::unique_ptr<Provider>> Providers; - Providers.push_back(std::make_unique<FakeProvider>("foo")); - Providers.push_back(std::make_unique<FakeProvider>("bar")); - auto Combined = Provider::combine(std::move(Providers)); + FakeProvider Foo("foo"); + FakeProvider Bar("bar"); + auto Combined = Provider::combine({&Foo, &Bar}); Config Cfg = Combined->getConfig(Params(), Diags.callback()); EXPECT_THAT(Diags.Diagnostics, ElementsAre(DiagMessage("foo"), DiagMessage("bar"))); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits