Skip to content

Commit 17a38ab

Browse files
paulwickingQt Cherry-pick Bot
authored andcommitted
QDoc: Store declared type in index file
In certain situations, authors may prefer to use `auto` instead of the actual type of a function as argument QDoc's `\fn`-command. This makes QDoc output `auto` instead of the full type, which can be used to hide certain implementation details. QDoc stores this as `declaredReturnType` on function nodes. However, the declared type is not written to index files. This means that modules that read the index file as a dependency always get the de-sugared type, despite the author's intentions. This change extends QDoc's index file by adding a new attribute, `declaredtype`. If present, the value is now written to and read from .index-files by QDoc. The change is cherry-picked back to 6.8, where the declared return type override feature was added. Pick-to: 6.8 Fixes: QTBUG-139614 Change-Id: Ie73c3db070943aa91e63d92d3e33e72d9579a7ee Reviewed-by: Topi Reiniö <[email protected]> (cherry picked from commit d9a706c) Reviewed-by: Qt Cherry-pick Bot <[email protected]> (cherry picked from commit d0f5756)
1 parent 1efe7e0 commit 17a38ab

File tree

5 files changed

+20
-12
lines changed

5 files changed

+20
-12
lines changed

src/qdoc/qdoc/src/qdoc/qdocindexfiles.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,10 @@ void QDocIndexFiles::readIndexSection(QXmlStreamReader &reader, Node *current,
422422

423423
fn->setReturnType(attributes.value(QLatin1String("type")).toString());
424424

425+
const auto &declaredTypeAttr = attributes.value(QLatin1String("declaredtype"));
426+
if (!declaredTypeAttr.isEmpty())
427+
fn->setDeclaredReturnType(declaredTypeAttr.toString());
428+
425429
if (fn->isCppNode()) {
426430
fn->setVirtualness(attributes.value(QLatin1String("virtual")).toString());
427431
fn->setConst(attributes.value(QLatin1String("const")) == QLatin1String("true"));
@@ -1268,6 +1272,10 @@ void QDocIndexFiles::generateFunctionSection(QXmlStreamWriter &writer, FunctionN
12681272
if (!return_type.isEmpty())
12691273
writer.writeAttribute("type", return_type);
12701274

1275+
const auto &declared_return_type = fn->declaredReturnType();
1276+
if (declared_return_type.has_value())
1277+
writer.writeAttribute("declaredtype", declared_return_type.value());
1278+
12711279
if (fn->isCppNode()) {
12721280
if (!brief.isEmpty())
12731281
writer.writeAttribute("brief", brief);

src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/auto_as_return_type/expected/html/auto-as-return-type.index

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@
1212
<parameter type="int" name="a" default=""/>
1313
<parameter type="int" name="b" default=""/>
1414
</function>
15-
<function name="adder" fullname="QDocTests::Numbers::adder" href="qdoctests-numbers.html#adder" status="active" access="public" location="numbers.h" documented="true" meta="plain" type="ThisIsMyReallyLongAndComplicatedTemplateName" brief="Adds two numbers of the same underlying type" signature="ThisIsMyReallyLongAndComplicatedTemplateName adder(ThisIsMyReallyLongAndComplicatedTemplateName a, int b)">
15+
<function name="adder" fullname="QDocTests::Numbers::adder" href="qdoctests-numbers.html#adder" status="active" access="public" location="numbers.h" documented="true" meta="plain" type="ThisIsMyReallyLongAndComplicatedTemplateName" declaredtype="auto" brief="Adds two numbers of the same underlying type" signature="ThisIsMyReallyLongAndComplicatedTemplateName adder(ThisIsMyReallyLongAndComplicatedTemplateName a, int b)">
1616
<parameter type="ThisIsMyReallyLongAndComplicatedTemplateName" name="a" default=""/>
1717
<parameter type="int" name="b" default=""/>
1818
</function>
19-
<function name="number" fullname="QDocTests::Numbers::number" href="qdoctests-numbers.html#number" status="active" access="public" location="numbers.h" documented="true" meta="plain" const="true" type="int" brief="Returns the number" signature="int number() const"/>
19+
<function name="number" fullname="QDocTests::Numbers::number" href="qdoctests-numbers.html#number" status="active" access="public" location="numbers.h" documented="true" meta="plain" const="true" type="int" declaredtype="auto" brief="Returns the number" signature="int number() const"/>
2020
<function name="setNumber" fullname="QDocTests::Numbers::setNumber" href="qdoctests-numbers.html#setNumber" status="active" access="public" location="numbers.h" documented="true" meta="plain" type="void" brief="Sets the number" signature="void setNumber(int number)">
2121
<parameter type="int" name="number" default=""/>
2222
</function>
23-
<function name="subtract" fullname="QDocTests::Numbers::subtract" href="qdoctests-numbers.html#subtract" status="active" access="public" location="numbers.h" documented="true" meta="plain" type="int" brief="Subtracts two numbers" signature="int subtract(int a, int b)">
23+
<function name="subtract" fullname="QDocTests::Numbers::subtract" href="qdoctests-numbers.html#subtract" status="active" access="public" location="numbers.h" documented="true" meta="plain" type="int" declaredtype="auto" brief="Subtracts two numbers" signature="int subtract(int a, int b)">
2424
<parameter type="int" name="a" default=""/>
2525
<parameter type="int" name="b" default=""/>
2626
</function>

src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/auto_as_return_type/expected/webxml/auto-as-return-type.index

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@
1212
<parameter type="int" name="a" default=""/>
1313
<parameter type="int" name="b" default=""/>
1414
</function>
15-
<function name="adder" fullname="QDocTests::Numbers::adder" href="qdoctests-numbers.html#adder" status="active" access="public" location="numbers.h" documented="true" meta="plain" type="ThisIsMyReallyLongAndComplicatedTemplateName" brief="Adds two numbers of the same underlying type" signature="ThisIsMyReallyLongAndComplicatedTemplateName adder(ThisIsMyReallyLongAndComplicatedTemplateName a, int b)">
15+
<function name="adder" fullname="QDocTests::Numbers::adder" href="qdoctests-numbers.html#adder" status="active" access="public" location="numbers.h" documented="true" meta="plain" type="ThisIsMyReallyLongAndComplicatedTemplateName" declaredtype="auto" brief="Adds two numbers of the same underlying type" signature="ThisIsMyReallyLongAndComplicatedTemplateName adder(ThisIsMyReallyLongAndComplicatedTemplateName a, int b)">
1616
<parameter type="ThisIsMyReallyLongAndComplicatedTemplateName" name="a" default=""/>
1717
<parameter type="int" name="b" default=""/>
1818
</function>
19-
<function name="number" fullname="QDocTests::Numbers::number" href="qdoctests-numbers.html#number" status="active" access="public" location="numbers.h" documented="true" meta="plain" const="true" type="int" brief="Returns the number" signature="int number() const"/>
19+
<function name="number" fullname="QDocTests::Numbers::number" href="qdoctests-numbers.html#number" status="active" access="public" location="numbers.h" documented="true" meta="plain" const="true" type="int" declaredtype="auto" brief="Returns the number" signature="int number() const"/>
2020
<function name="setNumber" fullname="QDocTests::Numbers::setNumber" href="qdoctests-numbers.html#setNumber" status="active" access="public" location="numbers.h" documented="true" meta="plain" type="void" brief="Sets the number" signature="void setNumber(int number)">
2121
<parameter type="int" name="number" default=""/>
2222
</function>
23-
<function name="subtract" fullname="QDocTests::Numbers::subtract" href="qdoctests-numbers.html#subtract" status="active" access="public" location="numbers.h" documented="true" meta="plain" type="int" brief="Subtracts two numbers" signature="int subtract(int a, int b)">
23+
<function name="subtract" fullname="QDocTests::Numbers::subtract" href="qdoctests-numbers.html#subtract" status="active" access="public" location="numbers.h" documented="true" meta="plain" type="int" declaredtype="auto" brief="Subtracts two numbers" signature="int subtract(int a, int b)">
2424
<parameter type="int" name="a" default=""/>
2525
<parameter type="int" name="b" default=""/>
2626
</function>

src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/auto_as_return_type/expected/webxml/qdoctests-numbers.webxml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@
2121
<para>Returns an integer containing the sum of <argument>a</argument> and <argument>b</argument>.</para>
2222
</description>
2323
</function>
24-
<function name="adder" fullname="QDocTests::Numbers::adder" href="qdoctests-numbers.html#adder" status="active" access="public" location="numbers.h" documented="true" meta="plain" type="ThisIsMyReallyLongAndComplicatedTemplateName" brief="Adds two numbers of the same underlying type" signature="ThisIsMyReallyLongAndComplicatedTemplateName adder(ThisIsMyReallyLongAndComplicatedTemplateName a, int b)">
24+
<function name="adder" fullname="QDocTests::Numbers::adder" href="qdoctests-numbers.html#adder" status="active" access="public" location="numbers.h" documented="true" meta="plain" type="ThisIsMyReallyLongAndComplicatedTemplateName" declaredtype="auto" brief="Adds two numbers of the same underlying type" signature="ThisIsMyReallyLongAndComplicatedTemplateName adder(ThisIsMyReallyLongAndComplicatedTemplateName a, int b)">
2525
<parameter type="ThisIsMyReallyLongAndComplicatedTemplateName" name="a" default=""/>
2626
<parameter type="int" name="b" default=""/>
2727
<description>
2828
<brief>Adds two numbers of the same underlying type.</brief>
2929
<para>Returns a value containing the sum of <argument>a</argument> and <argument>b</argument>.</para>
3030
</description>
3131
</function>
32-
<function name="number" fullname="QDocTests::Numbers::number" href="qdoctests-numbers.html#number" status="active" access="public" location="numbers.h" documented="true" meta="plain" const="true" type="int" brief="Returns the number" signature="int number() const">
32+
<function name="number" fullname="QDocTests::Numbers::number" href="qdoctests-numbers.html#number" status="active" access="public" location="numbers.h" documented="true" meta="plain" const="true" type="int" declaredtype="auto" brief="Returns the number" signature="int number() const">
3333
<description>
3434
<brief>Returns the number.</brief>
3535
<para>Returns the number, whatever it may be.</para>
@@ -48,7 +48,7 @@
4848
</see-also>
4949
</description>
5050
</function>
51-
<function name="subtract" fullname="QDocTests::Numbers::subtract" href="qdoctests-numbers.html#subtract" status="active" access="public" location="numbers.h" documented="true" meta="plain" type="int" brief="Subtracts two numbers" signature="int subtract(int a, int b)">
51+
<function name="subtract" fullname="QDocTests::Numbers::subtract" href="qdoctests-numbers.html#subtract" status="active" access="public" location="numbers.h" documented="true" meta="plain" type="int" declaredtype="auto" brief="Subtracts two numbers" signature="int subtract(int a, int b)">
5252
<parameter type="int" name="a" default=""/>
5353
<parameter type="int" name="b" default=""/>
5454
<description>

src/qdoc/qdoc/tests/validateqdocoutputfiles/testdata/auto_as_return_type/expected/webxml/qdoctests.webxml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@
2525
<para>Returns an integer containing the sum of <argument>a</argument> and <argument>b</argument>.</para>
2626
</description>
2727
</function>
28-
<function name="adder" fullname="QDocTests::Numbers::adder" href="qdoctests-numbers.html#adder" status="active" access="public" location="numbers.h" documented="true" meta="plain" type="ThisIsMyReallyLongAndComplicatedTemplateName" brief="Adds two numbers of the same underlying type" signature="ThisIsMyReallyLongAndComplicatedTemplateName adder(ThisIsMyReallyLongAndComplicatedTemplateName a, int b)">
28+
<function name="adder" fullname="QDocTests::Numbers::adder" href="qdoctests-numbers.html#adder" status="active" access="public" location="numbers.h" documented="true" meta="plain" type="ThisIsMyReallyLongAndComplicatedTemplateName" declaredtype="auto" brief="Adds two numbers of the same underlying type" signature="ThisIsMyReallyLongAndComplicatedTemplateName adder(ThisIsMyReallyLongAndComplicatedTemplateName a, int b)">
2929
<parameter type="ThisIsMyReallyLongAndComplicatedTemplateName" name="a" default=""/>
3030
<parameter type="int" name="b" default=""/>
3131
<description>
3232
<brief>Adds two numbers of the same underlying type.</brief>
3333
<para>Returns a value containing the sum of <argument>a</argument> and <argument>b</argument>.</para>
3434
</description>
3535
</function>
36-
<function name="number" fullname="QDocTests::Numbers::number" href="qdoctests-numbers.html#number" status="active" access="public" location="numbers.h" documented="true" meta="plain" const="true" type="int" brief="Returns the number" signature="int number() const">
36+
<function name="number" fullname="QDocTests::Numbers::number" href="qdoctests-numbers.html#number" status="active" access="public" location="numbers.h" documented="true" meta="plain" const="true" type="int" declaredtype="auto" brief="Returns the number" signature="int number() const">
3737
<description>
3838
<brief>Returns the number.</brief>
3939
<para>Returns the number, whatever it may be.</para>
@@ -52,7 +52,7 @@
5252
</see-also>
5353
</description>
5454
</function>
55-
<function name="subtract" fullname="QDocTests::Numbers::subtract" href="qdoctests-numbers.html#subtract" status="active" access="public" location="numbers.h" documented="true" meta="plain" type="int" brief="Subtracts two numbers" signature="int subtract(int a, int b)">
55+
<function name="subtract" fullname="QDocTests::Numbers::subtract" href="qdoctests-numbers.html#subtract" status="active" access="public" location="numbers.h" documented="true" meta="plain" type="int" declaredtype="auto" brief="Subtracts two numbers" signature="int subtract(int a, int b)">
5656
<parameter type="int" name="a" default=""/>
5757
<parameter type="int" name="b" default=""/>
5858
<description>

0 commit comments

Comments
 (0)