diff options
author | Ivan Donchevskii <ivan.donchevskii@qt.io> | 2018-07-31 11:44:07 +0200 |
---|---|---|
committer | Ivan Donchevskii <ivan.donchevskii@qt.io> | 2018-08-02 12:47:17 +0000 |
commit | 0f96f735f009a8f79a97ef81183bb43eaedc3a1e (patch) | |
tree | f06a022508288eff11d02c0d0f545a0a40a98179 /src/libs/utils/textutils.h | |
parent | b1f156ab35ac1d0a4936b90df7ff57e3dce6e71f (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.h | 38 |
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 |