From d52e7b939890cacf59d8252f5546f9f1f64a7d29 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 30 Sep 2021 16:02:39 +0200 Subject: [PATCH] LanguageClient: Make sure to run callback in all code paths ... when receiving a reply for textDocument/definition. Change-Id: I08f3a22f7c39a33b7b84539125a76d0c0d625692 Reviewed-by: David Schulz --- src/plugins/clangcodemodel/test/clangdtests.cpp | 3 --- .../languageclient/languageclientsymbolsupport.cpp | 10 +++++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp index d0726af4a49..20938701157 100644 --- a/src/plugins/clangcodemodel/test/clangdtests.cpp +++ b/src/plugins/clangcodemodel/test/clangdtests.cpp @@ -506,9 +506,6 @@ void ClangdTestLocalReferences::test() client()->findLocalUsages(doc, cursor, std::move(handler)); timer.start(10000); loop.exec(); - QEXPECT_FAIL("cursor not on identifier", "clangd bug: go to definition does not return", Abort); - QEXPECT_FAIL("template parameter member access", - "clangd bug: go to definition does not return", Abort); QVERIFY(timer.isActive()); timer.stop(); diff --git a/src/plugins/languageclient/languageclientsymbolsupport.cpp b/src/plugins/languageclient/languageclientsymbolsupport.cpp index fabb628bebc..8199084c416 100644 --- a/src/plugins/languageclient/languageclientsymbolsupport.cpp +++ b/src/plugins/languageclient/languageclientsymbolsupport.cpp @@ -78,14 +78,18 @@ static void handleGotoDefinitionResponse(const GotoDefinitionRequest::Response & { if (Utils::optional _result = response.result()) { const GotoResult result = _result.value(); - if (Utils::holds_alternative(result)) - return; - if (auto ploc = Utils::get_if(&result)) { + if (Utils::holds_alternative(result)) { + callback({}); + } else if (auto ploc = Utils::get_if(&result)) { callback(linkUnderCursor.value_or(ploc->toLink())); } else if (auto plloc = Utils::get_if>(&result)) { if (!plloc->isEmpty()) callback(linkUnderCursor.value_or(plloc->value(0).toLink())); + else + callback({}); } + } else { + callback({}); } }