summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTopi Reinio <topi.reinio@qt.io>2020-03-25 21:52:49 +0100
committerTopi Reiniƶ <topi.reinio@qt.io>2020-03-26 08:56:40 +0000
commit9a3c1a3ef004bdd948524afc37050a617a6e4823 (patch)
tree72ac7beb2cceda6c7cd38773a1613dbdc010eb8d
parent4e35093ea7f6be6caf34b0627fbaffab984a5e0f (diff)
qdoc: Ensure macros as a macro parameter are expanded
QDoc allows macros to be nested, and macro parameters can also be other macros, but in one code path the parameter was read verbatim, i.e. not expanded. This is an unnecessary restriction so remove it. Fixes: QTBUG-83085 Change-Id: I6dc7c2f7586a65bee78096fb50685262dad2ffe3 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
-rw-r--r--src/qdoc/doc.cpp2
-rw-r--r--tests/auto/qdoc/generatedoutput/expected_output/nestedmacro/testcpp-module.html43
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/configs/nestedmacro.qdocconf9
-rw-r--r--tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp4
-rw-r--r--tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp8
5 files changed, 65 insertions, 1 deletions
diff --git a/src/qdoc/doc.cpp b/src/qdoc/doc.cpp
index 5b52e9e1a..23d5205ff 100644
--- a/src/qdoc/doc.cpp
+++ b/src/qdoc/doc.cpp
@@ -2086,7 +2086,7 @@ void DocParser::expandMacro(const QString &name, const QString &def, int numPara
for (int i = 0; i < numParams; ++i) {
if (numParams == 1 || isLeftBraceAhead()) {
- args << getArgument(true);
+ args << getArgument();
} else {
location().warning(tr("Macro '\\%1' invoked with too few"
" arguments (expected %2, got %3)")
diff --git a/tests/auto/qdoc/generatedoutput/expected_output/nestedmacro/testcpp-module.html b/tests/auto/qdoc/generatedoutput/expected_output/nestedmacro/testcpp-module.html
new file mode 100644
index 000000000..6ab4d245b
--- /dev/null
+++ b/tests/auto/qdoc/generatedoutput/expected_output/nestedmacro/testcpp-module.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+<!-- testcpp.cpp -->
+ <title>QDoc Test C++ Classes | TestCPP</title>
+</head>
+<body>
+<div class="sidebar">
+<div class="toc">
+<h3><a name="toc">Contents</a></h3>
+<ul>
+<li class="level1"><a href="#namespaces">Namespaces</a></li>
+<li class="level1"><a href="#classes">Classes</a></li>
+<li class="level1"><a href="#details">Detailed Description</a></li>
+</ul>
+</div>
+<div class="sidebar-content" id="sidebar-content"></div></div>
+<h1 class="title">QDoc Test C++ Classes</h1>
+<span class="subtitle"></span>
+<!-- $$$TestCPP-brief -->
+<p>A test module page. <a href="#details">More...</a></p>
+<!-- @@@TestCPP -->
+<a name="namespaces"></a>
+<h2 id="namespaces">Namespaces</h2>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName"><p><a href="testqdoc.html">TestQDoc</a></p></td><td class="tblDescr"><p>A namespace</p></td></tr>
+</table></div>
+<a name="classes"></a>
+<h2 id="classes">Classes</h2>
+<div class="table"><table class="annotated">
+<tr class="odd topAlign"><td class="tblName"><p><a href="testqdoc-test.html">TestQDoc::Test</a></p></td><td class="tblDescr"><p>A class in a namespace</p></td></tr>
+<tr class="even topAlign"><td class="tblName"><p><a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></p></td><td class="tblDescr"><p>A derived class in a namespace</p></td></tr>
+</table></div>
+<!-- $$$TestCPP-description -->
+<a name="details"></a>
+<div class="descr">
+<h2 id="details">Detailed Description</h2>
+<p><b>This module was introduced in version 5.15.</b></p>
+</div>
+<!-- @@@TestCPP -->
+</body>
+</html>
diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/nestedmacro.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/nestedmacro.qdocconf
new file mode 100644
index 000000000..64475be7e
--- /dev/null
+++ b/tests/auto/qdoc/generatedoutput/testdata/configs/nestedmacro.qdocconf
@@ -0,0 +1,9 @@
+include(testcpp.qdocconf)
+defines += test_nestedmacro
+
+macro.ver = "5.15.0"
+macro.ver.match = "^(\\d+\\.\\d+)"
+macro.versionnote.HTML = "<p><b>This \1 was introduced in version \2.</b></p>\n"
+
+HTML.nosubdirs = true
+HTML.outputsubdir = nestedmacro
diff --git a/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp b/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp
index 8422494ac..17045eed5 100644
--- a/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp
+++ b/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp
@@ -36,6 +36,10 @@ namespace TestQDoc {
\brief A test module page.
\testnoautolist
+
+\if defined(test_nestedmacro)
+ \versionnote {module} {\ver}
+\endif
*/
/*!
diff --git a/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp b/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp
index b3c69af71..7bf8b3210 100644
--- a/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp
+++ b/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp
@@ -68,6 +68,7 @@ private slots:
void preparePhase();
void generatePhase();
void noAutoList();
+ void nestedMacro();
private:
QScopedPointer<QTemporaryDir> m_outputDir;
@@ -391,6 +392,13 @@ void tst_generatedOutput::noAutoList()
"noautolist-docbook/qdoc-test-qmlmodule.xml");
}
+
+void tst_generatedOutput::nestedMacro()
+{
+ testAndCompare("testdata/configs/nestedmacro.qdocconf",
+ "nestedmacro/testcpp-module.html");
+}
+
QTEST_APPLESS_MAIN(tst_generatedOutput)
#include "tst_generatedoutput.moc"