diff options
Diffstat (limited to 'src/libs/languageserverprotocol/servercapabilities.h')
-rw-r--r-- | src/libs/languageserverprotocol/servercapabilities.h | 87 |
1 files changed, 54 insertions, 33 deletions
diff --git a/src/libs/languageserverprotocol/servercapabilities.h b/src/libs/languageserverprotocol/servercapabilities.h index f575017ad9..e1c847ccaa 100644 --- a/src/libs/languageserverprotocol/servercapabilities.h +++ b/src/libs/languageserverprotocol/servercapabilities.h @@ -26,6 +26,7 @@ #pragma once #include "lsptypes.h" +#include "semantictokens.h" namespace LanguageServerProtocol { @@ -37,9 +38,6 @@ public: Utils::optional<bool> workDoneProgress() const { return optionalValue<bool>(workDoneProgressKey); } void setWorkDoneProgress(bool workDoneProgress) { insert(workDoneProgressKey, workDoneProgress); } void clearWorkDoneProgress() { remove(workDoneProgressKey); } - - bool isValid(ErrorHierarchy *error) const override - { return checkOptional<bool>(error, workDoneProgressKey); } }; class LANGUAGESERVERPROTOCOL_EXPORT ResolveProviderOption : public JsonObject @@ -50,9 +48,6 @@ public: Utils::optional<bool> resolveProvider() const { return optionalValue<bool>(resolveProviderKey); } void setResolveProvider(bool resolveProvider) { insert(resolveProviderKey, resolveProvider); } void clearResolveProvider() { remove(resolveProviderKey); } - - bool isValid(ErrorHierarchy *error) const override - { return checkOptional<bool>(error, resolveProviderKey); } }; class LANGUAGESERVERPROTOCOL_EXPORT TextDocumentRegistrationOptions : public JsonObject @@ -68,8 +63,7 @@ public: bool filterApplies(const Utils::FilePath &fileName, const Utils::MimeType &mimeType = Utils::MimeType()) const; - bool isValid(ErrorHierarchy *error) const override - { return checkArray<DocumentFilter>(error, documentSelectorKey); } + bool isValid() const override { return contains(documentSelectorKey); } }; class LANGUAGESERVERPROTOCOL_EXPORT SaveOptions : public JsonObject @@ -81,9 +75,6 @@ public: Utils::optional<bool> includeText() const { return optionalValue<bool>(includeTextKey); } void setIncludeText(bool includeText) { insert(includeTextKey, includeText); } void clearIncludeText() { remove(includeTextKey); } - - bool isValid(ErrorHierarchy *error) const override - { return checkOptional<bool>(error, includeTextKey); } }; class LANGUAGESERVERPROTOCOL_EXPORT TextDocumentSyncOptions : public JsonObject @@ -118,8 +109,6 @@ public: Utils::optional<SaveOptions> save() const { return optionalValue<SaveOptions>(saveKey); } void setSave(const SaveOptions &save) { insert(saveKey, save); } void clearSave() { remove(saveKey); } - - bool isValid(ErrorHierarchy *error) const override; }; enum class TextDocumentSyncKind @@ -142,7 +131,50 @@ public: void setCodeActionKinds(const QList<QString> &codeActionKinds) { insertArray(codeActionKindsKey, codeActionKinds); } - bool isValid(ErrorHierarchy *error) const override; + bool isValid() const override; +}; + +enum class SemanticRequestType { + None = 0x0, + Full = 0x1, + FullDelta = 0x2, + Range = 0x4 +}; +Q_DECLARE_FLAGS(SemanticRequestTypes, SemanticRequestType) + +class LANGUAGESERVERPROTOCOL_EXPORT SemanticTokensOptions : public WorkDoneProgressOptions +{ +public: + using WorkDoneProgressOptions::WorkDoneProgressOptions; + + /// The legend used by the server + SemanticTokensLegend legend() const { return typedValue<SemanticTokensLegend>(legendKey); } + void setLegend(const SemanticTokensLegend &legend) { insert(legendKey, legend); } + + /// Server supports providing semantic tokens for a specific range of a document. + Utils::optional<Utils::variant<bool, QJsonObject>> range() const; + void setRange(const Utils::variant<bool, QJsonObject> &range); + void clearRange() { remove(rangeKey); } + + class FullSemanticTokenOptions : public JsonObject + { + public: + using JsonObject::JsonObject; + + /// The server supports deltas for full documents. + Utils::optional<bool> delta() const { return optionalValue<bool>(deltaKey); } + void setDelta(bool delta) { insert(deltaKey, delta); } + void clearDelta() { remove(deltaKey); } + }; + + /// Server supports providing semantic tokens for a full document. + Utils::optional<Utils::variant<bool, FullSemanticTokenOptions>> full() const; + void setFull(const Utils::variant<bool, FullSemanticTokenOptions> &full); + void clearFull() { remove(fullKey); } + + bool isValid() const override { return contains(legendKey); } + + SemanticRequestTypes supportedRequests() const; }; class LANGUAGESERVERPROTOCOL_EXPORT ServerCapabilities : public JsonObject @@ -167,8 +199,6 @@ public: Utils::optional<bool> resolveProvider() const { return optionalValue<bool>(resolveProviderKey); } void setResolveProvider(bool resolveProvider) { insert(resolveProviderKey, resolveProvider); } void clearResolveProvider() { remove(resolveProviderKey); } - - bool isValid(ErrorHierarchy *error) const override; }; class LANGUAGESERVERPROTOCOL_EXPORT SignatureHelpOptions : public WorkDoneProgressOptions @@ -182,8 +212,6 @@ public: void setTriggerCharacters(const QList<QString> &triggerCharacters) { insertArray(triggerCharactersKey, triggerCharacters); } void clearTriggerCharacters() { remove(triggerCharactersKey); } - - bool isValid(ErrorHierarchy *error) const override; }; using CodeLensOptions = ResolveProviderOption; @@ -205,11 +233,7 @@ public: { insertArray(moreTriggerCharacterKey, moreTriggerCharacter); } void clearMoreTriggerCharacter() { remove(moreTriggerCharacterKey); } - bool isValid(ErrorHierarchy *error) const override - { - return check<QString>(error, firstTriggerCharacterKey) - && checkOptionalArray<QString>(error, moreTriggerCharacterKey); - } + bool isValid() const override { return contains(firstTriggerCharacterKey); } }; using DocumentLinkOptions = ResolveProviderOption; @@ -222,7 +246,7 @@ public: QList<QString> commands() const { return array<QString>(commandsKey); } void setCommands(const QList<QString> &commands) { insertArray(commandsKey, commands); } - bool isValid(ErrorHierarchy *error) const override; + bool isValid() const override; }; using ColorProviderOptions = JsonObject; @@ -247,7 +271,7 @@ public: Utils::optional<QList<QList<QString>>> scopes() const; void setScopes(const QList<QList<QString>> &scopes); - bool isValid(ErrorHierarchy *) const override; + bool isValid() const override; }; // Defines how text documents are synced. Is either a detailed structure defining each @@ -304,8 +328,7 @@ public: void setId(const QString &id) { insert(idKey, id); } void clearId() { remove(idKey); } - bool isValid(ErrorHierarchy *error) const override - { return checkArray<DocumentFilter>(error, documentSelectorKey) && checkOptional<bool>(error, idKey); } + bool isValid() const override { return contains(documentSelectorKey); } }; // The server provides Goto Type Definition support. @@ -334,6 +357,10 @@ public: void setDocumentSymbolProvider(Utils::variant<bool, WorkDoneProgressOptions> documentSymbolProvider); void clearDocumentSymbolProvider() { remove(documentSymbolProviderKey); } + Utils::optional<SemanticTokensOptions> semanticTokensProvider() const; + void setSemanticTokensProvider(const SemanticTokensOptions &semanticTokensProvider); + void clearSemanticTokensProvider() { remove(semanticTokensProviderKey); } + // The server provides workspace symbol support. Utils::optional<Utils::variant<bool, WorkDoneProgressOptions>> workspaceSymbolProvider() const; void setWorkspaceSymbolProvider(Utils::variant<bool, WorkDoneProgressOptions> workspaceSymbolProvider); @@ -374,8 +401,6 @@ public: Utils::optional<bool> prepareProvider() const { return optionalValue<bool>(prepareProviderKey); } void setPrepareProvider(bool prepareProvider) { insert(prepareProviderKey, prepareProvider); } void clearPrepareProvider() { remove(prepareProviderKey); } - - bool isValid(ErrorHierarchy * error) const override; }; // The server provides rename support. @@ -420,8 +445,6 @@ public: Utils::optional<Utils::variant<QString, bool>> changeNotifications() const; void setChangeNotifications(Utils::variant<QString, bool> changeNotifications); void clearChangeNotifications() { remove(changeNotificationsKey); } - - bool isValid(ErrorHierarchy *error) const override; }; Utils::optional<WorkspaceFoldersCapabilities> workspaceFolders() const @@ -446,8 +469,6 @@ public: void setSemanticHighlighting(const SemanticHighlightingServerCapabilities &semanticHighlighting) { insert(semanticHighlightingKey, semanticHighlighting); } void clearSemanticHighlighting() { remove(semanticHighlightingKey); } - - bool isValid(ErrorHierarchy *error) const override; }; } // namespace LanguageClient |