diff options
author | David Schulz <[email protected]> | 2019-01-25 09:48:44 +0100 |
---|---|---|
committer | David Schulz <[email protected]> | 2019-01-31 14:20:44 +0000 |
commit | aa2ad04e04e7720f1c75d4846f8be8e1717b2f41 (patch) | |
tree | 01b8778105dfe11e4772a4272fb9c644cc26007b /src/libs/languageserverprotocol/languagefeatures.cpp | |
parent | 54437cafc62bfe50adcfcc72f3ffc49ca3f9db58 (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.cpp | 38 |
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 ¶m : 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 |