forked from qt-creator/qt-creator
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:
@@ -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); }
|
||||
};
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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> ®istrations);
|
||||
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;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user