bool CppAutoCompleter::isInCommentHelper(const QTextCursor &cursor, Token *retToken) const { SimpleLexer tokenize; tokenize.setQtMocRunEnabled(false); tokenize.setObjCEnabled(false); tokenize.setCxx0xEnabled(true); const int prevState = BackwardsScanner::previousBlockState(cursor.block()) & 0xFF; const QList<Token> tokens = tokenize(cursor.block().text(), prevState); const unsigned pos = cursor.selectionEnd() - cursor.block().position(); if (tokens.isEmpty() || pos < tokens.first().begin()) return prevState > 0; if (pos >= tokens.last().end()) { 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(); }
QFuture<TextEditor::HighlightingResult> CppHighlightingSupportInternal::highlightingFuture( const Document::Ptr &doc, const Snapshot &snapshot) const { typedef TextEditor::HighlightingResult Result; QList<Result> macroUses; // Get macro definitions foreach (const CPlusPlus::Macro& macro, doc->definedMacros()) { int line, column; editor()->convertPosition(macro.offset(), &line, &column); ++column; //Highlighting starts at (column-1) --> compensate here Result use(line, column, macro.name().size(), MacroUse); macroUses.append(use); } // Get macro uses foreach (const Document::MacroUse ¯o, doc->macroUses()) { const QString name = QString::fromUtf8(macro.macro().name()); //Filter out QtKeywords if (isQtKeyword(QStringRef(&name))) continue; //Filter out C++ keywords SimpleLexer tokenize; tokenize.setQtMocRunEnabled(false); tokenize.setObjCEnabled(false); tokenize.setCxx0xEnabled(true); const QList<Token> tokens = tokenize(name); if (tokens.length() && (tokens.at(0).isKeyword() || tokens.at(0).isObjCAtKeyword())) continue; int line, column; editor()->convertPosition(macro.begin(), &line, &column); ++column; //Highlighting starts at (column-1) --> compensate here Result use(line, column, name.size(), MacroUse); macroUses.append(use); } LookupContext context(doc, snapshot); return CheckSymbols::go(doc, context, macroUses); }