summaryrefslogtreecommitdiff
path: root/src/qdoc/clangcodeparser.cpp
diff options
context:
space:
mode:
authorPaul Wicking <paul.wicking@qt.io>2019-12-17 06:44:19 +0100
committerPaul Wicking <paul.wicking@qt.io>2019-12-17 09:08:20 +0100
commited6658c2c82e2d91f34d57e88b61648fb301baf4 (patch)
treebf1c298dd4b59acb55f3f3921c6b9edac407192c /src/qdoc/clangcodeparser.cpp
parent9f13c865439c024364f999680ceceb296d9daeb2 (diff)
downloadqttools-ed6658c2c82e2d91f34d57e88b61648fb301baf4.tar.gz
clang-format QDoc
This patch is the result of formatting all of QDoc's source with clang-format. The clang-format style is from the qt5 super repo's _clang-format definition. The purpose is unify the style across the code, to avoid spending too much time on style related issues in reviews and cleanup patches. Future changes to QDoc can benefit from using git-clang-format in combination with the git commit hook provided in qtrepotools.git as mentioned in this email to the dev list: https://lists.qt-project.org/pipermail/development/2019-October/037682.html Change-Id: I8af6a051c8334b5f35862a4dcd3becce8ac500c2 Reviewed-by: Martin Smith <martin.smith@qt.io>
Diffstat (limited to 'src/qdoc/clangcodeparser.cpp')
-rw-r--r--src/qdoc/clangcodeparser.cpp280
1 files changed, 162 insertions, 118 deletions
diff --git a/src/qdoc/clangcodeparser.cpp b/src/qdoc/clangcodeparser.cpp
index 2e96a092d..5e04c344e 100644
--- a/src/qdoc/clangcodeparser.cpp
+++ b/src/qdoc/clangcodeparser.cpp
@@ -67,7 +67,7 @@ static CXTranslationUnit_Flags flags_ = static_cast<CXTranslationUnit_Flags>(0);
static CXIndex index_ = nullptr;
#ifndef QT_NO_DEBUG_STREAM
-template <class T>
+template<class T>
static QDebug operator<<(QDebug debug, const std::vector<T> &v)
{
QDebugStateSaver saver(debug);
@@ -90,10 +90,13 @@ static QDebug operator<<(QDebug debug, const std::vector<T> &v)
T can be any functor that is callable with a CXCursor parameter and returns a CXChildVisitResult
(in other word compatible with function<CXChildVisitResult(CXCursor)>
*/
-template <typename T> bool visitChildrenLambda(CXCursor cursor, T &&lambda)
+template<typename T>
+bool visitChildrenLambda(CXCursor cursor, T &&lambda)
{
- CXCursorVisitor visitor = [](CXCursor c, CXCursor , CXClientData client_data) -> CXChildVisitResult
- { return (*static_cast<T *>(client_data))(c); };
+ CXCursorVisitor visitor = [](CXCursor c, CXCursor,
+ CXClientData client_data) -> CXChildVisitResult {
+ return (*static_cast<T *>(client_data))(c);
+ };
return clang_visitChildren(cursor, visitor, &lambda);
}
@@ -107,7 +110,6 @@ static QString fromCXString(CXString &&string)
return ret;
}
-
/*!
convert a CXSourceLocation to a qdoc Location
*/
@@ -125,12 +127,17 @@ static Location fromCXSourceLocation(CXSourceLocation location)
/*!
convert a CX_CXXAccessSpecifier to Node::Access
*/
-static Node::Access fromCX_CXXAccessSpecifier(CX_CXXAccessSpecifier spec) {
+static Node::Access fromCX_CXXAccessSpecifier(CX_CXXAccessSpecifier spec)
+{
switch (spec) {
- case CX_CXXPrivate: return Node::Private;
- case CX_CXXProtected: return Node::Protected;
- case CX_CXXPublic: return Node::Public;
- default: return Node::Public;
+ case CX_CXXPrivate:
+ return Node::Private;
+ case CX_CXXProtected:
+ return Node::Protected;
+ case CX_CXXPublic:
+ return Node::Public;
+ default:
+ return Node::Public;
}
}
@@ -154,7 +161,6 @@ static QString getSpelling(CXSourceRange range)
return QString::fromUtf8(file.read(offset2 - offset1));
}
-
/*!
Returns the function name from a given cursor representing a
function declaration. This is usually clang_getCursorSpelling, but
@@ -163,9 +169,9 @@ static QString getSpelling(CXSourceRange range)
QString functionName(CXCursor cursor)
{
if (clang_getCursorKind(cursor) == CXCursor_ConversionFunction) {
- // For a CXCursor_ConversionFunction we don't want the spelling which would be something like
- // "operator type-parameter-0-0" or "operator unsigned int".
- // we want the actual name as spelled;
+ // For a CXCursor_ConversionFunction we don't want the spelling which would be something
+ // like "operator type-parameter-0-0" or "operator unsigned int". we want the actual name as
+ // spelled;
QString type = fromCXString(clang_getTypeSpelling(clang_getCursorResultType(cursor)));
if (type.isEmpty())
return fromCXString(clang_getCursorSpelling(cursor));
@@ -185,7 +191,8 @@ QString functionName(CXCursor cursor)
Reconstruct the qualified path name of a function that is
being overridden.
*/
-static QString reconstructQualifiedPathForCursor(CXCursor cur) {
+static QString reconstructQualifiedPathForCursor(CXCursor cur)
+{
QString path;
auto kind = clang_getCursorKind(cur);
while (!clang_isInvalid(kind) && kind != CXCursor_TranslationUnit) {
@@ -219,7 +226,8 @@ static QString reconstructQualifiedPathForCursor(CXCursor cur) {
Find the node from the QDocDatabase \a qdb that corrseponds to the declaration
represented by the cursor \a cur, if it exists.
*/
-static Node *findNodeForCursor(QDocDatabase *qdb, CXCursor cur) {
+static Node *findNodeForCursor(QDocDatabase *qdb, CXCursor cur)
+{
auto kind = clang_getCursorKind(cur);
if (clang_isInvalid(kind))
return nullptr;
@@ -308,7 +316,8 @@ static Node *findNodeForCursor(QDocDatabase *qdb, CXCursor cur) {
corrseponds to the declaration represented by the cursor
\a cur, if it exists.
*/
-static Node *findFunctionNodeForCursor(QDocDatabase *qdb, CXCursor cur) {
+static Node *findFunctionNodeForCursor(QDocDatabase *qdb, CXCursor cur)
+{
auto kind = clang_getCursorKind(cur);
if (clang_isInvalid(kind))
return nullptr;
@@ -375,10 +384,13 @@ static Node *findFunctionNodeForCursor(QDocDatabase *qdb, CXCursor cur) {
return nullptr;
}
-class ClangVisitor {
+class ClangVisitor
+{
public:
ClangVisitor(QDocDatabase *qdb, const QHash<QString, QString> &allHeaders)
- : qdb_(qdb), parent_(qdb->primaryTreeRoot()), allHeaders_(allHeaders) { }
+ : qdb_(qdb), parent_(qdb->primaryTreeRoot()), allHeaders_(allHeaders)
+ {
+ }
QDocDatabase *qdocDB() { return qdb_; }
@@ -425,6 +437,7 @@ public:
}
Node *nodeForCommentAtLocation(CXSourceLocation loc, CXSourceLocation nextCommentLoc);
+
private:
/*!
SimpleLoc represents a simple location in the main source file,
@@ -433,7 +446,8 @@ private:
struct SimpleLoc
{
unsigned int line, column;
- friend bool operator<(const SimpleLoc &a, const SimpleLoc &b) {
+ friend bool operator<(const SimpleLoc &a, const SimpleLoc &b)
+ {
return a.line != b.line ? a.line < b.line : a.column < b.column;
}
};
@@ -452,7 +466,8 @@ private:
/*!
Returns true if the symbol should be ignored for the documentation.
*/
- bool ignoredSymbol(const QString &symbolName) {
+ bool ignoredSymbol(const QString &symbolName)
+ {
if (symbolName == QLatin1String("QPrivateSignal"))
return true;
return false;
@@ -464,7 +479,8 @@ private:
example: 'QLinkedList::iterator' -> 'iterator'
*/
- QString adjustTypeName(const QString &typeName) {
+ QString adjustTypeName(const QString &typeName)
+ {
auto parent = parent_->parent();
if (parent && parent->isClassNode()) {
QStringRef typeNameConstRemoved(&typeName);
@@ -473,7 +489,7 @@ private:
auto parentName = parent->fullName();
if (typeNameConstRemoved.startsWith(parentName)
- && typeNameConstRemoved.mid(parentName.size(), 2) == QLatin1String("::")) {
+ && typeNameConstRemoved.mid(parentName.size(), 2) == QLatin1String("::")) {
QString result = typeName;
result.remove(typeNameConstRemoved.position(), parentName.size() + 2);
return result;
@@ -484,7 +500,8 @@ private:
CXChildVisitResult visitSource(CXCursor cursor, CXSourceLocation loc);
CXChildVisitResult visitHeader(CXCursor cursor, CXSourceLocation loc);
- CXChildVisitResult visitFnSignature(CXCursor cursor, CXSourceLocation loc, Node **fnNode, bool &ignoreSignature);
+ CXChildVisitResult visitFnSignature(CXCursor cursor, CXSourceLocation loc, Node **fnNode,
+ bool &ignoreSignature);
void parseProperty(const QString &spelling, const Location &loc);
void readParameterNamesAndAttributes(FunctionNode *fn, CXCursor cursor);
Aggregate *getSemanticParent(CXCursor cursor);
@@ -524,7 +541,8 @@ Aggregate *ClangVisitor::getSemanticParent(CXCursor cursor)
return parent_;
}
-CXChildVisitResult ClangVisitor::visitFnSignature(CXCursor cursor, CXSourceLocation , Node **fnNode, bool &ignoreSignature)
+CXChildVisitResult ClangVisitor::visitFnSignature(CXCursor cursor, CXSourceLocation, Node **fnNode,
+ bool &ignoreSignature)
{
switch (clang_getCursorKind(cursor)) {
case CXCursor_FunctionDecl:
@@ -582,7 +600,8 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l
if (!clang_isCursorDefinition(cursor))
return CXChildVisit_Continue;
- if (findNodeForCursor(qdb_, cursor)) // Was already parsed, propably in another translation unit
+ if (findNodeForCursor(qdb_,
+ cursor)) // Was already parsed, propably in another translation unit
return CXChildVisit_Continue;
QString className = fromCXString(clang_getCursorSpelling(cursor));
@@ -610,7 +629,6 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l
QScopedValueRollback<Aggregate *> setParent(parent_, classe);
return visitChildren(cursor);
-
}
case CXCursor_CXXBaseSpecifier: {
if (!parent_->isClassNode())
@@ -633,7 +651,8 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l
QString namespaceName = fromCXString(clang_getCursorDisplayName(cursor));
NamespaceNode *ns = nullptr;
if (parent_)
- ns = static_cast<NamespaceNode *>(parent_->findNonfunctionChild(namespaceName, &Node::isNamespace));
+ ns = static_cast<NamespaceNode *>(
+ parent_->findNonfunctionChild(namespaceName, &Node::isNamespace));
if (!ns) {
ns = new NamespaceNode(parent_, namespaceName);
ns->setAccess(Node::Public);
@@ -648,7 +667,8 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l
case CXCursor_Constructor:
case CXCursor_Destructor:
case CXCursor_ConversionFunction: {
- if (findNodeForCursor(qdb_, cursor)) // Was already parsed, propably in another translation unit
+ if (findNodeForCursor(qdb_,
+ cursor)) // Was already parsed, propably in another translation unit
return CXChildVisit_Continue;
QString name = functionName(cursor);
if (ignoredSymbol(name))
@@ -679,14 +699,16 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l
else if (kind == CXCursor_Destructor)
fn->setMetaness(FunctionNode::Dtor);
else
- fn->setReturnType(adjustTypeName(fromCXString(
- clang_getTypeSpelling(clang_getResultType(funcType)))));
+ fn->setReturnType(adjustTypeName(
+ fromCXString(clang_getTypeSpelling(clang_getResultType(funcType)))));
fn->setStatic(clang_CXXMethod_isStatic(cursor));
fn->setConst(clang_CXXMethod_isConst(cursor));
- fn->setVirtualness(!clang_CXXMethod_isVirtual(cursor) ? FunctionNode::NonVirtual
- : clang_CXXMethod_isPureVirtual(cursor) ? FunctionNode::PureVirtual
- : FunctionNode::NormalVirtual);
+ fn->setVirtualness(!clang_CXXMethod_isVirtual(cursor)
+ ? FunctionNode::NonVirtual
+ : clang_CXXMethod_isPureVirtual(cursor)
+ ? FunctionNode::PureVirtual
+ : FunctionNode::NormalVirtual);
CXRefQualifierKind refQualKind = clang_Type_getCXXRefQualifier(funcType);
if (refQualKind == CXRefQualifier_LValue)
fn->setRef(true);
@@ -746,7 +768,7 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l
Aggregate *ns = parent_;
while (ns && ns->isClassNode())
ns = ns->parent();
- QScopedValueRollback<Aggregate *>setParent(parent_, ns);
+ QScopedValueRollback<Aggregate *> setParent(parent_, ns);
// Visit the friend functions
return visitChildren(cursor);
}
@@ -774,7 +796,6 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l
if (clang_getCursorKind(cur) != CXCursor_EnumConstantDecl)
return CXChildVisit_Continue;
-
QString value;
visitChildrenLambda(cur, [&](CXCursor cur) {
if (clang_isExpression(clang_getCursorKind(cur))) {
@@ -799,7 +820,8 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l
}
case CXCursor_FieldDecl:
case CXCursor_VarDecl: {
- if (findNodeForCursor(qdb_, cursor)) // Was already parsed, propably in another translation unit
+ if (findNodeForCursor(qdb_,
+ cursor)) // Was already parsed, propably in another translation unit
return CXChildVisit_Continue;
auto access = fromCX_CXXAccessSpecifier(clang_getCXXAccessSpecifier(cursor));
auto var = new VariableNode(parent_, fromCXString(clang_getCursorSpelling(cursor)));
@@ -810,7 +832,8 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l
return CXChildVisit_Continue;
}
case CXCursor_TypedefDecl: {
- if (findNodeForCursor(qdb_, cursor)) // Was already parsed, propably in another translation unit
+ if (findNodeForCursor(qdb_,
+ cursor)) // Was already parsed, propably in another translation unit
return CXChildVisit_Continue;
TypedefNode *td = new TypedefNode(parent_, fromCXString(clang_getCursorSpelling(cursor)));
td->setAccess(fromCX_CXXAccessSpecifier(clang_getCXXAccessSpecifier(cursor)));
@@ -818,13 +841,14 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l
// Search to see if this is a Q_DECLARE_FLAGS (if the type is QFlags<ENUM>)
visitChildrenLambda(cursor, [&](CXCursor cur) {
if (clang_getCursorKind(cur) != CXCursor_TemplateRef
- || fromCXString(clang_getCursorSpelling(cur)) != QLatin1String("QFlags"))
+ || fromCXString(clang_getCursorSpelling(cur)) != QLatin1String("QFlags"))
return CXChildVisit_Continue;
// Found QFlags<XXX>
visitChildrenLambda(cursor, [&](CXCursor cur) {
if (clang_getCursorKind(cur) != CXCursor_TypeRef)
return CXChildVisit_Continue;
- auto *en = findNodeForCursor(qdb_, clang_getTypeDeclaration(clang_getCursorType(cur)));
+ auto *en =
+ findNodeForCursor(qdb_, clang_getTypeDeclaration(clang_getCursorType(cur)));
if (en && en->isEnumType())
static_cast<EnumNode *>(en)->setFlagsType(td);
return CXChildVisit_Break;
@@ -836,10 +860,10 @@ CXChildVisitResult ClangVisitor::visitHeader(CXCursor cursor, CXSourceLocation l
default:
if (clang_isDeclaration(kind) && parent_->isClassNode()) {
// maybe a static_assert (which is not exposed from the clang API)
- QString spelling = getSpelling(clang_getCursorExtent(cursor));
+ QString spelling = getSpelling(clang_getCursorExtent(cursor));
if (spelling.startsWith(QLatin1String("Q_PROPERTY"))
- || spelling.startsWith(QLatin1String("QDOC_PROPERTY"))
- || spelling.startsWith(QLatin1String("Q_OVERRIDE"))) {
+ || spelling.startsWith(QLatin1String("QDOC_PROPERTY"))
+ || spelling.startsWith(QLatin1String("Q_OVERRIDE"))) {
parseProperty(spelling, fromCXSourceLocation(loc));
}
}
@@ -907,7 +931,7 @@ void ClangVisitor::parseProperty(const QString &spelling, const Location &loc)
QString name = part.at(1);
if (name.at(0) == QChar('*')) {
type.append(QChar('*'));
- name.remove(0,1);
+ name.remove(0, 1);
}
auto *property = new PropertyNode(parent_, name);
property->setAccess(Node::Public);
@@ -923,7 +947,7 @@ void ClangVisitor::parseProperty(const QString &spelling, const Location &loc)
property->setFinal();
}
if (i < part.size()) {
- QString value = part.at(i++);
+ QString value = part.at(i++);
if (key == "READ") {
qdb_->addPropertyFunction(property, value, PropertyNode::Getter);
} else if (key == "WRITE") {
@@ -990,14 +1014,14 @@ Node *ClangVisitor::nodeForCommentAtLocation(CXSourceLocation loc, CXSourceLocat
// make sure the previous decl was finished.
if (decl_it != declMap_.begin()) {
- CXSourceLocation prevDeclEnd = clang_getRangeEnd(clang_getCursorExtent(*(decl_it-1)));
+ CXSourceLocation prevDeclEnd = clang_getRangeEnd(clang_getCursorExtent(*(decl_it - 1)));
unsigned int prevDeclLine;
clang_getPresumedLocation(prevDeclEnd, nullptr, &prevDeclLine, nullptr);
if (prevDeclLine >= docloc.line) {
// The previous declaration was still going. This is only valid if the previous
// declaration is a parent of the next declaration.
auto parent = clang_getCursorLexicalParent(*decl_it);
- if (!clang_equalCursors(parent, *(decl_it-1)))
+ if (!clang_equalCursors(parent, *(decl_it - 1)))
return nullptr;
}
}
@@ -1039,12 +1063,12 @@ void ClangCodeParser::initializeParser(const Config &config)
includePaths_.resize(squeezedArgs.size());
std::transform(squeezedArgs.begin(), squeezedArgs.end(), includePaths_.begin(),
[](const QString &s) {
- QByteArray path(s.toUtf8());
- QFileInfo fi(QDir::current(), s);
- if (fi.exists())
- path = fi.canonicalFilePath().toUtf8();
- return path.prepend("-I");
- });
+ QByteArray path(s.toUtf8());
+ QFileInfo fi(QDir::current(), s);
+ if (fi.exists())
+ path = fi.canonicalFilePath().toUtf8();
+ return path.prepend("-I");
+ });
CppCodeParser::initializeParser(config);
pchFileDir_.reset(nullptr);
allHeaders_.clear();
@@ -1073,8 +1097,8 @@ void ClangCodeParser::initializeParser(const Config &config)
}
}
}
- qCDebug(lcQdoc).nospace() << __FUNCTION__ << " Clang v" << CINDEX_VERSION_MAJOR
- << '.' << CINDEX_VERSION_MINOR;
+ qCDebug(lcQdoc).nospace() << __FUNCTION__ << " Clang v" << CINDEX_VERSION_MAJOR << '.'
+ << CINDEX_VERSION_MINOR;
}
/*!
@@ -1096,7 +1120,12 @@ QString ClangCodeParser::language()
*/
QStringList ClangCodeParser::headerFileNameFilter()
{
- return QStringList() << "*.ch" << "*.h" << "*.h++" << "*.hh" << "*.hpp" << "*.hxx";
+ return QStringList() << "*.ch"
+ << "*.h"
+ << "*.h++"
+ << "*.hh"
+ << "*.hpp"
+ << "*.hxx";
}
/*!
@@ -1105,7 +1134,11 @@ QStringList ClangCodeParser::headerFileNameFilter()
*/
QStringList ClangCodeParser::sourceFileNameFilter()
{
- return QStringList() << "*.c++" << "*.cc" << "*.cpp" << "*.cxx" << "*.mm";
+ return QStringList() << "*.c++"
+ << "*.cc"
+ << "*.cpp"
+ << "*.cxx"
+ << "*.mm";
}
/*!
@@ -1158,8 +1191,8 @@ static QVector<QByteArray> includePathsFromHeaders(const QHash<QString, QString>
QVector<QByteArray> result;
for (auto it = allHeaders.cbegin(); it != allHeaders.cend(); ++it) {
const QByteArray path = "-I" + it.value().toLatin1();
- const QByteArray parent = "-I"
- + QDir::cleanPath(it.value() + QLatin1String("/../")).toLatin1();
+ const QByteArray parent =
+ "-I" + QDir::cleanPath(it.value() + QLatin1String("/../")).toLatin1();
if (!result.contains(path))
result.append(path);
if (!result.contains(parent))
@@ -1191,7 +1224,8 @@ bool ClangCodeParser::getMoreArgs()
of reasonable places to look for include files and use
that list instead.
*/
- Location::logToStdErrAlways("No include paths passed to qdoc; guessing reasonable include paths");
+ Location::logToStdErrAlways(
+ "No include paths passed to qdoc; guessing reasonable include paths");
guessedIncludePaths = true;
auto forest = qdb_->searchOrder();
@@ -1199,8 +1233,7 @@ bool ClangCodeParser::getMoreArgs()
QString basicIncludeDir = QDir::cleanPath(QString(Config::installDir + "/../include"));
moreArgs_ += "-I" + basicIncludeDir.toLatin1();
moreArgs_ += includePathsFromHeaders(allHeaders_);
- }
- else {
+ } else {
moreArgs_ = includePaths_;
}
@@ -1217,22 +1250,28 @@ void ClangCodeParser::buildPCH()
if (!pchFileDir_ && !moduleHeader().isEmpty()) {
pchFileDir_.reset(new QTemporaryDir(QDir::tempPath() + QLatin1String("/qdoc_pch")));
if (pchFileDir_->isValid()) {
- //const QByteArray module = qdb_->primaryTreeRoot()->tree()->camelCaseModuleName().toUtf8();
+ // const QByteArray module =
+ // qdb_->primaryTreeRoot()->tree()->camelCaseModuleName().toUtf8();
const QByteArray module = moduleHeader().toUtf8();
QByteArray header;
QByteArray privateHeaderDir;
Location::logToStdErrAlways("Build & visit PCH for " + moduleHeader());
// A predicate for std::find_if() to locate a path to the module's header
// (e.g. QtGui/QtGui) to be used as pre-compiled header
- struct FindPredicate {
+ struct FindPredicate
+ {
enum SearchType { Any, Module, Private };
QByteArray &candidate_;
const QByteArray &module_;
SearchType type_;
- FindPredicate(QByteArray &candidate, const QByteArray &module, SearchType type = Any)
- : candidate_(candidate), module_(module), type_(type) {}
+ FindPredicate(QByteArray &candidate, const QByteArray &module,
+ SearchType type = Any)
+ : candidate_(candidate), module_(module), type_(type)
+ {
+ }
- bool operator()(const QByteArray &p) const {
+ bool operator()(const QByteArray &p) const
+ {
if (type_ != Any && !p.endsWith(module_))
return false;
candidate_ = p + "/";
@@ -1255,27 +1294,25 @@ void ClangCodeParser::buildPCH()
// First, search for an include path that contains the module name, then any path
QByteArray candidate;
- auto it = std::find_if(includePaths_.begin(),
- includePaths_.end(),
+ auto it = std::find_if(includePaths_.begin(), includePaths_.end(),
FindPredicate(candidate, module, FindPredicate::Module));
if (it == includePaths_.end())
- it = std::find_if(includePaths_.begin(),
- includePaths_.end(),
+ it = std::find_if(includePaths_.begin(), includePaths_.end(),
FindPredicate(candidate, module, FindPredicate::Any));
if (it != includePaths_.end())
header = candidate;
// Find the path to module's private headers - currently unused
- it = std::find_if(includePaths_.begin(),
- includePaths_.end(),
+ it = std::find_if(includePaths_.begin(), includePaths_.end(),
FindPredicate(candidate, module, FindPredicate::Private));
if (it != includePaths_.end())
privateHeaderDir = candidate;
if (header.isEmpty()) {
qWarning() << "(qdoc) Could not find the module header in include paths for module"
- << module << " (include paths: "<< includePaths_ << ")";
- qWarning() << " Artificial module header built from header dirs in qdocconf file";
+ << module << " (include paths: " << includePaths_ << ")";
+ qWarning() << " Artificial module header built from header dirs in qdocconf "
+ "file";
}
args_.push_back("-xc++");
CXTranslationUnit tu;
@@ -1285,11 +1322,11 @@ void ClangCodeParser::buildPCH()
QTextStream out(&tmpHeaderFile);
if (header.isEmpty()) {
for (auto it = allHeaders_.constKeyValueBegin();
- it != allHeaders_.constKeyValueEnd(); ++it) {
- if (!(*it).first.endsWith(QLatin1String("_p.h")) &&
- !(*it).first.startsWith(QLatin1String("moc_"))) {
- QString line = QLatin1String("#include \"") + (*it).second +
- QLatin1String("/") + (*it).first + QLatin1String("\"");
+ it != allHeaders_.constKeyValueEnd(); ++it) {
+ if (!(*it).first.endsWith(QLatin1String("_p.h"))
+ && !(*it).first.startsWith(QLatin1String("moc_"))) {
+ QString line = QLatin1String("#include \"") + (*it).second
+ + QLatin1String("/") + (*it).first + QLatin1String("\"");
out << line << "\n";
}
}
@@ -1306,25 +1343,27 @@ void ClangCodeParser::buildPCH()
out << line << "\n";
}
}
- tmpHeaderFile.close();
+ tmpHeaderFile.close();
}
if (printParsingErrors_ == 0)
- Location::logToStdErrAlways("clang not printing errors; include paths were guessed");
- CXErrorCode err = clang_parseTranslationUnit2(index_,
- tmpHeader.toLatin1().data(),
- args_.data(), static_cast<int>(args_.size()), nullptr, 0,
- flags_ | CXTranslationUnit_ForSerialization, &tu);
- qCDebug(lcQdoc) << __FUNCTION__ << "clang_parseTranslationUnit2("
- << tmpHeader << args_ << ") returns" << err;
+ Location::logToStdErrAlways(
+ "clang not printing errors; include paths were guessed");
+ CXErrorCode err =
+ clang_parseTranslationUnit2(index_, tmpHeader.toLatin1().data(), args_.data(),
+ static_cast<int>(args_.size()), nullptr, 0,
+ flags_ | CXTranslationUnit_ForSerialization, &tu);
+ qCDebug(lcQdoc) << __FUNCTION__ << "clang_parseTranslationUnit2(" << tmpHeader << args_
+ << ") returns" << err;
if (!err && tu) {
pchName_ = pchFileDir_->path().toUtf8() + "/" + module + ".pch";
- auto error = clang_saveTranslationUnit(tu, pchName_.constData(), clang_defaultSaveOptions(tu));
+ auto error = clang_saveTranslationUnit(tu, pchName_.constData(),
+ clang_defaultSaveOptions(tu));
if (error) {
Location::logToStdErrAlways("Could not save PCH file for " + moduleHeader());
pchName_.clear();
- }
- else {
- // Visit the header now, as token from pre-compiled header won't be visited later
+ } else {
+ // Visit the header now, as token from pre-compiled header won't be visited
+ // later
CXCursor cur = clang_getTranslationUnitCursor(tu);
ClangVisitor visitor(qdb_, allHeaders_);
visitor.visitChildren(cur);
@@ -1351,7 +1390,9 @@ void ClangCodeParser::precompileHeaders()
for (const auto &p : qAsConst(moreArgs_))
args_.push_back(p.constData());
- flags_ = static_cast<CXTranslationUnit_Flags>(CXTranslationUnit_Incomplete | CXTranslationUnit_SkipFunctionBodies | CXTranslationUnit_KeepGoing);
+ flags_ = static_cast<CXTranslationUnit_Flags>(CXTranslationUnit_Incomplete
+ | CXTranslationUnit_SkipFunctionBodies
+ | CXTranslationUnit_KeepGoing);
// 1 as 2nd parameter tells clang to report parser errors.
index_ = clang_createIndex(1, printParsingErrors_);
buildPCH();
@@ -1372,7 +1413,7 @@ static float getUnpatchedVersion(QString t)
Call matchDocsAndStuff() to do all the parsing and tree building.
*/
-void ClangCodeParser::parseSourceFile(const Location &/*location*/, const QString &filePath)
+void ClangCodeParser::parseSourceFile(const Location & /*location*/, const QString &filePath)
{
/*
The set of open namespaces is cleared before parsing
@@ -1380,7 +1421,9 @@ void ClangCodeParser::parseSourceFile(const Location &/*location*/, const QStrin
*/
qdb_->clearOpenNamespaces();
currentFile_ = filePath;
- flags_ = static_cast<CXTranslationUnit_Flags>(CXTranslationUnit_Incomplete | CXTranslationUnit_SkipFunctionBodies | CXTranslationUnit_KeepGoing);
+ flags_ = static_cast<CXTranslationUnit_Flags>(CXTranslationUnit_Incomplete
+ | CXTranslationUnit_SkipFunctionBodies
+ | CXTranslationUnit_KeepGoing);
index_ = clang_createIndex(1, 0);
getDefaultArgs();
@@ -1394,10 +1437,11 @@ void ClangCodeParser::parseSourceFile(const Location &/*location*/, const QStrin
args_.push_back(p.constData());
CXTranslationUnit tu;
- CXErrorCode err = clang_parseTranslationUnit2(index_, filePath.toLocal8Bit(), args_.data(),
- static_cast<int>(args_.size()), nullptr, 0, flags_, &tu);
- qCDebug(lcQdoc) << __FUNCTION__ << "clang_parseTranslationUnit2("
- << filePath << args_ << ") returns" << err;
+ CXErrorCode err =
+ clang_parseTranslationUnit2(index_, filePath.toLocal8Bit(), args_.data(),
+ static_cast<int>(args_.size()), nullptr, 0, flags_, &tu);
+ qCDebug(lcQdoc) << __FUNCTION__ << "clang_parseTranslationUnit2(" << filePath << args_
+ << ") returns" << err;
if (err || !tu) {
qWarning() << "(qdoc) Could not parse source file" << filePath << " error code:" << err;
clang_disposeIndex(index_);
@@ -1422,7 +1466,7 @@ void ClangCodeParser::parseSourceFile(const Location &/*location*/, const QStrin
auto loc = fromCXSourceLocation(clang_getTokenLocation(tu, tokens[i]));
auto end_loc = fromCXSourceLocation(clang_getRangeEnd(clang_getTokenExtent(tu, tokens[i])));
- Doc::trimCStyleComment(loc,comment);
+ Doc::trimCStyleComment(loc, comment);
// Doc constructor parses the comment.
Doc doc(loc, end_loc, comment, commands, topicCommands());
@@ -1442,9 +1486,9 @@ void ClangCodeParser::parseSourceFile(const Location &/*location*/, const QStrin
if (i + 1 < numTokens) {
// Try to find the next declaration.
CXSourceLocation nextCommentLoc = commentLoc;
- while (i + 2 < numTokens && clang_getTokenKind(tokens[i+1]) != CXToken_Comment)
+ while (i + 2 < numTokens && clang_getTokenKind(tokens[i + 1]) != CXToken_Comment)
++i; // already skip all the tokens that are not comments
- nextCommentLoc = clang_getTokenLocation(tu, tokens[i+1]);
+ nextCommentLoc = clang_getTokenLocation(tu, tokens[i + 1]);
n = visitor.nodeForCommentAtLocation(commentLoc, nextCommentLoc);
}
@@ -1464,7 +1508,8 @@ void ClangCodeParser::parseSourceFile(const Location &/*location*/, const QStrin
"topic command (e.g., '\\%1', '\\%2') in the "
"comment and no function definition following "
"the comment.")
- .arg(COMMAND_FN).arg(COMMAND_PAGE));
+ .arg(COMMAND_FN)
+ .arg(COMMAND_PAGE));
}
}
} else {
@@ -1498,7 +1543,9 @@ Node *ClangCodeParser::parseFnArg(const Location &location, const QString &fnArg
QString tag = fnArg.left(end + 1);
fnNode = qdb_->findFunctionNodeForTag(tag);
if (!fnNode) {
- location.error(ClangCodeParser::tr("tag \\fn %1 not used in any include file in current module").arg(tag));
+ location.error(ClangCodeParser::tr(
+ "tag \\fn %1 not used in any include file in current module")
+ .arg(tag));
} else {
/*
The function node was found. Use the formal
@@ -1536,9 +1583,9 @@ Node *ClangCodeParser::parseFnArg(const Location &location, const QString &fnArg
}
return fnNode;
}
- CXTranslationUnit_Flags flags = static_cast<CXTranslationUnit_Flags>(CXTranslationUnit_Incomplete |
- CXTranslationUnit_SkipFunctionBodies |
- CXTranslationUnit_KeepGoing);
+ CXTranslationUnit_Flags flags = static_cast<CXTranslationUnit_Flags>(
+ CXTranslationUnit_Incomplete | CXTranslationUnit_SkipFunctionBodies
+ | CXTranslationUnit_KeepGoing);
// Change 2nd parameter to 1 to make clang report errors.
CXIndex index = clang_createIndex(1, Utilities::debugging() ? 1 : 0);
@@ -1558,15 +1605,10 @@ Node *ClangCodeParser::parseFnArg(const Location &location, const QString &fnArg
const char *dummyFileName = "/fn_dummyfile.cpp";
CXUnsavedFile unsavedFile { dummyFileName, fn.constData(),
static_cast<unsigned long>(fn.size()) };
- CXErrorCode err = clang_parseTranslationUnit2(index, dummyFileName,
- args.data(),
- args.size(),
- &unsavedFile,
- 1,
- flags,
- &tu);
- qCDebug(lcQdoc) << __FUNCTION__ << "clang_parseTranslationUnit2("
- << dummyFileName << args << ") returns" << err;
+ CXErrorCode err = clang_parseTranslationUnit2(index, dummyFileName, args.data(), args.size(),
+ &unsavedFile, 1, flags, &tu);
+ qCDebug(lcQdoc) << __FUNCTION__ << "clang_parseTranslationUnit2(" << dummyFileName << args
+ << ") returns" << err;
if (err || !tu) {
location.error(ClangCodeParser::tr("clang could not parse \\fn %1").arg(fnArg));
clang_disposeTranslationUnit(tu);
@@ -1609,10 +1651,12 @@ Node *ClangCodeParser::parseFnArg(const Location &location, const QString &fnArg
}
}
if (report) {
- location.warning(ClangCodeParser::tr("clang found diagnostics parsing \\fn %1").arg(fnArg));
+ location.warning(ClangCodeParser::tr("clang found diagnostics parsing \\fn %1")
+ .arg(fnArg));
for (unsigned i = 0; i < diagnosticCount; ++i) {
CXDiagnostic diagnostic = clang_getDiagnostic(tu, i);
- location.report(tr(" %1").arg(fromCXString(clang_formatDiagnostic(diagnostic, 0))));
+ location.report(tr(" %1").arg(
+ fromCXString(clang_formatDiagnostic(diagnostic, 0))));
}
}
}