diff --git a/src/plugins/cppeditor/cppautocompleter.cpp b/src/plugins/cppeditor/cppautocompleter.cpp index 23c546004ff62000b230f2d18afbc92dc0a4035b..0b6deca9ea0425cf63fd13bb39924a2a13aaadb4 100644 --- a/src/plugins/cppeditor/cppautocompleter.cpp +++ b/src/plugins/cppeditor/cppautocompleter.cpp @@ -39,11 +39,50 @@ using namespace CppEditor; using namespace Internal; using namespace CPlusPlus; -CppAutoCompleter::CppAutoCompleter() -{} +static const Token tokenAtPosition(const QList &tokens, const unsigned pos) +{ + for (int i = tokens.size() - 1; i >= 0; --i) { + const Token tk = tokens.at(i); + if (pos >= tk.utf16charsBegin() && pos < tk.utf16charsEnd()) + return tk; + } + return Token(); +} + +static bool isInCommentHelper(const QTextCursor &cursor, Token *retToken = 0) +{ + LanguageFeatures features; + features.qtEnabled = false; + features.qtKeywordsEnabled = false; + features.qtMocRunEnabled = false; + features.cxx11Enabled = true; + features.c99Enabled = true; + + SimpleLexer tokenize; + tokenize.setLanguageFeatures(features); + + const int prevState = BackwardsScanner::previousBlockState(cursor.block()) & 0xFF; + const QList tokens = tokenize(cursor.block().text(), prevState); + + const unsigned pos = cursor.selectionEnd() - cursor.block().position(); -CppAutoCompleter::~CppAutoCompleter() -{} + if (tokens.isEmpty() || pos < tokens.first().utf16charsBegin()) + return prevState > 0; + + if (pos >= tokens.last().utf16charsEnd()) { + const Token tk = tokens.last(); + if (tk.is(T_CPP_COMMENT) || tk.is(T_CPP_DOXY_COMMENT)) + return true; + return tk.isComment() && (cursor.block().userState() & 0xFF); + } + + Token tk = tokenAtPosition(tokens, pos); + + if (retToken) + *retToken = tk; + + return tk.isComment(); +} bool CppAutoCompleter::contextAllowsAutoParentheses(const QTextCursor &cursor, const QString &textToInsert) const @@ -99,47 +138,3 @@ QString CppAutoCompleter::insertParagraphSeparator(const QTextCursor &cursor) co return m.insertParagraphSeparator(cursor); } -bool CppAutoCompleter::isInCommentHelper(const QTextCursor &cursor, Token *retToken) const -{ - LanguageFeatures features; - features.qtEnabled = false; - features.qtKeywordsEnabled = false; - features.qtMocRunEnabled = false; - features.cxx11Enabled = true; - features.c99Enabled = true; - - SimpleLexer tokenize; - tokenize.setLanguageFeatures(features); - - const int prevState = BackwardsScanner::previousBlockState(cursor.block()) & 0xFF; - const QList tokens = tokenize(cursor.block().text(), prevState); - - const unsigned pos = cursor.selectionEnd() - cursor.block().position(); - - if (tokens.isEmpty() || pos < tokens.first().utf16charsBegin()) - return prevState > 0; - - if (pos >= tokens.last().utf16charsEnd()) { - const Token tk = tokens.last(); - if (tk.is(T_CPP_COMMENT) || tk.is(T_CPP_DOXY_COMMENT)) - return true; - return tk.isComment() && (cursor.block().userState() & 0xFF); - } - - Token tk = tokenAtPosition(tokens, pos); - - if (retToken) - *retToken = tk; - - return tk.isComment(); -} - -const Token CppAutoCompleter::tokenAtPosition(const QList &tokens, const unsigned pos) const -{ - for (int i = tokens.size() - 1; i >= 0; --i) { - const Token tk = tokens.at(i); - if (pos >= tk.utf16charsBegin() && pos < tk.utf16charsEnd()) - return tk; - } - return Token(); -} diff --git a/src/plugins/cppeditor/cppautocompleter.h b/src/plugins/cppeditor/cppautocompleter.h index 867c4cf25b87974ba0d1fd04736e981751eb83e6..1dd434915e9348d59d4fa3f187134d4f54ece429 100644 --- a/src/plugins/cppeditor/cppautocompleter.h +++ b/src/plugins/cppeditor/cppautocompleter.h @@ -32,16 +32,13 @@ #include -#include - namespace CppEditor { namespace Internal { class CppAutoCompleter : public TextEditor::AutoCompleter { public: - CppAutoCompleter(); - virtual ~CppAutoCompleter(); + CppAutoCompleter() {} virtual bool contextAllowsAutoParentheses(const QTextCursor &cursor, const QString &textToInsert = QString()) const; @@ -52,10 +49,6 @@ public: QChar la, int *skippedChars) const; virtual QString insertParagraphSeparator(const QTextCursor &cursor) const; - -private: - bool isInCommentHelper(const QTextCursor &cursor, CPlusPlus::Token *retToken = 0) const; - const CPlusPlus::Token tokenAtPosition(const QList &tokens, const unsigned pos) const; }; } // Internal