aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/utils/textutils.h
diff options
context:
space:
mode:
authorIvan Donchevskii <ivan.donchevskii@qt.io>2018-07-31 11:44:07 +0200
committerIvan Donchevskii <ivan.donchevskii@qt.io>2018-08-02 12:47:17 +0000
commit0f96f735f009a8f79a97ef81183bb43eaedc3a1e (patch)
treef06a022508288eff11d02c0d0f545a0a40a98179 /src/libs/utils/textutils.h
parentb1f156ab35ac1d0a4936b90df7ff57e3dce6e71f (diff)
Clang: Provide all overloads for function definition completion
When we complete a function definition with the parameter list it is important to have multiple entries to select. Change-Id: I25e94b58cfe4831387d66eecdec74712addb7ec5 Reviewed-by: Marco Bubke <marco.bubke@qt.io>
Diffstat (limited to 'src/libs/utils/textutils.h')
-rw-r--r--src/libs/utils/textutils.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/libs/utils/textutils.h b/src/libs/utils/textutils.h
index 0f848417f9..c03e7ce2ce 100644
--- a/src/libs/utils/textutils.h
+++ b/src/libs/utils/textutils.h
@@ -29,6 +29,7 @@
#include "utils_global.h"
#include <QString>
+#include <QTextCursor>
QT_FORWARD_DECLARE_CLASS(QTextDocument)
QT_FORWARD_DECLARE_CLASS(QTextCursor)
@@ -54,5 +55,42 @@ QTCREATOR_UTILS_EXPORT QTextCursor flippedCursor(const QTextCursor &cursor);
QTCREATOR_UTILS_EXPORT QTextCursor wordStartCursor(const QTextCursor &cursor);
+template <class CharacterProvider>
+void moveToPrevChar(CharacterProvider &provider, QTextCursor &cursor)
+{
+ cursor.movePosition(QTextCursor::PreviousCharacter);
+ while (provider.characterAt(cursor.position()).isSpace())
+ cursor.movePosition(QTextCursor::PreviousCharacter);
+}
+
+template <class CharacterProvider>
+bool matchPreviousWord(CharacterProvider &provider, QTextCursor cursor, QString pattern)
+{
+ cursor.movePosition(QTextCursor::PreviousWord);
+ while (provider.characterAt(cursor.position()) == ':')
+ cursor.movePosition(QTextCursor::PreviousWord, QTextCursor::MoveAnchor, 2);
+
+ int previousWordStart = cursor.position();
+ cursor.movePosition(QTextCursor::NextWord);
+ moveToPrevChar(provider, cursor);
+ QString toMatch = provider.textAt(previousWordStart, cursor.position() - previousWordStart + 1);
+
+ pattern = pattern.simplified();
+ while (!pattern.isEmpty() && pattern.endsWith(toMatch)) {
+ pattern.chop(toMatch.length());
+ if (pattern.endsWith(' '))
+ pattern.chop(1);
+ if (!pattern.isEmpty()) {
+ cursor.movePosition(QTextCursor::StartOfWord);
+ cursor.movePosition(QTextCursor::PreviousWord);
+ previousWordStart = cursor.position();
+ cursor.movePosition(QTextCursor::NextWord);
+ moveToPrevChar(provider, cursor);
+ toMatch = provider.textAt(previousWordStart, cursor.position() - previousWordStart + 1);
+ }
+ }
+ return pattern.isEmpty();
+}
+
} // Text
} // Utils