LanguageServerProtocol: add inserter for variants

Change-Id: I78ff4f34dfd19dceb1f2e0912ab1a0ea036e24a4
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2021-02-03 12:17:20 +01:00
parent 26e540e73d
commit 9dad47387f
3 changed files with 26 additions and 28 deletions

View File

@@ -70,6 +70,11 @@ protected:
iterator insert(const QString &key, const JsonObject &value); iterator insert(const QString &key, const JsonObject &value);
iterator insert(const QString &key, const QJsonValue &value); iterator insert(const QString &key, const QJsonValue &value);
template <typename T, typename V>
iterator insertVariant(const QString &key, const V &variant);
template <typename T1, typename T2, typename... Args, typename V>
iterator insertVariant(const QString &key, const V &variant);
// QJSonObject redirections // QJSonObject redirections
QJsonValue value(const QString &key) const { return m_jsonObject.value(key); } QJsonValue value(const QString &key) const { return m_jsonObject.value(key); }
bool contains(const QString &key) const { return m_jsonObject.contains(key); } bool contains(const QString &key) const { return m_jsonObject.contains(key); }
@@ -129,6 +134,19 @@ private:
QJsonObject m_jsonObject; QJsonObject m_jsonObject;
}; };
template<typename T, typename V>
JsonObject::iterator JsonObject::insertVariant(const QString &key, const V &variant)
{
return Utils::holds_alternative<T>(variant) ? insert(key, Utils::get<T>(variant)) : end();
}
template<typename T1, typename T2, typename... Args, typename V>
JsonObject::iterator JsonObject::insertVariant(const QString &key, const V &variant)
{
auto result = insertVariant<T1>(key, variant);
return result != end() ? result : insertVariant<T2, Args...>(key, variant);
}
template<typename T> template<typename T>
T JsonObject::typedValue(const QString &key) const T JsonObject::typedValue(const QString &key) const
{ {

View File

@@ -62,10 +62,7 @@ Utils::optional<Diagnostic::Code> Diagnostic::code() const
void Diagnostic::setCode(const Diagnostic::Code &code) void Diagnostic::setCode(const Diagnostic::Code &code)
{ {
if (auto val = Utils::get_if<int>(&code)) insertVariant<int, QString>(codeKey, code);
insert(codeKey, *val);
else if (auto val = Utils::get_if<QString>(&code))
insert(codeKey, *val);
} }
bool Diagnostic::isValid(ErrorHierarchy *error) const bool Diagnostic::isValid(ErrorHierarchy *error) const

View File

@@ -38,10 +38,7 @@ Utils::optional<ServerCapabilities::TextDocumentSync> ServerCapabilities::textDo
void ServerCapabilities::setTextDocumentSync(const ServerCapabilities::TextDocumentSync &textDocumentSync) void ServerCapabilities::setTextDocumentSync(const ServerCapabilities::TextDocumentSync &textDocumentSync)
{ {
if (auto val = Utils::get_if<int>(&textDocumentSync)) insertVariant<TextDocumentSyncOptions, int>(textDocumentSyncKey, textDocumentSync);
insert(textDocumentSyncKey, *val);
else if (auto val = Utils::get_if<TextDocumentSyncOptions>(&textDocumentSync))
insert(textDocumentSyncKey, *val);
} }
TextDocumentSyncKind ServerCapabilities::textDocumentSyncKindHelper() TextDocumentSyncKind ServerCapabilities::textDocumentSyncKindHelper()
@@ -72,10 +69,8 @@ ServerCapabilities::typeDefinitionProvider() const
void ServerCapabilities::setTypeDefinitionProvider( void ServerCapabilities::setTypeDefinitionProvider(
const Utils::variant<bool, ServerCapabilities::RegistrationOptions> &typeDefinitionProvider) const Utils::variant<bool, ServerCapabilities::RegistrationOptions> &typeDefinitionProvider)
{ {
if (auto activated = Utils::get_if<bool>(&typeDefinitionProvider)) insertVariant<bool, ServerCapabilities::RegistrationOptions>(typeDefinitionProviderKey,
insert(typeDefinitionProviderKey, *activated); typeDefinitionProvider);
else if (auto options = Utils::get_if<RegistrationOptions>(&typeDefinitionProvider))
insert(typeDefinitionProviderKey, *options);
} }
Utils::optional<Utils::variant<bool, ServerCapabilities::RegistrationOptions>> Utils::optional<Utils::variant<bool, ServerCapabilities::RegistrationOptions>>
@@ -92,10 +87,7 @@ ServerCapabilities::implementationProvider() const
void ServerCapabilities::setImplementationProvider( void ServerCapabilities::setImplementationProvider(
const Utils::variant<bool, ServerCapabilities::RegistrationOptions> &implementationProvider) const Utils::variant<bool, ServerCapabilities::RegistrationOptions> &implementationProvider)
{ {
if (Utils::holds_alternative<bool>(implementationProvider)) insertVariant<bool, RegistrationOptions>(implementationProviderKey, implementationProvider);
insert(implementationProviderKey, Utils::get<bool>(implementationProvider));
else
insert(implementationProviderKey, Utils::get<RegistrationOptions>(implementationProvider));
} }
Utils::optional<Utils::variant<bool, CodeActionOptions>> ServerCapabilities::codeActionProvider() const Utils::optional<Utils::variant<bool, CodeActionOptions>> ServerCapabilities::codeActionProvider() const
@@ -124,10 +116,7 @@ Utils::optional<Utils::variant<ServerCapabilities::RenameOptions, bool>> ServerC
void ServerCapabilities::setRenameProvider(Utils::variant<ServerCapabilities::RenameOptions, bool> renameProvider) void ServerCapabilities::setRenameProvider(Utils::variant<ServerCapabilities::RenameOptions, bool> renameProvider)
{ {
if (Utils::holds_alternative<bool>(renameProvider)) insertVariant<RenameOptions, bool>(renameProviderKey, renameProvider);
insert(renameProviderKey, Utils::get<bool>(renameProvider));
else if (Utils::holds_alternative<RenameOptions>(renameProvider))
insert(renameProviderKey, Utils::get<RenameOptions>(renameProvider));
} }
Utils::optional<Utils::variant<bool, JsonObject>> ServerCapabilities::colorProvider() const Utils::optional<Utils::variant<bool, JsonObject>> ServerCapabilities::colorProvider() const
@@ -143,10 +132,7 @@ Utils::optional<Utils::variant<bool, JsonObject>> ServerCapabilities::colorProvi
void ServerCapabilities::setColorProvider(Utils::variant<bool, JsonObject> colorProvider) void ServerCapabilities::setColorProvider(Utils::variant<bool, JsonObject> colorProvider)
{ {
if (Utils::holds_alternative<bool>(colorProvider)) insertVariant<bool, JsonObject>(renameProviderKey, colorProvider);
insert(renameProviderKey, Utils::get<bool>(colorProvider));
else if (Utils::holds_alternative<JsonObject>(colorProvider))
insert(renameProviderKey, Utils::get<JsonObject>(colorProvider));
} }
bool ServerCapabilities::isValid(ErrorHierarchy *error) const bool ServerCapabilities::isValid(ErrorHierarchy *error) const
@@ -188,10 +174,7 @@ ServerCapabilities::WorkspaceServerCapabilities::WorkspaceFoldersCapabilities::c
void ServerCapabilities::WorkspaceServerCapabilities::WorkspaceFoldersCapabilities::setChangeNotifications( void ServerCapabilities::WorkspaceServerCapabilities::WorkspaceFoldersCapabilities::setChangeNotifications(
Utils::variant<QString, bool> changeNotifications) Utils::variant<QString, bool> changeNotifications)
{ {
if (auto val = Utils::get_if<bool>(&changeNotifications)) insertVariant<QString, bool>(changeNotificationsKey, changeNotifications);
insert(changeNotificationsKey, *val);
else if (auto val = Utils::get_if<QString>(&changeNotifications))
insert(changeNotificationsKey, *val);
} }
bool ServerCapabilities::WorkspaceServerCapabilities::WorkspaceFoldersCapabilities::isValid(ErrorHierarchy *error) const bool ServerCapabilities::WorkspaceServerCapabilities::WorkspaceFoldersCapabilities::isValid(ErrorHierarchy *error) const