bool CppElementEvaluator::matchMacroInUse(const Document::Ptr &document, unsigned pos) { foreach (const Document::MacroUse &use, document->macroUses()) { if (use.containsUtf16charOffset(pos)) { const unsigned begin = use.utf16charsBegin(); if (pos < begin + use.macro().nameToQString().size()) { m_element = QSharedPointer<CppElement>(new CppMacro(use.macro())); return true; } } } return false; }
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); }