aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/languageclient/clientrequesttask.cpp
diff options
context:
space:
mode:
authorDavid Schulz <[email protected]>2023-03-20 16:29:51 +0100
committerDavid Schulz <[email protected]>2023-03-21 06:40:21 +0000
commit8e9b8933256c1483f1f72ade010ea879550d40d7 (patch)
treedbadb0fb689ecf0a79698d6b07a8dc8f429ead4a /src/plugins/languageclient/clientrequesttask.cpp
parent6dcc1771e3b69073a4560778b29b0ac3fa4d2c56 (diff)
LanguageClient: Introduce ClientRequestTask
This class is going to be used inside TaskTree. Change-Id: Ia227a8f41e4557b45053cb018497a7eca8f8ac6a Reviewed-by: Jarek Kobus <[email protected]> Reviewed-by: <[email protected]> Reviewed-by: Qt CI Bot <[email protected]>
Diffstat (limited to 'src/plugins/languageclient/clientrequesttask.cpp')
-rw-r--r--src/plugins/languageclient/clientrequesttask.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/plugins/languageclient/clientrequesttask.cpp b/src/plugins/languageclient/clientrequesttask.cpp
new file mode 100644
index 00000000000..c5503bd6947
--- /dev/null
+++ b/src/plugins/languageclient/clientrequesttask.cpp
@@ -0,0 +1,39 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "clientrequesttask.h"
+
+#include <QScopeGuard>
+
+using namespace LanguageServerProtocol;
+
+namespace LanguageClient {
+
+ClientRequestTaskAdapter::ClientRequestTaskAdapter()
+{
+ task()->setResponseCallback([this](const WorkspaceSymbolRequest::Response &response){
+ emit done(response.result().has_value());
+ });
+}
+
+void ClientRequestTaskAdapter::start()
+{
+ task()->start();
+}
+
+bool WorkspaceSymbolRequestTask::preStartCheck()
+{
+ if (!ClientRequestTask::preStartCheck() || !client()->locatorsEnabled())
+ return false;
+
+ const std::optional<std::variant<bool, WorkDoneProgressOptions>> capability
+ = client()->capabilities().workspaceSymbolProvider();
+ if (!capability.has_value())
+ return false;
+ if (std::holds_alternative<bool>(*capability) && !std::get<bool>(*capability))
+ return false;
+
+ return true;
+}
+
+} // namespace LanguageClient