1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4#ifndef CODEPARSER_H
5#define CODEPARSER_H
6
7#include "node.h"
8
9#include <QtCore/qset.h>
10
11QT_BEGIN_NAMESPACE
12
13#define COMMAND_ABSTRACT QLatin1String("abstract")
14#define COMMAND_CLASS QLatin1String("class")
15#define COMMAND_CMAKEPACKAGE QLatin1String("cmakepackage")
16#define COMMAND_CMAKECOMPONENT QLatin1String("cmakecomponent")
17#define COMMAND_CMAKETARGETITEM QLatin1String("cmaketargetitem")
18#define COMMAND_COMPARES QLatin1String("compares")
19#define COMMAND_COMPARESWITH QLatin1String("compareswith")
20#define COMMAND_DEFAULT QLatin1String("default")
21#define COMMAND_DEPRECATED QLatin1String("deprecated") // ### don't document
22#define COMMAND_DONTDOCUMENT QLatin1String("dontdocument")
23#define COMMAND_ENUM QLatin1String("enum")
24#define COMMAND_EXAMPLE QLatin1String("example")
25#define COMMAND_EXTERNALPAGE QLatin1String("externalpage")
26#define COMMAND_FN QLatin1String("fn")
27#define COMMAND_GROUP QLatin1String("group")
28#define COMMAND_HEADERFILE QLatin1String("headerfile")
29#define COMMAND_INGROUP QLatin1String("ingroup")
30#define COMMAND_INHEADERFILE QLatin1String("inheaderfile")
31#define COMMAND_INMODULE QLatin1String("inmodule") // ### don't document
32#define COMMAND_INPUBLICGROUP QLatin1String("inpublicgroup")
33#define COMMAND_INQMLMODULE QLatin1String("inqmlmodule")
34#define COMMAND_INTERNAL QLatin1String("internal")
35#define COMMAND_MACRO QLatin1String("macro")
36#define COMMAND_MODULE QLatin1String("module")
37#define COMMAND_MODULESTATE QLatin1String("modulestate")
38#define COMMAND_NAMESPACE QLatin1String("namespace")
39#define COMMAND_NEXTPAGE QLatin1String("nextpage")
40#define COMMAND_NOAUTOLIST QLatin1String("noautolist")
41#define COMMAND_NONREENTRANT QLatin1String("nonreentrant")
42#define COMMAND_OBSOLETE QLatin1String("obsolete")
43#define COMMAND_OVERLOAD QLatin1String("overload")
44#define COMMAND_PAGE QLatin1String("page")
45#define COMMAND_PRELIMINARY QLatin1String("preliminary")
46#define COMMAND_PREVIOUSPAGE QLatin1String("previouspage")
47#define COMMAND_PROPERTY QLatin1String("property")
48#define COMMAND_QMLABSTRACT QLatin1String("qmlabstract")
49#define COMMAND_QMLATTACHEDMETHOD QLatin1String("qmlattachedmethod")
50#define COMMAND_QMLATTACHEDPROPERTY QLatin1String("qmlattachedproperty")
51#define COMMAND_QMLATTACHEDSIGNAL QLatin1String("qmlattachedsignal")
52#define COMMAND_QMLVALUETYPE QLatin1String("qmlvaluetype")
53#define COMMAND_QMLCLASS QLatin1String("qmlclass")
54#define COMMAND_QMLDEFAULT QLatin1String("qmldefault")
55#define COMMAND_QMLENUM QLatin1String("qmlenum")
56#define COMMAND_QMLENUMERATORSFROM QLatin1String("qmlenumeratorsfrom")
57#define COMMAND_QMLINHERITS QLatin1String("inherits")
58#define COMMAND_QMLINSTANTIATES QLatin1String("instantiates") // TODO Qt 7.0.0 - Remove: Deprecated since 6.8.
59#define COMMAND_QMLMETHOD QLatin1String("qmlmethod")
60#define COMMAND_QMLMODULE QLatin1String("qmlmodule")
61#define COMMAND_QMLNATIVETYPE QLatin1String("nativetype")
62#define COMMAND_QMLPROPERTY QLatin1String("qmlproperty")
63#define COMMAND_QMLPROPERTYGROUP QLatin1String("qmlpropertygroup")
64#define COMMAND_QMLREADONLY QLatin1String("readonly")
65#define COMMAND_QMLREQUIRED QLatin1String("required")
66#define COMMAND_QMLSIGNAL QLatin1String("qmlsignal")
67#define COMMAND_QMLTYPE QLatin1String("qmltype")
68#define COMMAND_QTCMAKEPACKAGE QLatin1String("qtcmakepackage")
69#define COMMAND_QTCMAKETARGETITEM QLatin1String("qtcmaketargetitem")
70#define COMMAND_QTVARIABLE QLatin1String("qtvariable")
71#define COMMAND_REENTRANT QLatin1String("reentrant")
72#define COMMAND_REIMP QLatin1String("reimp")
73#define COMMAND_RELATES QLatin1String("relates")
74#define COMMAND_SINCE QLatin1String("since")
75#define COMMAND_STRUCT QLatin1String("struct")
76#define COMMAND_SUBTITLE QLatin1String("subtitle")
77#define COMMAND_STARTPAGE QLatin1String("startpage")
78#define COMMAND_THREADSAFE QLatin1String("threadsafe")
79#define COMMAND_TITLE QLatin1String("title")
80#define COMMAND_TYPEALIAS QLatin1String("typealias")
81#define COMMAND_TYPEDEF QLatin1String("typedef")
82#define COMMAND_VARIABLE QLatin1String("variable")
83#define COMMAND_VERSION QLatin1String("version")
84#define COMMAND_UNION QLatin1String("union")
85#define COMMAND_WRAPPER QLatin1String("wrapper")
86#define COMMAND_ATTRIBUTION QLatin1String("attribution")
87
88// deprecated alias of qmlvaluetype
89#define COMMAND_QMLBASICTYPE QLatin1String("qmlbasictype")
90
91class Location;
92class QString;
93class QDocDatabase;
94class CppCodeParser;
95
96struct UntiedDocumentation {
97 Doc documentation;
98 QStringList context;
99};
100
101struct TiedDocumentation {
102 Doc documentation;
103 Node* node;
104};
105
106class CodeParser
107{
108public:
109 static inline const QSet<QString> common_meta_commands{
110 COMMAND_ABSTRACT, COMMAND_CMAKEPACKAGE, COMMAND_CMAKECOMPONENT, COMMAND_CMAKETARGETITEM, COMMAND_DEFAULT,
111 COMMAND_DEPRECATED, COMMAND_INGROUP, COMMAND_INMODULE, COMMAND_INPUBLICGROUP, COMMAND_INQMLMODULE,
112 COMMAND_INTERNAL, COMMAND_MODULESTATE, COMMAND_NOAUTOLIST, COMMAND_NONREENTRANT, COMMAND_OBSOLETE,
113 COMMAND_PRELIMINARY, COMMAND_QMLABSTRACT, COMMAND_QMLDEFAULT, COMMAND_QMLENUMERATORSFROM, COMMAND_QMLINHERITS,
114 COMMAND_QMLREADONLY, COMMAND_QMLREQUIRED, COMMAND_QTCMAKEPACKAGE, COMMAND_QTCMAKETARGETITEM,
115 COMMAND_QTVARIABLE, COMMAND_REENTRANT, COMMAND_SINCE, COMMAND_STARTPAGE, COMMAND_SUBTITLE,
116 COMMAND_THREADSAFE, COMMAND_TITLE, COMMAND_WRAPPER, COMMAND_ATTRIBUTION,
117 };
118
119public:
120 CodeParser();
121 virtual ~CodeParser();
122
123 virtual void initializeParser() = 0;
124 virtual void terminateParser();
125 virtual QString language() = 0;
126 virtual QStringList sourceFileNameFilter() = 0;
127 virtual void parseSourceFile(const Location &location, const QString &filePath, CppCodeParser& cpp_code_parser) = 0;
128
129 static void initialize();
130 static void terminate();
131 static CodeParser *parserForLanguage(const QString &language);
132 static CodeParser *parserForSourceFile(const QString &filePath);
133 static void setLink(Node *node, Node::LinkType linkType, const QString &arg);
134 static bool isWorthWarningAbout(const Doc &doc);
135
136protected:
137 static void extractPageLinkAndDesc(QStringView arg, QString *link, QString *desc);
138 QDocDatabase *m_qdb {};
139
140private:
141 static QList<CodeParser *> s_parsers;
142};
143
144QT_END_NAMESPACE
145
146#endif
147

source code of qttools/src/qdoc/qdoc/src/qdoc/codeparser.h