diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2021-12-13 14:24:42 +0100 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2021-12-16 15:38:09 +0100 |
| commit | b00c9f19ff37f2fed57c780660001f5c1a25a5cb (patch) | |
| tree | ed167eb1cd1ff9480c477aa166814565078e2475 /sources/shiboken6/ApiExtractor/messages.cpp | |
| parent | 565ce8c4f32822034ffe9ff25d4093c7401d2e6a (diff) | |
shiboken6/Documentation: Replace XPath/Xquery usage for retrieving WebXML docs by a parser
shiboken used XPath expressions to extract the function descriptions
from the qdoc-generated WebXML. With the deprecation of QtXmlPatterns
in Qt 6, libxml/xslt was used for this. A major drawback is that
libxml/xslt is unable to match entities in attributes which means
functions taking parameters by const-ref could not be found. This
required cumbersome workarounds involving repeated searches, which
still were not sufficient to find all functions.
To fix this, write a WebXML parser based on QXmlStreamReader
that extracts the contents of a WebXML page into some simple
data structures and use those for searching.
On this occasion, also use the metafunction flags to correctly
match binary operator functions.
This reduces the number of functions for which no documentation
can be found (from ~1100 to ~800 for the qtbase repository).
From the remaining functions, ~230 are functions inherited from
templates, which should at least be listed. Others are caused
by qdoc not finding hidden friends.
The remaining usages of libxml/xslt are the doxygen parser and the
documentation modifications using XSLT.
Task-number: PYSIDE-1106
Change-Id: I31c045ad42948afad884f40d5bbc8bee7555859e
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'sources/shiboken6/ApiExtractor/messages.cpp')
| -rw-r--r-- | sources/shiboken6/ApiExtractor/messages.cpp | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/sources/shiboken6/ApiExtractor/messages.cpp b/sources/shiboken6/ApiExtractor/messages.cpp index 920c5690b..5fe9fb9c7 100644 --- a/sources/shiboken6/ApiExtractor/messages.cpp +++ b/sources/shiboken6/ApiExtractor/messages.cpp @@ -534,9 +534,11 @@ QString msgCannotFindDocumentation(const QString &fileName, const QString &query) { QString result; - QTextStream(&result) << "Cannot find documentation for " << what - << ' ' << name << " in:\n " << QDir::toNativeSeparators(fileName) - << "\n using query:\n " << query; + QTextStream str(&result); + str << "Cannot find documentation for " << what + << ' ' << name << " in:\n " << QDir::toNativeSeparators(fileName); + if (!query.isEmpty()) + str << "\n using query:\n " << query; return result; } @@ -545,9 +547,21 @@ QString msgFallbackForDocumentation(const QString &fileName, const QString &query) { QString result; - QTextStream(&result) << "Fallback used while trying to find documentation for " << what - << ' ' << name << " in:\n " << QDir::toNativeSeparators(fileName) - << "\n using query:\n " << query; + QTextStream str(&result); + str << "Fallback used while trying to find documentation for " << what + << ' ' << name << " in:\n " << QDir::toNativeSeparators(fileName); + if (!query.isEmpty()) + str << "\n using query:\n " << query; + return result; +} + +static QString functionDescription(const AbstractMetaFunction *function) +{ + QString result = u'"' + function->classQualifiedSignature() + u'"'; + if (function->flags().testFlag(AbstractMetaFunction::Flag::HiddenFriend)) + result += u" (hidden friend)"_qs; + if (function->flags().testFlag(AbstractMetaFunction::Flag::InheritedFromTemplate)) + result += u" (inherited from template)"_qs; return result; } @@ -556,7 +570,7 @@ QString msgCannotFindDocumentation(const QString &fileName, const QString &query) { return msgCannotFindDocumentation(fileName, "function", - function->classQualifiedSignature(), query); + functionDescription(function), query); } QString msgFallbackForDocumentation(const QString &fileName, @@ -564,7 +578,7 @@ QString msgFallbackForDocumentation(const QString &fileName, const QString &query) { return msgFallbackForDocumentation(fileName, "function", - function->classQualifiedSignature(), query); + functionDescription(function), query); } QString msgCannotFindDocumentation(const QString &fileName, |
