diff options
Diffstat (limited to 'src/plugins/languageclient/languageclientutils.cpp')
-rw-r--r-- | src/plugins/languageclient/languageclientutils.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/plugins/languageclient/languageclientutils.cpp b/src/plugins/languageclient/languageclientutils.cpp index f0a2db61ff..de07c29a6e 100644 --- a/src/plugins/languageclient/languageclientutils.cpp +++ b/src/plugins/languageclient/languageclientutils.cpp @@ -88,17 +88,22 @@ bool applyTextDocumentEdit(const Client *client, const TextDocumentEdit &edit) LanguageClientValue<int> version = edit.textDocument().version(); if (!version.isNull() && version.value(0) < client->documentVersion(filePath)) return false; - return applyTextEdits(uri, edits); + return applyTextEdits(client, uri, edits); } -bool applyTextEdits(const DocumentUri &uri, const QList<TextEdit> &edits) +bool applyTextEdits(const Client *client, const DocumentUri &uri, const QList<TextEdit> &edits) { if (edits.isEmpty()) return true; - RefactoringChanges changes; + RefactoringChangesData * const backend = client->createRefactoringChangesBackend(); + RefactoringChanges changes(backend); RefactoringFilePtr file; file = changes.file(uri.toFilePath()); file->setChangeSet(editsToChangeSet(edits, file->document())); + if (backend) { + for (const TextEdit &edit : edits) + file->appendIndentRange(convertRange(file->document(), edit.range())); + } return file->apply(); } @@ -130,7 +135,7 @@ bool applyWorkspaceEdit(const Client *client, const WorkspaceEdit &edit) } else { const WorkspaceEdit::Changes &changes = edit.changes().value_or(WorkspaceEdit::Changes()); for (auto it = changes.cbegin(); it != changes.cend(); ++it) - result |= applyTextEdits(it.key(), it.value()); + result |= applyTextEdits(client, it.key(), it.value()); return result; } return result; |