void CppTodoItemsScanner::processDocument(CPlusPlus::Document::Ptr doc) { QList<TodoItem> itemList; CPlusPlus::TranslationUnit *translationUnit = doc->translationUnit(); for (unsigned i = 0; i < translationUnit->commentCount(); ++i) { // Get comment source CPlusPlus::Token token = doc->translationUnit()->commentAt(i); QByteArray source = doc->utf8Source().mid(token.begin(), token.length()).trimmed(); if ((token.kind() == CPlusPlus::T_COMMENT) || (token.kind() == CPlusPlus::T_DOXY_COMMENT)) { // Remove trailing "*/" source = source.left(source.length() - 2); } // Process every line of the comment // TODO: Do not create QStringList, just iterate through a string tracking line endings. const QStringList commentLines = QString::fromUtf8(source).split(QLatin1Char('\n'), QString::SkipEmptyParts); unsigned lineNumber = 0; translationUnit->getPosition(token.begin(), &lineNumber); for (int j = 0; j < commentLines.count(); ++j) { const QString &commentLine = commentLines.at(j); processCommentLine(doc->fileName(), commentLine, lineNumber + j, itemList); } } emit itemsFetched(doc->fileName(), itemList); }
void QmlJsTodoItemsScanner::processDocument(QmlJS::Document::Ptr doc) { QList<TodoItem> itemList; foreach (const QmlJS::AST::SourceLocation &sourceLocation, doc->engine()->comments()) { QString source = doc->source().mid(sourceLocation.begin(), sourceLocation.length).trimmed(); // Process every line // TODO: Do not create QStringList, just iterate through a string tracking line endings. QStringList commentLines = source.split(QLatin1Char('\n'), QString::SkipEmptyParts); quint32 startLine = sourceLocation.startLine; for (int j = 0; j < commentLines.count(); ++j) { const QString &commentLine = commentLines.at(j); processCommentLine(doc->fileName(), commentLine, startLine + j, itemList); } } emit itemsFetched(doc->fileName(), itemList); }