feat: rename java operation

1. fix java rename don't working

log: fix bug
Change-Id: I3ed898e444a31c41128a99747b1cfcc49a714b5f
This commit is contained in:
Huang Yu 2022-08-05 17:23:25 +08:00 committed by huangyu
parent 59fba25a7e
commit f95887a4e8
19 changed files with 442 additions and 192 deletions

View File

@ -25,6 +25,7 @@
#include "inotify/inotify.h"
#include "lsp/client.h"
#include "lsp/protocol.h"
#include "lsp/newprotocol.h"
#include "type/constants.h"
#include "type/menuext.h"
#include "util/customicons.h"

View File

@ -79,7 +79,7 @@ Client::Client(QObject *parent)
qRegisterMetaType<DiagnosticsParams>("DiagnosticsParams");
qRegisterMetaType<Data>("Data");
qRegisterMetaType<QList<Data>>("QList<Data>");
qRegisterMetaType<RenameChanges>("RenameChanges");
qRegisterMetaType<newlsp::Workspace::WorkspaceEdit>("newlsp::Workspace::WorkspaceEdit");
qRegisterMetaType<References>("References");
}
@ -413,24 +413,80 @@ bool Client::renameResult(const QJsonObject &jsonObj)
<< jsonObj;
d->requestSave.remove(calledID);
QJsonObject resultObj = jsonObj.value(K_RESULT).toObject();
QJsonObject changes = resultObj.value("changes").toObject();
lsp::RenameChanges changesResult;
for (auto fileKey : changes.keys()) {
RenameChange change;
change.documentUri = fileKey;
auto addionTextEditArray = changes[fileKey].toArray();
for (auto addion : addionTextEditArray){
auto addionObj = addion.toObject();
auto rangeObj = addionObj.value(K_RANGE).toObject();
auto startObj = rangeObj.value(K_START).toObject();
auto endObj = rangeObj.value(K_END).toObject();
QString newText = addionObj.value(K_NewText).toString();
Position startPos = {startObj.value(K_LINE).toInt(), startObj.value(K_CHARACTER).toInt()};
Position endPos = {endObj.value(K_LINE).toInt(), endObj.value(K_CHARACTER).toInt()};
Range range = {startPos, endPos} ;
change.edits << TextEdit {newText, range};
QJsonObject changesObj = resultObj.value("changes").toObject();
newlsp::Workspace::WorkspaceEdit changesResult;
if (!changesObj.isEmpty()) {
// std::optional<> changes;
std::map<newlsp::DocumentUri, std::vector<newlsp::TextEdit>> changes;
for (auto fileKey : changesObj.keys()) {
auto addionTextEditArray = changesObj[fileKey].toArray();
std::vector<newlsp::TextEdit> textEdits;
for (auto addion : addionTextEditArray){
auto addionObj = addion.toObject();
auto rangeObj = addionObj.value(K_RANGE).toObject();
auto startObj = rangeObj.value(K_START).toObject();
auto endObj = rangeObj.value(K_END).toObject();
std::string newText = addionObj.value(K_NewText).toString().toStdString();
newlsp::Position startPos = {startObj.value(K_LINE).toInt(), startObj.value(K_CHARACTER).toInt()};
newlsp::Position endPos = {endObj.value(K_LINE).toInt(), endObj.value(K_CHARACTER).toInt()};
newlsp::Range range = {startPos, endPos} ;
textEdits.push_back(newlsp::TextEdit{range, newText});
}
changes[fileKey.toStdString()] = textEdits;
}
changesResult << change;
changesResult.changes = changes;
}
QJsonArray documentChangesArray = resultObj.value("documentChanges").toArray();
if (!documentChangesArray.isEmpty()) {
std::vector<newlsp::TextDocumentEdit> documentChanges;
for (auto val : documentChangesArray) {
std::vector<newlsp::AnnotatedTextEdit> edits;
QJsonArray editsArray = val.toObject().value("edits").toArray();
for (auto val : editsArray) {
newlsp::AnnotatedTextEdit annotatedTextEdit;
std::string newText = val.toObject().value(K_NewText).toString().toStdString();
QJsonObject rangeObj = val.toObject().value(K_RANGE).toObject();
QJsonObject startObj = rangeObj.value(K_START).toObject();
QJsonObject endObj = rangeObj.value(K_END).toObject();
newlsp::Position start = {startObj.value(K_LINE).toInt(), startObj.value(K_CHARACTER).toInt()};
newlsp::Position end = {endObj.value(K_LINE).toInt(), endObj.value(K_CHARACTER).toInt()};
newlsp::Range range{start, end};
annotatedTextEdit.annotationId = {};
annotatedTextEdit.range = range;
annotatedTextEdit.newText = newText;
edits.push_back(annotatedTextEdit);
}
QJsonObject textDoumentObj = val.toObject().value("textDocument").toObject();
newlsp::OptionalVersionedTextDocumentIdentifier textDocument;
textDocument.version = textDoumentObj.value(K_VERSION).toInt();
textDocument.uri = textDoumentObj.value(K_URI).toString().toStdString();
newlsp::TextDocumentEdit documentChangesElem;
documentChangesElem.edits = edits;
documentChangesElem.textDocument = textDocument;
documentChanges.push_back(documentChangesElem);
}
changesResult.documentChanges = documentChanges;
}
QJsonObject changeAnnotationsObj = resultObj.value("changeAnnotations").toObject();
if (!changeAnnotationsObj.isEmpty()) {
std::map<std::string, newlsp::Workspace::ChangeAnnotation> changeAnnotations;
for (auto idKey: changeAnnotationsObj.keys()) {
QJsonObject changeAnnotationObj = changeAnnotationsObj[idKey].toObject();
newlsp::Workspace::ChangeAnnotation changeAnnotation;
std::string label = changeAnnotationObj.value("label").toString().toStdString();
changeAnnotation.label = label;
if (changeAnnotationObj.contains("needsConfirmation")) {
changeAnnotation.needsConfirmation = changeAnnotationObj.value("needsConfirmation").toBool();
}
if (changeAnnotationObj.contains("description")) {
changeAnnotation.description = changeAnnotationObj.value("description").toString().toStdString();
}
changeAnnotations[idKey.toStdString()] = changeAnnotation;
}
changesResult.changeAnnotations = changeAnnotations;
}
emit requestResult(changesResult);
return true;

View File

@ -22,6 +22,7 @@
#define CLIENT_H
#include "common/lsp/protocol.h"
#include "common/lsp/newprotocol.h"
#include <QTcpSocket>
#include <QThread>
@ -82,7 +83,7 @@ signals:
void requestResult(const Highlights &highlights);
void requestResult(const DefinitionProvider &definitionProvider);
void requestResult(const QList<Data> &tokensResult);
void requestResult(const RenameChanges &changes);
void requestResult(const newlsp::Workspace::WorkspaceEdit &changes);
void requestResult(const References &refs);
private:

View File

@ -20,27 +20,27 @@
*/
#include "newprotocol.h"
std::string lsp::Lifecycle::Initialize::JsonConvert::formatScope(const std::string &src)
std::string newlsp::Lifecycle::Initialize::JsonConvert::formatScope(const std::string &src)
{
return "{" + src + "}";
}
std::string lsp::Lifecycle::Initialize::JsonConvert::formatKey(const std::string &key)
std::string newlsp::Lifecycle::Initialize::JsonConvert::formatKey(const std::string &key)
{
return "\"" + key + "\"";
}
std::string lsp::Lifecycle::Initialize::JsonConvert::formatValue(unsigned int value)
std::string newlsp::Lifecycle::Initialize::JsonConvert::formatValue(unsigned int value)
{
return std::to_string(value);
}
std::string lsp::Lifecycle::Initialize::JsonConvert::formatValue(int value)
std::string newlsp::Lifecycle::Initialize::JsonConvert::formatValue(int value)
{
return std::to_string(value);
}
std::string lsp::Lifecycle::Initialize::JsonConvert::formatValue(bool value)
std::string newlsp::Lifecycle::Initialize::JsonConvert::formatValue(bool value)
{
if (true == value)
return "true";
@ -49,12 +49,12 @@ std::string lsp::Lifecycle::Initialize::JsonConvert::formatValue(bool value)
return "false";
}
std::string lsp::Lifecycle::Initialize::JsonConvert::formatValue(const std::string &value)
std::string newlsp::Lifecycle::Initialize::JsonConvert::formatValue(const std::string &value)
{
return "\"" + value + "\"";
}
std::string lsp::Lifecycle::Initialize::JsonConvert::formatValue(const std::vector<int> &vecInt)
std::string newlsp::Lifecycle::Initialize::JsonConvert::formatValue(const std::vector<int> &vecInt)
{
std::string ret;
if (vecInt.size() < 0)
@ -71,7 +71,7 @@ std::string lsp::Lifecycle::Initialize::JsonConvert::formatValue(const std::vect
return ret;
}
std::string lsp::Lifecycle::Initialize::JsonConvert::formatValue(const std::vector<std::string> &vecString)
std::string newlsp::Lifecycle::Initialize::JsonConvert::formatValue(const std::vector<std::string> &vecString)
{
std::string ret;
if (vecString.size() < 0)
@ -88,7 +88,7 @@ std::string lsp::Lifecycle::Initialize::JsonConvert::formatValue(const std::vect
return ret;
}
std::string lsp::Lifecycle::Initialize::JsonConvert::addValue(const std::string &src,
std::string newlsp::Lifecycle::Initialize::JsonConvert::addValue(const std::string &src,
const std::pair<std::string,
std::any> &elem)
{
@ -113,7 +113,7 @@ std::string lsp::Lifecycle::Initialize::JsonConvert::addValue(const std::string
return temp;
}
std::string lsp::Lifecycle::Initialize::JsonConvert::addValue(const std::string &src,
std::string newlsp::Lifecycle::Initialize::JsonConvert::addValue(const std::string &src,
std::initializer_list<std::pair<std::string,
std::any>> &elems)
{
@ -124,7 +124,7 @@ std::string lsp::Lifecycle::Initialize::JsonConvert::addValue(const std::string
return ret;
}
std::string lsp::Lifecycle::Initialize::WorkDoneProgressParams::toStdString() const
std::string newlsp::Lifecycle::Initialize::WorkDoneProgressParams::toStdString() const
{
std::string ret;
if (workDoneToken) {
@ -136,7 +136,7 @@ std::string lsp::Lifecycle::Initialize::WorkDoneProgressParams::toStdString() co
return ret;
}
std::string lsp::Lifecycle::Initialize::ResolveSupport::toStdString() const
std::string newlsp::Lifecycle::Initialize::ResolveSupport::toStdString() const
{
return formatScope(
addValue({}, {
@ -146,12 +146,12 @@ std::string lsp::Lifecycle::Initialize::ResolveSupport::toStdString() const
);
}
std::string lsp::Lifecycle::Initialize::CompletionClientCapabilities::CompletionItem::InsertTextModeSupport::toStdString() const
std::string newlsp::Lifecycle::Initialize::CompletionClientCapabilities::CompletionItem::InsertTextModeSupport::toStdString() const
{
return formatScope(addValue({}, {"valueSet", formatValue(valueSet)}));
}
std::string lsp::Lifecycle::Initialize::CompletionClientCapabilities::CompletionList::toStdString() const
std::string newlsp::Lifecycle::Initialize::CompletionClientCapabilities::CompletionList::toStdString() const
{
std::string ret;
if (itemDefaults)
@ -159,7 +159,7 @@ std::string lsp::Lifecycle::Initialize::CompletionClientCapabilities::Completion
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::CompletionClientCapabilities::CompletionItemKind::toStdString() const
std::string newlsp::Lifecycle::Initialize::CompletionClientCapabilities::CompletionItemKind::toStdString() const
{
std::string ret;
if (valueSet)
@ -167,12 +167,12 @@ std::string lsp::Lifecycle::Initialize::CompletionClientCapabilities::Completion
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::CompletionClientCapabilities::CompletionItem::TagSupport::toStdString() const
std::string newlsp::Lifecycle::Initialize::CompletionClientCapabilities::CompletionItem::TagSupport::toStdString() const
{
return formatScope(addValue({}, {"valueSet", formatValue(valueSet)}));
}
std::string lsp::Lifecycle::Initialize::CompletionClientCapabilities::CompletionItem::toStdString() const
std::string newlsp::Lifecycle::Initialize::CompletionClientCapabilities::CompletionItem::toStdString() const
{
std::string ret;
if (snippetSupport)
@ -239,14 +239,14 @@ std::string lsp::Lifecycle::Initialize::CompletionClientCapabilities::Completion
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::CodeActionLiteralSupport::toStdString() const
std::string newlsp::Lifecycle::Initialize::CodeActionLiteralSupport::toStdString() const
{
std::string ret;
ret = addValue(ret, {"codeActionKind", codeActionKind.toStdString()});
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::ParameterInformation::toStdString() const
std::string newlsp::Lifecycle::Initialize::ParameterInformation::toStdString() const
{
std::string ret;
if (labelOffsetSupport)
@ -257,7 +257,7 @@ std::string lsp::Lifecycle::Initialize::ParameterInformation::toStdString() cons
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::SignatureInformation::toStdString() const
std::string newlsp::Lifecycle::Initialize::SignatureInformation::toStdString() const
{
std::string ret;
@ -280,14 +280,14 @@ std::string lsp::Lifecycle::Initialize::SignatureInformation::toStdString() cons
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::CodeActionKind::toStdString() const
std::string newlsp::Lifecycle::Initialize::CodeActionKind::toStdString() const
{
std::string ret;
ret = addValue(ret, {"valueSet", formatValue(valueSet)});
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::ChangeAnotationSupport::toStdString() const
std::string newlsp::Lifecycle::Initialize::ChangeAnotationSupport::toStdString() const
{
std::string ret;
if (groupsOnLabel)
@ -295,12 +295,12 @@ std::string lsp::Lifecycle::Initialize::ChangeAnotationSupport::toStdString() co
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::SymbolKind::toStdString() const
std::string newlsp::Lifecycle::Initialize::SymbolKind::toStdString() const
{
return formatScope(addValue({}, {"valueSet", formatValue(valueSet)}));
}
std::string lsp::Lifecycle::Initialize::FoldingRangeKind::toStdString() const
std::string newlsp::Lifecycle::Initialize::FoldingRangeKind::toStdString() const
{
std::string ret;
if (valueSet)
@ -308,7 +308,7 @@ std::string lsp::Lifecycle::Initialize::FoldingRangeKind::toStdString() const
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::FoldingRange::toStdString() const
std::string newlsp::Lifecycle::Initialize::FoldingRange::toStdString() const
{
std::string ret;
if (collapsedText)
@ -316,7 +316,7 @@ std::string lsp::Lifecycle::Initialize::FoldingRange::toStdString() const
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::WorkspaceEditClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::WorkspaceEditClientCapabilities::toStdString() const
{
std::string ret;
if (documentChanges)
@ -332,7 +332,7 @@ std::string lsp::Lifecycle::Initialize::WorkspaceEditClientCapabilities::toStdSt
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::DidChangeConfigurationClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::DidChangeConfigurationClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -340,7 +340,7 @@ std::string lsp::Lifecycle::Initialize::DidChangeConfigurationClientCapabilities
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::DidChangeWatchedFilesClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::DidChangeWatchedFilesClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -350,7 +350,7 @@ std::string lsp::Lifecycle::Initialize::DidChangeWatchedFilesClientCapabilities:
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::ExecuteCommandClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::ExecuteCommandClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -358,14 +358,14 @@ std::string lsp::Lifecycle::Initialize::ExecuteCommandClientCapabilities::toStdS
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::WorkspaceSymbolClientCapabilities::TagSupport::toStdString() const
std::string newlsp::Lifecycle::Initialize::WorkspaceSymbolClientCapabilities::TagSupport::toStdString() const
{
std::string ret;
ret = addValue(ret, {"valueSet", formatValue(valueSet)});
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::WorkspaceSymbolClientCapabilities::toStdString() const{
std::string newlsp::Lifecycle::Initialize::WorkspaceSymbolClientCapabilities::toStdString() const{
std::string ret;
if (dynamicRegistration)
ret = addValue(ret, {"dynamicRegistration", formatValue(dynamicRegistration.value())});
@ -378,7 +378,7 @@ std::string lsp::Lifecycle::Initialize::WorkspaceSymbolClientCapabilities::toStd
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::SemanticTokensWorkspaceClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::SemanticTokensWorkspaceClientCapabilities::toStdString() const
{
std::string ret;
if (refreshSupport.value())
@ -386,7 +386,7 @@ std::string lsp::Lifecycle::Initialize::SemanticTokensWorkspaceClientCapabilitie
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::CodeLensWorkspaceClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::CodeLensWorkspaceClientCapabilities::toStdString() const
{
std::string ret;
if (refreshSupport)
@ -394,7 +394,7 @@ std::string lsp::Lifecycle::Initialize::CodeLensWorkspaceClientCapabilities::toS
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::InlineValueWorkspaceClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::InlineValueWorkspaceClientCapabilities::toStdString() const
{
std::string ret;
if (refreshSupport)
@ -402,7 +402,7 @@ std::string lsp::Lifecycle::Initialize::InlineValueWorkspaceClientCapabilities::
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::InlayHintWorkspaceClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::InlayHintWorkspaceClientCapabilities::toStdString() const
{
std::string ret;
if (refreshSupport)
@ -410,7 +410,7 @@ std::string lsp::Lifecycle::Initialize::InlayHintWorkspaceClientCapabilities::to
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::DiagnosticWorkspaceClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::DiagnosticWorkspaceClientCapabilities::toStdString() const
{
std::string ret;
if (refreshSupport)
@ -418,7 +418,7 @@ std::string lsp::Lifecycle::Initialize::DiagnosticWorkspaceClientCapabilities::t
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::TextDocumentSyncClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::TextDocumentSyncClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -432,7 +432,7 @@ std::string lsp::Lifecycle::Initialize::TextDocumentSyncClientCapabilities::toSt
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::CompletionClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::CompletionClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -450,7 +450,7 @@ std::string lsp::Lifecycle::Initialize::CompletionClientCapabilities::toStdStrin
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::HoverClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::HoverClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -460,7 +460,7 @@ std::string lsp::Lifecycle::Initialize::HoverClientCapabilities::toStdString() c
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::SignatureHelpClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::SignatureHelpClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -472,7 +472,7 @@ std::string lsp::Lifecycle::Initialize::SignatureHelpClientCapabilities::toStdSt
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::DeclarationClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::DeclarationClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -482,7 +482,7 @@ std::string lsp::Lifecycle::Initialize::DeclarationClientCapabilities::toStdStri
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::DefinitionClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::DefinitionClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -492,7 +492,7 @@ std::string lsp::Lifecycle::Initialize::DefinitionClientCapabilities::toStdStrin
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::TypeDefinitionClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::TypeDefinitionClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -502,7 +502,7 @@ std::string lsp::Lifecycle::Initialize::TypeDefinitionClientCapabilities::toStdS
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::ImplementationClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::ImplementationClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -512,7 +512,7 @@ std::string lsp::Lifecycle::Initialize::ImplementationClientCapabilities::toStdS
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::ReferenceClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::ReferenceClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -520,7 +520,7 @@ std::string lsp::Lifecycle::Initialize::ReferenceClientCapabilities::toStdString
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::DocumentHighlightClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::DocumentHighlightClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -528,7 +528,7 @@ std::string lsp::Lifecycle::Initialize::DocumentHighlightClientCapabilities::toS
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::DocumentSymbolClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::DocumentSymbolClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -545,7 +545,7 @@ std::string lsp::Lifecycle::Initialize::DocumentSymbolClientCapabilities::toStdS
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::CodeActionClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::CodeActionClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -565,7 +565,7 @@ std::string lsp::Lifecycle::Initialize::CodeActionClientCapabilities::toStdStrin
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::CodeLensClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::CodeLensClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -573,7 +573,7 @@ std::string lsp::Lifecycle::Initialize::CodeLensClientCapabilities::toStdString(
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::DocumentLinkClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::DocumentLinkClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -583,7 +583,7 @@ std::string lsp::Lifecycle::Initialize::DocumentLinkClientCapabilities::toStdStr
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::DocumentColorClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::DocumentColorClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -591,7 +591,7 @@ std::string lsp::Lifecycle::Initialize::DocumentColorClientCapabilities::toStdSt
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::DocumentFormattingClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::DocumentFormattingClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -599,7 +599,7 @@ std::string lsp::Lifecycle::Initialize::DocumentFormattingClientCapabilities::to
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::DocumentRangeFormattingClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::DocumentRangeFormattingClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -607,7 +607,7 @@ std::string lsp::Lifecycle::Initialize::DocumentRangeFormattingClientCapabilitie
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::DocumentOnTypeFormattingClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::DocumentOnTypeFormattingClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -615,7 +615,7 @@ std::string lsp::Lifecycle::Initialize::DocumentOnTypeFormattingClientCapabiliti
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::RenameClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::RenameClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -629,7 +629,7 @@ std::string lsp::Lifecycle::Initialize::RenameClientCapabilities::toStdString()
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::PublishDiagnosticsClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::PublishDiagnosticsClientCapabilities::toStdString() const
{
std::string ret;
if (relatedInformation)
@ -645,7 +645,7 @@ std::string lsp::Lifecycle::Initialize::PublishDiagnosticsClientCapabilities::to
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::FoldingRangeClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::FoldingRangeClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -661,7 +661,7 @@ std::string lsp::Lifecycle::Initialize::FoldingRangeClientCapabilities::toStdStr
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::SelectionRangeClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::SelectionRangeClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -669,7 +669,7 @@ std::string lsp::Lifecycle::Initialize::SelectionRangeClientCapabilities::toStdS
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::LinkedEditingRangeClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::LinkedEditingRangeClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -677,7 +677,7 @@ std::string lsp::Lifecycle::Initialize::LinkedEditingRangeClientCapabilities::to
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::CallHierarchyClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::CallHierarchyClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -685,7 +685,7 @@ std::string lsp::Lifecycle::Initialize::CallHierarchyClientCapabilities::toStdSt
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::SemanticTokensClientCapabilities::Requests::Full::toStdString() const
std::string newlsp::Lifecycle::Initialize::SemanticTokensClientCapabilities::Requests::Full::toStdString() const
{
std::string ret;
if (delta) {
@ -694,7 +694,7 @@ std::string lsp::Lifecycle::Initialize::SemanticTokensClientCapabilities::Reques
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::SemanticTokensClientCapabilities::Requests::toStdString() const
std::string newlsp::Lifecycle::Initialize::SemanticTokensClientCapabilities::Requests::toStdString() const
{
std::string ret;
if (range) {
@ -708,7 +708,7 @@ std::string lsp::Lifecycle::Initialize::SemanticTokensClientCapabilities::Reques
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::SemanticTokensClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::SemanticTokensClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -730,7 +730,7 @@ std::string lsp::Lifecycle::Initialize::SemanticTokensClientCapabilities::toStdS
std::string lsp::Lifecycle::Initialize::MonikerClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::MonikerClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -738,7 +738,7 @@ std::string lsp::Lifecycle::Initialize::MonikerClientCapabilities::toStdString()
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::TypeHierarchyClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::TypeHierarchyClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -746,7 +746,7 @@ std::string lsp::Lifecycle::Initialize::TypeHierarchyClientCapabilities::toStdSt
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::InlineValueClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::InlineValueClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -754,7 +754,7 @@ std::string lsp::Lifecycle::Initialize::InlineValueClientCapabilities::toStdStri
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::InlayHintClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::InlayHintClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -764,7 +764,7 @@ std::string lsp::Lifecycle::Initialize::InlayHintClientCapabilities::toStdString
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::DiagnosticClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::DiagnosticClientCapabilities::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -774,7 +774,7 @@ std::string lsp::Lifecycle::Initialize::DiagnosticClientCapabilities::toStdStrin
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::TextDocumentClientCapabilities::toStdString() const {
std::string newlsp::Lifecycle::Initialize::TextDocumentClientCapabilities::toStdString() const {
std::string ret;
if (synchronization)
ret = addValue(ret, {"synchronization", synchronization.value().toStdString()});
@ -839,7 +839,7 @@ std::string lsp::Lifecycle::Initialize::TextDocumentClientCapabilities::toStdStr
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::FileOperations::toStdString() const
std::string newlsp::Lifecycle::Initialize::FileOperations::toStdString() const
{
std::string ret;
if (dynamicRegistration)
@ -859,7 +859,7 @@ std::string lsp::Lifecycle::Initialize::FileOperations::toStdString() const
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::Workspace::toStdString() const
std::string newlsp::Lifecycle::Initialize::Workspace::toStdString() const
{
std::string ret;
if (applyEdit)
@ -893,7 +893,7 @@ std::string lsp::Lifecycle::Initialize::Workspace::toStdString() const
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::ClientInfo::toStdString() const
std::string newlsp::Lifecycle::Initialize::ClientInfo::toStdString() const
{
std::string result{};
result = addValue(result, {"name", formatValue(name)});
@ -902,7 +902,7 @@ std::string lsp::Lifecycle::Initialize::ClientInfo::toStdString() const
return formatScope(result);
}
std::string lsp::Lifecycle::Initialize::NotebookDocumentSyncClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::NotebookDocumentSyncClientCapabilities::toStdString() const
{
std::string ret = "";
if (dynamicRegistration)
@ -912,14 +912,14 @@ std::string lsp::Lifecycle::Initialize::NotebookDocumentSyncClientCapabilities::
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::NotebookDocumentClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::NotebookDocumentClientCapabilities::toStdString() const
{
std::string ret;
ret = addValue({}, {"synchronization", synchronization.toStdString()});
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::MessageActionItem::toStdString() const
std::string newlsp::Lifecycle::Initialize::MessageActionItem::toStdString() const
{
std::string ret;
if (additionalPropertiesSupport)
@ -927,7 +927,7 @@ std::string lsp::Lifecycle::Initialize::MessageActionItem::toStdString() const
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::ShowMessageRequestClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::ShowMessageRequestClientCapabilities::toStdString() const
{
std::string ret;
if (messageActionItem)
@ -935,13 +935,13 @@ std::string lsp::Lifecycle::Initialize::ShowMessageRequestClientCapabilities::to
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::ShowDocumentClientCapabilities::toStdString() const {
std::string newlsp::Lifecycle::Initialize::ShowDocumentClientCapabilities::toStdString() const {
std::string ret;
ret = addValue(ret, {"support", formatValue(support)});
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::Window::toStdString() const
std::string newlsp::Lifecycle::Initialize::Window::toStdString() const
{
std::string ret;
if (workDoneProgress)
@ -953,7 +953,7 @@ std::string lsp::Lifecycle::Initialize::Window::toStdString() const
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::StaleRequestSupport::toStdString() const
std::string newlsp::Lifecycle::Initialize::StaleRequestSupport::toStdString() const
{
std::string ret;
ret = addValue(ret, {"cancel", formatValue(cancel)});
@ -961,7 +961,7 @@ std::string lsp::Lifecycle::Initialize::StaleRequestSupport::toStdString() const
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::RegularExpressionsClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::RegularExpressionsClientCapabilities::toStdString() const
{
std::string ret;
ret = addValue(ret, {"engine", formatValue(engine)});
@ -970,7 +970,7 @@ std::string lsp::Lifecycle::Initialize::RegularExpressionsClientCapabilities::to
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::MarkdownClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::MarkdownClientCapabilities::toStdString() const
{
std::string ret;
ret = addValue(ret, {"parser", formatValue(parser)});
@ -981,7 +981,7 @@ std::string lsp::Lifecycle::Initialize::MarkdownClientCapabilities::toStdString(
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::General::toStdString() const
std::string newlsp::Lifecycle::Initialize::General::toStdString() const
{
std::string ret;
if (staleRequestSupport)
@ -997,7 +997,7 @@ std::string lsp::Lifecycle::Initialize::General::toStdString() const
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::ClientCapabilities::toStdString() const
std::string newlsp::Lifecycle::Initialize::ClientCapabilities::toStdString() const
{
std::string ret;
if (workspace)
@ -1013,7 +1013,7 @@ std::string lsp::Lifecycle::Initialize::ClientCapabilities::toStdString() const
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::WorkspaceFolder::toStdString() const
std::string newlsp::Lifecycle::Initialize::WorkspaceFolder::toStdString() const
{
std::string ret;
ret = addValue(ret, {"uri", formatValue(uri)});
@ -1021,8 +1021,8 @@ std::string lsp::Lifecycle::Initialize::WorkspaceFolder::toStdString() const
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::InitializeParams::formatValue(
const std::vector<lsp::Lifecycle::Initialize::WorkspaceFolder> &workspaceFolders) const
std::string newlsp::Lifecycle::Initialize::InitializeParams::formatValue(
const std::vector<newlsp::Lifecycle::Initialize::WorkspaceFolder> &workspaceFolders) const
{
std::string ret;
ret += "[";
@ -1036,7 +1036,7 @@ std::string lsp::Lifecycle::Initialize::InitializeParams::formatValue(
return ret;
}
std::string lsp::Lifecycle::Initialize::InitializeParams::toStdString() const
std::string newlsp::Lifecycle::Initialize::InitializeParams::toStdString() const
{
std::string ret;
@ -1068,14 +1068,14 @@ std::string lsp::Lifecycle::Initialize::InitializeParams::toStdString() const
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::DocumentSymbolClientCapabilities::TagSupport::toStdString() const
std::string newlsp::Lifecycle::Initialize::DocumentSymbolClientCapabilities::TagSupport::toStdString() const
{
std::string ret;
ret = addValue(ret, {"valueSet", formatValue(valueSet)});
return formatScope(ret);
}
std::string lsp::Lifecycle::Initialize::PublishDiagnosticsClientCapabilities::TagSupport::toStdString() const
std::string newlsp::Lifecycle::Initialize::PublishDiagnosticsClientCapabilities::TagSupport::toStdString() const
{
std::string ret;
ret = addValue(ret, {"valueSet", formatValue(valueSet)});

View File

@ -21,7 +21,7 @@
#ifndef NEWPROTOCOL_H
#define NEWPROTOCOL_H
#include "type/menuext.h"
#include "common/type/menuext.h"
#include <QJsonDocument>
#include <QJsonObject>
@ -32,7 +32,24 @@
#include <optional>
#include <any>
namespace lsp {
#include <QDebug>
namespace newlsp {
template<class T>
static bool any_contrast(const std::any &any)
{
qInfo() << any.type().name();
qInfo() << std::any(T()).type().name();
if (any.type() == std::any(T()).type()) {
return true;
}
return false;
}
typedef std::string DocumentUri;
typedef std::string URI ;
typedef std::any ProgressToken; // integer | string;
namespace Lifecycle {
namespace Initialize {
namespace BasicEnum {
@ -251,26 +268,13 @@ struct JsonConvert
static std::string formatValue(const std::vector<int> &vecInt);
static std::string formatValue(const std::vector<std::string> &vecString);
template<class T>
static bool any_contrast(const std::any &any)
{
if (any.type() == std::any(T()).type()) {
return true;
}
return false;
}
static std::string addValue(const std::string &src,
const std::pair<std::string, std::any> &elem);
static std::string addValue(const std::string &src,
const std::pair<std::string, std::any> &elem);
static std::string addValue(const std::string &src,
std::initializer_list<std::pair<std::string, std::any>> &elems);
std::initializer_list<std::pair<std::string, std::any>> &elems);
};
typedef std::string DocumentUri;
typedef std::string URI ;
typedef std::any ProgressToken; // integer | string;
struct WorkDoneProgressParams: JsonConvert
{
std::optional<ProgressToken> workDoneToken{};
@ -877,5 +881,103 @@ struct InitializeParams : WorkDoneProgressParams
};
} // Initialize
} // Lifecycle
} // lsp
typedef std::string ChangeAnnotationIdentifier;
struct Position{
int line;
int character;
};
struct Range
{
Position start;
Position end;
};
struct TextEdit {
Range range;
std::string newText;
};
struct AnnotatedTextEdit : TextEdit
{
ChangeAnnotationIdentifier annotationId;
};
struct TextDocumentIdentifier
{
DocumentUri uri;
};
struct OptionalVersionedTextDocumentIdentifier : TextDocumentIdentifier
{
std::optional<int> version;
};
struct TextDocumentEdit
{
OptionalVersionedTextDocumentIdentifier textDocument;
std::vector<AnnotatedTextEdit> edits;
};
namespace Workspace
{
struct CreateFileOptions {
std::optional<bool> overwrite;
std::optional<bool> ignoreIfExists;
};
struct RenameFileOptions {
std::optional<bool> overwrite;
std::optional<bool> ignoreIfExists;
};
struct CreateFile
{
std::string kind{"create"};
DocumentUri uri;
std::optional<CreateFileOptions> options;
std::optional<ChangeAnnotationIdentifier> annotationId;
};
struct RenameFile
{
std::string kind{"rename"};
DocumentUri oldUri;
DocumentUri newUri;
std::optional<RenameFileOptions> options;
std::optional<ChangeAnnotationIdentifier> annotationId;
};
struct DeleteFileOptions
{
std::optional<bool> recursive;
std::optional<bool> ignoreIfNotExists;
};
struct DeleteFile
{
std::string kind{"delete"};
DocumentUri uri;
std::optional<DeleteFileOptions> options;
std::optional<ChangeAnnotationIdentifier> annotationId;
};
struct ChangeAnnotation
{
std::string label;
bool needsConfirmation;
std::optional<std::string> description;
};
struct WorkspaceEdit
{
// { [uri: DocumentUri]: TextEdit[]; };
std::optional<std::map<DocumentUri, std::vector<TextEdit>>> changes;
// ( TextDocumentEdit[] | (TextDocumentEdit | CreateFile | RenameFile | DeleteFile)[]);
std::optional<std::any> documentChanges;
std::optional<std::map<std::string, ChangeAnnotation>> changeAnnotations;
};
}
} // newlsp
#endif // NEWPROTOCOL_H

View File

@ -303,8 +303,8 @@ QJsonObject initialize(const QString &workspaceFolder, const QString &language,
} else if (language == JAVA) {
using namespace lsp::Lifecycle;
using namespace lsp::Lifecycle::Initialize;
using namespace newlsp::Lifecycle;
using namespace newlsp::Lifecycle::Initialize;
std::string workspaceFolderUriStr = QUrl::fromLocalFile(workspaceFolder).toString().toStdString();
std::string workspaceNameStr = QFileInfo(workspaceFolder).fileName().toStdString();

View File

@ -368,8 +368,6 @@ struct RenameChange : public TextDocumentIdentifier
AdditionalTextEdits edits;
};
struct RenameChanges : public QList<RenameChange>{};
struct References : public Locations{};
namespace new_initialize{

View File

@ -240,7 +240,7 @@ inline bool StyleLsp::isCharSymbol(const char ch) {
|| (ch >= 0x5B && ch < 0x60 + 1) || (ch >= 0x7B && ch < 0x7E + 1);
}
Sci_Position StyleLsp::getSciPosition(sptr_t doc, const lsp::Position &pos)
Sci_Position StyleLsp::getSciPosition(sptr_t doc, const newlsp::Position &pos)
{
auto docTemp = (Scintilla::Internal::Document*)(doc);
return docTemp->GetRelativePosition(docTemp->LineStart(pos.line), pos.character);
@ -250,7 +250,7 @@ lsp::Position StyleLsp::getLspPosition(sptr_t doc, sptr_t sciPosition)
{
auto docTemp = (Scintilla::Internal::Document*)(doc);
int line = docTemp->LineFromPosition(sciPosition);
Sci_Position lineChStartPos = getSciPosition(doc, lsp::Position{line, 0});
Sci_Position lineChStartPos = getSciPosition(doc, newlsp::Position{line, 0});
return lsp::Position{line, (int)(sciPosition - lineChStartPos)};
}
@ -276,7 +276,12 @@ StyleLsp::StyleLsp(TextEdit *parent)
QObject::connect(&d->renamePopup, &RenamePopup::editingFinished, this, &StyleLsp::renameRequest, Qt::UniqueConnection);
QObject::connect(RefactorWidget::instance(), &RefactorWidget::doubleClicked,
this, [=](const QString &filePath, const lsp::Range &range){
TextEditTabWidget::instance()->jumpToRange(filePath, range);
newlsp::Range newRange;
newRange.start.line = range.start.line;
newRange.start.character = range.start.character;
newRange.end.line = range.end.line;
newRange.end.character = range.end.character;
TextEditTabWidget::instance()->jumpToRange(filePath, newRange);
});
}
@ -706,8 +711,10 @@ void StyleLsp::setDiagnostics(const lsp::DiagnosticsParams &params)
this->cleanDiagnostics();
for (auto val : params.diagnostics) {
if (val.severity == lsp::Diagnostic::Severity::Error) { // error
Sci_Position startPos = getSciPosition(d->edit->docPointer(), val.range.start);
Sci_Position endPos = getSciPosition(d->edit->docPointer(), val.range.end);
newlsp::Position start{val.range.start.line, val.range.start.character};
newlsp::Position end{val.range.end.line, val.range.start.character};
Sci_Position startPos = getSciPosition(d->edit->docPointer(), start);
Sci_Position endPos = getSciPosition(d->edit->docPointer(), end);
d->edit->setIndicatorCurrent(INDIC_SQUIGGLE);
d->edit->indicSetFore(INDIC_SQUIGGLE, StyleColor::color(StyleColor::Table::get()->Red));
d->edit->indicatorFillRange(startPos, endPos - startPos);

View File

@ -66,7 +66,7 @@ public:
RedTextFore = 63,
};
static Sci_Position getSciPosition(sptr_t doc, const lsp::Position &pos);
static Sci_Position getSciPosition(sptr_t doc, const newlsp::Position &pos);
static lsp::Position getLspPosition(sptr_t doc, sptr_t sciPosition);
static int getLspCharacter(sptr_t doc, sptr_t sciPosition);
static bool isCharSymbol(const char ch);

View File

@ -173,7 +173,7 @@ void TextEditTabWidget::openFile(const Head &head, const QString &filePath)
lsp::Client *client = lsp::ClientManager::instance()->get(head);
// 全局rename操作
QObject::connect(client, QOverload<const lsp::RenameChanges&>::of(&lsp::Client::requestResult),
QObject::connect(client, QOverload<const newlsp::Workspace::WorkspaceEdit&>::of(&lsp::Client::requestResult),
this, &TextEditTabWidget::doRenameReplace, Qt::UniqueConnection);
// 使用取出适用的编辑器
@ -240,7 +240,7 @@ void TextEditTabWidget::jumpToLine(const QString &filePath, int line)
}
}
void TextEditTabWidget::jumpToRange(const QString &filePath, const lsp::Range &range)
void TextEditTabWidget::jumpToRange(const QString &filePath, const newlsp::Range &range)
{
auto edit = switchFileAndToOpen(filePath);
@ -278,7 +278,7 @@ void TextEditTabWidget::debugPointClean()
}
}
void TextEditTabWidget::replaceRange(const QString &filePath, const lsp::Range &range, const QString &text)
void TextEditTabWidget::replaceRange(const QString &filePath, const newlsp::Range &range, const QString &text)
{
auto edit = d->textEdits.value(filePath);
if (edit) {
@ -471,12 +471,32 @@ void TextEditTabWidget::handleDeletedFile(const QString &file)
}
}
void TextEditTabWidget::doRenameReplace(const lsp::RenameChanges &changes)
void TextEditTabWidget::doRenameReplace(const newlsp::Workspace::WorkspaceEdit &renameResult)
{
for (auto change : changes) {
QString filePath = change.documentUri.toLocalFile();
for (auto edit : change.edits) {
replaceRange(filePath, edit.range, edit.newText);
if (renameResult.changes) {
auto changes = renameResult.changes;
auto itera = changes->begin();
while (itera != changes->end()) {
for (auto edit : itera->second) {
QString filePath = QUrl(QString::fromStdString(itera->first)).toLocalFile();
QString newText = QString::fromStdString(edit.newText);
replaceRange(filePath, edit.range, newText);
}
itera ++;
}
}
if (renameResult.documentChanges) {
std::any documentChangesAny = renameResult.documentChanges.value();
if (newlsp::any_contrast<std::vector<newlsp::TextDocumentEdit>>(documentChangesAny)) {
auto documentChanges = std::any_cast<std::vector<newlsp::TextDocumentEdit>>(documentChangesAny);
for (auto documentChange : documentChanges) {
QString filePath = QUrl(QString::fromStdString(documentChange.textDocument.uri)).toLocalFile();
std::vector<newlsp::AnnotatedTextEdit> edits = documentChange.edits;
for (auto edit : edits) {
QString newText = QString::fromStdString(edit.newText);
replaceRange(filePath, edit.range, newText);
}
}
}
}
}

View File

@ -43,11 +43,11 @@ public slots:
void closeFile(const QString &filePath);
void jumpToLine(const Head &head, const QString &filePath, int line);
void jumpToLine(const QString &filePath, int line);
void jumpToRange(const QString &filePath, const lsp::Range &range);
void jumpToRange(const QString &filePath, const newlsp::Range &range);
void runningToLine(const QString &filePath, int line);
void runningEnd();
void debugPointClean();
void replaceRange(const QString &filePath, const lsp::Range &range,const QString &text);
void replaceRange(const QString &filePath, const newlsp::Range &range,const QString &text);
private slots:
void setDefaultFileEdit();
@ -61,7 +61,7 @@ private slots:
void fileModifyed(const QString &file);
void fileDeleted(const QString &file);
void fileMoved(const QString &file);
void doRenameReplace(const lsp::RenameChanges &changes);
void doRenameReplace(const newlsp::Workspace::WorkspaceEdit &renameResult);
TextEdit *switchFileAndToOpen(const Head &head, const QString &filePath);
TextEdit *switchFileAndToOpen(const QString &filePath);
void saveEditFile(const QString &file);

View File

@ -139,20 +139,17 @@ CodePortingManager::CodePortingManager(QObject *parent)
CodePortingManager::~CodePortingManager()
{
if (cfgWidget) {
// delete cfgWidget;
// TODO: luzhen, mainwindow double free
// delete cfgWidget; mainwindow released
cfgWidget = nullptr;
}
if (outputPane) {
// delete outputPane;
// TODO: luzhen, mainwindow double free
// delete outputPane; mainwindow released
outputPane = nullptr;
}
if (reportPane) {
// delete reportPane;
// TODO: luzhen, mainwindow double free
// delete reportPane; mainwindow released
reportPane = nullptr;
}
}

View File

@ -99,9 +99,9 @@ SymbolCppGenerator::~SymbolCppGenerator()
if (threadPoll) {
threadPoll->clear();
SymbolCppAsynParser::setGlobalRunFlags(false);
while (threadPoll->activeThreadCount() != 0) {
threadPoll->waitForDone(100);
}
// while (threadPoll->activeThreadCount() != 0) {
// threadPoll->waitForDone(100);
// }
delete thread();
}
}

View File

@ -26,9 +26,9 @@
#include <QDirIterator>
#include <QMimeDatabase>
#define JDTLS_PACKAGE_URL "https://download.eclipse.org/jdtls/snapshots/jdt-language-server-1.10.0-202203040350.tar.gz"
#define JDTLS_PACKAGE_URL "https://download.eclipse.org/jdtls/snapshots/jdt-language-server-1.11.0-202205051421.tar.gz"
#define JDTLS_PACKAGE_NAME "jdt-language-server.tar.gz"
#define JDTLS_CHECKFILE_URL "https://download.eclipse.org/jdtls/snapshots/jdt-language-server-1.10.0-202203040350.tar.gz.sha256"
#define JDTLS_CHECKFILE_URL "https://download.eclipse.org/jdtls/snapshots/jdt-language-server-1.11.0-202205051421.tar.gz.sha256"
#define JDTLS_CHECKFILE_NAME "jdt-language-server.tar.gz.sha256"
#define JDTLS_CHECKPROGRAM_NAME "shasum"
#define JDTLS_CHECKPROGRAM_MODE "256"

View File

@ -21,6 +21,9 @@
#include "backend.h"
#include <QProcess>
#include <QJsonObject>
#include <QJsonDocument>
#include <QRegularExpression>
struct BackendPrivate
{
@ -67,12 +70,6 @@ Backend::~Backend()
}
}
QByteArray Backend::readAndWait()
{
d->backendIns->waitForReadyRead(-1);
return d->backendIns->readAll();
}
void Backend::writeAndWait(const QByteArray &data)
{
if (!d->backendIns)
@ -81,6 +78,44 @@ void Backend::writeAndWait(const QByteArray &data)
d->backendIns->waitForBytesWritten(-1);
}
bool Backend::readAndWait(QVector<QJsonObject> &jsonObjs, QByteArray &source)
{
int waitCount = 0;
qInfo() << "waitForReadyRead";
while(d->backendIns->waitForReadyRead(100)) {
if ( 3 == waitCount ++) {
qCritical() << "wait timeOut";
}
return false;
}
QRegularExpression regExp("^Content-Length:\\s+(\\d+)\\r\\n\\r\\n");
QByteArray head, jsonSrc;
while (d->backendIns->bytesAvailable()) {
head += d->backendIns->read(1);
auto matchs = regExp.match(head);
if (matchs.hasMatch()) {
int jsonObjSize = matchs.captured(1).toInt();
while (jsonSrc.size() != jsonObjSize) {
QByteArray readChar = d->backendIns->read(1);
if (readChar.isEmpty()) {
qInfo() << "readChar wait";
d->backendIns->waitForReadyRead(1);
} else {
jsonSrc += readChar;
}
}
QJsonObject jsonObj = QJsonDocument::fromJson(jsonSrc).object();
qInfo() << "read jsonobject:\n" << jsonObj;
jsonObjs.append(jsonObj);
source += head += jsonSrc;
head.clear();
jsonSrc.clear();
}
}
return true;
}
SettingInfo Backend::info() const
{
return d->saveInfo;

View File

@ -34,7 +34,7 @@ public:
explicit Backend(const SettingInfo &info);
virtual ~Backend();
void writeAndWait(const QByteArray &data);
QByteArray readAndWait();
bool readAndWait(QVector<QJsonObject> &jsonObjs, QByteArray &source);
SettingInfo info() const;
bool canRead();
signals:

View File

@ -56,9 +56,6 @@ bool Route::saveBackend(const Route::Head &head, Backend *backend)
}
backends.insert(head, backend);
QObject::connect(backend, &Backend::aboutToClose, [=](){
backends.key(backend);
});
return true;
}

View File

@ -25,6 +25,7 @@
#include <QtAlgorithms>
#include <QRunnable>
#include <QtConcurrent>
#include <QRegularExpression>
#include <iostream>
namespace Private {
@ -60,16 +61,22 @@ void ServerProxy::fromRequest(const Json::Value &request, Json::Value &response)
}
auto backend = Route::instance()->backend(head);
if (backend) {
// send to backend
int id = orginJsonObject.value("id").toInt();
auto requestData = orginList.join("\r\n\r\n").toLatin1();
qInfo() << "-> to backend request\n" << requestData;
backend->writeAndWait(requestData);
qInfo() << "-> to backend request\n" << requestData;
while (backend->canRead() || !Private::readBuffer.contains("\"result\":")) {
Private::readBuffer += backend->readAndWait();
// recv backend and wait
QVector<QJsonObject> retJsonObjs;
while (!jsonObjsContainsId(retJsonObjs, id)) {
backend->readAndWait(retJsonObjs, Private::readBuffer);
}
//send data to frontend;
response["data"] = Json::Value(Private::readBuffer.toStdString());
Private::readBuffer.clear();
qInfo() << "<-- front request result\n" << Private::readBuffer;
Private::readBuffer.clear();
} // can find backend main
}
@ -90,29 +97,57 @@ void ServerProxy::fromNotify(const Json::Value &request)
Route::Head head{workspace, language};
auto backend = Route::instance()->backend(head);
if (backend) {
auto requestData = orginList.join("\r\n\r\n").toLatin1();
qInfo() << "-> to backend notify\n" << requestData;
backend->writeAndWait(requestData);
QString methodName = orginJsonObject.value("method").toString();
if ( methodName == "textDocument/didOpen"
|| methodName == "textDocument/didChange") {
while (backend->canRead() ||
!Private::readBuffer.contains("\"method\":\"textDocument/publishDiagnostics\"")) {
Private::readBuffer += backend->readAndWait();
// send to backend
auto requestData = orginList.join("\r\n\r\n").toLatin1();
backend->writeAndWait(requestData);
qInfo() << "-> to backend notify\n" << requestData;
// recv wait from backend
if (jsonObjContainsMethod(orginJsonObject, "textDocument/didOpen")
|| jsonObjContainsMethod(orginJsonObject, "textDocument/didChange")) {
QVector<QJsonObject> retJsonObjs;
while (!jsonObjsContainsMethod(retJsonObjs, "textDocument/publishDiagnostics")) {
if (!backend->readAndWait(retJsonObjs, Private::readBuffer)) {
if (Private::readBuffer.contains("\"method\":\"textDocument/publishDiagnostics\""))
return;
}
}
}
if (jsonObjContainsMethod(orginJsonObject, "exit")) {
Route::instance()->removeBackend(head);
}
}
}
bool ServerProxy::jsonObjectIsResult(const QJsonObject &jsonObj)
bool ServerProxy::jsonObjsContainsId(QVector<QJsonObject> &jsonObj, int id)
{
for (auto val : jsonObj) {
if (val.value("id").toInt() == id)
return true;
}
return false;
}
bool ServerProxy::jsonObjsContainsMethod(QVector<QJsonObject> &jsonObjs, const QString &methedName)
{
for (auto val : jsonObjs) {
if (val.value("method").toString() == methedName)
return true;
}
return false;
}
bool ServerProxy::jsonObjContainsMethod(const QJsonObject &jsonObj, const QString &methodName)
{
if (jsonObj.value("method").toString() == methodName)
return true;
return false;
}
bool ServerProxy::jsonObjIsResult(const QJsonObject &jsonObj)
{
auto keys = jsonObj.keys();
return keys.contains("id") && keys.contains("result");
}
bool ServerProxy::jsonObjectIsMethod(const QJsonObject &jsonObj)
{
auto keys = jsonObj.keys();
return keys.contains("method");
}

View File

@ -32,9 +32,10 @@ public:
void fromRequest(const Json::Value &request, Json::Value &response);
void fromNotify(const Json::Value &request);
private:
bool tryCastJsonObject(const QByteArray &array, QJsonObject &jsonObj);
bool jsonObjectIsResult(const QJsonObject &jsonObj);
bool jsonObjectIsMethod(const QJsonObject &jsonObj);
bool jsonObjsContainsId(QVector<QJsonObject> &jsonObjs, int id);
bool jsonObjsContainsMethod(QVector<QJsonObject> &jsonObjs, const QString &methedName);
bool jsonObjContainsMethod(const QJsonObject &jsonObj, const QString &methodName);
bool jsonObjIsResult(const QJsonObject &jsonObj);
};
#endif // SERVERPROXY_H