qdoc: ignores .pragma and .import in javascript files

For some reason, the QML/JS parser doesn't like them,
so they must be removed when qdoc parses JavaScript
code. This update handles every case I could find
except jquery.min.js, which is a different problem.

Change-Id: Iacbc4eda554516496a642189368d63d6560e3571
Task-number: QTBUG-44817
Reviewed-by: Caroline Chao <caroline.chao@theqtcompany.com>
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
This commit is contained in:
Martin Smith 2015-03-13 12:05:10 +01:00
parent 32d1803d60
commit 4da66d5dbf
3 changed files with 23 additions and 12 deletions

View File

@ -49,6 +49,7 @@
#include <ctype.h>
#include <limits.h>
#include <qdebug.h>
#include "generator.h"
QT_BEGIN_NAMESPACE
@ -3319,9 +3320,7 @@ CodeMarker *Doc::quoteFromFile(const Location &location,
QString dirPath = QFileInfo(filePath).path();
CodeMarker *marker = CodeMarker::markerForFileName(fileName);
quoter.quoteFromFile(userFriendlyFilePath,
code,
marker->markedUpCode(code, 0, location));
quoter.quoteFromFile(userFriendlyFilePath, code, marker->markedUpCode(code, 0, location));
return marker;
}

View File

@ -46,6 +46,7 @@
#include "qmlmarkupvisitor.h"
#include "text.h"
#include "tree.h"
#include "generator.h"
QT_BEGIN_NAMESPACE
@ -128,12 +129,12 @@ QString JsCodeMarker::addMarkUp(const QString &code,
QQmlJS::AST::Node::accept(ast, &visitor);
output = visitor.markedUpCode();
} else {
location.warning(tr("Unable to parse JavaScript: \"%1\" at line %2, column %3").arg(
location.warning(location.fileName() +
tr("Unable to parse JavaScript: \"%1\" at line %2, column %3").arg(
parser.errorMessage()).arg(parser.errorLineNumber()).arg(
parser.errorColumnNumber()));
output = protect(code);
}
return output;
}

View File

@ -47,6 +47,7 @@
#include "qmlmarkupvisitor.h"
#include "text.h"
#include "tree.h"
#include "generator.h"
QT_BEGIN_NAMESPACE
@ -205,8 +206,8 @@ static void replaceWithSpace(QString &str, int idx, int n)
src/declarative/qml/qqmlscriptparser.cpp then modified to
return a list of removed pragmas.
Searches for ".pragma <value>" declarations within \a script.
Currently supported pragmas are: library
Searches for ".pragma <value>" or ".import <stuff>" declarations
in \a script. Currently supported pragmas are: library
*/
QList<QQmlJS::AST::SourceLocation> QmlCodeMarker::extractPragmas(QString &script)
{
@ -229,13 +230,22 @@ QList<QQmlJS::AST::SourceLocation> QmlCodeMarker::extractPragmas(QString &script
token = l.lex();
if (token != QQmlJSGrammar::T_IDENTIFIER ||
l.tokenStartLine() != startLine ||
script.mid(l.tokenOffset(), l.tokenLength()) != pragma)
if (token != QQmlJSGrammar::T_PRAGMA && token != QQmlJSGrammar::T_IMPORT)
return removed;
int endOffset = 0;
while (startLine == l.tokenStartLine()) {
endOffset = l.tokenLength() + l.tokenOffset();
token = l.lex();
}
replaceWithSpace(script, startOffset, endOffset - startOffset);
removed.append(QQmlJS::AST::SourceLocation(startOffset,
endOffset - startOffset,
startLine,
startColumn));
#if 0
token = l.lex();
if (Generator::debugging())
qDebug() << " third token";
if (token != QQmlJSGrammar::T_IDENTIFIER ||
l.tokenStartLine() != startLine)
return removed;
@ -255,6 +265,7 @@ QList<QQmlJS::AST::SourceLocation> QmlCodeMarker::extractPragmas(QString &script
startLine, startColumn));
} else
return removed;
#endif
}
return removed;
}