MCPcopy Create free account
hub / github.com/Codeya-IDE/deepin-ide / parseWorkspaceEdit

Function parseWorkspaceEdit

src/common/lsp/client/client.cpp:61–221  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

59}
60
61WorkspaceEdit parseWorkspaceEdit(const QJsonObject &editObj)
62{
63 QJsonObject changesObj = editObj.value("changes").toObject();
64 newlsp::WorkspaceEdit workspaceEdit;
65 if (!changesObj.isEmpty()) {
66 // std::optional<> changes;
67 newlsp::WorkspaceEdit::Changes changes;
68 for (auto fileKey : changesObj.keys()) {
69 auto addionTextEditArray = changesObj[fileKey].toArray();
70 std::vector<newlsp::TextEdit> textEdits;
71 for (auto addion : addionTextEditArray) {
72 auto addionObj = addion.toObject();
73 auto rangeObj = addionObj.value(lsp::K_RANGE).toObject();
74 auto startObj = rangeObj.value(lsp::K_START).toObject();
75 auto endObj = rangeObj.value(lsp::K_END).toObject();
76 std::string newText = addionObj.value(lsp::K_NewText).toString().toStdString();
77 newlsp::Position startPos { startObj.value(lsp::K_LINE).toInt(), startObj.value(lsp::K_CHARACTER).toInt() };
78 newlsp::Position endPos { endObj.value(lsp::K_LINE).toInt(), endObj.value(lsp::K_CHARACTER).toInt() };
79 newlsp::Range range { startPos, endPos };
80 textEdits.push_back(newlsp::TextEdit { range, newText });
81 }
82 changes[fileKey.toStdString()] = textEdits;
83 }
84 workspaceEdit.changes = changes;
85 }
86
87 QJsonArray documentChangesArray = editObj.value("documentChanges").toArray();
88 if (!documentChangesArray.isEmpty()) {
89 newlsp::WorkspaceEdit::DocumentChanges documentChanges;
90 std::vector<newlsp::TextDocumentEdit> textDocumentEdits;
91 std::vector<newlsp::CreateFile> createFiles;
92 std::vector<newlsp::RenameFile> renameFiles;
93 std::vector<newlsp::DeleteFile> deleteFiles;
94 for (auto one : documentChangesArray) {
95 QJsonObject oneObj = one.toObject();
96 if (oneObj.contains("edits") && oneObj.contains("textDocument")) { // std::vector<newlsp::TextDocumentEdit>
97 newlsp::TextDocumentEdit textDocumentEdit;
98
99 newlsp::OptionalVersionedTextDocumentIdentifier ovtdi;
100 QJsonObject textDocumentOneObj = oneObj.value("textDocument").toObject();
101 ovtdi.version = textDocumentOneObj.value(lsp::K_VERSION).toInt();
102 ovtdi.uri = textDocumentOneObj.value(lsp::K_URI).toString().toStdString();
103 textDocumentEdit.textDocument.version = ovtdi.version;
104 textDocumentEdit.textDocument.uri = ovtdi.uri;
105
106 std::vector<newlsp::AnnotatedTextEdit> annotatedTextEdits;
107 std::vector<newlsp::TextEdit> textEdits;
108 QJsonArray editsArray = oneObj.value("edits").toArray();
109 for (auto editsOne : editsArray) {
110 QJsonObject editsOneObj = editsOne.toObject();
111 QJsonObject editsOneRangeObj = editsOneObj.value("range").toObject();
112 QJsonObject editsOneRangeStartObj = editsOneRangeObj.value(lsp::K_START).toObject();
113 QJsonObject editsOneRangeEndObj = editsOneRangeObj.value(lsp::K_END).toObject();
114 std::string editsOneNewText = editsOneObj.value("newText").toString().toStdString();
115 newlsp::Range editsOneRange {
116 newlsp::Position { editsOneRangeStartObj.value(lsp::K_LINE).toInt(), editsOneRangeStartObj.value(lsp::K_CHARACTER).toInt() },
117 newlsp::Position { editsOneRangeEndObj.value(lsp::K_LINE).toInt(), editsOneRangeEndObj.value(lsp::K_CHARACTER).toInt() }
118 };

Callers 2

parseCodeActionsFunction · 0.85
renameResultMethod · 0.85

Calls 8

toArrayMethod · 0.80
valueMethod · 0.45
isEmptyMethod · 0.45
keysMethod · 0.45
toStringMethod · 0.45
containsMethod · 0.45
emptyMethod · 0.45
isNullMethod · 0.45

Tested by

no test coverage detected