summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Smith <martin.smith@qt.io>2016-09-01 09:40:15 +0200
committerMartin Smith <martin.smith@qt.io>2017-08-10 07:32:53 +0000
commit02de17eae61496e3b9ba78de5b8868ad94d21294 (patch)
tree4ad0a3f8ea752922e466f3b776056b4228bb2e7b /src
parentc3afec5a9adbed05c780dcfff5de0e76f287cb79 (diff)
qdoc: Don't report error for things marked \internal
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>
Diffstat (limited to 'src')
-rw-r--r--src/qdoc/clangcodeparser.cpp2
-rw-r--r--src/qdoc/codeparser.cpp15
-rw-r--r--src/qdoc/codeparser.h1
-rw-r--r--src/qdoc/cppcodeparser.cpp29
4 files changed, 34 insertions, 13 deletions
diff --git a/src/qdoc/clangcodeparser.cpp b/src/qdoc/clangcodeparser.cpp
index ee7897060..ccab4a08d 100644
--- a/src/qdoc/clangcodeparser.cpp
+++ b/src/qdoc/clangcodeparser.cpp
@@ -1050,7 +1050,7 @@ void ClangCodeParser::parseSourceFile(const Location& /*location*/, const QStrin
if (n) {
nodes.append(n);
docs.append(doc);
- } else {
+ } else if (CodeParser::isWorthWarningAbout(doc)) {
doc.location().warning(tr("Cannot tie this documentation to anything"),
tr("I found a /*! ... */ comment, but there was no "
"topic command (e.g., '\\%1', '\\%2') in the "
diff --git a/src/qdoc/codeparser.cpp b/src/qdoc/codeparser.cpp
index 83d2ddc4d..c344ad763 100644
--- a/src/qdoc/codeparser.cpp
+++ b/src/qdoc/codeparser.cpp
@@ -354,6 +354,21 @@ void CodeParser::setLink(Node* node, Node::LinkType linkType, const QString& arg
}
/*!
+ \brief Test for whether a doc comment warrants warnings.
+
+ Returns true if qdoc should report that it has found something
+ wrong with the qdoc comment in \a doc. Sometimes, qdoc should
+ not report the warning, for example, when the comment contains
+ the \c internal command, which normally means qdoc will not use
+ the comment in the documentation anyway, so there is no point
+ in reporting warnings about it.
+ */
+bool CodeParser::isWorthWarningAbout(const Doc &doc)
+{
+ return (showInternal_ || !doc.metaCommandsUsed().contains(QStringLiteral("internal")));
+}
+
+/*!
Returns \c true if the file being parsed is a .h file.
*/
bool CodeParser::isParsingH() const
diff --git a/src/qdoc/codeparser.h b/src/qdoc/codeparser.h
index 0ff7014a7..a8d03d8aa 100644
--- a/src/qdoc/codeparser.h
+++ b/src/qdoc/codeparser.h
@@ -66,6 +66,7 @@ public:
static CodeParser *parserForHeaderFile(const QString &filePath);
static CodeParser *parserForSourceFile(const QString &filePath);
static void setLink(Node* node, Node::LinkType linkType, const QString& arg);
+ static bool isWorthWarningAbout(const Doc &doc);
protected:
const QSet<QString>& commonMetaCommands();
diff --git a/src/qdoc/cppcodeparser.cpp b/src/qdoc/cppcodeparser.cpp
index 3c21c8b1b..798b6e395 100644
--- a/src/qdoc/cppcodeparser.cpp
+++ b/src/qdoc/cppcodeparser.cpp
@@ -231,7 +231,9 @@ Node* CppCodeParser::processTopicCommand(const Doc& doc,
if (func == 0)
func = qdb_->findNodeInOpenNamespace(parentPath, clone);
- if (func == 0) {
+ if (func) {
+ lastPath_ = parentPath;
+ } else if (isWorthWarningAbout(doc)) {
doc.location().warning(tr("Cannot find '%1' in '\\%2' %3")
.arg(clone->name() + "(...)")
.arg(COMMAND_FN)
@@ -241,8 +243,6 @@ Node* CppCodeParser::processTopicCommand(const Doc& doc,
"is identical to the declaration, including 'const' "
"qualifiers."));
}
- else
- lastPath_ = parentPath;
if (func) {
func->borrowParameterNames(clone);
func->setParentPath(clone->parentPath());
@@ -306,8 +306,10 @@ Node* CppCodeParser::processTopicCommand(const Doc& doc,
if (node == 0)
node = qdb_->findNodeByNameAndType(path, type);
if (node == 0) {
- doc.location().warning(tr("Cannot find '%1' specified with '\\%2' in any header file")
- .arg(arg.first).arg(command));
+ if (isWorthWarningAbout(doc)) {
+ doc.location().warning(tr("Cannot find '%1' specified with '\\%2' in any header file")
+ .arg(arg.first).arg(command));
+ }
lastPath_ = path;
}
@@ -798,11 +800,13 @@ void CppCodeParser::processOtherMetaCommand(const Doc& doc,
FunctionNode *func = (FunctionNode *) node;
const FunctionNode *from = func->reimplementedFrom();
if (from == 0) {
- doc.location().warning(tr("Cannot find base function for '\\%1' in %2()")
- .arg(COMMAND_REIMP).arg(node->name()),
- tr("The function either doesn't exist in any "
- "base class with the same signature or it "
- "exists but isn't virtual."));
+ if (isWorthWarningAbout(doc)) {
+ doc.location().warning(tr("Cannot find base function for '\\%1' in %2()")
+ .arg(COMMAND_REIMP).arg(node->name()),
+ tr("The function either doesn't exist in any "
+ "base class with the same signature or it "
+ "exists but isn't virtual."));
+ }
}
/*
Ideally, we would enable this check to warn whenever
@@ -810,8 +814,9 @@ void CppCodeParser::processOtherMetaCommand(const Doc& doc,
internal if the function is a reimplementation of
another function in a base class.
*/
- else if (from->access() == Node::Private
- || from->parent()->access() == Node::Private) {
+ else if ((from->access() == Node::Private
+ || from->parent()->access() == Node::Private)
+ && isWorthWarningAbout(doc)) {
doc.location().warning(tr("'\\%1' in %2() should be '\\internal' "
"because its base function is private "
"or internal").arg(COMMAND_REIMP).arg(node->name()));