From da4fcd22ef4f15234a97f05d6fb5ae7a9e7ba56f Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Thu, 17 Sep 2009 18:39:10 +0200 Subject: [PATCH] Pass the lookahead character to matching text. --- src/libs/cplusplus/MatchingText.cpp | 25 +++++++++++++++++++++++-- src/libs/cplusplus/MatchingText.h | 3 ++- src/plugins/cppeditor/cppeditor.cpp | 4 +++- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/libs/cplusplus/MatchingText.cpp b/src/libs/cplusplus/MatchingText.cpp index 86a31fc9ec5..76a6fe1ca71 100644 --- a/src/libs/cplusplus/MatchingText.cpp +++ b/src/libs/cplusplus/MatchingText.cpp @@ -71,10 +71,31 @@ static bool isCompleteCharLiteral(const BackwardsScanner &tk, int index, int sta return false; } +static bool shouldInsertMatchingText(const QChar &lookAhead) +{ + if (lookAhead.isSpace()) + return true; + else if (lookAhead == QLatin1Char('{')) + return true; + else if (lookAhead == QLatin1Char('}')) + return true; + else if (lookAhead == QLatin1Char(']')) + return true; + else if (lookAhead == QLatin1Char(')')) + return true; + else if (lookAhead == QLatin1Char(';')) + return true; + else if (lookAhead == QLatin1Char(',')) + return true; + + return false; +} + MatchingText::MatchingText() { } -QString MatchingText::insertMatchingBrace(const QTextCursor &cursor, const QString &textToProcess, int *skippedChars) const +QString MatchingText::insertMatchingBrace(const QTextCursor &cursor, const QString &textToProcess, + const QChar &la, int *skippedChars) const { *skippedChars = 0; @@ -101,7 +122,7 @@ QString MatchingText::insertMatchingBrace(const QTextCursor &cursor, const QStri text = textToProcess.mid(*skippedChars); } - if (text.isEmpty()) + if (text.isEmpty() || !shouldInsertMatchingText(la)) return QString(); BackwardsScanner tk(tc, textToProcess.left(*skippedChars), MAX_NUM_LINES); diff --git a/src/libs/cplusplus/MatchingText.h b/src/libs/cplusplus/MatchingText.h index f964c424543..bfb21aa68d6 100644 --- a/src/libs/cplusplus/MatchingText.h +++ b/src/libs/cplusplus/MatchingText.h @@ -41,7 +41,8 @@ class CPLUSPLUS_EXPORT MatchingText public: MatchingText(); - QString insertMatchingBrace(const QTextCursor &tc, const QString &text, int *skippedChars) const; + QString insertMatchingBrace(const QTextCursor &tc, const QString &text, + const QChar &la, int *skippedChars) const; QString insertParagraphSeparator(const QTextCursor &tc) const; }; diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index 714732e06f9..083f6718715 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -1275,11 +1275,13 @@ QString CPPEditor::autoComplete(QTextCursor &cursor, const QString &text) const if (!contextAllowsAutoParentheses(cursor)) return QString(); + QChar lookAhead = characterAt(cursor.selectionEnd()); + QString autoText; int skippedChars = 0; MatchingText matchingText; - autoText = matchingText.insertMatchingBrace(cursor, text, &skippedChars); + autoText = matchingText.insertMatchingBrace(cursor, text, lookAhead, &skippedChars); if (skippedChars) { const int pos = cursor.position();