Skip to content

Commit d9a706c

Browse files
committed
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.10 6.9 6.8 Fixes: QTBUG-139614 Change-Id: Ie73c3db070943aa91e63d92d3e33e72d9579a7ee Reviewed-by: Topi Reiniö <[email protected]>
1 parent cc1fa16 commit d9a706c

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
@@ -441,6 +441,10 @@ void QDocIndexFiles::readIndexSection(QXmlStreamReader &reader, Node *current,
441441

442442
fn->setReturnType(attributes.value(QLatin1String("type")).toString());
443443

444+
const auto &declaredTypeAttr = attributes.value(QLatin1String("declaredtype"));
445+
if (!declaredTypeAttr.isEmpty())
446+
fn->setDeclaredReturnType(declaredTypeAttr.toString());
447+
444448
if (fn->isCppNode()) {
445449
fn->setVirtualness(attributes.value(QLatin1String("virtual")).toString());
446450
fn->setConst(attributes.value(QLatin1String("const")) == QLatin1String("true"));
@@ -1297,6 +1301,10 @@ void QDocIndexFiles::generateFunctionSection(QXmlStreamWriter &writer, FunctionN
12971301
if (!return_type.isEmpty())
12981302
writer.writeAttribute("type", std::move(return_type));
12991303

1304+
const auto &declared_return_type = fn->declaredReturnType();
1305+
if (declared_return_type.has_value())
1306+
writer.writeAttribute("declaredtype", declared_return_type.value());
1307+
13001308
if (fn->isCppNode()) {
13011309
if (!brief.isEmpty())
13021310
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)