LanguageClient: Expose server information

Server name and version are potentially interesting information.

Change-Id: I4fc9a2556d7fd8285fe0024cf0f83baf95112e65
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2021-04-28 09:25:25 +02:00
parent ec2449cae4
commit 248ebb494d
4 changed files with 30 additions and 0 deletions

View File

@@ -136,6 +136,17 @@ public:
bool parametersAreValid(QString * /*errorMessage*/) const final { return true; }
};
class LANGUAGESERVERPROTOCOL_EXPORT ServerInfo : public JsonObject
{
public:
using JsonObject::JsonObject;
QString name() const { return typedValue<QString>(nameKey); }
Utils::optional<QString> version() const { return optionalValue<QString>(versionKey); }
bool isValid() const override { return contains(nameKey); }
};
class LANGUAGESERVERPROTOCOL_EXPORT InitializeResult : public JsonObject
{
public:
@@ -146,6 +157,9 @@ public:
void setCapabilities(const ServerCapabilities &capabilities)
{ insert(capabilitiesKey, capabilities); }
Utils::optional<ServerInfo> serverInfo() const
{ return optionalValue<ServerInfo>(serverInfoKey); }
bool isValid() const override { return contains(capabilitiesKey); }
};

View File

@@ -190,6 +190,7 @@ constexpr char semanticHighlightingCapabilitiesKey[] = "semanticHighlightingCapa
constexpr char semanticHighlightingKey[] = "semanticHighlighting";
constexpr char semanticTokensKey[] = "semanticTokens";
constexpr char semanticTokensProviderKey[] = "semanticTokensProvider";
constexpr char serverInfoKey[] = "serverInfo";
constexpr char settingsKey[] = "settings";
constexpr char severityKey[] = "severity";
constexpr char signatureHelpKey[] = "signatureHelp";

View File

@@ -1347,6 +1347,17 @@ void Client::initializeCallback(const InitializeRequest::Response &initResponse)
log(QJsonDocument(result).toJson(QJsonDocument::Indented) + '\n'
+ tr("Initialize result is not valid"));
}
const Utils::optional<ServerInfo> serverInfo = result.serverInfo();
if (serverInfo) {
if (!serverInfo->isValid()) {
log(QJsonDocument(result).toJson(QJsonDocument::Indented) + '\n'
+ tr("Server Info is not valid"));
} else {
m_serverName = serverInfo->name();
if (const Utils::optional<QString> version = serverInfo->version())
m_serverVersion = version.value();
}
}
m_serverCapabilities = result.capabilities();
}

View File

@@ -116,6 +116,8 @@ public:
static LanguageServerProtocol::ClientCapabilities defaultClientCapabilities();
void setClientCapabilities(const LanguageServerProtocol::ClientCapabilities &caps);
const LanguageServerProtocol::ServerCapabilities &capabilities() const;
QString serverName() const { return m_serverName; }
QString serverVersion() const { return m_serverVersion; }
const DynamicCapabilities &dynamicCapabilities() const;
void registerCapabilities(const QList<LanguageServerProtocol::Registration> &registrations);
void unregisterCapabilities(const QList<LanguageServerProtocol::Unregistration> &unregistrations);
@@ -259,6 +261,8 @@ private:
ProgressManager m_progressManager;
bool m_activateDocAutomatically = false;
SemanticTokenSupport m_tokentSupport;
QString m_serverName;
QString m_serverVersion;
bool m_locatorsEnabled = true;
};