From e47c797dee2affa8458373af6c87f23810d17c6e Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Wed, 12 Jun 2024 08:25:48 +0200 Subject: [PATCH] LSP: Fix MarkedString fromJson fromJsonValue(...) (with T = MarkedString) always tried to convert the json value toObject() first. Which is wrong since it can be an object or a string. Fixes the broken hover text for the json language server. Change-Id: Id69b4270238bea7068936a7d2142f4f94918f96b Reviewed-by: David Schulz --- src/libs/languageserverprotocol/languagefeatures.cpp | 6 ++++++ src/libs/languageserverprotocol/languagefeatures.h | 3 +++ src/libs/languageserverprotocol/lsputils.h | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/libs/languageserverprotocol/languagefeatures.cpp b/src/libs/languageserverprotocol/languagefeatures.cpp index 30e2b6bd84a..0c76a3b1c03 100644 --- a/src/libs/languageserverprotocol/languagefeatures.cpp +++ b/src/libs/languageserverprotocol/languagefeatures.cpp @@ -261,6 +261,12 @@ DocumentHighlightsResult::DocumentHighlightsResult(const QJsonValue &value) } } +template<> +MarkedString fromJsonValue(const QJsonValue &value) +{ + return MarkedString(value); +} + MarkedString::MarkedString(const QJsonValue &value) { if (value.isObject()) diff --git a/src/libs/languageserverprotocol/languagefeatures.h b/src/libs/languageserverprotocol/languagefeatures.h index e5ca9df31d6..6a60ec3612f 100644 --- a/src/libs/languageserverprotocol/languagefeatures.h +++ b/src/libs/languageserverprotocol/languagefeatures.h @@ -52,6 +52,9 @@ public: operator QJsonValue() const; }; +template<> +LANGUAGESERVERPROTOCOL_EXPORT MarkedString fromJsonValue(const QJsonValue &value); + class LANGUAGESERVERPROTOCOL_EXPORT HoverContent : public std::variant, MarkupContent> { diff --git a/src/libs/languageserverprotocol/lsputils.h b/src/libs/languageserverprotocol/lsputils.h index 32e2bfa6b7e..a5178f813fd 100644 --- a/src/libs/languageserverprotocol/lsputils.h +++ b/src/libs/languageserverprotocol/lsputils.h @@ -68,7 +68,7 @@ public: if (value.isArray()) { QList values; values.reserve(value.toArray().count()); - for (auto arrayValue : value.toArray()) + for (const auto &arrayValue : value.toArray()) values << fromJsonValue(arrayValue); *this = values; } else {