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 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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user