LanguageClient: Improve formatting

Use Utils::ChangeSet and TextEditor::RefactoringChanges to apply the
text edits that are reported from language server to format the current
file.

Change-Id: Id2f490b6e2791f676ebc751219bfbbf9e178f120
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2021-01-29 13:53:20 +01:00
parent 2d92ae391a
commit 15b0a902e9
6 changed files with 32 additions and 22 deletions

View File

@@ -518,15 +518,25 @@ void TextDocument::autoFormat(const QTextCursor &cursor)
using namespace Utils::Text;
if (!d->m_formatter)
return;
if (QFutureWatcher<Replacements> *watcher = d->m_formatter->format(cursor, tabSettings())) {
connect(watcher, &QFutureWatcher<Replacements>::finished, this, [this, watcher]() {
if (QFutureWatcher<ChangeSet> *watcher = d->m_formatter->format(cursor, tabSettings())) {
connect(watcher, &QFutureWatcher<ChangeSet>::finished, this, [this, watcher]() {
if (!watcher->isCanceled())
Utils::Text::applyReplacements(document(), watcher->result());
applyChangeSet(watcher->result());
delete watcher;
});
}
}
bool TextDocument::applyChangeSet(const ChangeSet &changeSet)
{
if (changeSet.isEmpty())
return true;
RefactoringChanges changes;
const RefactoringFilePtr file = changes.file(filePath().toString());
file->setChangeSet(changeSet);
return file->apply();
}
const ExtraEncodingSettings &TextDocument::extraEncodingSettings() const
{
return d->m_extraEncodingSettings;