aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sources/shiboken6/ApiExtractor/complextypeentry.h3
-rw-r--r--sources/shiboken6/ApiExtractor/docparser.cpp18
-rw-r--r--sources/shiboken6/ApiExtractor/docparser.h6
-rw-r--r--sources/shiboken6/ApiExtractor/doxygenparser.cpp3
-rw-r--r--sources/shiboken6/ApiExtractor/qtdocparser.cpp34
-rw-r--r--sources/shiboken6/ApiExtractor/qtdocparser.h11
-rw-r--r--sources/shiboken6/ApiExtractor/typesystem.cpp14
-rw-r--r--sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp28
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;