forked from qt-creator/qt-creator
LanguageServerProtocol: add inserter for variants
Change-Id: I78ff4f34dfd19dceb1f2e0912ab1a0ea036e24a4 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -70,6 +70,11 @@ protected:
|
||||
iterator insert(const QString &key, const JsonObject &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
|
||||
QJsonValue value(const QString &key) const { return m_jsonObject.value(key); }
|
||||
bool contains(const QString &key) const { return m_jsonObject.contains(key); }
|
||||
@@ -129,6 +134,19 @@ private:
|
||||
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>
|
||||
T JsonObject::typedValue(const QString &key) const
|
||||
{
|
||||
|
@@ -62,10 +62,7 @@ Utils::optional<Diagnostic::Code> Diagnostic::code() const
|
||||
|
||||
void Diagnostic::setCode(const Diagnostic::Code &code)
|
||||
{
|
||||
if (auto val = Utils::get_if<int>(&code))
|
||||
insert(codeKey, *val);
|
||||
else if (auto val = Utils::get_if<QString>(&code))
|
||||
insert(codeKey, *val);
|
||||
insertVariant<int, QString>(codeKey, code);
|
||||
}
|
||||
|
||||
bool Diagnostic::isValid(ErrorHierarchy *error) const
|
||||
|
@@ -38,10 +38,7 @@ Utils::optional<ServerCapabilities::TextDocumentSync> ServerCapabilities::textDo
|
||||
|
||||
void ServerCapabilities::setTextDocumentSync(const ServerCapabilities::TextDocumentSync &textDocumentSync)
|
||||
{
|
||||
if (auto val = Utils::get_if<int>(&textDocumentSync))
|
||||
insert(textDocumentSyncKey, *val);
|
||||
else if (auto val = Utils::get_if<TextDocumentSyncOptions>(&textDocumentSync))
|
||||
insert(textDocumentSyncKey, *val);
|
||||
insertVariant<TextDocumentSyncOptions, int>(textDocumentSyncKey, textDocumentSync);
|
||||
}
|
||||
|
||||
TextDocumentSyncKind ServerCapabilities::textDocumentSyncKindHelper()
|
||||
@@ -72,10 +69,8 @@ ServerCapabilities::typeDefinitionProvider() const
|
||||
void ServerCapabilities::setTypeDefinitionProvider(
|
||||
const Utils::variant<bool, ServerCapabilities::RegistrationOptions> &typeDefinitionProvider)
|
||||
{
|
||||
if (auto activated = Utils::get_if<bool>(&typeDefinitionProvider))
|
||||
insert(typeDefinitionProviderKey, *activated);
|
||||
else if (auto options = Utils::get_if<RegistrationOptions>(&typeDefinitionProvider))
|
||||
insert(typeDefinitionProviderKey, *options);
|
||||
insertVariant<bool, ServerCapabilities::RegistrationOptions>(typeDefinitionProviderKey,
|
||||
typeDefinitionProvider);
|
||||
}
|
||||
|
||||
Utils::optional<Utils::variant<bool, ServerCapabilities::RegistrationOptions>>
|
||||
@@ -92,10 +87,7 @@ ServerCapabilities::implementationProvider() const
|
||||
void ServerCapabilities::setImplementationProvider(
|
||||
const Utils::variant<bool, ServerCapabilities::RegistrationOptions> &implementationProvider)
|
||||
{
|
||||
if (Utils::holds_alternative<bool>(implementationProvider))
|
||||
insert(implementationProviderKey, Utils::get<bool>(implementationProvider));
|
||||
else
|
||||
insert(implementationProviderKey, Utils::get<RegistrationOptions>(implementationProvider));
|
||||
insertVariant<bool, RegistrationOptions>(implementationProviderKey, implementationProvider);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
if (Utils::holds_alternative<bool>(renameProvider))
|
||||
insert(renameProviderKey, Utils::get<bool>(renameProvider));
|
||||
else if (Utils::holds_alternative<RenameOptions>(renameProvider))
|
||||
insert(renameProviderKey, Utils::get<RenameOptions>(renameProvider));
|
||||
insertVariant<RenameOptions, bool>(renameProviderKey, renameProvider);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
if (Utils::holds_alternative<bool>(colorProvider))
|
||||
insert(renameProviderKey, Utils::get<bool>(colorProvider));
|
||||
else if (Utils::holds_alternative<JsonObject>(colorProvider))
|
||||
insert(renameProviderKey, Utils::get<JsonObject>(colorProvider));
|
||||
insertVariant<bool, JsonObject>(renameProviderKey, colorProvider);
|
||||
}
|
||||
|
||||
bool ServerCapabilities::isValid(ErrorHierarchy *error) const
|
||||
@@ -188,10 +174,7 @@ ServerCapabilities::WorkspaceServerCapabilities::WorkspaceFoldersCapabilities::c
|
||||
void ServerCapabilities::WorkspaceServerCapabilities::WorkspaceFoldersCapabilities::setChangeNotifications(
|
||||
Utils::variant<QString, bool> changeNotifications)
|
||||
{
|
||||
if (auto val = Utils::get_if<bool>(&changeNotifications))
|
||||
insert(changeNotificationsKey, *val);
|
||||
else if (auto val = Utils::get_if<QString>(&changeNotifications))
|
||||
insert(changeNotificationsKey, *val);
|
||||
insertVariant<QString, bool>(changeNotificationsKey, changeNotifications);
|
||||
}
|
||||
|
||||
bool ServerCapabilities::WorkspaceServerCapabilities::WorkspaceFoldersCapabilities::isValid(ErrorHierarchy *error) const
|
||||
|
Reference in New Issue
Block a user