summaryrefslogtreecommitdiffstats
path: root/src/tools/qdoc
diff options
context:
space:
mode:
authorMartin Smith <martin.smith@digia.com>2012-10-08 12:49:39 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-10-10 10:44:12 +0200
commit9418be80ec0e8a2629ff9bbb4d1a1c6309aa763d (patch)
tree190e10069eb02288091847ced11ce2ab8ec968a5 /src/tools/qdoc
parentc12b4f26852bc885217ae5ddcd105d88a502328a (diff)
qdoc: Implements the -no-link-errors option
The -no-link-errors flag tells qdoc not to print any link error messages at all. This is useful for finding and fixing all non-link errors in a module. Task number: QTBUG-26870 Change-Id: Id4b0eebb6c0509c57d2f01763b6dedbfb6756a91 Reviewed-by: Jerome Pasion <jerome.pasion@digia.com> Reviewed-by: Martin Smith <martin.smith@digia.com>
Diffstat (limited to 'src/tools/qdoc')
-rw-r--r--src/tools/qdoc/config.h1
-rw-r--r--src/tools/qdoc/ditaxmlgenerator.cpp2
-rw-r--r--src/tools/qdoc/generator.cpp2
-rw-r--r--src/tools/qdoc/generator.h2
-rw-r--r--src/tools/qdoc/htmlgenerator.cpp5
-rw-r--r--src/tools/qdoc/main.cpp7
-rw-r--r--src/tools/qdoc/qdocdatabase.cpp63
-rw-r--r--src/tools/qdoc/qdocdatabase.h4
8 files changed, 36 insertions, 50 deletions
diff --git a/src/tools/qdoc/config.h b/src/tools/qdoc/config.h
index 31e073730e..b3a35b9c0f 100644
--- a/src/tools/qdoc/config.h
+++ b/src/tools/qdoc/config.h
@@ -164,6 +164,7 @@ private:
#define CONFIG_LANGUAGE "language"
#define CONFIG_MACRO "macro"
#define CONFIG_NATURALLANGUAGE "naturallanguage"
+#define CONFIG_NOLINKERRORS "nolinkerrors"
#define CONFIG_OBSOLETELINKS "obsoletelinks"
#define CONFIG_OUTPUTDIR "outputdir"
#define CONFIG_OUTPUTENCODING "outputencoding"
diff --git a/src/tools/qdoc/ditaxmlgenerator.cpp b/src/tools/qdoc/ditaxmlgenerator.cpp
index 8c1f57a03a..f7700ce2a0 100644
--- a/src/tools/qdoc/ditaxmlgenerator.cpp
+++ b/src/tools/qdoc/ditaxmlgenerator.cpp
@@ -1337,7 +1337,7 @@ int DitaXmlGenerator::generateAtom(const Atom *atom,
QString myLink = getLink(atom, relative, &node);
if (myLink.isEmpty())
myLink = getCollisionLink(atom);
- if (myLink.isEmpty())
+ if (myLink.isEmpty() && !noLinkErrors())
relative->doc().location().warning(tr("Can't link to '%1'").arg(atom->string()));
else if (!inSectionHeading_)
beginLink(myLink);
diff --git a/src/tools/qdoc/generator.cpp b/src/tools/qdoc/generator.cpp
index 9cfdb2246b..1c7727db70 100644
--- a/src/tools/qdoc/generator.cpp
+++ b/src/tools/qdoc/generator.cpp
@@ -95,6 +95,7 @@ QString Generator::sinceTitles[] =
QStringList Generator::styleDirs;
QStringList Generator::styleFiles;
bool Generator::debugging_ = false;
+bool Generator::noLinkErrors_ = false;
void Generator::setDebugSegfaultFlag(bool b)
{
@@ -1641,6 +1642,7 @@ void Generator::initialize(const Config &config)
}
else
outputPrefixes[QLatin1String("QML")] = QLatin1String("qml-");
+ noLinkErrors_ = config.getBool(QLatin1String(CONFIG_NOLINKERRORS));
}
/*!
diff --git a/src/tools/qdoc/generator.h b/src/tools/qdoc/generator.h
index 56e0d0aa3e..30f2219243 100644
--- a/src/tools/qdoc/generator.h
+++ b/src/tools/qdoc/generator.h
@@ -89,6 +89,7 @@ public:
static void debugSegfault(const QString& message);
static void setDebugSegfaultFlag(bool b);
static bool debugging() { return debugging_; }
+ static bool noLinkErrors() { return noLinkErrors_; }
protected:
virtual void beginSubPage(const InnerNode* node, const QString& fileName);
@@ -191,6 +192,7 @@ private:
static QStringList styleDirs;
static QStringList styleFiles;
static bool debugging_;
+ static bool noLinkErrors_;
void appendFullName(Text& text,
const Node *apparentNode,
diff --git a/src/tools/qdoc/htmlgenerator.cpp b/src/tools/qdoc/htmlgenerator.cpp
index 7eb06ce048..a7721656f4 100644
--- a/src/tools/qdoc/htmlgenerator.cpp
+++ b/src/tools/qdoc/htmlgenerator.cpp
@@ -791,9 +791,8 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark
QString myLink = getLink(atom, relative, &node);
if (myLink.isEmpty()) {
myLink = getCollisionLink(atom);
- if (myLink.isEmpty()) {
- relative->doc().location().warning(tr("Can't create link to '%1'")
- .arg(atom->string()));
+ if (myLink.isEmpty() && !noLinkErrors()) {
+ relative->doc().location().warning(tr("Can't link to '%1'").arg(atom->string()));
}
else
node = 0;
diff --git a/src/tools/qdoc/main.cpp b/src/tools/qdoc/main.cpp
index de28fbf5cc..8d35692a88 100644
--- a/src/tools/qdoc/main.cpp
+++ b/src/tools/qdoc/main.cpp
@@ -95,6 +95,7 @@ bool creationTimeBefore(const QFileInfo &fi1, const QFileInfo &fi2)
static bool highlighting = false;
static bool showInternal = false;
+static bool noLinkErrors = false;
static bool obsoleteLinks = false;
static QStringList defines;
static QStringList dependModules;
@@ -121,6 +122,8 @@ static void printHelp()
"Specify the directory where the output will be after running \"make install\"\n"
" -no-examples "
"Do not generate documentation for examples\n"
+ " -no-link-errors "
+ "Do not print link errors (i.e. missing targets)\n"
" -obsoletelinks "
"Report links from obsolete items to non-obsolete items\n"
" -outputdir "
@@ -166,6 +169,7 @@ static void processQdocconfFile(const QString &fileName)
}
config.setStringList(CONFIG_SYNTAXHIGHLIGHTING, QStringList(highlighting ? "true" : "false"));
config.setStringList(CONFIG_SHOWINTERNAL, QStringList(showInternal ? "true" : "false"));
+ config.setStringList(CONFIG_NOLINKERRORS, QStringList(noLinkErrors ? "true" : "false"));
config.setStringList(CONFIG_OBSOLETELINKS, QStringList(obsoleteLinks ? "true" : "false"));
/*
@@ -572,6 +576,9 @@ int main(int argc, char **argv)
Config::overrideOutputFormats.insert(argv[i]);
i++;
}
+ else if (opt == "-no-link-errors") {
+ noLinkErrors = true;
+ }
else if (opt == "-debug") {
Generator::setDebugSegfaultFlag(true);
}
diff --git a/src/tools/qdoc/qdocdatabase.cpp b/src/tools/qdoc/qdocdatabase.cpp
index 8780c67361..0c0b30e8c7 100644
--- a/src/tools/qdoc/qdocdatabase.cpp
+++ b/src/tools/qdoc/qdocdatabase.cpp
@@ -652,63 +652,39 @@ void QDocDatabase::insertTarget(const QString& name, Node* node, int priority)
finds one, it sets \a ref and returns the found node.
*/
const Node*
-QDocDatabase::findUnambiguousTarget(const QString& target, QString& ref, const Node* relative) const
+QDocDatabase::findUnambiguousTarget(const QString& target, QString& ref, const Node* relative)
{
Target bestTarget;
int numBestTargets = 0;
QList<Target> bestTargetList;
- bool debug = false;
- if (target == "Manager" && Generator::debugging())
- debug = true;
-
QString key = Doc::canonicalTitle(target);
- TargetMultiMap::const_iterator i = targetMultiMap_.constFind(key);
- if (i != targetMultiMap_.constEnd()) {
- if (debug)
- qDebug() << "DEBUG: A";
- TargetMultiMap::const_iterator j = i;
- do {
- const Target& candidate = j.value();
- if (candidate.priority_ < bestTarget.priority_) {
- if (debug)
- qDebug() << "DEBUG: B";
- bestTarget = candidate;
- bestTargetList.clear();
- bestTargetList.append(candidate);
- numBestTargets = 1;
- } else if (candidate.priority_ == bestTarget.priority_) {
- if (debug)
- qDebug() << "DEBUG: C";
- bestTargetList.append(candidate);
- ++numBestTargets;
- }
- ++j;
- } while (j != targetMultiMap_.constEnd() && j.key() == i.key());
-
- if (debug)
- qDebug() << "DEBUG: D";
+ TargetMultiMap::iterator i = targetMultiMap_.find(key);
+ while (i != targetMultiMap_.end()) {
+ if (i.key() != key)
+ break;
+ const Target& candidate = i.value();
+ if (candidate.priority_ < bestTarget.priority_) {
+ bestTarget = candidate;
+ bestTargetList.clear();
+ bestTargetList.append(candidate);
+ numBestTargets = 1;
+ } else if (candidate.priority_ == bestTarget.priority_) {
+ bestTargetList.append(candidate);
+ ++numBestTargets;
+ }
+ ++i;
+ }
+ if (numBestTargets > 0) {
if (numBestTargets == 1) {
- if (debug)
- qDebug() << "DEBUG: E";
ref = bestTarget.ref_;
return bestTarget.node_;
}
else if (bestTargetList.size() > 1) {
- if (debug)
- qDebug() << "DEBUG: F";
if (relative && !relative->qmlModuleIdentifier().isEmpty()) {
- if (debug)
- qDebug() << "DEBUG: G";
for (int i=0; i<bestTargetList.size(); ++i) {
- if (debug)
- qDebug() << "DEBUG: H";
const Node* n = bestTargetList.at(i).node_;
- if (debug)
- qDebug() << "DEBUG: I";
if (n && relative->qmlModuleIdentifier() == n->qmlModuleIdentifier()) {
- if (debug)
- qDebug() << "DEBUG: J";
ref = bestTargetList.at(i).ref_;
return n;
}
@@ -716,8 +692,7 @@ QDocDatabase::findUnambiguousTarget(const QString& target, QString& ref, const N
}
}
}
- if (debug)
- qDebug() << "DEBUG: K";
+ ref.clear();
return 0;
}
diff --git a/src/tools/qdoc/qdocdatabase.h b/src/tools/qdoc/qdocdatabase.h
index 6d104f303d..85f5c20b54 100644
--- a/src/tools/qdoc/qdocdatabase.h
+++ b/src/tools/qdoc/qdocdatabase.h
@@ -146,7 +146,7 @@ class QDocDatabase
}
const DocNode* findDocNodeByTitle(const QString& title, const Node* relative = 0) const;
- const Node *findUnambiguousTarget(const QString &target, QString& ref, const Node* relative) const;
+ const Node *findUnambiguousTarget(const QString &target, QString& ref, const Node* relative);
QString findTarget(const QString &target, const Node *node) const;
void resolveTargets(InnerNode* root);
@@ -221,8 +221,8 @@ class QDocDatabase
NodeMultiMapMap newSinceMaps_;
NodeMapMap funcIndex_;
TextToNodeMap legaleseTexts_;
- TargetMultiMap targetMultiMap_;
DocNodeMultiMap docNodesByTitle_;
+ TargetMultiMap targetMultiMap_;
};
QT_END_NAMESPACE