diff options
| -rw-r--r-- | sources/shiboken6/ApiExtractor/complextypeentry.h | 3 | ||||
| -rw-r--r-- | sources/shiboken6/ApiExtractor/docparser.cpp | 18 | ||||
| -rw-r--r-- | sources/shiboken6/ApiExtractor/docparser.h | 6 | ||||
| -rw-r--r-- | sources/shiboken6/ApiExtractor/doxygenparser.cpp | 3 | ||||
| -rw-r--r-- | sources/shiboken6/ApiExtractor/qtdocparser.cpp | 34 | ||||
| -rw-r--r-- | sources/shiboken6/ApiExtractor/qtdocparser.h | 11 | ||||
| -rw-r--r-- | sources/shiboken6/ApiExtractor/typesystem.cpp | 14 | ||||
| -rw-r--r-- | sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp | 28 |
8 files changed, 69 insertions, 48 deletions
diff --git a/sources/shiboken6/ApiExtractor/complextypeentry.h b/sources/shiboken6/ApiExtractor/complextypeentry.h index b1402c8e4..3e9aa17d6 100644 --- a/sources/shiboken6/ApiExtractor/complextypeentry.h +++ b/sources/shiboken6/ApiExtractor/complextypeentry.h @@ -75,7 +75,10 @@ public: void addCodeSnip(const CodeSnip &codeSnip); void setDocModification(const DocModificationList& docMods); + /// Class documentation modifications DocModificationList docModifications() const; + /// Function documentation modifications (matching signature) + DocModificationList functionDocModifications() const; /// Extra includes for function arguments determined by the meta builder. const IncludeList &argumentIncludes() const; diff --git a/sources/shiboken6/ApiExtractor/docparser.cpp b/sources/shiboken6/ApiExtractor/docparser.cpp index ea3828a43..9d90d5fb2 100644 --- a/sources/shiboken6/ApiExtractor/docparser.cpp +++ b/sources/shiboken6/ApiExtractor/docparser.cpp @@ -9,7 +9,7 @@ #include "messages.h" #include "modifications.h" #include "reporthandler.h" -#include "typesystem.h" +#include "complextypeentry.h" #include "xmlutils.h" #include <QtCore/QBuffer> @@ -84,6 +84,22 @@ bool DocParser::skipForQuery(const AbstractMetaFunctionCPtr &func) usesRValueReference); } +DocModificationList DocParser::getDocModifications(const AbstractMetaClass* cppClass, + const AbstractMetaFunctionCPtr &func) +{ + auto *te = cppClass->typeEntry(); + if (func.isNull()) + return te->docModifications(); + + DocModificationList result = te->functionDocModifications(); + const QString minimalSignature = func->minimalSignature(); + const auto filter = [&minimalSignature](const DocModification &mod) { + return mod.signature() != minimalSignature; + }; + result.erase(std::remove_if(result.begin(), result.end(), filter), result.end()); + return result; +} + AbstractMetaFunctionCList DocParser::documentableFunctions(const AbstractMetaClass *metaClass) { auto result = metaClass->functionsInTargetLang(); diff --git a/sources/shiboken6/ApiExtractor/docparser.h b/sources/shiboken6/ApiExtractor/docparser.h index bf305272a..4884c5eec 100644 --- a/sources/shiboken6/ApiExtractor/docparser.h +++ b/sources/shiboken6/ApiExtractor/docparser.h @@ -91,6 +91,12 @@ public: static bool skipForQuery(const AbstractMetaFunctionCPtr &func); + /// Helper to return the documentation modifications for a class + /// or a member function. + static DocModificationList getDocModifications(const AbstractMetaClass* cppClass, + const AbstractMetaFunctionCPtr &func = {}); + + protected: static QString getDocumentation(const XQueryPtr &xquery, const QString &query, diff --git a/sources/shiboken6/ApiExtractor/doxygenparser.cpp b/sources/shiboken6/ApiExtractor/doxygenparser.cpp index b8d97a748..23c56ae1f 100644 --- a/sources/shiboken6/ApiExtractor/doxygenparser.cpp +++ b/sources/shiboken6/ApiExtractor/doxygenparser.cpp @@ -148,7 +148,8 @@ void DoxygenParser::fillDocumentation(AbstractMetaClass* metaClass) funcQuery += u"/../"_s + tag.second + u")[1]"_s; } - QString doc = getDocumentation(xquery, funcQuery, DocModificationList()); + QString doc = getDocumentation(xquery, funcQuery, + DocParser::getDocModifications(metaClass, func)); if (doc.isEmpty()) { qCWarning(lcShibokenDoc, "%s", qPrintable(msgCannotFindDocumentation(doxyFilePath, func.data(), diff --git a/sources/shiboken6/ApiExtractor/qtdocparser.cpp b/sources/shiboken6/ApiExtractor/qtdocparser.cpp index b20a53632..7f189b5ad 100644 --- a/sources/shiboken6/ApiExtractor/qtdocparser.cpp +++ b/sources/shiboken6/ApiExtractor/qtdocparser.cpp @@ -99,25 +99,19 @@ static QString formatFunctionArgTypeQuery(const AbstractMetaType &metaType) return result; } -QString QtDocParser::queryFunctionDocumentation(const QString &sourceFileName, - const ClassDocumentation &classDocumentation, - const AbstractMetaClass* metaClass, - const AbstractMetaFunctionCPtr &func, - const DocModificationList &signedModifs, - QString *errorMessage) +QString QtDocParser::functionDocumentation(const QString &sourceFileName, + const ClassDocumentation &classDocumentation, + const AbstractMetaClass* metaClass, + const AbstractMetaFunctionCPtr &func, + QString *errorMessage) { errorMessage->clear(); - DocModificationList funcModifs; - for (const DocModification &funcModif : signedModifs) { - if (funcModif.signature() == func->minimalSignature()) - funcModifs.append(funcModif); - } - const QString docString = queryFunctionDocumentation(sourceFileName, classDocumentation, metaClass, func, errorMessage); + const auto funcModifs = DocParser::getDocModifications(metaClass, func); return docString.isEmpty() || funcModifs.isEmpty() ? docString : applyDocModifications(funcModifs, docString); } @@ -253,16 +247,8 @@ void QtDocParser::fillDocumentation(AbstractMetaClass* metaClass) return; } - DocModificationList signedModifs, classModifs; - const DocModificationList &mods = metaClass->typeEntry()->docModifications(); - for (const DocModification &docModif : mods) { - if (docModif.signature().isEmpty()) - classModifs.append(docModif); - else - signedModifs.append(docModif); - } - - QString docString = applyDocModifications(mods, classDocumentation.description); + QString docString = applyDocModifications(metaClass->typeEntry()->docModifications(), + classDocumentation.description); if (docString.isEmpty()) { QString className = metaClass->name(); @@ -281,8 +267,8 @@ void QtDocParser::fillDocumentation(AbstractMetaClass* metaClass) const auto &funcs = DocParser::documentableFunctions(metaClass); for (const auto &func : funcs) { const QString detailed = - queryFunctionDocumentation(sourceFileName, classDocumentation, - metaClass, func, signedModifs, &errorMessage); + functionDocumentation(sourceFileName, classDocumentation, + metaClass, func, &errorMessage); if (!errorMessage.isEmpty()) qCWarning(lcShibokenDoc, "%s", qPrintable(errorMessage)); const Documentation documentation(detailed, {}); diff --git a/sources/shiboken6/ApiExtractor/qtdocparser.h b/sources/shiboken6/ApiExtractor/qtdocparser.h index 2b82c1265..91d0a4557 100644 --- a/sources/shiboken6/ApiExtractor/qtdocparser.h +++ b/sources/shiboken6/ApiExtractor/qtdocparser.h @@ -17,12 +17,11 @@ public: Documentation retrieveModuleDocumentation(const QString& name) override; private: - static QString queryFunctionDocumentation(const QString &sourceFileName, - const ClassDocumentation &classDocumentation, - const AbstractMetaClass* metaClass, - const AbstractMetaFunctionCPtr &func, - const DocModificationList &signedModifs, - QString *errorMessage); + static QString functionDocumentation(const QString &sourceFileName, + const ClassDocumentation &classDocumentation, + const AbstractMetaClass* metaClass, + const AbstractMetaFunctionCPtr &func, + QString *errorMessage); static QString queryFunctionDocumentation(const QString &sourceFileName, const ClassDocumentation &classDocumentation, diff --git a/sources/shiboken6/ApiExtractor/typesystem.cpp b/sources/shiboken6/ApiExtractor/typesystem.cpp index a818b576c..9db414563 100644 --- a/sources/shiboken6/ApiExtractor/typesystem.cpp +++ b/sources/shiboken6/ApiExtractor/typesystem.cpp @@ -1226,6 +1226,7 @@ public: FunctionModificationList m_functionMods; CodeSnipList m_codeSnips; DocModificationList m_docModifications; + DocModificationList m_functionDocModifications; IncludeList m_argumentIncludes; QSet<QString> m_generateFunctions; FieldModificationList m_fieldMods; @@ -1363,7 +1364,12 @@ void ComplexTypeEntry::addCodeSnip(const CodeSnip &codeSnip) void ComplexTypeEntry::setDocModification(const DocModificationList &docMods) { S_D(ComplexTypeEntry); - d->m_docModifications << docMods; + for (const auto &m : docMods) { + if (m.signature().isEmpty()) + d->m_docModifications << m; + else + d->m_functionDocModifications << m; + } } DocModificationList ComplexTypeEntry::docModifications() const @@ -1372,6 +1378,12 @@ DocModificationList ComplexTypeEntry::docModifications() const return d->m_docModifications; } +DocModificationList ComplexTypeEntry::functionDocModifications() const +{ + S_D(const ComplexTypeEntry); + return d->m_functionDocModifications; +} + const IncludeList &ComplexTypeEntry::argumentIncludes() const { S_D(const ComplexTypeEntry); diff --git a/sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp b/sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp index ba0ab1242..90f799f12 100644 --- a/sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp +++ b/sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp @@ -518,30 +518,28 @@ bool QtDocGenerator::writeInjectDocumentation(TextStream& s, Indentation indentation(s); bool didSomething = false; - const DocModificationList &mods = cppClass->typeEntry()->docModifications(); + const DocModificationList mods = DocParser::getDocModifications(cppClass, func); + for (const DocModification &mod : mods) { if (mod.mode() == mode) { - bool modOk = func ? mod.signature() == func->minimalSignature() : mod.signature().isEmpty(); - - if (modOk) { - Documentation::Format fmt; - - if (mod.format() == TypeSystem::NativeCode) - fmt = Documentation::Native; - else if (mod.format() == TypeSystem::TargetLangCode) - fmt = Documentation::Target; - else - continue; - - writeFormattedText(s, mod.code(), fmt, cppClass); + switch (mod.format()) { + case TypeSystem::NativeCode: + writeFormattedText(s, mod.code(), Documentation::Native, cppClass); didSomething = true; + break; + case TypeSystem::TargetLangCode: + writeFormattedText(s, mod.code(), Documentation::Target, cppClass); + didSomething = true; + break; + default: + break; } } } s << '\n'; - // TODO: Deprecate the use of doc string on glue code. + // FIXME PYSIDE-7: Deprecate the use of doc string on glue code. // This is pre "add-function" and "inject-documentation" tags. const TypeSystem::CodeSnipPosition pos = mode == TypeSystem::DocModificationPrepend ? TypeSystem::CodeSnipPositionBeginning : TypeSystem::CodeSnipPositionEnd; |
