2022-08-19 15:59:36 +02:00
|
|
|
// Copyright (C) 2018 The Qt Company Ltd.
|
|
|
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0 WITH Qt-GPL-exception-1.0
|
2018-07-13 12:33:46 +02:00
|
|
|
|
|
|
|
|
#include "initializemessages.h"
|
|
|
|
|
|
|
|
|
|
#include <QCoreApplication>
|
|
|
|
|
|
|
|
|
|
namespace LanguageServerProtocol {
|
|
|
|
|
|
|
|
|
|
constexpr const char InitializeRequest::methodName[];
|
|
|
|
|
constexpr const char InitializeNotification::methodName[];
|
|
|
|
|
constexpr Trace::Values s_trace = Trace::off;
|
|
|
|
|
|
|
|
|
|
Trace Trace::fromString(const QString &val)
|
|
|
|
|
{
|
|
|
|
|
if (val == "messages")
|
|
|
|
|
return messages;
|
|
|
|
|
if (val == "verbose")
|
|
|
|
|
return verbose;
|
|
|
|
|
return off;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#define RETURN_CASE(name) case Trace::name: return QString(#name);
|
|
|
|
|
QString Trace::toString() const
|
|
|
|
|
{
|
|
|
|
|
switch (m_value) {
|
|
|
|
|
RETURN_CASE(off);
|
|
|
|
|
RETURN_CASE(messages);
|
|
|
|
|
RETURN_CASE(verbose);
|
|
|
|
|
}
|
|
|
|
|
return QString("off");
|
|
|
|
|
}
|
|
|
|
|
#undef RETURN_CASE
|
|
|
|
|
|
2022-08-26 10:30:00 +02:00
|
|
|
std::optional<QList<MarkupKind>>
|
2018-07-13 12:33:46 +02:00
|
|
|
TextDocumentClientCapabilities::CompletionCapabilities::CompletionItemCapbilities::
|
|
|
|
|
documentationFormat() const
|
|
|
|
|
{
|
2019-05-15 11:19:31 +02:00
|
|
|
return optionalArray<MarkupKind>(documentationFormatKey);
|
2018-07-13 12:33:46 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
TextDocumentClientCapabilities::CompletionCapabilities::CompletionItemCapbilities::
|
|
|
|
|
setDocumentationFormat(const QList<MarkupKind> &documentationFormat)
|
|
|
|
|
{
|
2019-05-15 11:19:31 +02:00
|
|
|
insertArray(documentationFormatKey, documentationFormat);
|
2018-07-13 12:33:46 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TextDocumentClientCapabilities::CompletionCapabilities::CompletionItemKindCapabilities::CompletionItemKindCapabilities()
|
|
|
|
|
{
|
|
|
|
|
setValueSet({CompletionItemKind::Text, CompletionItemKind::Method, CompletionItemKind::Function,
|
|
|
|
|
CompletionItemKind::Constructor, CompletionItemKind::Field, CompletionItemKind::Variable,
|
|
|
|
|
CompletionItemKind::Class, CompletionItemKind::Interface, CompletionItemKind::Module,
|
|
|
|
|
CompletionItemKind::Property, CompletionItemKind::Unit, CompletionItemKind::Value,
|
|
|
|
|
CompletionItemKind::Enum, CompletionItemKind::Keyword, CompletionItemKind::Snippet,
|
|
|
|
|
CompletionItemKind::Color, CompletionItemKind::File, CompletionItemKind::Reference,
|
|
|
|
|
CompletionItemKind::Folder, CompletionItemKind::EnumMember, CompletionItemKind::Constant,
|
|
|
|
|
CompletionItemKind::Struct, CompletionItemKind::Event, CompletionItemKind::Operator,
|
|
|
|
|
CompletionItemKind::TypeParameter});
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-26 10:30:00 +02:00
|
|
|
std::optional<QList<CompletionItemKind::Kind>>
|
2018-07-13 12:33:46 +02:00
|
|
|
TextDocumentClientCapabilities::CompletionCapabilities::CompletionItemKindCapabilities::
|
|
|
|
|
valueSet() const
|
|
|
|
|
{
|
2022-08-26 10:30:00 +02:00
|
|
|
if (std::optional<QList<int>> array = optionalArray<int>(valueSetKey)) {
|
|
|
|
|
return std::make_optional(Utils::transform(*array, [](int value) {
|
2022-02-24 09:38:59 +01:00
|
|
|
return static_cast<CompletionItemKind::Kind>(value);
|
|
|
|
|
}));
|
|
|
|
|
}
|
2022-08-26 10:30:00 +02:00
|
|
|
return std::nullopt;
|
2018-07-13 12:33:46 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
TextDocumentClientCapabilities::CompletionCapabilities::CompletionItemKindCapabilities::
|
|
|
|
|
setValueSet(const QList<CompletionItemKind::Kind> &valueSet)
|
|
|
|
|
{
|
|
|
|
|
insert(valueSetKey, enumArrayToJsonArray<CompletionItemKind::Kind>(valueSet));
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-26 10:30:00 +02:00
|
|
|
std::optional<QList<MarkupKind> > TextDocumentClientCapabilities::HoverCapabilities::contentFormat() const
|
2018-07-13 12:33:46 +02:00
|
|
|
{
|
2019-05-15 11:19:31 +02:00
|
|
|
return optionalArray<MarkupKind>(contentFormatKey);
|
2018-07-13 12:33:46 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void TextDocumentClientCapabilities::HoverCapabilities::setContentFormat(const QList<MarkupKind> &contentFormat)
|
|
|
|
|
{
|
2019-05-15 11:19:31 +02:00
|
|
|
insertArray(contentFormatKey, contentFormat);
|
2018-07-13 12:33:46 +02:00
|
|
|
}
|
|
|
|
|
|
2022-08-26 10:30:00 +02:00
|
|
|
std::optional<QList<MarkupKind>>
|
2018-07-13 12:33:46 +02:00
|
|
|
TextDocumentClientCapabilities::SignatureHelpCapabilities::SignatureInformationCapabilities::
|
|
|
|
|
documentationFormat() const
|
|
|
|
|
{
|
2019-05-15 11:19:31 +02:00
|
|
|
return optionalArray<MarkupKind>(documentationFormatKey);
|
2018-07-13 12:33:46 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
TextDocumentClientCapabilities::SignatureHelpCapabilities::SignatureInformationCapabilities::
|
|
|
|
|
setDocumentationFormat(const QList<MarkupKind> &documentationFormat)
|
|
|
|
|
{
|
2019-05-15 11:19:31 +02:00
|
|
|
insertArray(documentationFormatKey, documentationFormat);
|
2018-07-13 12:33:46 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
InitializeParams::InitializeParams()
|
|
|
|
|
{
|
|
|
|
|
setProcessId(int(QCoreApplication::applicationPid()));
|
|
|
|
|
setRootUri(LanguageClientValue<DocumentUri>());
|
|
|
|
|
setCapabilities(ClientCapabilities());
|
|
|
|
|
setTrace(s_trace);
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-26 10:30:00 +02:00
|
|
|
std::optional<QJsonObject> InitializeParams::initializationOptions() const
|
2021-02-26 08:29:15 +01:00
|
|
|
{
|
|
|
|
|
const QJsonValue &optionsValue = value(initializationOptionsKey);
|
|
|
|
|
if (optionsValue.isObject())
|
|
|
|
|
return optionsValue.toObject();
|
2022-08-26 10:30:00 +02:00
|
|
|
return std::nullopt;
|
2021-02-26 08:29:15 +01:00
|
|
|
}
|
|
|
|
|
|
2022-08-26 10:30:00 +02:00
|
|
|
std::optional<Trace> InitializeParams::trace() const
|
2018-07-13 12:33:46 +02:00
|
|
|
{
|
|
|
|
|
const QJsonValue &traceValue = value(traceKey);
|
|
|
|
|
if (traceValue.isUndefined())
|
2022-08-26 10:30:00 +02:00
|
|
|
return std::nullopt;
|
|
|
|
|
return std::make_optional(Trace(traceValue.toString()));
|
2018-07-13 12:33:46 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
InitializeRequest::InitializeRequest(const InitializeParams ¶ms)
|
|
|
|
|
: Request(methodName, params)
|
|
|
|
|
{ }
|
|
|
|
|
|
2020-07-13 13:52:27 +02:00
|
|
|
InitializeNotification::InitializeNotification(const InitializedParams ¶ms)
|
|
|
|
|
: Notification(methodName, params)
|
2018-07-13 12:33:46 +02:00
|
|
|
{ }
|
|
|
|
|
|
|
|
|
|
} // namespace LanguageServerProtocol
|