diff options
author | Eike Ziller <eike.ziller@qt.io> | 2022-11-07 12:48:02 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2022-11-08 11:38:54 +0000 |
commit | 3c6435387b5219e056592efc21bb5c09eaa432ce (patch) | |
tree | cb2db24b3755322f171c620a516cf5decb3a7f7c | |
parent | bb3e9c44be2bf77ef22da2ba8036dc5244323d06 (diff) |
QmlJS: Fix cursor position and breakpoints when reformatting
Use the intelligent partial text replacement logic that is also used for
e.g. the Beautifier formatters.
Fixes: QTCREATORBUG-28349
Fixes: QTCREATORBUG-25218
Change-Id: I9ae4052df27c8aa2012106a8ef8f624ba5f3c30b
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: David Schulz <david.schulz@qt.io>
-rw-r--r-- | src/plugins/qmljseditor/qmljseditorplugin.cpp | 33 | ||||
-rw-r--r-- | src/plugins/texteditor/formattexteditor.cpp | 2 | ||||
-rw-r--r-- | src/plugins/texteditor/formattexteditor.h | 1 |
3 files changed, 14 insertions, 22 deletions
diff --git a/src/plugins/qmljseditor/qmljseditorplugin.cpp b/src/plugins/qmljseditor/qmljseditorplugin.cpp index 1456066563..8c77a85431 100644 --- a/src/plugins/qmljseditor/qmljseditorplugin.cpp +++ b/src/plugins/qmljseditor/qmljseditorplugin.cpp @@ -20,22 +20,23 @@ #include <qmljstools/qmljstoolssettings.h> #include <qmljstools/qmljscodestylepreferences.h> -#include <coreplugin/coreconstants.h> -#include <coreplugin/icore.h> -#include <coreplugin/actionmanager/actionmanager.h> #include <coreplugin/actionmanager/actioncontainer.h> +#include <coreplugin/actionmanager/actionmanager.h> #include <coreplugin/actionmanager/command.h> +#include <coreplugin/coreconstants.h> #include <coreplugin/editormanager/editormanager.h> -#include <projectexplorer/taskhub.h> +#include <coreplugin/icore.h> #include <projectexplorer/project.h> -#include <projectexplorer/projecttree.h> #include <projectexplorer/projectexplorerconstants.h> +#include <projectexplorer/projecttree.h> +#include <projectexplorer/taskhub.h> +#include <texteditor/formattexteditor.h> #include <texteditor/snippets/snippetprovider.h> -#include <texteditor/texteditorconstants.h> #include <texteditor/tabsettings.h> +#include <texteditor/texteditorconstants.h> #include <utils/fsengine/fileiconprovider.h> -#include <utils/qtcassert.h> #include <utils/json.h> +#include <utils/qtcassert.h> #include <QTextDocument> #include <QMenu> @@ -258,24 +259,14 @@ void QmlJSEditorPluginPrivate::reformatFile() tabSettings.m_tabSize, QmlJSTools::QmlJSToolsSettings::globalCodeStyle()->currentCodeStyleSettings().lineLength); - // QTextDocument::setPlainText cannot be used, as it would reset undo/redo history - const auto setNewText = [this, &newText]() { + auto ed = qobject_cast<TextEditor::BaseTextEditor *>(EditorManager::currentEditor()); + if (ed) { + TextEditor::updateEditorText(ed->editorWidget(), newText); + } else { QTextCursor tc(m_currentDocument->document()); tc.movePosition(QTextCursor::Start); tc.movePosition(QTextCursor::End, QTextCursor::KeepAnchor); tc.insertText(newText); - }; - - IEditor *ed = EditorManager::currentEditor(); - if (ed) { - QByteArray state = ed->saveState(); - int line = ed->currentLine(); - int column = ed->currentColumn(); - setNewText(); - ed->gotoLine(line, column - 1); - ed->restoreState(state); - } else { - setNewText(); } } } diff --git a/src/plugins/texteditor/formattexteditor.cpp b/src/plugins/texteditor/formattexteditor.cpp index d602ff3d65..0753cf6f20 100644 --- a/src/plugins/texteditor/formattexteditor.cpp +++ b/src/plugins/texteditor/formattexteditor.cpp @@ -132,7 +132,7 @@ static FormatTask format(FormatTask task) * actually changed parts are updated while preserving the cursor position, the folded * blocks, and the scroll bar position. */ -static void updateEditorText(QPlainTextEdit *editor, const QString &text) +void updateEditorText(QPlainTextEdit *editor, const QString &text) { const QString editorText = editor->toPlainText(); if (editorText == text) diff --git a/src/plugins/texteditor/formattexteditor.h b/src/plugins/texteditor/formattexteditor.h index fc974ee9db..5e4a98d673 100644 --- a/src/plugins/texteditor/formattexteditor.h +++ b/src/plugins/texteditor/formattexteditor.h @@ -44,5 +44,6 @@ TEXTEDITOR_EXPORT void formatEditor(TextEditorWidget *editor, const TextEditor:: int startPos = -1, int endPos = 0); TEXTEDITOR_EXPORT void formatEditorAsync(TextEditorWidget *editor, const TextEditor::Command &command, int startPos = -1, int endPos = 0); +TEXTEDITOR_EXPORT void updateEditorText(QPlainTextEdit *editor, const QString &text); } // namespace TextEditor |