aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2022-11-07 12:48:02 +0100
committerEike Ziller <eike.ziller@qt.io>2022-11-08 11:38:54 +0000
commit3c6435387b5219e056592efc21bb5c09eaa432ce (patch)
treecb2db24b3755322f171c620a516cf5decb3a7f7c
parentbb3e9c44be2bf77ef22da2ba8036dc5244323d06 (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.cpp33
-rw-r--r--src/plugins/texteditor/formattexteditor.cpp2
-rw-r--r--src/plugins/texteditor/formattexteditor.h1
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