[clang-tools-extra] r369089 - [clangd] Remove Bind, use C++14 lambda captures instead. NFC
Ilya Biryukov via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 16 02:20:01 PDT 2019
Author: ibiryukov
Date: Fri Aug 16 02:20:01 2019
New Revision: 369089
URL: http://llvm.org/viewvc/llvm-project?rev=369089&view=rev
Log:
[clangd] Remove Bind, use C++14 lambda captures instead. NFC
Modified:
clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp
clang-tools-extra/trunk/clangd/Function.h
clang-tools-extra/trunk/clangd/unittests/SyncAPI.cpp
Modified: clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp?rev=369089&r1=369088&r2=369089&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp (original)
+++ clang-tools-extra/trunk/clangd/ClangdLSPServer.cpp Fri Aug 16 02:20:01 2019
@@ -603,8 +603,11 @@ void ClangdLSPServer::onCommand(const Ex
// 6. The editor applies the changes (applyEdit), and sends us a reply
// 7. We unwrap the reply and send a reply to the editor.
ApplyEdit(*Params.workspaceEdit,
- Bind(ReplyAfterApplyingEdit, std::move(Reply),
- std::string("Fix applied.")));
+ [Reply = std::move(Reply), ReplyAfterApplyingEdit](
+ llvm::Expected<ApplyWorkspaceEditResponse> Response) mutable {
+ ReplyAfterApplyingEdit(std::move(Reply), "Fix applied.",
+ std::move(Response));
+ });
} else if (Params.command == ExecuteCommandParams::CLANGD_APPLY_TWEAK &&
Params.tweakArgs) {
auto Code = DraftMgr.getDraft(Params.tweakArgs->file.file());
@@ -624,8 +627,13 @@ void ClangdLSPServer::onCommand(const Ex
WorkspaceEdit WE;
WE.changes.emplace();
(*WE.changes)[File.uri()] = replacementsToEdits(Code, *R->ApplyEdit);
- ApplyEdit(std::move(WE), Bind(ReplyAfterApplyingEdit, std::move(Reply),
- std::string("Tweak applied.")));
+ ApplyEdit(
+ std::move(WE),
+ [Reply = std::move(Reply), ReplyAfterApplyingEdit](
+ llvm::Expected<ApplyWorkspaceEditResponse> Response) mutable {
+ ReplyAfterApplyingEdit(std::move(Reply), "Tweak applied.",
+ std::move(Response));
+ });
}
if (R->ShowMessage) {
ShowMessageParams Msg;
Modified: clang-tools-extra/trunk/clangd/Function.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/Function.h?rev=369089&r1=369088&r2=369089&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/Function.h (original)
+++ clang-tools-extra/trunk/clangd/Function.h Fri Aug 16 02:20:01 2019
@@ -27,62 +27,6 @@ namespace clangd {
template <typename T>
using Callback = llvm::unique_function<void(llvm::Expected<T>)>;
-/// Stores a callable object (Func) and arguments (Args) and allows to call the
-/// callable with provided arguments later using `operator ()`. The arguments
-/// are std::forward'ed into the callable in the body of `operator()`. Therefore
-/// `operator()` can only be called once, as some of the arguments could be
-/// std::move'ed into the callable on first call.
-template <class Func, class... Args> struct ForwardBinder {
- using Tuple = std::tuple<typename std::decay<Func>::type,
- typename std::decay<Args>::type...>;
- Tuple FuncWithArguments;
-#ifndef NDEBUG
- bool WasCalled = false;
-#endif
-
-public:
- ForwardBinder(Tuple FuncWithArguments)
- : FuncWithArguments(std::move(FuncWithArguments)) {}
-
-private:
- template <std::size_t... Indexes, class... RestArgs>
- auto CallImpl(std::integer_sequence<std::size_t, Indexes...> Seq,
- RestArgs &&... Rest)
- -> decltype(std::get<0>(this->FuncWithArguments)(
- std::forward<Args>(std::get<Indexes + 1>(this->FuncWithArguments))...,
- std::forward<RestArgs>(Rest)...)) {
- return std::get<0>(this->FuncWithArguments)(
- std::forward<Args>(std::get<Indexes + 1>(this->FuncWithArguments))...,
- std::forward<RestArgs>(Rest)...);
- }
-
-public:
- template <class... RestArgs>
- auto operator()(RestArgs &&... Rest)
- -> decltype(this->CallImpl(std::index_sequence_for<Args...>(),
- std::forward<RestArgs>(Rest)...)) {
-
-#ifndef NDEBUG
- assert(!WasCalled && "Can only call result of Bind once.");
- WasCalled = true;
-#endif
- return CallImpl(std::index_sequence_for<Args...>(),
- std::forward<RestArgs>(Rest)...);
- }
-};
-
-/// Creates an object that stores a callable (\p F) and first arguments to the
-/// callable (\p As) and allows to call \p F with \Args at a later point.
-/// Similar to std::bind, but also works with move-only \p F and \p As.
-///
-/// The returned object must be called no more than once, as \p As are
-/// std::forwarded'ed (therefore can be moved) into \p F during the call.
-template <class Func, class... Args>
-ForwardBinder<Func, Args...> Bind(Func F, Args &&... As) {
- return ForwardBinder<Func, Args...>(
- std::make_tuple(std::forward<Func>(F), std::forward<Args>(As)...));
-}
-
/// An Event<T> allows events of type T to be broadcast to listeners.
template <typename T> class Event {
public:
Modified: clang-tools-extra/trunk/clangd/unittests/SyncAPI.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/unittests/SyncAPI.cpp?rev=369089&r1=369088&r2=369089&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/unittests/SyncAPI.cpp (original)
+++ clang-tools-extra/trunk/clangd/unittests/SyncAPI.cpp Fri Aug 16 02:20:01 2019
@@ -40,11 +40,9 @@ template <typename T> struct CaptureProx
operator llvm::unique_function<void(T)>() && {
assert(!Future.valid() && "conversion to callback called multiple times");
Future = Promise.get_future();
- return Bind(
- [](std::promise<std::shared_ptr<T>> Promise, T Value) {
- Promise.set_value(std::make_shared<T>(std::move(Value)));
- },
- std::move(Promise));
+ return [Promise = std::move(Promise)](T Value) mutable {
+ Promise.set_value(std::make_shared<T>(std::move(Value)));
+ };
}
~CaptureProxy() {
More information about the cfe-commits
mailing list