summaryrefslogtreecommitdiff
path: root/src/qdoc/cppcodeparser.cpp
Commit message (Collapse)AuthorAgeFilesLines
* qdoc: Allow QML/JS types with the same name as the parent modulev5.13.0-beta3Topi Reinio2019-04-161-2/+2
| | | | | | | | | | | | | QtMultimedia QML module contains a QML type QtMultimedia. QDoc was overriding one with the other because the search function returns both types of nodes (as they have the same genus, 'QML'). Fix this by checking that we actually found an existing type, not a module. Task-number: QTBUG-75186 Change-Id: Id7a151d6db137fd337e4dd68ebe7c8aa08ed80e0 Reviewed-by: Martin Smith <martin.smith@qt.io>
* qdoc: Allow namespace members to use \relatesMartin Smith2019-04-081-1/+2
| | | | | | | | | | It had been required that \relates could only be used to relate global entities to a class. This change allows \relates to be used in the comments of entities in a named namespace. There are several cases in qtextstream.cpp Change-Id: I17b61dbdaf6b6bd8c420a2fa1fd9deef6b7125dc Reviewed-by: Martin Smith <martin.smith@qt.io>
* qdoc: Search for QML type before creating itMartin Smith2019-04-021-14/+17
| | | | | | | | | | | | | | | | | | | | Because we have QML types that represent C++ classes, it is possible for qdoc to process a \qmlproperty command before it has processed the \qmltype for the QML type where the QML property belongs. This is because the \qmlproperty command can appear in a different .cpp file from the one containing the \qmltype command. If the .cpp file is parsed first, the QML type node won't exist when the \qmlproperty is processed, resulting in a qdoc error. This update forces qdoc to always check for the exist of the QML type before creating it and before creating any QML properties for it, and if the QML type does not exist, create it. If it does exist, use it. Change-Id: I78705aa95ee5bf3abc2e17fb2b6cd52191d54b68 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* qdoc: Eliminate need for the property group commandsMartin Smith2019-04-021-131/+65
| | | | | | | | | | | | | | | We have been using the \qmlpropertygroup command to document complex properties. we also have the \jspropertygroup but it hasn't been used. However, we also have the shared comment concept, which we have used for documenting groups of functions. This update changes qdoc to use the shared comment concept for QML and JS property groups. The property groups commands are therefore no longer needed. But there are several uses of the \qmlpropertygroup command, and qdoc still recognizes these, although it uses the shared comment concept to handle them. The property group commands will be removed from the qdoc manual in a later update. Change-Id: Ie98638546756fd1a70067a7cd483c3b962c02954 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* qdoc: Add support for documenting pyside examplesVenugopal Shivashankar2019-03-121-6/+13
| | | | | | | | | | | | | | At the moment, qdoc cannot generate documentation for python examples as it expects a .pro or .qmlproject file for every \example command it finds. Since Qt Creator v4.9, developers can create a python project using the New Project wizard, which means qdoc could use the .pyproject file to verify the python example. Change-Id: Idcecdffe4f798bd1409123f988e3b826247aed72 Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Martin Smith <martin.smith@qt.io>
* qdoc: Improve function overload handlingTopi Reinio2019-02-131-1/+1
| | | | | | | | | | | | | | | When QDoc calls Aggregate::normalizeOverloads(), process \internal function nodes last. This ensures that they get assigned overload numbers higher than the public ones, and adding internal overloads no longer shuffle around the public HTML anchors (that are based on the overload numbers). Also, when searching for functions, ensure that we don't return an \internal overload if a matching public one exists. This gets rid of a number of linking warnings. Change-Id: Idaac077e2f88d310e3261bf5b4c3df33ca02f873 Reviewed-by: Martin Smith <martin.smith@qt.io>
* QDoc: Code cleanup, use nullptr for nullptr constantsPaul Wicking2019-02-081-9/+9
| | | | | | | | | | Replace 0 as nullptr constant with nullptr. Remove reduntant semi-colons after member function definitions. Adjust whitespace on lines otherwise touched. Change-Id: I6af218ca8377611040360e0a3da392e7cffd29e9 Reviewed-by: Martin Smith <martin.smith@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
* qdoc: Correct ref pages for inner classesMartin Smith2019-02-081-14/+33
| | | | | | | | | | | | | | | | | | | | | | This update corrects the documentation pages for classes, structs, and unions that are declared inside a class or a struct. In Qt, a struct is often declared inside a class. For such internal declarations, the requirements for making the inner entity available were incorrectly shown. All that is really necessary is to include the parent class. So the requirements for including the inner entity are now replaced with, for example, "Struct State is declared in class QAccessible," where QAccessible becomes a link to the reference page for that class. It was easier to implement this change by teaching qdoc to recognize structs and unions in addition to classes, so that is also included in this change. Change-Id: I1a0d46ef19a130506c7bcbf77b46e298f6ab2f71 Task-number: QTBUG-66872 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* qdoc: Major clean-up of FunctionNode and parameter processingv5.13.0-alpha1Martin Smith2019-02-061-544/+99
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This update was motivated by the need to correct two known issues in qdoc. First, linking to overloaded functions failed in some cases because the overloads were not numbered consistently, causing links to go to the wrong overload or to nowhere at all. Second, the mechanism for handling the \relates command didn't support using it to relate a function to more than one class. For example, there are many global qHash() functions spread around QtBase. Each is meant to compute a hash index for an object of some class type, so the object can be inserted into a QHash map for that class type. It is then desired to relate qHash(type Xxx, int seed) to both QHash<type> and class Xxx, so that the documentation for that qHash() function appears as a related non-member function of both QHash<type> and class Xxx. The example above also illustrates the overload numbering problem, because all these qHash() functions are overloads of the name qHash. To make matters worse, they are not all in the same module. Most of them are in QtCore, but a few are in QtNetwork, and this distribution problem will become worse over time as more qHash() functions are added. Prior to this update, qdoc was unable to relate a function to something in a different module, or it didn't always work. While designing a fix for these issues, it became clear that the processing of the FunctionNode and the function parameters would have to be rewritten. That's what this update does. These are the main points: 1. A new subclass of Node is added to act as a proxy for a class in another module. This ProxyNode acts as a place holder for the functions (and possibly other elements) that are related to a class in another module. This is used for the qHash() functions in QtNetwork that are related to QHash in QtCore. qdoc generates an html file named qtnetwork/qhash-proxy.html that contains the documentation for these functions. But these functions are listed as related non-members on the QHash class reference page in the qtcore output directory. They are listed there in the summary, but they link to the qhash-proxy.html page in qtnetwork. 2. A new, Parameters class is added to qdoc (parameters.h and parameters.cpp), and the class Parameter is moved there from node.h. class Parameters replaces the old QVector<Parameter> wherever it was used. This encapsulates all the parameter processing and matching in the Parameters class and simplifies the code at all the places where QVector<Parameter> had been used. 3. The assignment of overload numbers is now done in the normalizeOverloads() function, which is called after all the headers and sources have been processed but before the generate phase begins. This assignment is a simple renumbering now because all the overloads of a function are linked to each other via a nextOverload_ link in the FunctionNode. The first function named qHash() is inserted into the Aggregate node's function map, but subsequent qHash() FunctionNodes are not entered into the function map but are linked to the first qHash() via its nextOverload_ link. 4. The \relates command can now be used multiple times in a single qdoc comment. There remains some work to be done here because this currently only works for global entities, but there are several cases where \relates has been used in the qdoc comment of a member of a class. This will be fixed soon, I believe. When qdoc sees the first \relates Xxx command, for example for qHash(Yyy, seed), that qHash() is a child of the global namespace. qdoc allows it to remain as a child of the global namespace but it tells class Xxx to "adopt" that child (see Node::adoptChild()). This function makes this instance of qHash() be a child of class Xxx (in this case QHash<type>), so that the parent of this qHash() becomes Xxx. After this "adoption," qHash() is a child of both the global namespace and class Xxx, but qHash() only knows it is a child of Xxx, i.e. its parent pointer is Xxx. If this is the first qHash() to become a child of Xxx, it is inserted into the function map of Xxx, but its nextOverload_ link is not changed. This is because all the global qHash() functions have already been linked into the nextOverload_ linked list, and this list must not be changed. Hence, when qdoc searches for qHash(something) to make a link to it, it will find it as a child of the global namespace, but it will correctly link to it using its actual parent pointer. When qdoc sees the second \relates Yyy for this qHash() function, qdoc sees that this FunctionNode has already been made a related non-member of Xxx, so it can't let Yyy "adopt" it. Instead, it tells Yyy to clone this qHash(), which creates a shallow copy of it but resets its nextOverload_ pointer to nullptr. I believe this clone of qHash() won't be found in a search for a function named qHash(), because the global one (the adopted one) will be found first. Or, if it is found, a link to the clone will be generated, but that's ok because the documentation is identical. Note that the existence of qHash in two child lists is taken into account at destruction time. The only place where a Node is destroyed is in the destructor of Tree, which destroys the Node tree from the root down to the leaves. Each aggregate node is responsible for deleting each of its child nodes, but it only deletes a child node if it is the parent of that child node. All of the above revealed that some of the findFunctionNode() functions were either no longer needed or weren't being called in the first place, so they were deleted. This change is now ready for testing. Change-Id: I6da3e2e9e71d39a29d90e073ed614309a49e3d4c Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* Inline CodeParser::processCommonMetaCommand() in its one callerMartin Smith2019-01-301-3/+62
| | | | | Change-Id: Ia715d6f5685363e4ccc22172ea45e43f1da72a17 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* Tidy up CppCodeParser::parseMacroArg() and clarify its documentationMartin Smith2019-01-301-42/+44
| | | | | | | | | An early return lets it declare its returned pointer later and a terser name for this variable is entirely sufficient. (This also prepares the ground for changing its return type and de-virtualising.) Change-Id: Ia94d810d341535d2d81aa28820696bfb2eec1652 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* Skip NULL nodes when processing meta-commandsMartin Smith2019-01-291-11/+16
| | | | | | | | | Add a missing null-check to a loop over nodes. Tidied up handling of the case where the node is an Aggregate, in the process. Change-Id: Iec39efdc9565c730baa8e0118de7cef50acd84f8 Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
* Inline various simple methods in QDocMartin Smith2019-01-231-16/+0
| | | | | Change-Id: Ie2ea694bd319f483e9a70f5934031028e0894976 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* QDoc: filter out internal nodes when processing argsMartin Smith2019-01-231-13/+18
| | | | | | | | | | CppCodeParser::processTopicArgs() neglected to check whether nodes are internal (or internals are to be included) before including them. Add Doc::isInternal() and CodeParser::showInternal() to let it check this and add the check. Tidied up surrounding code in the process. Change-Id: I9e1ca379a8e58c1519c345bbf98f441915998061 Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* Replace nodeType() comparisons to Node:X with isX() testsMartin Smith2019-01-221-1/+1
| | | | | | Change-Id: I62692b4b667a32fe77ee9dc51be15114aae9387b Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
* qdoc: Remove the \indexpage commandMartin Smith2018-12-031-4/+0
| | | | | | | | | The \indexpage command is no longer used. This update removes it from qdoc and from the qdoc manual. Change-Id: I7ac0cdc2d7fffc91dda01024740478e7da5570f0 Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* qdoc: Reorganize Qdoc's Node class hierarchyMartin Smith2018-10-231-103/+65
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a significant refactoring of QDoc's Node class hierarchy, which is meant to make maintenance of QDoc easier, and which will enable further development of QDoc as a library and plugin. Class DocumentNode is renamed to class PageNode, and it inherits the Node base class instead of inheriting class Aggregate. Class Aggregate inherits class PageNode instead of the Node base class. IOW, class DocumentNode and class Aggregate have swapped places in the class hierarchy, and DocumentNode has changed its name to PageNode. This makes the Node hierarchy more logical because: 1. Every entity that causes a documentation page to be written is a PageNode. 2. Only those PageNodes that can have children are Aggregates. Thus the HeaderFile subtype of the former DocumentNode has been promoted to class HeaderNode, which is a subclass of Aggregate. This makes sense because the old HeaderFile DocumentNode caused a documentation page to be generated, and that documentation page was very much like a class reference page. The \headerfile command is not used a lot in the Qt documentation but there are some useful cases, so it is worth making a subclass of Aggregate to handle them. The HeaderNode is now processed very much like the ClassNode and the NamespaceNode. Developers should be advised that isDocumentNode() is now isPageNode(), but isPageNode() can no longer be used to decide if an Aggregate* is a PageNode* (DocumentNode*), because Aggregate is now a subclass of PageNode. So a new convenience function is added: isTextPageNode(), which returns true if your Node* is a PageNode but not an Aggregate. IOW, isTextPageNode() returns true if the Node* is some kind of text page that doesn't represent a C++ or QML declaration. Class ExampleNode is a subclass of PageNode, not Aggregate. IOW, an ExampleNode no longer has children. Instead, the example files and example images that belong to the example are stored as string lists. It seems to work, but there might be problems in help files I haven't found yet. Class CollectionNode is now a subclass of Node instead of LeafNode. Class LeafNode is removed. All former subclasses of LeafNode are now subclasses of Node. This change also removes a lot of DITA bitrot. Work remaining to be done: 1. Remove the remaining DITA bitrot. 2. Consider letting QmlProperty and JsProperty be instances of Property and use the Genus value to distiguish them. 3. Also consider replacing QmlPropertyGroup and JsPropertyGroup with a single PropertyGroup and use the Genus value to distinguish them. This update also rearranges the parameters passed to the clang parser, and it removes some diff conflict lines that got saved by mistake. Change-Id: I918f83030c48d96db4a5588ab53458f221a5374e Reviewed-by: Martin Smith <martin.smith@qt.io> Reviewed-by: Paul Wicking <paul.wicking@qt.io>
* qdoc: Remove support for \compat commandMartin Smith2018-06-011-23/+0
| | | | | | | | | The \compat command is no longer needed in QDoc, and the code that supports it makes some parts of QDoc needlessly complex. This update removes it, along with the documentation for it in the QDoc manual. Change-Id: I249b571e24ff8c3530d1ae5dbb4fff9186dba49d Reviewed-by: Martin Smith <martin.smith@qt.io>
* qdoc: Document a namespace in multiple modulesMartin Smith2018-06-011-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | qdoc didn't handle this. This update fixes most of what was wrong, but tuning the details of the namespace reference pages might follow. We have namespace Qt as an example. Most of the elements in the Qt namespace are in QtCore, but a few functions are declared in QtGui. Before this update, qdoc used the hack of using #ifdef to remove the declarations from qtextdocument.h in QtGui and .cpp and then added them back into qtnamespace.h and .cpp in QtCore. Now that hack is no longer necessary. The functions in the Qt namespace that are declared in QtGui are documented there, but the documentation is linked to from the namespace reference page, which remains in QtCore. That is, only one \namespace command is used to document the Qt namespace, and it appears in qnamespace.qdoc where it always did, but the documentation for the Qt namespace functions declared in QtGui is now appears in qtextdocument.cpp where it belongs. This also allows qdoc to report when a namespace contains elements that are public and documented, but the namespace itself is not documented, which was not possible before this change. qdoc also reports if a namespace is documented in more than one module. That is, for example, when \namespace Qt is used in both QtCore and QtGui. Note that this change will increase the number of qdoc warnings in QtBase, but the new warnings are expacted. Change-Id: If978a59209b7b2ae90713d3ae809ae03361df72f Task-number: QTBUG-67267 Reviewed-by: Martin Smith <martin.smith@qt.io>
* qdoc: Fix bugs in resolving inheritance and finding overridden functionsMartin Smith2018-02-231-22/+6
| | | | | | | | | | | | | | | | | | | | | A class node must have pointers to the class nodes of its base classes, but these pointers might not exist when qdoc creates the class node for the class. They might not exist until all the index files and include files have been parsewd. qdoc was trying to resolve the base classes too early. This update lets qdoc wait until it is known that everything has been built before attempting to resolve inheritance. This update also delays finding the pointer to the function node for the overridden function for a function marked "override" until the pointer is needed. Instead of storing the pointer to the node, the qualification path to the function is stored as a string, and the string is used to look up the overridden function when it is needed, which is only when the \reimp command is processed during output. The function that resolves the pointer to the overridden function was moved to the function node class, where it makes more sense. The way a few qdoc warnings are reported was also changed. Change-Id: Ia54642d11242386ae75139065f481e5d30f79fb5 Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* qdoc/Config::findFile() Make userFriendlyFilePath an optional out parameterv5.11.0-alpha1Friedemann Kleint2018-02-141-10/+3
| | | | | | Task-number: PYSIDE-363 Change-Id: If076c9a77a5a11c05035f6fc30e6d68e60a35045 Reviewed-by: Martin Smith <martin.smith@qt.io>
* qdoc: Fix regression for wrongly reporting multiple topicsMartin Smith2018-02-051-0/+7
| | | | | | | | | | | | | | | We have the case where multiple different topic commands can appear in a qdoc comment in a .cpp file, when C++ is being documented as QML. Specifically, a \qmlpropertygroup command can be used with multiple \qmlproperty commands. The clang code parser was reporting this as an error, even though clang would never see these commaqndes because they are parsed by the old qdoc command parser. The hasTooManyTopics() function was changed to allow this case. It fixes many qdoc warnings in QtDeclarative. Change-Id: Iaea9a4b9c531f022544749819f65a48111ad0cc1 Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* qdoc: Fix processing for \macro and QML method/signal topic commandsTopi Reinio2018-01-051-0/+122
| | | | | | | | | | | | | | | Because processing these commands do not use clang, their implementation is moved from ClangCodeParser to CppCodeParser - this ensures that these topic commands are processed also when they appear in .qdoc files (PureDocParser, used for .qdoc, derives from CppCodeParser). Also, these functions did nothing when qdoc was running in prepare phase which in turn meant that they were not written to .index, thus breaking cross-module linking for macros/QML methods/signals. That check is now removed and the functions always do their thing. Change-Id: I8d9333b02092708955b619b573254eda5d82f038 Reviewed-by: Martin Smith <martin.smith@qt.io>
* qdoc: Handle shared comments betterMartin Smith2017-11-161-62/+204
| | | | | | | | | | | | | | | The shared comment in qdoc was originally meant only for use with the \fn command, and only for multiple \fn commands in the same class. But it proved to be useful for other things, so people started using it in other contexts, even though it didn't work there. This update should handle them all. For example, when listing multiple \fn commands, they no longer need be for functions in the same class. Also, multiple \typedef commands are handled correctly. Change-Id: I4be86026a227d74822f5f2295577adf0fe170d49 Reviewed-by: Martin Smith <martin.smith@qt.io>
* Merge remote-tracking branch 'origin/wip/qdoc-clang' into devLiang Qi2017-11-131-1464/+79
|\ | | | | | | | | | | | | | | | | Conflicts: src/qdoc/cppcodeparser.h src/qdoc/location.cpp src/qdoc/qmlcodeparser.h Change-Id: I2e579ca5d83cd1c4b42acc9a07066d800cbc02cb
| * qdoc: This ends use of qdoc's old C++ parserMartin Smith2017-09-081-620/+2
| | | | | | | | | | | | | | | | | | | | This change replaces the last uses of qdoc's old, ad hoc C++ parser. Clang is now used for parsing all C++ code. \macro, \qmlxxx, and \jsxxx commands are parsed by simple pattern matching functions using QString::split(). Change-Id: If6f95b0487d1dd3206373bc55ec8e6b8b9c55b1e Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
| * qdoc: Better support for multi-\fn documentation blocksMartin Smith2017-08-101-51/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change is a partial fix for the multi-\fn documentation concept. It outputs the documentation once but listing all the function signatures from the \fn commands found in the qdoc comment. Multiple \since commands are not implemented; the \until command is not implemented, and providing text applicable to a specific \fn signature is not implemented. This change requires clang, which means it requires a sequence of other updates as well, so you can't test it unless you have all that stuff. Task-number: QTBUG-60420 Change-Id: Ib316b6f97fa427ef730c4badfc785101bff55dce Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
| * qdoc: Make qdoc handle ref qualifiers correctlyMartin Smith2017-08-101-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This update makes qdoc parse and record the presence of ref qualifiers on the end of function declarations. It unfortunately increases the number of qdoc errors reported in QtBase, but that is because these functions are not documented correctly. There will be another update to qdoc to allow documenting multiple functions with a single comment, which is needed for documenting these ref qualified functions but also can be useful in other contexts. Change-Id: If2efb1a71c683a465d66608a20e238d84ea45d9a Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
| * qdoc: Teach parser for \fn commands to parse array parametersMartin Smith2017-08-101-0/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The old qdoc C++ parser is still used for parsing function signatures in \fn commands. The parser could not handle the case where a formal parameter is an array declaration. Now it parses the formal parameter, so the syntax errors have disappeared. But there is a separate problem involving the matching of the declaration to the same declaration in the header file, which is parsed by clang. However, this is a separate issue not addressed by this fix. Change-Id: I61be810b02ac50a6ee380664a41915cc85633c66 Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
| * qdoc: Use documentation for implicit special functionsMartin Smith2017-08-101-8/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Allow implicitly declared special member functions to be explicitly documented. For example, in class QFuture, the destructor, copy constructor and assignment operatore are implicitly declared, but they are explicitly documented in qfuture.qdoc. clangqdoc no longer complains that it can't find these functions in any header file. It creates them for documentation purposes, and they are documented as expected. Where these function signatures appear on the class reference page, " = default" is appended to the end to indicate that the function is implicitly declared. Change-Id: I7bcf16c31099439f424b438eb41589435d7254b6 Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
| * qdoc: Clean up the Parameter classMartin Smith2017-08-101-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The way function signatures are specified is changing. A basic assumption of qdoc was that in the function signature specified with the \fn command, each formal parameter would have a name, and the name would be documentede in the text using the \a markup. This is no longer valid. There are now several cases in Qt where std::nullptr_t is used to specify a formal parameter, and no parameter name is provided. Furthermore, there are a few cases where some other type is used as the parameter type and no parameter name is given. The meaning in the first case is that the function must be called with NULL, and the meaning in the second case is that the parameter is not used in the function implementation. This clean up task must be accomplished in preparation for implementing the changes described above. The Parameter class had become a kludge. The so-called "rightType_" data member (which has not been used for quite a long time now and which was marked for removal long ago) is removed here. The change also affects the <parameter> element in the .index file, where the "right" item is removed and the "left" item is renamed to "type" . This index file change might break 3rd party applications that parse qdoc's index files, but I think there is only one, so be on the lookout for a complaint from that guy. Task-number: QTBUG-58277 Change-Id: I721bebdd5d0f2fcd65324373c3a3ec3ea1c33e26 Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
| * qdoc: A different way to fix the "signed" problemMartin Smith2017-08-101-3/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The old qdoc parser is still used for parsing \fn commands because clang can't be used to parse code fragments. This causes a problem when the "signed" reserved word is used because clang doesn't keep it if it doesn't add anything to the type, while the old qdoc parser always appends it to the type under construction. The fix here is to let the old qdoc parser hold the "signed" reserved word aside until it knows what the next lexeme is. Then it either appends the held "signed" or discards it, depending on what the next lexeme is. e.g., if the next word is "int" discard "signed" but if the next word is "char" append the held "signed" before appending "char". Change-Id: I67953d964cd09410126d64fa3305c669111e74ce Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
| * qdoc: Enable documentation of type alias as typedefMartin Smith2017-08-101-0/+2
| | | | | | | | | | | | | | | | | | | | clangqdoc now handles the type alias declaraction and provides the \typealias command for documenting it. It is documented as a typedef. Task-number: QTBUG-58158 Change-Id: Iee0c8dea66026a89b3625b40b92b056cada893c1 Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
| * qdoc: Don't report error for things marked \internalMartin Smith2017-08-101-12/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | This change allows qdoc to avoid printing warnings about a qdoc comment, if the comment contains the \internal command. In these cases, the comment will not be used in the documentation, so there is no point reporting warnings about it. However, if the showinternal option is used, warnings about comments marked internal are printed anyway. Change-Id: Idcb329958681523c79e9f6a3a144ae26d44a6906 Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
| * Parse function pointer types the same way clang doesOlivier Goffart2017-08-101-8/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When an argument to a function is itself a function, use the same representation of its type that clang uses. - Omit spaces adjacent to parentheses - The argument name is not part of the argument type. This is required so types parsed with our parser lead to the same string as libclang gives us. The only function affected in QtCore is qRegisterAnimationInterpolator. Before: void qRegisterAnimationInterpolator(QVariant(* ) ( const T & from, const T & to, qreal progress ) func) After: void qRegisterAnimationInterpolator(QVariant (*)(const T &, const T &, qreal) func) Unfortunately, this means the documentation does not contain the parameter names in the function type. We will probably have to adapt the documentation of qRegisterAnimationInterpolator() to mention the meaning explicitly. Change-Id: I00ba1854869c061fb54c6a53e6eb02b934c20459 Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
| * Use clang as a parser in qdocOlivier Goffart2017-08-101-865/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The file qt_find_clang.prf is inspired by qtcreator's clang_installation.pri. The code from the while loop in ClangVisitor::parseProperty contains code moved from CppCodeParser::matchProperty. The code in the for loop of ClangCodeParser::parseSourceFile (from the "Doc parses the comment"), is mostly moved from CppCodeParser::matchDocsAndStuff. In CppCodeParser, most of the code is removed since clang is used for parsing. We just need to leave enough to parse the declaration in the comments which still use the old parser (\fn, ...) Known issues: - When the parameter name is a comment, it is lost. (e.g. QObject::eventFilter(QObject * /* watched */, QEvent * /* event */) - I can't compute default parameters when they are expanded from a macro. (e.g. QObject::tr) - Instances of #ifndef Q_QDOC need to be reviewed Change-Id: I92d4ca4fc52810d9d3de433147a9953eea3a1802 Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
* | qdoc: Improve linking of QML typesTopi Reinio2017-10-271-1/+3
|/ | | | | | | | | | | | | | | | | | | | | | QML types and QML basic types were not autolinked correctly in many instances. - Provide correct context (genus) for code quote commands. This guarantees that the types resolve correctly for a \qml snippet even if there are colliding C++ target names. Note: we do not enforce 'CPP' genus for \code command, as it is commonly used also with QML code. - Similarly for examples, each .qml source file is set to have QML genus. - Remove QML basic types from the hard-coded map for known (C++) types/keywords. This prevented linking to these types. Task-number: QTBUG-62440 Change-Id: I578d8d4675e99cb4ba54171031efd8dc93040160 Reviewed-by: Martin Smith <martin.smith@qt.io>
* qdoc: Further improve example file listingTopi Reinio2017-07-041-2/+4
| | | | | | | | | | | | | | | Fix a bug where '\generatelist examplefiles' with no second parameter produced an empty list, instead of listing all files. Also, no longer restrict the searching of example image files to the images/ subdirectory. All images under a project directory are now listed, except those under doc/images. Minor fixes to related QDoc documentation. Change-Id: Id4516ba2feb98466a0e893a85f85118e3d21eae2 Reviewed-by: Martin Smith <martin.smith@qt.io> Reviewed-by: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
* Fix GCC 7 warnings about unmarked case statement fallthroughsThiago Macieira2017-06-041-1/+1
| | | | | | | doc.cpp:632:39: error: this statement may fall through [-Werror=implicit-fallthrough=] Change-Id: Ia3e896da908f42939148fffd14c48709a6772552 Reviewed-by: Martin Smith <martin.smith@qt.io>
* Use join(QChar), join(QLatin1String) where applicableMarc Mutz2017-03-231-1/+1
| | | | | | | | They're faster/expand to less code. Change-Id: I4d79abb870c7b49784be17dc174ab68d98b1a75d Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
* qdoc: Implement C++11 'override' specifier supportRainer Keller2017-01-121-3/+5
| | | | | | | Change-Id: Iad837dbdaf492eff77ced4d93dc05095e1d89400 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io> Reviewed-by: Michael Winkelmann <Michael.winkelmann@qt.io> Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
* Merge remote-tracking branch 'origin/5.7' into 5.8Liang Qi2016-09-051-1/+0
|\ | | | | | | Change-Id: I29e1f5d7d146cc77f8cf92bfbe2e41ffad50a041
| * qdoc: Improve resolution of QML type inheritanceTopi Reinio2016-08-161-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QDoc maintains a global map of base types for all QML types. This caused issues whenever QML modules have conflicting type names; for example, types from Qt Quick Controls (v1) were incorrectly marked as deriving from QQC v2 'Control' type. To improve the situation, make following changes: - Manage 'inherited by' map in a single location. Types are added to this map in a pre-generate step (QDocDatabase::resolveQmlInheritance()) after parsing all sources. This allows better control of searching - if the QML type node has an import list, the search is now always based on it. - Add a safeguard against using a base type from a module with major version different to the import statement. - Use node pointers as keys in 'Inherited by' map, instead of type-name strings. Task-number: QTBUG-53529 Change-Id: I6665a520c9197fa90e84d67b12e3405b5b3f0901 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io> Reviewed-by: Martin Smith <martin.smith@theqtcompany.com>
* | qdoc: Add support for attribution pagesKai Koehne2016-08-081-0/+2
|/ | | | | | | | | | | | | | "\page xx attribution" now marks a page as describing a code attribution, and \generatelist{attributions} generates an overview of all attribution pages. Originally code attributions were meant to be handled by \legalese ... \endlegalese and \generatelist{legalese}. Anyhow, this fails giving more details than the pure license text. Change-Id: I3543f077051b361ce59fe27e50f9719dfa52ced3 Reviewed-by: Topi Reiniö <topi.reinio@theqtcompany.com>
* Merge remote-tracking branch 'origin/5.6' into 5.7Liang Qi2016-06-291-2/+3
|\ | | | | | | | | | | | | Conflicts: src/assistant/assistant/doc/src/assistant-manual.qdoc Change-Id: I136caf5f26eff4d1c2574459b8dff9937c2c372d
| * Less randomness in qdoc output part IISune Vuorela2016-06-161-2/+3
| | | | | | | | | | | | | | | | | | Sort more lists before writing output Extract an existing function for comparing nodes, and use it across the code base Fix up the function to also sort private nodes, it is needed for reliable sorting. Change-Id: I934c875ef3e8a36d0e684f5b67d0ca1b81e5716f Reviewed-by: Martin Smith <martin.smith@theqtcompany.com>
* | Updated license headers and license testsAntti Kokko2016-06-101-17/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | From Qt 5.7 -> tools & applications are licensed under GPL v3 with some exceptions, see http://blog.qt.io/blog/2016/01/13/new-agreement-with-the-kde-free-qt-foundation/ Updated license headers to use new GPL-EXCEPT header instead of LGPL21 one (in those files which will be under GPL 3 with exceptions) License header tests also updated to match current headers. Change-Id: Ia6bdacaa3c5bbc9d31334e1a0cabfe502a484dc4 Reviewed-by: Jani Heikkinen <jani.heikkinen@qt.io>
* | qdoc: Allow example files to be excludedTopi Reinio2016-05-121-3/+11
|/ | | | | | | | | | | | | | | | | | | | | Documentation configuration variables 'excludedirs' and 'excludefiles' had no effect on what source and image files were listed as belonging to an example. This commit fixes that, and refactors excludedirs/files handling: Remove duplicated code blocks, amd simplify the code reading the variables: - Drop checks whether an excluded directory exists - Drop conversion of native separators for excluded paths Both are unnecessary; QDoc expects '/'-separated paths for many other variables, and if an excluded dir does not exist, it won't exclude anything. Change-Id: Ie25511e20d33888653c23bb84975368317eb4306 Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com> Reviewed-by: Martin Smith <martin.smith@theqtcompany.com>
* qdoc: Correct source line numbers in index fileMartin Smith2016-04-051-8/+24
| | | | | | | | | | Many function clauses in the .index files show the wrong source file line number for the function declaration. This update ensures that the source file line number is correct. Change-Id: I8494b649be1d1a74e5b057391566503f3d6f1424 Task-number: QTBUG-52290 Reviewed-by: Topi Reiniö <topi.reinio@theqtcompany.com>
* qdoc: Allows properties in QML basic typesMartin Smith2016-03-091-4/+6
| | | | | | | | | | qdoc now accepts \qmlproperty comments for QML basic types. I didn't test it, but I think most of what was required was added in QTBUG-51125. Change-Id: I81fa6fa75e73f9ac2fab4794191c37730a4e7561 Task-number: QTBUG-40428 Reviewed-by: Topi Reiniö <topi.reinio@theqtcompany.com>