diff options
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", ] } |