forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user