qmljs: improve qmltype parsing error messages

add filename to each error message.

Change-Id: I2b9f550147acfe6993f1e7d878fdda863182a2a0
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
This commit is contained in:
Fawzi Mohamed
2014-02-13 13:42:11 +01:00
parent 91def5a8ff
commit 1ff5faacea
3 changed files with 15 additions and 9 deletions

View File

@@ -1298,7 +1298,7 @@ void CppQmlTypesLoader::parseQmlTypeDescriptions(const QByteArray &contents,
errorMessage->clear(); errorMessage->clear();
warningMessage->clear(); warningMessage->clear();
TypeDescriptionReader reader(QString::fromUtf8(contents)); TypeDescriptionReader reader(fileName, QString::fromUtf8(contents));
if (!reader(newObjects, newModuleApis)) { if (!reader(newObjects, newModuleApis)) {
if (reader.errorMessage().isEmpty()) if (reader.errorMessage().isEmpty())
*errorMessage = QLatin1String("unknown error"); *errorMessage = QLatin1String("unknown error");

View File

@@ -36,13 +36,14 @@
#include "qmljsinterpreter.h" #include "qmljsinterpreter.h"
#include "qmljsutils.h" #include "qmljsutils.h"
#include <QDir>
using namespace QmlJS; using namespace QmlJS;
using namespace QmlJS::AST; using namespace QmlJS::AST;
using namespace LanguageUtils; using namespace LanguageUtils;
TypeDescriptionReader::TypeDescriptionReader(const QString &data) TypeDescriptionReader::TypeDescriptionReader(const QString &fileName, const QString &data)
: _source(data) : _fileName (fileName), _source(data), _objects(0)
, _objects(0)
{ {
} }
@@ -162,7 +163,8 @@ void TypeDescriptionReader::readModule(UiObjectDefinition *ast)
void TypeDescriptionReader::addError(const SourceLocation &loc, const QString &message) void TypeDescriptionReader::addError(const SourceLocation &loc, const QString &message)
{ {
_errorMessage += QString::fromLatin1("%1:%2: %3\n").arg( _errorMessage += QString::fromLatin1("%1:%2:%3: %4\n").arg(
QDir::toNativeSeparators(_fileName),
QString::number(loc.startLine), QString::number(loc.startLine),
QString::number(loc.startColumn), QString::number(loc.startColumn),
message); message);
@@ -170,7 +172,8 @@ void TypeDescriptionReader::addError(const SourceLocation &loc, const QString &m
void TypeDescriptionReader::addWarning(const SourceLocation &loc, const QString &message) void TypeDescriptionReader::addWarning(const SourceLocation &loc, const QString &message)
{ {
_warningMessage += QString::fromLatin1("%1:%2: %3\n").arg( _warningMessage += QString::fromLatin1("%1:%2:%3: %4\n").arg(
QDir::toNativeSeparators(_fileName),
QString::number(loc.startLine), QString::number(loc.startLine),
QString::number(loc.startColumn), QString::number(loc.startColumn),
message); message);
@@ -193,7 +196,9 @@ void TypeDescriptionReader::readComponent(UiObjectDefinition *ast)
else if (name == QLatin1String("Enum")) else if (name == QLatin1String("Enum"))
readEnum(component, fmo); readEnum(component, fmo);
else else
addWarning(component->firstSourceLocation(), tr("Expected only Property, Method, Signal and Enum object definitions.")); addWarning(component->firstSourceLocation(),
tr("Expected only Property, Method, Signal and Enum object definitions, not '%1'.")
.arg(name));
} else if (script) { } else if (script) {
QString name = toString(script->qualifiedId); QString name = toString(script->qualifiedId);
if (name == QLatin1String("name")) { if (name == QLatin1String("name")) {
@@ -211,7 +216,7 @@ void TypeDescriptionReader::readComponent(UiObjectDefinition *ast)
} else { } else {
addWarning(script->firstSourceLocation(), addWarning(script->firstSourceLocation(),
tr("Expected only name, prototype, defaultProperty, attachedType, exports " tr("Expected only name, prototype, defaultProperty, attachedType, exports "
"and exportMetaObjectRevisions script bindings.")); "and exportMetaObjectRevisions script bindings, not '%1'.").arg(name));
} }
} else { } else {
addWarning(member->firstSourceLocation(), tr("Expected only script bindings and object definitions.")); addWarning(member->firstSourceLocation(), tr("Expected only script bindings and object definitions."));

View File

@@ -54,7 +54,7 @@ class QMLJS_EXPORT TypeDescriptionReader
Q_DECLARE_TR_FUNCTIONS(QmlJS::TypeDescriptionReader) Q_DECLARE_TR_FUNCTIONS(QmlJS::TypeDescriptionReader)
public: public:
explicit TypeDescriptionReader(const QString &data); explicit TypeDescriptionReader(const QString &fileName, const QString &data);
~TypeDescriptionReader(); ~TypeDescriptionReader();
bool operator()( bool operator()(
@@ -85,6 +85,7 @@ private:
void addError(const AST::SourceLocation &loc, const QString &message); void addError(const AST::SourceLocation &loc, const QString &message);
void addWarning(const AST::SourceLocation &loc, const QString &message); void addWarning(const AST::SourceLocation &loc, const QString &message);
QString _fileName;
QString _source; QString _source;
QString _errorMessage; QString _errorMessage;
QString _warningMessage; QString _warningMessage;