aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDavid Schulz <[email protected]>2024-06-26 12:38:17 +0200
committerDavid Schulz <[email protected]>2024-06-27 04:28:55 +0000
commit39a448c62e96871e0928db802fdf68b4d9d507ec (patch)
tree7d13f79b31d22e9acf5b8b7c35c3322e0eab687f /src
parentef3a4fd9e35bf6f2a3e67cc3602d48a570c6d99b (diff)
Editor: Simplify TextDocumentManipulator
The TextDocumentManipulatorInterface was introduced to decouple modification operations from QTextDocument. But nowadays all tests and production code usages are backed by a QTextDocument, so we can remove this abstraction layer again. The first step is to merge the interface and all manipulator implementations. Change-Id: Idd1609df549d3b120dd516d5161af9aa8aa571ca Reviewed-by: Christian Kandeler <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/clangcodemodel/clangdclient.cpp2
-rw-r--r--src/plugins/clangcodemodel/clangdcompletion.cpp5
-rw-r--r--src/plugins/clangcodemodel/clangpreprocessorassistproposalitem.cpp2
-rw-r--r--src/plugins/clangcodemodel/clangpreprocessorassistproposalitem.h3
-rw-r--r--src/plugins/clangcodemodel/clangutils.cpp7
-rw-r--r--src/plugins/clangcodemodel/clangutils.h9
-rw-r--r--src/plugins/clangcodemodel/test/clangdtests.cpp108
-rw-r--r--src/plugins/cppeditor/cppcompletionassist.cpp6
-rw-r--r--src/plugins/cppeditor/cppvirtualfunctionproposalitem.cpp3
-rw-r--r--src/plugins/cppeditor/cppvirtualfunctionproposalitem.h3
-rw-r--r--src/plugins/fakevim/fakevimplugin.cpp2
-rw-r--r--src/plugins/languageclient/languageclientcompletionassist.cpp2
-rw-r--r--src/plugins/languageclient/languageclientcompletionassist.h5
-rw-r--r--src/plugins/languageclient/languageclientutils.cpp4
-rw-r--r--src/plugins/languageclient/languageclientutils.h4
-rw-r--r--src/plugins/qmljseditor/qmljscompletionassist.cpp2
-rw-r--r--src/plugins/qmljseditor/qmljscompletionassist.h2
-rw-r--r--src/plugins/texteditor/CMakeLists.txt1
-rw-r--r--src/plugins/texteditor/circularclipboardassist.cpp2
-rw-r--r--src/plugins/texteditor/codeassist/assistproposalitem.cpp8
-rw-r--r--src/plugins/texteditor/codeassist/assistproposalitem.h8
-rw-r--r--src/plugins/texteditor/codeassist/assistproposaliteminterface.h4
-rw-r--r--src/plugins/texteditor/codeassist/codeassist_test.cpp2
-rw-r--r--src/plugins/texteditor/codeassist/keywordscompletionassist.cpp2
-rw-r--r--src/plugins/texteditor/codeassist/keywordscompletionassist.h2
-rw-r--r--src/plugins/texteditor/codeassist/textdocumentmanipulator.cpp16
-rw-r--r--src/plugins/texteditor/codeassist/textdocumentmanipulator.h45
-rw-r--r--src/plugins/texteditor/codeassist/textdocumentmanipulatorinterface.h39
-rw-r--r--src/plugins/texteditor/snippets/snippetassistcollector.cpp2
-rw-r--r--src/plugins/texteditor/texteditor.cpp5
-rw-r--r--src/plugins/texteditor/texteditor.h2
-rw-r--r--src/plugins/texteditor/texteditor.qbs1
32 files changed, 114 insertions, 194 deletions
diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp
index 19cd4bd5a91..42148a25037 100644
--- a/src/plugins/clangcodemodel/clangdclient.cpp
+++ b/src/plugins/clangcodemodel/clangdclient.cpp
@@ -54,7 +54,7 @@
#include <texteditor/codeassist/assistinterface.h>
#include <texteditor/codeassist/iassistprocessor.h>
#include <texteditor/codeassist/iassistprovider.h>
-#include <texteditor/codeassist/textdocumentmanipulatorinterface.h>
+#include <texteditor/codeassist/textdocumentmanipulator.h>
#include <texteditor/texteditor.h>
#include <utils/algorithm.h>
#include <utils/async.h>
diff --git a/src/plugins/clangcodemodel/clangdcompletion.cpp b/src/plugins/clangcodemodel/clangdcompletion.cpp
index 44520d324de..e847e3b0f07 100644
--- a/src/plugins/clangcodemodel/clangdcompletion.cpp
+++ b/src/plugins/clangcodemodel/clangdcompletion.cpp
@@ -74,8 +74,7 @@ class ClangdCompletionItem : public LanguageClientCompletionItem
{
public:
using LanguageClientCompletionItem::LanguageClientCompletionItem;
- void apply(TextDocumentManipulatorInterface &manipulator,
- int basePosition) const override;
+ void apply(TextDocumentManipulator &manipulator, int basePosition) const override;
enum class SpecialQtType { Signal, Slot, None };
static SpecialQtType getQtType(const CompletionItem &item);
@@ -247,7 +246,7 @@ bool ClangdCompletionAssistProvider::isInCommentOrString(const AssistInterface *
return CppEditor::isInCommentOrString(interface, features);
}
-void ClangdCompletionItem::apply(TextDocumentManipulatorInterface &manipulator,
+void ClangdCompletionItem::apply(TextDocumentManipulator &manipulator,
int /*basePosition*/) const
{
const CompletionItem item = this->item();
diff --git a/src/plugins/clangcodemodel/clangpreprocessorassistproposalitem.cpp b/src/plugins/clangcodemodel/clangpreprocessorassistproposalitem.cpp
index 4783d5dd47c..856d1336ad7 100644
--- a/src/plugins/clangcodemodel/clangpreprocessorassistproposalitem.cpp
+++ b/src/plugins/clangcodemodel/clangpreprocessorassistproposalitem.cpp
@@ -28,7 +28,7 @@ bool ClangPreprocessorAssistProposalItem::implicitlyApplies() const
return true;
}
-void ClangPreprocessorAssistProposalItem::apply(TextEditor::TextDocumentManipulatorInterface &manipulator,
+void ClangPreprocessorAssistProposalItem::apply(TextEditor::TextDocumentManipulator &manipulator,
int basePosition) const
{
// TODO move in an extra class under tests
diff --git a/src/plugins/clangcodemodel/clangpreprocessorassistproposalitem.h b/src/plugins/clangcodemodel/clangpreprocessorassistproposalitem.h
index a87db0984a1..0e4901ff923 100644
--- a/src/plugins/clangcodemodel/clangpreprocessorassistproposalitem.h
+++ b/src/plugins/clangcodemodel/clangpreprocessorassistproposalitem.h
@@ -17,8 +17,7 @@ public:
~ClangPreprocessorAssistProposalItem() noexcept override = default;
bool prematurelyApplies(const QChar &typedChar) const final;
bool implicitlyApplies() const final;
- void apply(TextEditor::TextDocumentManipulatorInterface &manipulator,
- int basePosition) const final;
+ void apply(TextEditor::TextDocumentManipulator &manipulator, int basePosition) const final;
void setText(const QString &text);
QString text() const final;
diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp
index 11e7398f372..b09134cddf2 100644
--- a/src/plugins/clangcodemodel/clangutils.cpp
+++ b/src/plugins/clangcodemodel/clangutils.cpp
@@ -20,7 +20,7 @@
#include <projectexplorer/kitaspects.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/target.h>
-#include <texteditor/codeassist/textdocumentmanipulatorinterface.h>
+#include <texteditor/codeassist/textdocumentmanipulator.h>
#include <cplusplus/SimpleLexer.h>
#include <utils/algorithm.h>
@@ -303,8 +303,7 @@ const QStringList globalClangOptions()
}
// 7.3.3: using typename(opt) nested-name-specifier unqualified-id ;
-bool isAtUsingDeclaration(TextEditor::TextDocumentManipulatorInterface &manipulator,
- int basePosition)
+bool isAtUsingDeclaration(TextEditor::TextDocumentManipulator &manipulator, int basePosition)
{
using namespace CPlusPlus;
SimpleLexer lexer;
@@ -322,7 +321,7 @@ bool isAtUsingDeclaration(TextEditor::TextDocumentManipulatorInterface &manipula
return contains(tokens, [](const Token &token) { return token.kind() == T_USING; });
}
-QString textUntilPreviousStatement(TextEditor::TextDocumentManipulatorInterface &manipulator,
+QString textUntilPreviousStatement(TextEditor::TextDocumentManipulator &manipulator,
int startPosition)
{
static const QString stopCharacters(";{}#");
diff --git a/src/plugins/clangcodemodel/clangutils.h b/src/plugins/clangcodemodel/clangutils.h
index d78dab72311..23d384fdc3a 100644
--- a/src/plugins/clangcodemodel/clangutils.h
+++ b/src/plugins/clangcodemodel/clangutils.h
@@ -22,7 +22,7 @@ class ClangDiagnosticConfig;
class CppEditorDocumentHandle;
}
-namespace TextEditor { class TextDocumentManipulatorInterface; }
+namespace TextEditor { class TextDocumentManipulator; }
namespace ProjectExplorer { class Project; }
@@ -126,11 +126,10 @@ bool matchPreviousWord(const CharacterProvider &provider, QTextCursor cursor, QS
return pattern.isEmpty();
}
-QString textUntilPreviousStatement(TextEditor::TextDocumentManipulatorInterface &manipulator,
- int startPosition);
+QString textUntilPreviousStatement(
+ TextEditor::TextDocumentManipulator &manipulator, int startPosition);
-bool isAtUsingDeclaration(TextEditor::TextDocumentManipulatorInterface &manipulator,
- int basePosition);
+bool isAtUsingDeclaration(TextEditor::TextDocumentManipulator &manipulator, int basePosition);
class ClangSourceRange
{
diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp
index 84a155b5353..0a41ff925ff 100644
--- a/src/plugins/clangcodemodel/test/clangdtests.cpp
+++ b/src/plugins/clangcodemodel/test/clangdtests.cpp
@@ -30,7 +30,7 @@
#include <texteditor/codeassist/assistproposaliteminterface.h>
#include <texteditor/codeassist/genericproposal.h>
#include <texteditor/codeassist/ifunctionhintproposalmodel.h>
-#include <texteditor/codeassist/textdocumentmanipulatorinterface.h>
+#include <texteditor/codeassist/textdocumentmanipulator.h>
#include <texteditor/semantichighlighter.h>
#include <texteditor/textmark.h>
@@ -1530,76 +1530,6 @@ void ClangdTestHighlighting::testIfdefedOutBlocks()
}
-class Manipulator final : public TextDocumentManipulatorInterface
-{
-public:
- Manipulator()
- {
- const auto textEditor = static_cast<BaseTextEditor *>(EditorManager::currentEditor());
- QVERIFY(textEditor);
- m_doc = textEditor->textDocument()->document();
- m_cursor = textEditor->editorWidget()->textCursor();
- }
-
- int currentPosition() const override { return m_cursor.position(); }
- int positionAt(TextPositionOperation) const override { return 0; }
- QChar characterAt(int position) const override { return m_doc->characterAt(position); }
-
- QString textAt(int position, int length) const override
- {
- return m_doc->toPlainText().mid(position, length);
- }
-
- QTextCursor textCursorAt(int position) const override
- {
- QTextCursor cursor(m_doc);
- cursor.setPosition(position);
- return cursor;
- }
-
- void setCursorPosition(int position) override { m_cursor.setPosition(position); }
- void setAutoCompleteSkipPosition(int position) override { m_skipPos = position; }
-
- bool replace(int position, int length, const QString &text) override
- {
- QTextCursor cursor = textCursorAt(position);
- cursor.setPosition(position + length, QTextCursor::KeepAnchor);
- cursor.insertText(text);
- return true;
- }
-
- void insertCodeSnippet(int pos, const QString &text, const SnippetParser &parser) override
- {
- const auto parseResult = parser(text);
- if (const auto snippet = std::get_if<ParsedSnippet>(&parseResult)) {
- if (!snippet->parts.isEmpty())
- textCursorAt(pos).insertText(snippet->parts.first().text);
- }
- }
-
- void paste() override {}
- void encourageApply() override {}
- void autoIndent(int, int) override {}
-
- QString getLine(int line) const { return m_doc->findBlockByNumber(line - 1).text(); }
-
- QPair<int, int> cursorPos() const
- {
- const int pos = currentPosition();
- QPair<int, int> lineAndColumn;
- Text::convertPosition(m_doc, pos, &lineAndColumn.first, &lineAndColumn.second);
- return lineAndColumn;
- }
-
- int skipPos() const { return m_skipPos; }
-
-private:
- QTextDocument *m_doc;
- QTextCursor m_cursor;
- int m_skipPos = -1;
-};
-
-
class ClangdTestCompletion final : public ClangdTest
{
Q_OBJECT
@@ -1723,10 +1653,10 @@ void ClangdTestCompletion::testCompleteGlobals()
const AssistProposalItemInterface * const item = getItem(proposal, " globalFunction()", "void");
QVERIFY(item);
- Manipulator manipulator;
+ TextDocumentManipulator manipulator(TextEditorWidget::currentTextEditorWidget());
item->apply(manipulator, cursorPos);
QCOMPARE(manipulator.getLine(7), " globalFunction() /* COMPLETE HERE */");
- QCOMPARE(manipulator.cursorPos(), qMakePair(7, 19));
+ QCOMPARE(manipulator.cursorPos(), Text::Position(7, 19));
QCOMPARE(manipulator.skipPos(), -1);
}
@@ -1743,10 +1673,10 @@ void ClangdTestCompletion::testCompleteMembers()
const AssistProposalItemInterface * const item = getItem(proposal, " member", "int");
QVERIFY(item);
- Manipulator manipulator;
+ TextDocumentManipulator manipulator(TextEditorWidget::currentTextEditorWidget());
item->apply(manipulator, cursorPos);
QCOMPARE(manipulator.getLine(7), " s.member /* COMPLETE HERE */");
- QCOMPARE(manipulator.cursorPos(), qMakePair(7, 12));
+ QCOMPARE(manipulator.cursorPos(), Text::Position(7, 12));
QCOMPARE(manipulator.skipPos(), -1);
}
@@ -1761,10 +1691,10 @@ void ClangdTestCompletion::testCompleteMembersFromInside()
const AssistProposalItemInterface * const item = getItem(proposal, " privateFunc()", "void");
QVERIFY(item);
- Manipulator manipulator;
+ TextDocumentManipulator manipulator(TextEditorWidget::currentTextEditorWidget());
item->apply(manipulator, cursorPos);
QCOMPARE(manipulator.getLine(4), " privateFunc() /* COMPLETE HERE */");
- QCOMPARE(manipulator.cursorPos(), qMakePair(4, 21));
+ QCOMPARE(manipulator.cursorPos(), Text::Position(4, 21));
QCOMPARE(manipulator.skipPos(), -1);
}
@@ -1779,10 +1709,10 @@ void ClangdTestCompletion::testCompleteMembersFromOutside()
const AssistProposalItemInterface * const item = getItem(proposal, " publicFunc()", "void");
QVERIFY(item);
- Manipulator manipulator;
+ TextDocumentManipulator manipulator(TextEditorWidget::currentTextEditorWidget());
item->apply(manipulator, cursorPos);
QCOMPARE(manipulator.getLine(13), " c.publicFunc() /* COMPLETE HERE */");
- QCOMPARE(manipulator.cursorPos(), qMakePair(13, 18));
+ QCOMPARE(manipulator.cursorPos(), Text::Position(13, 18));
QCOMPARE(manipulator.skipPos(), -1);
}
@@ -1797,10 +1727,10 @@ void ClangdTestCompletion::testCompleteMembersFromFriend()
const AssistProposalItemInterface * const item = getItem(proposal, " privateFunc()", "void");
QVERIFY(item);
- Manipulator manipulator;
+ TextDocumentManipulator manipulator(TextEditorWidget::currentTextEditorWidget());
item->apply(manipulator, cursorPos);
QCOMPARE(manipulator.getLine(14), " C().privateFunc() /* COMPLETE HERE */");
- QCOMPARE(manipulator.cursorPos(), qMakePair(14, 21));
+ QCOMPARE(manipulator.cursorPos(), Text::Position(14, 21));
QCOMPARE(manipulator.skipPos(), -1);
}
@@ -1814,10 +1744,10 @@ void ClangdTestCompletion::testFunctionAddress()
const AssistProposalItemInterface * const item = getItem(proposal, " memberFunc()", "void");
QVERIFY(item);
- Manipulator manipulator;
+ TextDocumentManipulator manipulator(TextEditorWidget::currentTextEditorWidget());
item->apply(manipulator, cursorPos);
QCOMPARE(manipulator.getLine(7), " const auto p = &S::memberFunc /* COMPLETE HERE */;");
- QCOMPARE(manipulator.cursorPos(), qMakePair(7, 33));
+ QCOMPARE(manipulator.cursorPos(), Text::Position(7, 33));
QCOMPARE(manipulator.skipPos(), -1);
}
@@ -1878,10 +1808,10 @@ void ClangdTestCompletion::testCompleteClassAndConstructor()
const AssistProposalItemInterface * const item
= getItem(proposal, QString::fromUtf8(" Foo(…)"), "[2 overloads]");
QVERIFY(item);
- Manipulator manipulator;
+ TextDocumentManipulator manipulator(TextEditorWidget::currentTextEditorWidget());
item->apply(manipulator, cursorPos);
QCOMPARE(manipulator.getLine(7), " Foo( /* COMPLETE HERE */");
- QCOMPARE(manipulator.cursorPos(), qMakePair(7, 8));
+ QCOMPARE(manipulator.cursorPos(), Text::Position(7, 8));
QCOMPARE(manipulator.skipPos(), -1);
}
@@ -1905,10 +1835,10 @@ void ClangdTestCompletion::testCompleteWithDotToArrowCorrection()
QVERIFY(proposal);
const AssistProposalItemInterface * const item = getItem(proposal, " member", "int");
QVERIFY(item);
- Manipulator manipulator;
+ TextDocumentManipulator manipulator(TextEditorWidget::currentTextEditorWidget());
item->apply(manipulator, cursorPos);
QCOMPARE(manipulator.getLine(4), " bar->member /* COMPLETE HERE */");
- QCOMPARE(manipulator.cursorPos(), qMakePair(4, 15));
+ QCOMPARE(manipulator.cursorPos(), Text::Position(4, 15));
QCOMPARE(manipulator.skipPos(), -1);
}
@@ -1936,10 +1866,10 @@ void ClangdTestCompletion::testCompleteCodeInGeneratedUiFile()
const AssistProposalItemInterface * const item = getItem(
proposal, " setupUi(QMainWindow *MainWindow)", "void");
QVERIFY(item);
- Manipulator manipulator;
+ TextDocumentManipulator manipulator(TextEditorWidget::currentTextEditorWidget());
item->apply(manipulator, cursorPos);
QCOMPARE(manipulator.getLine(34), " ui->setupUi( /* COMPLETE HERE */");
- QCOMPARE(manipulator.cursorPos(), qMakePair(34, 16));
+ QCOMPARE(manipulator.cursorPos(), Text::Position(34, 16));
QCOMPARE(manipulator.skipPos(), -1);
}
diff --git a/src/plugins/cppeditor/cppcompletionassist.cpp b/src/plugins/cppeditor/cppcompletionassist.cpp
index 03c04765d41..f94a44de425 100644
--- a/src/plugins/cppeditor/cppcompletionassist.cpp
+++ b/src/plugins/cppeditor/cppcompletionassist.cpp
@@ -64,7 +64,7 @@ class CppAssistProposalItem final : public AssistProposalItem
public:
~CppAssistProposalItem() noexcept override = default;
bool prematurelyApplies(const QChar &c) const override;
- void applyContextualContent(TextDocumentManipulatorInterface &manipulator, int basePosition) const override;
+ void applyContextualContent(TextDocumentManipulator &manipulator, int basePosition) const override;
bool isOverloaded() const { return m_isOverloaded; }
void markAsOverloaded() { m_isOverloaded = true; }
@@ -143,7 +143,7 @@ bool CppAssistProposalItem::prematurelyApplies(const QChar &typedChar) const
return false;
}
-static bool isDereferenced(TextDocumentManipulatorInterface &manipulator, int basePosition)
+static bool isDereferenced(TextDocumentManipulator &manipulator, int basePosition)
{
QTextCursor cursor = manipulator.textCursorAt(basePosition);
cursor.setPosition(basePosition);
@@ -173,7 +173,7 @@ quint64 CppAssistProposalItem::hash() const
return 0;
}
-void CppAssistProposalItem::applyContextualContent(TextDocumentManipulatorInterface &manipulator, int basePosition) const
+void CppAssistProposalItem::applyContextualContent(TextDocumentManipulator &manipulator, int basePosition) const
{
Symbol *symbol = nullptr;
diff --git a/src/plugins/cppeditor/cppvirtualfunctionproposalitem.cpp b/src/plugins/cppeditor/cppvirtualfunctionproposalitem.cpp
index 54ff3a056b7..adb6a843b41 100644
--- a/src/plugins/cppeditor/cppvirtualfunctionproposalitem.cpp
+++ b/src/plugins/cppeditor/cppvirtualfunctionproposalitem.cpp
@@ -15,8 +15,7 @@ VirtualFunctionProposalItem::VirtualFunctionProposalItem(
{
}
-void VirtualFunctionProposalItem::apply(TextEditor::TextDocumentManipulatorInterface &,
- int) const
+void VirtualFunctionProposalItem::apply(TextEditor::TextDocumentManipulator &, int) const
{
if (!m_link.hasValidTarget())
return;
diff --git a/src/plugins/cppeditor/cppvirtualfunctionproposalitem.h b/src/plugins/cppeditor/cppvirtualfunctionproposalitem.h
index 5cdd11b1f80..5ef1bf2444a 100644
--- a/src/plugins/cppeditor/cppvirtualfunctionproposalitem.h
+++ b/src/plugins/cppeditor/cppvirtualfunctionproposalitem.h
@@ -16,8 +16,7 @@ public:
VirtualFunctionProposalItem(const Utils::Link &link,
bool openInSplit = true);
~VirtualFunctionProposalItem() noexcept override = default;
- void apply(TextEditor::TextDocumentManipulatorInterface &manipulator,
- int basePosition) const override;
+ void apply(TextEditor::TextDocumentManipulator &manipulator, int basePosition) const override;
Utils::Link link() const { return m_link; } // Exposed for tests
private:
diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp
index 6909c4d35a7..4431507226a 100644
--- a/src/plugins/fakevim/fakevimplugin.cpp
+++ b/src/plugins/fakevim/fakevimplugin.cpp
@@ -893,7 +893,7 @@ public:
return text() == m_provider->needle();
}
- void applyContextualContent(TextDocumentManipulatorInterface &, int) const override
+ void applyContextualContent(TextDocumentManipulator &, int) const override
{
QTC_ASSERT(m_provider->handler(), return);
m_provider->handler()->handleReplay(text().mid(m_provider->needle().size()));
diff --git a/src/plugins/languageclient/languageclientcompletionassist.cpp b/src/plugins/languageclient/languageclientcompletionassist.cpp
index 7486ca102c7..5b14e27dda1 100644
--- a/src/plugins/languageclient/languageclientcompletionassist.cpp
+++ b/src/plugins/languageclient/languageclientcompletionassist.cpp
@@ -53,7 +53,7 @@ bool LanguageClientCompletionItem::prematurelyApplies(const QChar &typedCharacte
return false;
}
-void LanguageClientCompletionItem::apply(TextDocumentManipulatorInterface &manipulator,
+void LanguageClientCompletionItem::apply(TextDocumentManipulator &manipulator,
int /*basePosition*/) const
{
if (auto edit = m_item.textEdit()) {
diff --git a/src/plugins/languageclient/languageclientcompletionassist.h b/src/plugins/languageclient/languageclientcompletionassist.h
index c6dbb69ab0d..131d5095a8e 100644
--- a/src/plugins/languageclient/languageclientcompletionassist.h
+++ b/src/plugins/languageclient/languageclientcompletionassist.h
@@ -18,7 +18,7 @@
namespace TextEditor {
class IAssistProposal;
-class TextDocumentManipulatorInterface;
+class TextDocumentManipulator;
}
namespace LanguageClient {
@@ -97,8 +97,7 @@ public:
QString filterText() const override;
bool implicitlyApplies() const override;
bool prematurelyApplies(const QChar &typedCharacter) const override;
- void apply(TextEditor::TextDocumentManipulatorInterface &manipulator,
- int basePosition) const override;
+ void apply(TextEditor::TextDocumentManipulator &manipulator, int basePosition) const override;
QIcon icon() const override;
QString detail() const override;
bool isSnippet() const override;
diff --git a/src/plugins/languageclient/languageclientutils.cpp b/src/plugins/languageclient/languageclientutils.cpp
index f7b52fdc9b8..1572243b782 100644
--- a/src/plugins/languageclient/languageclientutils.cpp
+++ b/src/plugins/languageclient/languageclientutils.cpp
@@ -15,7 +15,7 @@
#include <coreplugin/messagemanager.h>
#include <coreplugin/progressmanager/progressmanager.h>
-#include <texteditor/codeassist/textdocumentmanipulatorinterface.h>
+#include <texteditor/codeassist/textdocumentmanipulator.h>
#include <texteditor/refactoringchanges.h>
#include <texteditor/textdocument.h>
#include <texteditor/texteditor.h>
@@ -100,7 +100,7 @@ bool applyTextEdits(const Client *client,
return file->apply(editsToChangeSet(edits, file->document()));
}
-void applyTextEdit(TextDocumentManipulatorInterface &manipulator,
+void applyTextEdit(TextDocumentManipulator &manipulator,
const TextEdit &edit,
bool newTextIsSnippet)
{
diff --git a/src/plugins/languageclient/languageclientutils.h b/src/plugins/languageclient/languageclientutils.h
index 8c233238813..d0f4ca791a1 100644
--- a/src/plugins/languageclient/languageclientutils.h
+++ b/src/plugins/languageclient/languageclientutils.h
@@ -15,7 +15,7 @@ namespace Core { class IEditor; }
namespace TextEditor {
class TextDocument;
-class TextDocumentManipulatorInterface;
+class TextDocumentManipulator;
} // namespace TextEditor
namespace LanguageClient {
@@ -37,7 +37,7 @@ bool LANGUAGECLIENT_EXPORT applyTextEdits(const Client *client,
const QList<LanguageServerProtocol::TextEdit> &edits);
bool LANGUAGECLIENT_EXPORT applyDocumentChange(const Client *client,
const LanguageServerProtocol::DocumentChange &change);
-void LANGUAGECLIENT_EXPORT applyTextEdit(TextEditor::TextDocumentManipulatorInterface &manipulator,
+void LANGUAGECLIENT_EXPORT applyTextEdit(TextEditor::TextDocumentManipulator &manipulator,
const LanguageServerProtocol::TextEdit &edit,
bool newTextIsSnippet = false);
void LANGUAGECLIENT_EXPORT
diff --git a/src/plugins/qmljseditor/qmljscompletionassist.cpp b/src/plugins/qmljseditor/qmljscompletionassist.cpp
index 666f619dee3..60fb80028e7 100644
--- a/src/plugins/qmljseditor/qmljscompletionassist.cpp
+++ b/src/plugins/qmljseditor/qmljscompletionassist.cpp
@@ -355,7 +355,7 @@ bool QmlJSAssistProposalItem::prematurelyApplies(const QChar &c) const
|| (text().endsWith(QLatin1Char('.')) && c == QLatin1Char('.'));
}
-void QmlJSAssistProposalItem::applyContextualContent(TextEditor::TextDocumentManipulatorInterface &manipulator,
+void QmlJSAssistProposalItem::applyContextualContent(TextEditor::TextDocumentManipulator &manipulator,
int basePosition) const
{
const int currentPosition = manipulator.currentPosition();
diff --git a/src/plugins/qmljseditor/qmljscompletionassist.h b/src/plugins/qmljseditor/qmljscompletionassist.h
index 50cb8bc548b..001d198f7c7 100644
--- a/src/plugins/qmljseditor/qmljscompletionassist.h
+++ b/src/plugins/qmljseditor/qmljscompletionassist.h
@@ -32,7 +32,7 @@ class QmlJSAssistProposalItem final : public TextEditor::AssistProposalItem
{
public:
bool prematurelyApplies(const QChar &c) const final;
- void applyContextualContent(TextEditor::TextDocumentManipulatorInterface &manipulator,
+ void applyContextualContent(TextEditor::TextDocumentManipulator &manipulator,
int basePosition) const final;
};
diff --git a/src/plugins/texteditor/CMakeLists.txt b/src/plugins/texteditor/CMakeLists.txt
index 22abf9d8a1e..1dd379fec71 100644
--- a/src/plugins/texteditor/CMakeLists.txt
+++ b/src/plugins/texteditor/CMakeLists.txt
@@ -42,7 +42,6 @@ add_qtc_plugin(TextEditor
codeassist/ifunctionhintproposalmodel.cpp codeassist/ifunctionhintproposalmodel.h
codeassist/keywordscompletionassist.cpp codeassist/keywordscompletionassist.h
codeassist/textdocumentmanipulator.cpp codeassist/textdocumentmanipulator.h
- codeassist/textdocumentmanipulatorinterface.h
codecchooser.cpp codecchooser.h
codestyleeditor.cpp codestyleeditor.h
codestylepool.cpp codestylepool.h
diff --git a/src/plugins/texteditor/circularclipboardassist.cpp b/src/plugins/texteditor/circularclipboardassist.cpp
index eb325a788bb..44b53c96e86 100644
--- a/src/plugins/texteditor/circularclipboardassist.cpp
+++ b/src/plugins/texteditor/circularclipboardassist.cpp
@@ -37,7 +37,7 @@ public:
setText(text);
}
- void apply(TextDocumentManipulatorInterface &manipulator, int /*basePosition*/) const final
+ void apply(TextDocumentManipulator &manipulator, int /*basePosition*/) const final
{
//Move to last in circular clipboard
diff --git a/src/plugins/texteditor/codeassist/assistproposalitem.cpp b/src/plugins/texteditor/codeassist/assistproposalitem.cpp
index aa2753f42cf..8b494ba6f0e 100644
--- a/src/plugins/texteditor/codeassist/assistproposalitem.cpp
+++ b/src/plugins/texteditor/codeassist/assistproposalitem.cpp
@@ -105,7 +105,7 @@ bool AssistProposalItem::prematurelyApplies(const QChar &c) const
return false;
}
-void AssistProposalItem::apply(TextDocumentManipulatorInterface &manipulator, int basePosition) const
+void AssistProposalItem::apply(TextDocumentManipulator &manipulator, int basePosition) const
{
if (data().canConvert<QString>()) {
applySnippet(manipulator, basePosition);
@@ -117,19 +117,19 @@ void AssistProposalItem::apply(TextDocumentManipulatorInterface &manipulator, in
}
}
-void AssistProposalItem::applyContextualContent(TextDocumentManipulatorInterface &manipulator, int basePosition) const
+void AssistProposalItem::applyContextualContent(TextDocumentManipulator &manipulator, int basePosition) const
{
const int currentPosition = manipulator.currentPosition();
manipulator.replace(basePosition, currentPosition - basePosition, text());
}
-void AssistProposalItem::applySnippet(TextDocumentManipulatorInterface &manipulator, int basePosition) const
+void AssistProposalItem::applySnippet(TextDocumentManipulator &manipulator, int basePosition) const
{
manipulator.insertCodeSnippet(basePosition, data().toString(), &Snippet::parse);
}
-void AssistProposalItem::applyQuickFix(TextDocumentManipulatorInterface &manipulator, int basePosition) const
+void AssistProposalItem::applyQuickFix(TextDocumentManipulator &manipulator, int basePosition) const
{
Q_UNUSED(manipulator)
Q_UNUSED(basePosition)
diff --git a/src/plugins/texteditor/codeassist/assistproposalitem.h b/src/plugins/texteditor/codeassist/assistproposalitem.h
index 888b6bb72b3..09527f31238 100644
--- a/src/plugins/texteditor/codeassist/assistproposalitem.h
+++ b/src/plugins/texteditor/codeassist/assistproposalitem.h
@@ -20,7 +20,7 @@ public:
QString text() const override;
bool implicitlyApplies() const override;
bool prematurelyApplies(const QChar &c) const override;
- void apply(TextDocumentManipulatorInterface &manipulator, int basePosition) const override;
+ void apply(TextDocumentManipulator &manipulator, int basePosition) const override;
void setIcon(const QIcon &icon);
QIcon icon() const final;
@@ -37,9 +37,9 @@ public:
bool isValid() const final;
quint64 hash() const override;
- virtual void applyContextualContent(TextDocumentManipulatorInterface &manipulator, int basePosition) const;
- virtual void applySnippet(TextDocumentManipulatorInterface &manipulator, int basePosition) const;
- virtual void applyQuickFix(TextDocumentManipulatorInterface &manipulator, int basePosition) const;
+ virtual void applyContextualContent(TextDocumentManipulator &manipulator, int basePosition) const;
+ virtual void applySnippet(TextDocumentManipulator &manipulator, int basePosition) const;
+ virtual void applyQuickFix(TextDocumentManipulator &manipulator, int basePosition) const;
private:
QIcon m_icon;
diff --git a/src/plugins/texteditor/codeassist/assistproposaliteminterface.h b/src/plugins/texteditor/codeassist/assistproposaliteminterface.h
index 47e342226ee..083a8048b64 100644
--- a/src/plugins/texteditor/codeassist/assistproposaliteminterface.h
+++ b/src/plugins/texteditor/codeassist/assistproposaliteminterface.h
@@ -3,7 +3,7 @@
#pragma once
-#include "textdocumentmanipulatorinterface.h"
+#include "textdocumentmanipulator.h"
QT_BEGIN_NAMESPACE
class QIcon;
@@ -36,7 +36,7 @@ public:
virtual QString filterText() const { return text(); }
virtual bool implicitlyApplies() const = 0;
virtual bool prematurelyApplies(const QChar &typedCharacter) const = 0;
- virtual void apply(TextDocumentManipulatorInterface &manipulator, int basePosition) const = 0;
+ virtual void apply(TextDocumentManipulator &manipulator, int basePosition) const = 0;
virtual QIcon icon() const = 0;
virtual QString detail() const = 0;
virtual bool isKeyword() const { return false; }
diff --git a/src/plugins/texteditor/codeassist/codeassist_test.cpp b/src/plugins/texteditor/codeassist/codeassist_test.cpp
index adb32dd7589..c1ef339ff30 100644
--- a/src/plugins/texteditor/codeassist/codeassist_test.cpp
+++ b/src/plugins/texteditor/codeassist/codeassist_test.cpp
@@ -46,7 +46,7 @@ public:
class OpenEditorItem final : public TestProposalItem
{
public:
- void apply(TextDocumentManipulatorInterface &, int) const final
+ void apply(TextDocumentManipulator &, int) const final
{
m_openedEditor = Core::EditorManager::openEditor(m_filePath,
Core::Constants::K_DEFAULT_TEXT_EDITOR_ID);
diff --git a/src/plugins/texteditor/codeassist/keywordscompletionassist.cpp b/src/plugins/texteditor/codeassist/keywordscompletionassist.cpp
index 5ab0f0e455c..1f3e61650c0 100644
--- a/src/plugins/texteditor/codeassist/keywordscompletionassist.cpp
+++ b/src/plugins/texteditor/codeassist/keywordscompletionassist.cpp
@@ -72,7 +72,7 @@ bool KeywordsAssistProposalItem::prematurelyApplies(const QChar &c) const
return c == QLatin1Char('(') && m_isFunction;
}
-void KeywordsAssistProposalItem::applyContextualContent(TextDocumentManipulatorInterface &manipulator,
+void KeywordsAssistProposalItem::applyContextualContent(TextDocumentManipulator &manipulator,
int basePosition) const
{
const CompletionSettings &settings = TextEditorSettings::completionSettings();
diff --git a/src/plugins/texteditor/codeassist/keywordscompletionassist.h b/src/plugins/texteditor/codeassist/keywordscompletionassist.h
index 63398bb39d7..a5a29e60ef6 100644
--- a/src/plugins/texteditor/codeassist/keywordscompletionassist.h
+++ b/src/plugins/texteditor/codeassist/keywordscompletionassist.h
@@ -40,7 +40,7 @@ public:
KeywordsAssistProposalItem(bool isFunction);
bool prematurelyApplies(const QChar &c) const final;
- void applyContextualContent(TextDocumentManipulatorInterface &manipulator, int basePosition) const final;
+ void applyContextualContent(TextDocumentManipulator &manipulator, int basePosition) const final;
private:
bool m_isFunction;
};
diff --git a/src/plugins/texteditor/codeassist/textdocumentmanipulator.cpp b/src/plugins/texteditor/codeassist/textdocumentmanipulator.cpp
index bd803851706..e6f0284fec3 100644
--- a/src/plugins/texteditor/codeassist/textdocumentmanipulator.cpp
+++ b/src/plugins/texteditor/codeassist/textdocumentmanipulator.cpp
@@ -112,6 +112,22 @@ void TextDocumentManipulator::autoIndent(int position, int length)
}
}
+QString TextDocumentManipulator::getLine(int line) const
+{
+ return m_textEditorWidget->document()->findBlockByNumber(line - 1).text();
+}
+
+Utils::Text::Position TextDocumentManipulator::cursorPos() const
+{
+ return Utils::Text::Position::fromCursor(m_textEditorWidget->textCursor());
+}
+
+int TextDocumentManipulator::skipPos() const
+{
+ const QList<QTextCursor> highlights = m_textEditorWidget->autoCompleteHighlightPositions();
+ return highlights.isEmpty() ? -1 : highlights.first().position();
+}
+
bool TextDocumentManipulator::textIsDifferentAt(int position, int length, const QString &text) const
{
const auto textToBeReplaced = m_textEditorWidget->textAt(position, length);
diff --git a/src/plugins/texteditor/codeassist/textdocumentmanipulator.h b/src/plugins/texteditor/codeassist/textdocumentmanipulator.h
index f1de85b5d16..6e6e553dec0 100644
--- a/src/plugins/texteditor/codeassist/textdocumentmanipulator.h
+++ b/src/plugins/texteditor/codeassist/textdocumentmanipulator.h
@@ -3,30 +3,45 @@
#pragma once
-#include "textdocumentmanipulatorinterface.h"
+#include <texteditor/snippets/snippetparser.h>
+#include <texteditor/texteditor_global.h>
+
+#include <utils/textutils.h>
+
+QT_BEGIN_NAMESPACE
+class QChar;
+class QString;
+class QTextCursor;
+QT_END_NAMESPACE
namespace TextEditor {
class TextEditorWidget;
-class TextDocumentManipulator final : public TextDocumentManipulatorInterface
+class TEXTEDITOR_EXPORT TextDocumentManipulator
{
public:
TextDocumentManipulator(TextEditorWidget *textEditorWidget);
- int currentPosition() const final;
- int positionAt(TextPositionOperation textPositionOperation) const final;
- QChar characterAt(int position) const final;
- QString textAt(int position, int length) const final;
- QTextCursor textCursorAt(int position) const final;
-
- void setCursorPosition(int position) final;
- void setAutoCompleteSkipPosition(int position) final;
- bool replace(int position, int length, const QString &text) final;
- void insertCodeSnippet(int position, const QString &text, const SnippetParser &parse) final;
- void paste() final;
- void encourageApply() final;
- void autoIndent(int position, int length) override;
+ int currentPosition() const;
+ int positionAt(TextPositionOperation textPositionOperation) const;
+ QChar characterAt(int position) const;
+ QString textAt(int position, int length) const;
+ QTextCursor textCursorAt(int position) const;
+
+ void setCursorPosition(int position);
+ void setAutoCompleteSkipPosition(int position);
+ bool replace(int position, int length, const QString &text);
+ void insertCodeSnippet(int position, const QString &text, const SnippetParser &parse);
+ void paste();
+ void encourageApply();
+ void autoIndent(int position, int length);
+
+ QString getLine(int line) const;
+
+ Utils::Text::Position cursorPos() const;
+
+ int skipPos() const;
private:
bool textIsDifferentAt(int position, int length, const QString &text) const;
diff --git a/src/plugins/texteditor/codeassist/textdocumentmanipulatorinterface.h b/src/plugins/texteditor/codeassist/textdocumentmanipulatorinterface.h
deleted file mode 100644
index def82c9304d..00000000000
--- a/src/plugins/texteditor/codeassist/textdocumentmanipulatorinterface.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-#pragma once
-
-#include <texteditor/snippets/snippetparser.h>
-#include <texteditor/texteditor_global.h>
-
-QT_BEGIN_NAMESPACE
-class QChar;
-class QString;
-class QTextCursor;
-QT_END_NAMESPACE
-
-namespace TextEditor {
-
-class TEXTEDITOR_EXPORT TextDocumentManipulatorInterface
-{
-public:
- virtual ~TextDocumentManipulatorInterface() = default;
-
- virtual int currentPosition() const = 0;
- virtual int positionAt(TextPositionOperation textPositionOperation) const = 0;
- virtual QChar characterAt(int position) const = 0;
- virtual QString textAt(int position, int length) const = 0;
- virtual QTextCursor textCursorAt(int position) const = 0;
-
- virtual void setCursorPosition(int position) = 0;
- virtual void setAutoCompleteSkipPosition(int position) = 0;
- virtual bool replace(int position, int length, const QString &text) = 0;
- virtual void insertCodeSnippet(int position,
- const QString &text,
- const SnippetParser &parse) = 0;
- virtual void paste() = 0;
- virtual void encourageApply() = 0;
- virtual void autoIndent(int position, int length) = 0;
-};
-
-} // namespace TextEditor
diff --git a/src/plugins/texteditor/snippets/snippetassistcollector.cpp b/src/plugins/texteditor/snippets/snippetassistcollector.cpp
index 58e46bb9673..e98aa41dd94 100644
--- a/src/plugins/texteditor/snippets/snippetassistcollector.cpp
+++ b/src/plugins/texteditor/snippets/snippetassistcollector.cpp
@@ -24,7 +24,7 @@ public:
}
bool implicitlyApplies() const override { return false; }
bool prematurelyApplies(const QChar &) const override { return false; }
- void apply(TextDocumentManipulatorInterface &manipulator, int basePosition) const override
+ void apply(TextDocumentManipulator &manipulator, int basePosition) const override
{
manipulator.insertCodeSnippet(basePosition, m_snippet.content(), &Snippet::parse);
}
diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp
index d865fcebe98..c3b2ff72151 100644
--- a/src/plugins/texteditor/texteditor.cpp
+++ b/src/plugins/texteditor/texteditor.cpp
@@ -7037,6 +7037,11 @@ TextEditorWidget::SuggestionBlocker TextEditorWidget::blockSuggestions()
return d->m_suggestionBlocker;
}
+QList<QTextCursor> TextEditorWidget::autoCompleteHighlightPositions() const
+{
+ return d->m_autoCompleteHighlightPos;
+}
+
#ifdef WITH_TESTS
void TextEditorWidget::processTooltipRequest(const QTextCursor &c)
{
diff --git a/src/plugins/texteditor/texteditor.h b/src/plugins/texteditor/texteditor.h
index 7fc56e87337..defd96f42d7 100644
--- a/src/plugins/texteditor/texteditor.h
+++ b/src/plugins/texteditor/texteditor.h
@@ -518,6 +518,8 @@ public:
// Returns an object that blocks suggestions until it is destroyed.
SuggestionBlocker blockSuggestions();
+ QList<QTextCursor> autoCompleteHighlightPositions() const;
+
#ifdef WITH_TESTS
void processTooltipRequest(const QTextCursor &c);
#endif
diff --git a/src/plugins/texteditor/texteditor.qbs b/src/plugins/texteditor/texteditor.qbs
index ccb298a5aa8..0646d1f9eca 100644
--- a/src/plugins/texteditor/texteditor.qbs
+++ b/src/plugins/texteditor/texteditor.qbs
@@ -199,7 +199,6 @@ QtcPlugin {
"keywordscompletionassist.h",
"textdocumentmanipulator.cpp",
"textdocumentmanipulator.h",
- "textdocumentmanipulatorinterface.h",
]
}