summaryrefslogtreecommitdiff
path: root/src/libs/languageserverprotocol/servercapabilities.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/languageserverprotocol/servercapabilities.h')
-rw-r--r--src/libs/languageserverprotocol/servercapabilities.h87
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