aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/languageserverprotocol/languagefeatures.cpp
diff options
context:
space:
mode:
authorDavid Schulz <[email protected]>2019-01-25 09:48:44 +0100
committerDavid Schulz <[email protected]>2019-01-31 14:20:44 +0000
commitaa2ad04e04e7720f1c75d4846f8be8e1717b2f41 (patch)
tree01b8778105dfe11e4772a4272fb9c644cc26007b /src/libs/languageserverprotocol/languagefeatures.cpp
parent54437cafc62bfe50adcfcc72f3ffc49ca3f9db58 (diff)
LSP: add Command and CodeAction support to the language client
Change-Id: I9e86c17b87c6b6aef36bd0ca293d9db40c554aad Reviewed-by: Eike Ziller <[email protected]>
Diffstat (limited to 'src/libs/languageserverprotocol/languagefeatures.cpp')
-rw-r--r--src/libs/languageserverprotocol/languagefeatures.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/libs/languageserverprotocol/languagefeatures.cpp b/src/libs/languageserverprotocol/languagefeatures.cpp
index 154138cabc1..29d60dc7f73 100644
--- a/src/libs/languageserverprotocol/languagefeatures.cpp
+++ b/src/libs/languageserverprotocol/languagefeatures.cpp
@@ -105,6 +105,16 @@ DocumentSymbolsRequest::DocumentSymbolsRequest(const DocumentSymbolParams &param
: Request(methodName, params)
{ }
+Utils::optional<QList<CodeActionKind> > CodeActionParams::CodeActionContext::only() const
+{
+ return optionalArray<CodeActionKind>(onlyKey);
+}
+
+void CodeActionParams::CodeActionContext::setOnly(const QList<CodeActionKind> &only)
+{
+ insertArray(onlyKey, only);
+}
+
bool CodeActionParams::CodeActionContext::isValid(QStringList *error) const
{
return checkArray<Diagnostic>(error, diagnosticsKey);
@@ -380,4 +390,32 @@ SignatureHelpRequest::SignatureHelpRequest(const TextDocumentPositionParams &par
: Request(methodName, params)
{ }
+CodeActionResult::CodeActionResult(const QJsonValue &val)
+{
+ using ResultArray = QList<Utils::variant<Command, CodeAction>>;
+ if (val.isArray()) {
+ QJsonArray array = val.toArray();
+ ResultArray result;
+ for (const QJsonValue &val : array) {
+ Command command(val);
+ if (command.isValid(nullptr))
+ result << command;
+ else
+ result << CodeAction(val);
+ }
+ emplace<ResultArray>(result);
+ return;
+ }
+ emplace<nullptr_t>(nullptr);
+}
+
+bool CodeAction::isValid(QStringList *error) const
+{
+ return check<QString>(error, titleKey)
+ && checkOptional<CodeActionKind>(error, codeActionKindKey)
+ && checkOptionalArray<Diagnostic>(error, diagnosticsKey)
+ && checkOptional<WorkspaceEdit>(error, editKey)
+ && checkOptional<Command>(error, commandKey);
+}
+
} // namespace LanguageServerProtocol