diff --git a/src/libs/languageserverprotocol/jsonobject.h b/src/libs/languageserverprotocol/jsonobject.h index fd90453da1a..ce2ad50a40a 100644 --- a/src/libs/languageserverprotocol/jsonobject.h +++ b/src/libs/languageserverprotocol/jsonobject.h @@ -93,7 +93,8 @@ private: template JsonObject::iterator JsonObject::insertVariant(const Key key, const V &variant) { - return std::holds_alternative(variant) ? insert(key, std::get(variant)) : end(); + const auto v = std::get_if(&variant); + return v ? insert(key, *v) : end(); } template diff --git a/src/libs/languageserverprotocol/jsonrpcmessages.h b/src/libs/languageserverprotocol/jsonrpcmessages.h index 680bff95782..a794f7f8193 100644 --- a/src/libs/languageserverprotocol/jsonrpcmessages.h +++ b/src/libs/languageserverprotocol/jsonrpcmessages.h @@ -68,19 +68,19 @@ public: private: friend size_t qHash(const MessageId &id) { - if (std::holds_alternative(id)) - return QT_PREPEND_NAMESPACE(qHash(std::get(id))); - if (std::holds_alternative(id)) - return QT_PREPEND_NAMESPACE(qHash(std::get(id))); + if (const int *iid = std::get_if(&id)) + return QT_PREPEND_NAMESPACE(qHash(*iid)); + if (const QString *sid = std::get_if(&id)) + return QT_PREPEND_NAMESPACE(qHash(*sid)); return QT_PREPEND_NAMESPACE(qHash(0)); } friend QDebug operator<<(QDebug stream, const MessageId &id) { - if (std::holds_alternative(id)) - stream << std::get(id); + if (const int *iid = std::get_if(&id)) + stream << *iid; else - stream << std::get(id); + stream << *std::get_if(&id); return stream; } }; diff --git a/src/libs/languageserverprotocol/languagefeatures.cpp b/src/libs/languageserverprotocol/languagefeatures.cpp index dcf076bd033..30e2b6bd84a 100644 --- a/src/libs/languageserverprotocol/languagefeatures.cpp +++ b/src/libs/languageserverprotocol/languagefeatures.cpp @@ -303,8 +303,8 @@ HoverContent::HoverContent(const QJsonValue &value) bool HoverContent::isValid() const { - if (std::holds_alternative(*this)) - return std::get(*this).isValid(); + if (const auto s = std::get_if(this)) + return s->isValid(); return true; } diff --git a/src/libs/languageserverprotocol/lsptypes.cpp b/src/libs/languageserverprotocol/lsptypes.cpp index cb327642e36..1bc87075728 100644 --- a/src/libs/languageserverprotocol/lsptypes.cpp +++ b/src/libs/languageserverprotocol/lsptypes.cpp @@ -101,10 +101,10 @@ MarkupOrString::MarkupOrString(const QJsonValue &val) QJsonValue MarkupOrString::toJson() const { - if (std::holds_alternative(*this)) - return std::get(*this); - if (std::holds_alternative(*this)) - return QJsonValue(std::get(*this)); + if (const auto s = std::get_if(this)) + return *s; + if (const auto c = std::get_if(this)) + return QJsonValue(*c); return {}; } diff --git a/src/libs/languageserverprotocol/lsputils.h b/src/libs/languageserverprotocol/lsputils.h index 0c815bafd8a..32e2bfa6b7e 100644 --- a/src/libs/languageserverprotocol/lsputils.h +++ b/src/libs/languageserverprotocol/lsputils.h @@ -89,15 +89,16 @@ public: QList toListOrEmpty() const { - if (std::holds_alternative>(*this)) - return std::get>(*this); + if (const auto l = std::get_if>(this)) + return *l; return {}; } QList toList() const { - QTC_ASSERT(std::holds_alternative>(*this), return {}); - return std::get>(*this); + const auto l = std::get_if>(this); + QTC_ASSERT(l, return {}); + return *l; } bool isNull() const { return std::holds_alternative(*this); } }; @@ -127,15 +128,17 @@ public: T value(const T &defaultValue = T()) const { - QTC_ASSERT(std::holds_alternative(*this), return defaultValue); - return std::get(*this); + const auto t = std::get_if(this); + QTC_ASSERT(t, return defaultValue); + return *t; } template LanguageClientValue transform() { - QTC_ASSERT(!std::holds_alternative(*this), return LanguageClientValue()); - return Type(std::get(*this)); + const auto t = std::get_if(this); + QTC_ASSERT(t, return LanguageClientValue()); + return Type(*t); } bool isNull() const { return std::holds_alternative(*this); } diff --git a/src/libs/languageserverprotocol/progresssupport.cpp b/src/libs/languageserverprotocol/progresssupport.cpp index 2ae4af1b989..ce110782dc1 100644 --- a/src/libs/languageserverprotocol/progresssupport.cpp +++ b/src/libs/languageserverprotocol/progresssupport.cpp @@ -21,9 +21,9 @@ ProgressToken::ProgressToken(const QJsonValue &value) ProgressToken::operator QJsonValue() const { - if (std::holds_alternative(*this)) - return QJsonValue(std::get(*this)); - return QJsonValue(std::get(*this)); + if (const auto s = std::get_if(this)) + return QJsonValue(*s); + return QJsonValue(*std::get_if(this)); } ProgressParams::ProgressType ProgressParams::value() const diff --git a/src/libs/languageserverprotocol/servercapabilities.cpp b/src/libs/languageserverprotocol/servercapabilities.cpp index 0c57f47131a..b109d086872 100644 --- a/src/libs/languageserverprotocol/servercapabilities.cpp +++ b/src/libs/languageserverprotocol/servercapabilities.cpp @@ -189,10 +189,10 @@ void ServerCapabilities::setCallHierarchyProvider( const std::variant &callHierarchyProvider) { QJsonValue val; - if (std::holds_alternative(callHierarchyProvider)) - val = std::get(callHierarchyProvider); - else if (std::holds_alternative(callHierarchyProvider)) - val = QJsonObject(std::get(callHierarchyProvider)); + if (const auto boolvalue = std::get_if(&callHierarchyProvider)) + val = *boolvalue; + else if (const auto options = std::get_if(&callHierarchyProvider)) + val = QJsonObject(*options); insert(callHierarchyProviderKey, val); } @@ -211,10 +211,10 @@ void ServerCapabilities::setTypeHierarchyProvider( const std::variant &typeHierarchyProvider) { QJsonValue val; - if (std::holds_alternative(typeHierarchyProvider)) - val = std::get(typeHierarchyProvider); - else if (std::holds_alternative(typeHierarchyProvider)) - val = QJsonObject(std::get(typeHierarchyProvider)); + if (const auto boolvalue = std::get_if(&typeHierarchyProvider)) + val = *boolvalue; + else if (const auto options = std::get_if(&typeHierarchyProvider)) + val = QJsonObject(*options); insert(typeHierarchyProviderKey, val); } diff --git a/src/libs/languageserverprotocol/workspace.cpp b/src/libs/languageserverprotocol/workspace.cpp index 2d49be2d5ff..0d37b809347 100644 --- a/src/libs/languageserverprotocol/workspace.cpp +++ b/src/libs/languageserverprotocol/workspace.cpp @@ -64,10 +64,11 @@ ExecuteCommandParams::ExecuteCommandParams(const Command &command) LanguageServerProtocol::WorkSpaceFolderResult::operator const QJsonValue() const { - if (!std::holds_alternative>(*this)) + const auto folders = std::get_if>(this); + if (!folders) return QJsonValue::Null; QJsonArray array; - for (const auto &folder : std::get>(*this)) + for (const auto &folder : *folders) array.append(QJsonValue(folder)); return array; } diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index 0d7826307ab..f56538d6cbe 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -903,7 +903,8 @@ void ClientPrivate::requestDocumentHighlightsNow(TextEditor::TextEditorWidget *w = m_serverCapabilities.documentHighlightProvider(); if (!provider.has_value()) return; - if (std::holds_alternative(*provider) && !std::get(*provider)) + const auto boolvalue = std::get_if(&*provider); + if (boolvalue && !*boolvalue) return; } @@ -935,7 +936,8 @@ void ClientPrivate::requestDocumentHighlightsNow(TextEditor::TextEditorWidget *w const QTextCharFormat &format = widget->textDocument()->fontSettings().toTextCharFormat(TextEditor::C_OCCURRENCES); QTextDocument *document = widget->document(); - for (const auto &highlight : std::get>(*result)) { + const auto highlights = std::get_if>(&*result); + for (const auto &highlight : *highlights) { QTextEdit::ExtraSelection selection{widget->textCursor(), format}; const int &start = highlight.range().start().toPositionInDocument(document); const int &end = highlight.range().end().toPositionInDocument(document); @@ -1435,7 +1437,8 @@ void Client::requestCodeActions(const CodeActionRequest &request) } else { std::variant provider = d->m_serverCapabilities.codeActionProvider().value_or(false); - if (!(std::holds_alternative(provider) || std::get(provider))) + const auto boolvalue = std::get_if(&provider); + if (boolvalue && !*boolvalue) return; } @@ -1661,8 +1664,8 @@ bool Client::supportsDocumentSymbols(const TextEditor::TextDocument *doc) const = capabilities().documentSymbolProvider(); if (!provider.has_value()) return false; - if (std::holds_alternative(*provider)) - return std::get(*provider); + if (const auto boolvalue = std::get_if(&*provider)) + return *boolvalue; return true; } @@ -2233,10 +2236,10 @@ bool ClientPrivate::sendWorkspceFolderChanges() const if (auto folder = workspace->workspaceFolders()) { if (folder->supported().value_or(false)) { // holds either the Id for deregistration or whether it is registered - auto notification = folder->changeNotifications().value_or(false); - return std::holds_alternative(notification) - || (std::holds_alternative(notification) - && std::get(notification)); + const std::variant notification + = folder->changeNotifications().value_or(false); + const auto boolvalue = std::get_if(¬ification); + return !boolvalue || *boolvalue; } } } diff --git a/src/plugins/languageclient/clientrequest.cpp b/src/plugins/languageclient/clientrequest.cpp index 4e221f1b9d4..3125b25a72c 100644 --- a/src/plugins/languageclient/clientrequest.cpp +++ b/src/plugins/languageclient/clientrequest.cpp @@ -29,7 +29,8 @@ bool ClientWorkspaceSymbolRequest::preStartCheck() = client()->capabilities().workspaceSymbolProvider(); if (!capability.has_value()) return false; - if (std::holds_alternative(*capability) && !std::get(*capability)) + const auto boolvalue = std::get_if(&*capability); + if (boolvalue && !boolvalue) return false; return true; diff --git a/src/plugins/languageclient/languageclientcompletionassist.cpp b/src/plugins/languageclient/languageclientcompletionassist.cpp index d6a2904fa4c..7486ca102c7 100644 --- a/src/plugins/languageclient/languageclientcompletionassist.cpp +++ b/src/plugins/languageclient/languageclientcompletionassist.cpp @@ -123,11 +123,11 @@ QString LanguageClientCompletionItem::detail() const if (auto _doc = m_item.documentation()) { auto doc = *_doc; QString detailDocText; - if (std::holds_alternative(doc)) { - detailDocText = std::get(doc); - } else if (std::holds_alternative(doc)) { + if (const auto s = std::get_if(&doc)) { + detailDocText = *s; + } else if (const auto m = std::get_if(&doc)) { // TODO markdown parser? - detailDocText = std::get(doc).content(); + detailDocText = m->content(); } if (!detailDocText.isEmpty()) return detailDocText; @@ -495,12 +495,10 @@ void LanguageClientCompletionAssistProcessor::handleCompletionResponse( } QList items; - if (std::holds_alternative(*result)) { - const auto &list = std::get(*result); - items = list.items().value_or(QList()); - } else if (std::holds_alternative>(*result)) { - items = std::get>(*result); - } + if (const auto list = std::get_if(&*result)) + items = list->items().value_or(QList()); + else if (const auto l = std::get_if>(&*result)) + items = *l; auto proposalItems = generateCompletionItems(items); if (!m_snippetsGroup.isEmpty()) { proposalItems << TextEditor::SnippetAssistCollector(m_snippetsGroup, diff --git a/src/plugins/languageclient/languageclientformatter.cpp b/src/plugins/languageclient/languageclientformatter.cpp index 52f35856af3..acebc3184ba 100644 --- a/src/plugins/languageclient/languageclientformatter.cpp +++ b/src/plugins/languageclient/languageclientformatter.cpp @@ -69,7 +69,8 @@ QFutureWatcher *LanguageClientFormatter::format( = m_client->capabilities().documentRangeFormattingProvider(); if (!provider.has_value()) return nullptr; - if (std::holds_alternative(*provider) && !std::get(*provider)) + const auto boolvalue = std::get_if(&*provider); + if (boolvalue && !*boolvalue) return nullptr; } DocumentRangeFormattingParams params; diff --git a/src/plugins/languageclient/languageclienthoverhandler.cpp b/src/plugins/languageclient/languageclienthoverhandler.cpp index e878a62749b..429c89e511a 100644 --- a/src/plugins/languageclient/languageclienthoverhandler.cpp +++ b/src/plugins/languageclient/languageclienthoverhandler.cpp @@ -87,9 +87,8 @@ void HoverHandler::identifyMatch(TextEditor::TextEditorWidget *editorWidget, const std::optional> &provider = m_client->capabilities().hoverProvider(); - bool sendMessage = provider.has_value(); - if (sendMessage && std::holds_alternative(*provider)) - sendMessage = std::get(*provider); + const bool *boolvalue = provider.has_value() ? std::get_if(&*provider) : nullptr; + bool sendMessage = provider.has_value() && (!boolvalue || *boolvalue); if (std::optional registered = m_client->dynamicCapabilities().isRegistered( HoverRequest::methodName)) { sendMessage = *registered; diff --git a/src/plugins/languageclient/languageclientoutline.cpp b/src/plugins/languageclient/languageclientoutline.cpp index 8c45513ce9f..504c9157599 100644 --- a/src/plugins/languageclient/languageclientoutline.cpp +++ b/src/plugins/languageclient/languageclientoutline.cpp @@ -228,10 +228,10 @@ void LanguageClientOutlineWidget::handleResponse(const DocumentUri &uri, { if (uri != m_uri) return; - if (std::holds_alternative>(result)) - m_model.setInfo(std::get>(result)); - else if (std::holds_alternative>(result)) - m_model.setInfo(std::get>(result)); + if (const auto i = std::get_if>(&result)) + m_model.setInfo(*i); + else if (const auto s = std::get_if>(&result)) + m_model.setInfo(*s); else m_model.clear(); @@ -369,10 +369,10 @@ void OutlineComboBox::updateModel(const DocumentUri &resultUri, const DocumentSy { if (m_uri != resultUri) return; - if (std::holds_alternative>(result)) - m_model.setInfo(std::get>(result)); - else if (std::holds_alternative>(result)) - m_model.setInfo(std::get>(result)); + if (const auto i = std::get_if>(&result)) + m_model.setInfo(*i); + else if (const auto s = std::get_if>(&result)) + m_model.setInfo(*i); else m_model.clear(); diff --git a/src/plugins/languageclient/languageclientsymbolsupport.cpp b/src/plugins/languageclient/languageclientsymbolsupport.cpp index 9bc7cd1027f..71b41bbcbfa 100644 --- a/src/plugins/languageclient/languageclientsymbolsupport.cpp +++ b/src/plugins/languageclient/languageclientsymbolsupport.cpp @@ -100,9 +100,8 @@ static MessageId sendTextDocumentPositionParamsRequest(Client *client, sendMessage = supportedFile; } else { const auto provider = std::mem_fn(member)(serverCapability); - sendMessage = provider.has_value(); - if (sendMessage && std::holds_alternative(*provider)) - sendMessage = std::get(*provider); + const bool *boolvalue = provider.has_value() ? std::get_if(&*provider) : nullptr; + sendMessage = provider.has_value() && (!boolvalue || *boolvalue); } if (sendMessage) { client->sendMessage(request); @@ -191,9 +190,8 @@ bool SymbolSupport::supportsFindLink(TextEditor::TextDocument *document, LinkTar else supported = m_client->isSupportedUri(uri); } else { - supported = provider.has_value(); - if (supported && std::holds_alternative(*provider)) - supported = std::get(*provider); + const bool *boolvalue = provider.has_value() ? std::get_if(&*provider) : nullptr; + supported = provider.has_value() && (!boolvalue || *boolvalue); } return supported; } @@ -259,8 +257,8 @@ bool SymbolSupport::supportsFindUsages(TextEditor::TextDocument *document) const return false; } } else if (auto referencesProvider = m_client->capabilities().referencesProvider()) { - if (std::holds_alternative(*referencesProvider)) { - if (!std::get(*referencesProvider)) + if (const auto b = std::get_if(&*referencesProvider)) { + if (!*b) return false; } } else { @@ -447,13 +445,11 @@ static bool supportsRename(Client *client, } } if (auto renameProvider = client->capabilities().renameProvider()) { - if (std::holds_alternative(*renameProvider)) { - if (!std::get(*renameProvider)) + if (const auto b = std::get_if(&*renameProvider)) { + if (!*b) return false; - } else if (std::holds_alternative(*renameProvider)) { - prepareSupported = std::get(*renameProvider) - .prepareProvider() - .value_or(false); + } else if (const auto opt = std::get_if(&*renameProvider)) { + prepareSupported = opt->prepareProvider().value_or(false); } } else { return false; @@ -524,19 +520,17 @@ void SymbolSupport::requestPrepareRename(TextEditor::TextDocument *document, const std::optional &result = response.result(); if (result.has_value()) { - if (std::holds_alternative(*result)) { - auto placeHolderResult = std::get(*result); - startRenameSymbol(params, - placeholder.isEmpty() ? placeHolderResult.placeHolder() - : placeholder, - oldSymbolName, - callback, - preferLowerCaseFileNames); - } else if (std::holds_alternative(*result)) { - auto range = std::get(*result); + if (const auto placeHolderResult = std::get_if(&*result)) { + startRenameSymbol( + params, + placeholder.isEmpty() ? placeHolderResult->placeHolder() : placeholder, + oldSymbolName, + callback, + preferLowerCaseFileNames); + } else if (const auto range = std::get_if(&*result)) { if (document) { - const int start = range.start().toPositionInDocument(document->document()); - const int end = range.end().toPositionInDocument(document->document()); + const int start = range->start().toPositionInDocument(document->document()); + const int end = range->end().toPositionInDocument(document->document()); const QString reportedSymbolName = document->textAt(start, end - start); startRenameSymbol(params, derivePlaceholder(reportedSymbolName, placeholder), @@ -586,28 +580,24 @@ Utils::SearchResultItems generateReplaceItems(const WorkspaceEdit &edits, const DocumentUri::PathMapper &pathMapper = client->hostPathMapper(); if (!documentChanges.isEmpty()) { for (const DocumentChange &documentChange : std::as_const(documentChanges)) { - if (std::holds_alternative(documentChange)) { - const TextDocumentEdit edit = std::get(documentChange); - rangesInDocument[edit.textDocument().uri().toFilePath(pathMapper)] = convertEdits( - edit.edits()); + if (const auto edit = std::get_if(&documentChange)) { + rangesInDocument[edit->textDocument().uri().toFilePath(pathMapper)] = convertEdits( + edit->edits()); } else { Utils::SearchResultItem item; - if (std::holds_alternative(documentChange)) { - auto op = std::get(documentChange); - item.setLineText(op.message(pathMapper)); - item.setFilePath(op.uri().toFilePath(pathMapper)); - item.setUserData(QVariant(op)); - } else if (std::holds_alternative(documentChange)) { - auto op = std::get(documentChange); - item.setLineText(op.message(pathMapper)); - item.setFilePath(op.oldUri().toFilePath(pathMapper)); - item.setUserData(QVariant(op)); - } else if (std::holds_alternative(documentChange)) { - auto op = std::get(documentChange); - item.setLineText(op.message(pathMapper)); - item.setFilePath(op.uri().toFilePath(pathMapper)); - item.setUserData(QVariant(op)); + if (const auto op = std::get_if(&documentChange)) { + item.setLineText(op->message(pathMapper)); + item.setFilePath(op->uri().toFilePath(pathMapper)); + item.setUserData(QVariant(*op)); + } else if (const auto op = std::get_if(&documentChange)) { + item.setLineText(op->message(pathMapper)); + item.setFilePath(op->oldUri().toFilePath(pathMapper)); + item.setUserData(QVariant(*op)); + } else if (const auto op = std::get_if(&documentChange)) { + item.setLineText(op->message(pathMapper)); + item.setFilePath(op->uri().toFilePath(pathMapper)); + item.setUserData(QVariant(*op)); } items << item; diff --git a/src/plugins/languageclient/languageclientutils.cpp b/src/plugins/languageclient/languageclientutils.cpp index 3df7622548d..4924654ffc9 100644 --- a/src/plugins/languageclient/languageclientutils.cpp +++ b/src/plugins/languageclient/languageclientutils.cpp @@ -349,13 +349,12 @@ bool applyDocumentChange(const Client *client, const DocumentChange &change) if (!client) return false; - if (std::holds_alternative(change)) { - return applyTextDocumentEdit(client, std::get(change)); - } else if (std::holds_alternative(change)) { - const auto createOperation = std::get(change); - const FilePath filePath = createOperation.uri().toFilePath(client->hostPathMapper()); + if (const auto e = std::get_if(&change)) { + return applyTextDocumentEdit(client, *e); + } else if (const auto createOperation = std::get_if(&change)) { + const FilePath filePath = createOperation->uri().toFilePath(client->hostPathMapper()); if (filePath.exists()) { - if (const std::optional options = createOperation.options()) { + if (const std::optional options = createOperation->options()) { if (options->overwrite().value_or(false)) { if (!filePath.removeFile()) return false; @@ -365,16 +364,15 @@ bool applyDocumentChange(const Client *client, const DocumentChange &change) } } return filePath.ensureExistingFile(); - } else if (std::holds_alternative(change)) { - const RenameFileOperation renameOperation = std::get(change); - const FilePath oldPath = renameOperation.oldUri().toFilePath(client->hostPathMapper()); + } else if (const auto renameOperation = std::get_if(&change)) { + const FilePath oldPath = renameOperation->oldUri().toFilePath(client->hostPathMapper()); if (!oldPath.exists()) return false; - const FilePath newPath = renameOperation.newUri().toFilePath(client->hostPathMapper()); + const FilePath newPath = renameOperation->newUri().toFilePath(client->hostPathMapper()); if (oldPath == newPath) return true; if (newPath.exists()) { - if (const std::optional options = renameOperation.options()) { + if (const std::optional options = renameOperation->options()) { if (options->overwrite().value_or(false)) { if (!newPath.removeFile()) return false; @@ -384,10 +382,9 @@ bool applyDocumentChange(const Client *client, const DocumentChange &change) } } return oldPath.renameFile(newPath); - } else if (std::holds_alternative(change)) { - const auto deleteOperation = std::get(change); - const FilePath filePath = deleteOperation.uri().toFilePath(client->hostPathMapper()); - if (const std::optional options = deleteOperation.options()) { + } else if (const auto deleteOperation = std::get_if(&change)) { + const FilePath filePath = deleteOperation->uri().toFilePath(client->hostPathMapper()); + if (const std::optional options = deleteOperation->options()) { if (!filePath.exists()) return options->ignoreIfNotExists().value_or(false); if (filePath.isDir() && options->recursive().value_or(false)) diff --git a/src/plugins/languageclient/progressmanager.cpp b/src/plugins/languageclient/progressmanager.cpp index 6b82d289dfc..4ef7d0b60d5 100644 --- a/src/plugins/languageclient/progressmanager.cpp +++ b/src/plugins/languageclient/progressmanager.cpp @@ -69,10 +69,10 @@ bool ProgressManager::isProgressEndMessage(const LanguageServerProtocol::Progres Utils::Id languageClientProgressId(const ProgressToken &token) { constexpr char k_LanguageClientProgressId[] = "LanguageClient.ProgressId."; - auto toString = [](const ProgressToken &token){ - if (std::holds_alternative(token)) - return QString::number(std::get(token)); - return std::get(token); + auto toString = [](const ProgressToken &token) { + if (const auto i = std::get_if(&token)) + return QString::number(*i); + return *std::get_if(&token); }; return Utils::Id(k_LanguageClientProgressId).withSuffix(toString(token)); } diff --git a/src/plugins/languageclient/snippet.cpp b/src/plugins/languageclient/snippet.cpp index 7a0fd211316..b401123ef86 100644 --- a/src/plugins/languageclient/snippet.cpp +++ b/src/plugins/languageclient/snippet.cpp @@ -251,11 +251,11 @@ void SnippetParsingTest::testSnippetParsing() QFETCH(Parts, parts); SnippetParseResult result = LanguageClient::parseSnippet(input); - QCOMPARE(std::holds_alternative(result), success); + const auto snippet = std::get_if(&result); + QCOMPARE(snippet != nullptr, success); if (!success) return; - ParsedSnippet snippet = std::get(result); auto rangesCompare = [&](const ParsedSnippet::Part &actual, const SnippetPart &expected) { QCOMPARE(actual.text, expected.text); @@ -264,10 +264,10 @@ void SnippetParsingTest::testSnippetParsing() QCOMPARE(manglerId, expected.manglerId); }; - QCOMPARE(snippet.parts.count(), parts.count()); + QCOMPARE(snippet->parts.count(), parts.count()); for (int i = 0; i < parts.count(); ++i) - rangesCompare(snippet.parts.at(i), parts.at(i)); + rangesCompare(snippet->parts.at(i), parts.at(i)); } QObject *createSnippetParsingTest()