diff options
author | Fawzi Mohamed <[email protected]> | 2013-10-16 14:59:28 +0200 |
---|---|---|
committer | Fawzi Mohamed <[email protected]> | 2013-10-23 00:35:16 +0200 |
commit | 0a4310d3148861062b9679e1415197b3a883164f (patch) | |
tree | bdc93dcc43e1ada315aca79883e1e890327d5faa /src/libs | |
parent | ab71755326eeee537fb9eee157d7fffcd54cb723 (diff) |
qmljs: added qmljsconstants.h
Moved Document::Language, Import::Type and StaticAnalysis::Severity
enums to qmljsconstants.h and renamed values removing the redundant
part.
Thus the effective length changed little or improved
(Document::QmlLanguage => Language::Qml).
The separate file allows better reuse of enum values without introducing
circular dependencies.
Change-Id: I5186d7c04f5d3f6c289068b919be5ff1ff118326
Reviewed-by: Fawzi Mohamed <[email protected]>
Diffstat (limited to 'src/libs')
-rw-r--r-- | src/libs/qmljs/parser/qmljsengine_p.h | 13 | ||||
-rw-r--r-- | src/libs/qmljs/parser/qmljsparser.cpp | 18 | ||||
-rw-r--r-- | src/libs/qmljs/parser/qmljsparser_p.h | 2 | ||||
-rw-r--r-- | src/libs/qmljs/qmljs-lib.pri | 3 | ||||
-rw-r--r-- | src/libs/qmljs/qmljs.qbs | 1 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsbind.cpp | 10 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsbundle.cpp | 8 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsbundle.h | 8 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsconstants.h | 76 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsdocument.cpp | 73 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsdocument.h | 33 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsinterpreter.cpp | 34 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsinterpreter.h | 16 | ||||
-rw-r--r-- | src/libs/qmljs/qmljslink.cpp | 28 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsscopechain.cpp | 6 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsstaticanalysismessage.cpp | 30 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsstaticanalysismessage.h | 14 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsutils.cpp | 2 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsutils.h | 2 |
19 files changed, 213 insertions, 164 deletions
diff --git a/src/libs/qmljs/parser/qmljsengine_p.h b/src/libs/qmljs/parser/qmljsengine_p.h index 5b1fe269f0d..b43b1be239d 100644 --- a/src/libs/qmljs/parser/qmljsengine_p.h +++ b/src/libs/qmljs/parser/qmljsengine_p.h @@ -44,6 +44,7 @@ #include "qmljsglobal_p.h" #include "qmljsastfwd_p.h" #include "qmljsmemorypool_p.h" +#include <qmljs/qmljsconstants.h> #include <QString> #include <QSet> @@ -59,21 +60,19 @@ class MemoryPool; class QML_PARSER_EXPORT DiagnosticMessage { public: - enum Kind { Warning, Error }; - DiagnosticMessage() - : kind(Error) {} + : kind(Severity::Error) {} - DiagnosticMessage(Kind kind, const AST::SourceLocation &loc, const QString &message) + DiagnosticMessage(Severity::Enum kind, const AST::SourceLocation &loc, const QString &message) : kind(kind), loc(loc), message(message) {} bool isWarning() const - { return kind == Warning; } + { return kind == Severity::Warning; } bool isError() const - { return kind == Error; } + { return kind == Severity::Error; } - Kind kind; + Severity::Enum kind; AST::SourceLocation loc; QString message; }; diff --git a/src/libs/qmljs/parser/qmljsparser.cpp b/src/libs/qmljs/parser/qmljsparser.cpp index 5b95f16b257..ecf18954804 100644 --- a/src/libs/qmljs/parser/qmljsparser.cpp +++ b/src/libs/qmljs/parser/qmljsparser.cpp @@ -289,7 +289,7 @@ case 20: { if (node) { node->importToken = loc(1); } else { - diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, loc(1), + diagnostic_messages.append(DiagnosticMessage(Severity::Error, loc(1), QLatin1String("Expected a qualified name id or a string literal"))); return false; // ### remove me @@ -583,7 +583,7 @@ case 78: { case 79: { bool rx = lexer->scanRegExp(Lexer::NoPrefix); if (!rx) { - diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location(lexer), lexer->errorMessage())); + diagnostic_messages.append(DiagnosticMessage(Severity::Error, location(lexer), lexer->errorMessage())); return false; // ### remove me } @@ -599,7 +599,7 @@ case 79: { case 80: { bool rx = lexer->scanRegExp(Lexer::EqualPrefix); if (!rx) { - diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, location(lexer), lexer->errorMessage())); + diagnostic_messages.append(DiagnosticMessage(Severity::Error, location(lexer), lexer->errorMessage())); return false; } @@ -680,7 +680,7 @@ case 88: { case 89: { if (AST::ArrayMemberExpression *mem = AST::cast<AST::ArrayMemberExpression *>(sym(1).Expression)) { - diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Warning, mem->lbracketToken, + diagnostic_messages.append(DiagnosticMessage(Severity::Warning, mem->lbracketToken, QLatin1String("Ignored annotation"))); sym(1).Expression = mem->base; @@ -691,7 +691,7 @@ case 89: { } else { sym(1).UiQualifiedId = 0; - diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, loc(1), + diagnostic_messages.append(DiagnosticMessage(Severity::Error, loc(1), QLatin1String("Expected a qualified name id"))); return false; // ### recover @@ -1747,7 +1747,7 @@ case 347: { msg = qApp->translate("QmlParser", "Syntax error"); else msg = qApp->translate("QmlParser", "Unexpected token `%1'").arg(QLatin1String(spell[token])); - diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, token_buffer[0].loc, msg)); + diagnostic_messages.append(DiagnosticMessage(Severity::Error, token_buffer[0].loc, msg)); action = errorState; goto _Lcheck_token; @@ -1775,7 +1775,7 @@ case 347: { int a = t_action(errorState, *tk); if (a > 0 && t_action(a, yytoken)) { const QString msg = qApp->translate("QmlParser", "Expected token `%1'").arg(QLatin1String(spell[*tk])); - diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, token_buffer[0].loc, msg)); + diagnostic_messages.append(DiagnosticMessage(Severity::Error, token_buffer[0].loc, msg)); yytoken = *tk; yylval = 0; @@ -1799,7 +1799,7 @@ case 347: { int a = t_action(errorState, tk); if (a > 0 && t_action(a, yytoken)) { const QString msg = qApp->translate("QmlParser", "Expected token `%1'").arg(QLatin1String(spell[tk])); - diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, token_buffer[0].loc, msg)); + diagnostic_messages.append(DiagnosticMessage(Severity::Error, token_buffer[0].loc, msg)); yytoken = tk; yylval = 0; @@ -1812,7 +1812,7 @@ case 347: { } const QString msg = qApp->translate("QmlParser", "Syntax error"); - diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, token_buffer[0].loc, msg)); + diagnostic_messages.append(DiagnosticMessage(Severity::Error, token_buffer[0].loc, msg)); } return false; diff --git a/src/libs/qmljs/parser/qmljsparser_p.h b/src/libs/qmljs/parser/qmljsparser_p.h index eafea8f405d..9b41ce3412e 100644 --- a/src/libs/qmljs/parser/qmljsparser_p.h +++ b/src/libs/qmljs/parser/qmljsparser_p.h @@ -162,7 +162,7 @@ public: inline DiagnosticMessage diagnosticMessage() const { foreach (const DiagnosticMessage &d, diagnostic_messages) { - if (d.kind != DiagnosticMessage::Warning) + if (d.kind != Severity::Warning) return d; } diff --git a/src/libs/qmljs/qmljs-lib.pri b/src/libs/qmljs/qmljs-lib.pri index 1ea154d3ad2..d4e83127daa 100644 --- a/src/libs/qmljs/qmljs-lib.pri +++ b/src/libs/qmljs/qmljs-lib.pri @@ -38,7 +38,8 @@ HEADERS += \ $$PWD/iscriptevaluator.h \ $$PWD/qmljssimplereader.h \ $$PWD/persistenttrie.h \ - $$PWD/qmljsqrcparser.h + $$PWD/qmljsqrcparser.h \ + $$PWD/qmljsconstants.h SOURCES += \ $$PWD/qmljsbind.cpp \ diff --git a/src/libs/qmljs/qmljs.qbs b/src/libs/qmljs/qmljs.qbs index ae5334c4bbc..c79197475fe 100644 --- a/src/libs/qmljs/qmljs.qbs +++ b/src/libs/qmljs/qmljs.qbs @@ -28,6 +28,7 @@ QtcLibrary { "qmljscheck.cpp", "qmljscheck.h", "qmljscodeformatter.cpp", "qmljscodeformatter.h", "qmljscompletioncontextfinder.cpp", "qmljscompletioncontextfinder.h", + "qmljsconstants.h", "qmljscontext.cpp", "qmljscontext.h", "qmljsdelta.cpp", "qmljsdelta.h", "qmljsdocument.cpp", "qmljsdocument.h", diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp index fd7c7c68cb8..65804d72a09 100644 --- a/src/libs/qmljs/qmljsbind.cpp +++ b/src/libs/qmljs/qmljsbind.cpp @@ -204,17 +204,17 @@ bool Bind::visit(UiImport *ast) const QString importId = ast->importId.toString(); ImportInfo import = ImportInfo::moduleImport(toString(ast->importUri), version, importId, ast); - if (_doc->language() == Document::QmlLanguage) { + if (_doc->language() == Language::Qml) { const QString importStr = import.name() + importId; QmlLanguageBundles langBundles = ModelManagerInterface::instance()->extendedBundles(); - QmlBundle qq1 = langBundles.bundleForLanguage(Document::QmlQtQuick1Language); - QmlBundle qq2 = langBundles.bundleForLanguage(Document::QmlQtQuick2Language); + QmlBundle qq1 = langBundles.bundleForLanguage(Language::QmlQtQuick1); + QmlBundle qq2 = langBundles.bundleForLanguage(Language::QmlQtQuick2); bool isQQ1 = qq1.supportedImports().contains(importStr); bool isQQ2 = qq2.supportedImports().contains(importStr); if (isQQ1 && ! isQQ2) - _doc->setLanguage(Document::QmlQtQuick1Language); + _doc->setLanguage(Language::QmlQtQuick1); if (isQQ2 && ! isQQ1) - _doc->setLanguage(Document::QmlQtQuick2Language); + _doc->setLanguage(Language::QmlQtQuick2); } _imports += import; } else if (!ast->fileName.isEmpty()) { diff --git a/src/libs/qmljs/qmljsbundle.cpp b/src/libs/qmljs/qmljsbundle.cpp index 8b2ff587b43..198808a9f29 100644 --- a/src/libs/qmljs/qmljsbundle.cpp +++ b/src/libs/qmljs/qmljsbundle.cpp @@ -288,14 +288,14 @@ bool QmlBundle::readFrom(QString path, QStringList *errors) return errs.isEmpty(); } -QmlBundle QmlLanguageBundles::bundleForLanguage(Document::Language l) const +QmlBundle QmlLanguageBundles::bundleForLanguage(Language::Enum l) const { if (m_bundles.contains(l)) return m_bundles.value(l); return QmlBundle(); } -void QmlLanguageBundles::mergeBundleForLanguage(Document::Language l, const QmlBundle &bundle) +void QmlLanguageBundles::mergeBundleForLanguage(Language::Enum l, const QmlBundle &bundle) { if (bundle.isEmpty()) return; @@ -305,14 +305,14 @@ void QmlLanguageBundles::mergeBundleForLanguage(Document::Language l, const QmlB m_bundles.insert(l,bundle); } -QList<Document::Language> QmlLanguageBundles::languages() const +QList<Language::Enum> QmlLanguageBundles::languages() const { return m_bundles.keys(); } void QmlLanguageBundles::mergeLanguageBundles(const QmlLanguageBundles &o) { - foreach (Document::Language l, o.languages()) + foreach (Language::Enum l, o.languages()) mergeBundleForLanguage(l, o.bundleForLanguage(l)); } diff --git a/src/libs/qmljs/qmljsbundle.h b/src/libs/qmljs/qmljsbundle.h index 63acca2da53..3357ee5a0c9 100644 --- a/src/libs/qmljs/qmljsbundle.h +++ b/src/libs/qmljs/qmljsbundle.h @@ -102,12 +102,12 @@ private: class QMLJS_EXPORT QmlLanguageBundles { public: - QmlBundle bundleForLanguage(Document::Language l) const; - void mergeBundleForLanguage(Document::Language l, const QmlBundle &bundle); - QList<Document::Language> languages() const; + QmlBundle bundleForLanguage(Language::Enum l) const; + void mergeBundleForLanguage(Language::Enum l, const QmlBundle &bundle); + QList<Language::Enum> languages() const; void mergeLanguageBundles(const QmlLanguageBundles &); private: - QHash<Document::Language,QmlBundle> m_bundles; + QHash<Language::Enum,QmlBundle> m_bundles; }; } // namespace QmlJS diff --git a/src/libs/qmljs/qmljsconstants.h b/src/libs/qmljs/qmljsconstants.h new file mode 100644 index 00000000000..fcb117050f0 --- /dev/null +++ b/src/libs/qmljs/qmljsconstants.h @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#ifndef QMLJSCONSTANTS_H +#define QMLJSCONSTANTS_H + +namespace QmlJS { + +namespace ImportType { +enum Enum { + Invalid, + ImplicitDirectory, + Library, + File, + Directory, + QrcFile, + QrcDirectory, + ImplicitQrcDirectory, + UnknownFile // refers a file/directory that wasn't found +}; +} + +namespace Severity { +enum Enum +{ + Hint, // cosmetic or convention + MaybeWarning, // possibly a warning, insufficient information + Warning, // could cause unintended behavior + MaybeError, // possibly an error, insufficient information + Error // definitely an error +}; +} + +namespace Language { +enum Enum +{ + Unknown = 0, + JavaScript = 1, + Json = 2, + Qml = 3, + QmlQtQuick1 = 4, + QmlQtQuick2 = 5, + QmlQbs = 6, + QmlProject = 7, + QmlTypeInfo = 8 +}; +} + +} // namespace QmlJS +#endif // QMLJSCONSTANTS_H diff --git a/src/libs/qmljs/qmljsdocument.cpp b/src/libs/qmljs/qmljsdocument.cpp index 942882ef1ac..fe169f795c4 100644 --- a/src/libs/qmljs/qmljsdocument.cpp +++ b/src/libs/qmljs/qmljsdocument.cpp @@ -29,6 +29,7 @@ #include "qmljsdocument.h" #include "qmljsbind.h" +#include "qmljsconstants.h" #include <qmljs/parser/qmljslexer_p.h> #include <qmljs/parser/qmljsparser_p.h> @@ -81,56 +82,56 @@ using namespace QmlJS::AST; */ -bool Document::isQmlLikeLanguage(Document::Language language) +bool Document::isQmlLikeLanguage(Language::Enum language) { switch (language) { - case QmlLanguage: - case QmlQtQuick1Language: - case QmlQtQuick2Language: - case QmlQbsLanguage: - case QmlProjectLanguage: - case QmlTypeInfoLanguage: + case Language::Qml: + case Language::QmlQtQuick1: + case Language::QmlQtQuick2: + case Language::QmlQbs: + case Language::QmlProject: + case Language::QmlTypeInfo: return true; default: return false; } } -bool Document::isFullySupportedLanguage(Document::Language language) +bool Document::isFullySupportedLanguage(Language::Enum language) { switch (language) { - case JavaScriptLanguage: - case JsonLanguage: - case QmlLanguage: - case QmlQtQuick1Language: - case QmlQtQuick2Language: + case Language::JavaScript: + case Language::Json: + case Language::Qml: + case Language::QmlQtQuick1: + case Language::QmlQtQuick2: return true; - case UnknownLanguage: - case QmlQbsLanguage: - case QmlProjectLanguage: - case QmlTypeInfoLanguage: + case Language::Unknown: + case Language::QmlQbs: + case Language::QmlProject: + case Language::QmlTypeInfo: break; } return false; } -bool Document::isQmlLikeOrJsLanguage(Document::Language language) +bool Document::isQmlLikeOrJsLanguage(Language::Enum language) { switch (language) { - case QmlLanguage: - case QmlQtQuick1Language: - case QmlQtQuick2Language: - case QmlQbsLanguage: - case QmlProjectLanguage: - case QmlTypeInfoLanguage: - case JavaScriptLanguage: + case Language::Qml: + case Language::QmlQtQuick1: + case Language::QmlQtQuick2: + case Language::QmlQbs: + case Language::QmlProject: + case Language::QmlTypeInfo: + case Language::JavaScript: return true; default: return false; } } -Document::Document(const QString &fileName, Language language) +Document::Document(const QString &fileName, Language::Enum language) : _engine(0) , _ast(0) , _bind(0) @@ -163,24 +164,24 @@ Document::~Document() delete _engine; } -Document::MutablePtr Document::create(const QString &fileName, Language language) +Document::MutablePtr Document::create(const QString &fileName, Language::Enum language) { Document::MutablePtr doc(new Document(fileName, language)); doc->_ptr = doc; return doc; } -Document::Language Document::guessLanguageFromSuffix(const QString &fileName) +Language::Enum Document::guessLanguageFromSuffix(const QString &fileName) { if (fileName.endsWith(QLatin1String(".qml"), Qt::CaseInsensitive)) - return QmlLanguage; + return Language::Qml; if (fileName.endsWith(QLatin1String(".qbs"), Qt::CaseInsensitive)) - return QmlQbsLanguage; + return Language::QmlQbs; if (fileName.endsWith(QLatin1String(".js"), Qt::CaseInsensitive)) - return JavaScriptLanguage; + return Language::JavaScript; if (fileName.endsWith(QLatin1String(".json"), Qt::CaseInsensitive)) - return JsonLanguage; - return UnknownLanguage; + return Language::Json; + return Language::Unknown; } Document::Ptr Document::ptr() const @@ -193,12 +194,12 @@ bool Document::isQmlDocument() const return isQmlLikeLanguage(_language); } -Document::Language Document::language() const +Language::Enum Document::language() const { return _language; } -void Document::setLanguage(Document::Language l) +void Document::setLanguage(Language::Enum l) { _language = l; } @@ -428,7 +429,7 @@ void Snapshot::remove(const QString &fileName) Document::MutablePtr Snapshot::documentFromSource( const QString &code, const QString &fileName, - Document::Language language) const + Language::Enum language) const { Document::MutablePtr newDoc = Document::create(fileName, language); diff --git a/src/libs/qmljs/qmljsdocument.h b/src/libs/qmljs/qmljsdocument.h index 56ebb7061e8..3d9491e165f 100644 --- a/src/libs/qmljs/qmljsdocument.h +++ b/src/libs/qmljs/qmljsdocument.h @@ -50,36 +50,23 @@ public: typedef QSharedPointer<const Document> Ptr; typedef QSharedPointer<Document> MutablePtr; - enum Language - { - UnknownLanguage = 0, - JavaScriptLanguage = 1, - JsonLanguage = 2, - QmlLanguage = 3, - QmlQtQuick1Language = 4, - QmlQtQuick2Language = 5, - QmlQbsLanguage = 6, - QmlProjectLanguage = 7, - QmlTypeInfoLanguage = 8 - }; - - static bool isQmlLikeLanguage(Language languge); - static bool isFullySupportedLanguage(Language language); - static bool isQmlLikeOrJsLanguage(Language language); + static bool isQmlLikeLanguage(Language::Enum languge); + static bool isFullySupportedLanguage(Language::Enum language); + static bool isQmlLikeOrJsLanguage(Language::Enum language); protected: - Document(const QString &fileName, Language language); + Document(const QString &fileName, Language::Enum language); public: ~Document(); - static MutablePtr create(const QString &fileName, Language language); - static Language guessLanguageFromSuffix(const QString &fileName); + static MutablePtr create(const QString &fileName, Language::Enum language); + static Language::Enum guessLanguageFromSuffix(const QString &fileName); Document::Ptr ptr() const; bool isQmlDocument() const; - Language language() const; - void setLanguage(Language l); + Language::Enum language() const; + void setLanguage(Language::Enum l); AST::UiProgram *qmlProgram() const; AST::Program *jsProgram() const; @@ -124,7 +111,7 @@ private: QString _source; QWeakPointer<Document> _ptr; int _editorRevision; - Language _language; + Language::Enum _language; bool _parsedCorrectly; // for documentFromSource @@ -237,7 +224,7 @@ public: Document::MutablePtr documentFromSource(const QString &code, const QString &fileName, - Document::Language language) const; + Language::Enum language) const; }; } // namespace QmlJS diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp index ddecffd2f19..feb6fa65057 100644 --- a/src/libs/qmljs/qmljsinterpreter.cpp +++ b/src/libs/qmljs/qmljsinterpreter.cpp @@ -2074,7 +2074,7 @@ bool ASTSignal::getSourceLocation(QString *fileName, int *line, int *column) con ImportInfo::ImportInfo() - : _type(InvalidImport) + : _type(ImportType::Invalid) , _ast(0) { } @@ -2089,7 +2089,7 @@ ImportInfo ImportInfo::moduleImport(QString uri, ComponentVersion version, } ImportInfo info; - info._type = LibraryImport; + info._type = ImportType::Library; info._name = uri; info._path = uri; info._path.replace(QLatin1Char('.'), QDir::separator()); @@ -2111,17 +2111,17 @@ ImportInfo ImportInfo::pathImport(const QString &docPath, const QString &path, info._path = importFileInfo.absoluteFilePath(); if (importFileInfo.isFile()) { - info._type = FileImport; + info._type = ImportType::File; } else if (importFileInfo.isDir()) { - info._type = DirectoryImport; + info._type = ImportType::Directory; } else if (path.startsWith(QLatin1String("qrc:"))) { info._path = path; if (ModelManagerInterface::instance()->filesAtQrcPath(info.path()).isEmpty()) - info._type = QrcDirectoryImport; + info._type = ImportType::QrcDirectory; else - info._type = QrcFileImport; + info._type = ImportType::QrcFile; } else { - info._type = UnknownFileImport; + info._type = ImportType::UnknownFile; } info._version = version; info._as = as; @@ -2132,7 +2132,7 @@ ImportInfo ImportInfo::pathImport(const QString &docPath, const QString &path, ImportInfo ImportInfo::invalidImport(UiImport *ast) { ImportInfo info; - info._type = InvalidImport; + info._type = ImportType::Invalid; info._ast = ast; return info; } @@ -2140,17 +2140,17 @@ ImportInfo ImportInfo::invalidImport(UiImport *ast) ImportInfo ImportInfo::implicitDirectoryImport(const QString &directory) { ImportInfo info; - info._type = ImplicitDirectoryImport; + info._type = ImportType::ImplicitDirectory; info._path = directory; return info; } bool ImportInfo::isValid() const { - return _type != InvalidImport; + return _type != ImportType::Invalid; } -ImportInfo::Type ImportInfo::type() const +ImportType::Enum ImportInfo::type() const { return _type; } @@ -2201,7 +2201,7 @@ const Value *TypeScope::lookupMember(const QString &name, const Context *context const ImportInfo &info = i.info; // JS import has no types - if (info.type() == ImportInfo::FileImport || info.type() == ImportInfo::QrcFileImport) + if (info.type() == ImportType::File || info.type() == ImportType::QrcFile) continue; if (!info.as().isEmpty()) { @@ -2231,7 +2231,7 @@ void TypeScope::processMembers(MemberProcessor *processor) const const ImportInfo &info = i.info; // JS import has no types - if (info.type() == ImportInfo::FileImport || info.type() == ImportInfo::QrcFileImport) + if (info.type() == ImportType::File || info.type() == ImportType::QrcFile) continue; if (!info.as().isEmpty()) @@ -2258,7 +2258,7 @@ const Value *JSImportScope::lookupMember(const QString &name, const Context *, const ImportInfo &info = i.info; // JS imports are always: import "somefile.js" as Foo - if (info.type() != ImportInfo::FileImport && info.type() != ImportInfo::QrcFileImport) + if (info.type() != ImportType::File && info.type() != ImportType::QrcFile) continue; if (info.as() == name) { @@ -2281,7 +2281,7 @@ void JSImportScope::processMembers(MemberProcessor *processor) const const ObjectValue *import = i.object; const ImportInfo &info = i.info; - if (info.type() == ImportInfo::FileImport || info.type() == ImportInfo::QrcFileImport) + if (info.type() == ImportType::File || info.type() == ImportType::QrcFile) processor->processProperty(info.as(), import); } } @@ -2338,7 +2338,7 @@ ImportInfo Imports::info(const QString &name, const Context *context) const continue; } - if (info.type() == ImportInfo::FileImport || info.type() == ImportInfo::QrcFileImport) { + if (info.type() == ImportType::File || info.type() == ImportType::QrcFile) { if (import->className() == firstId) return info; } else { @@ -2358,7 +2358,7 @@ QString Imports::nameForImportedObject(const ObjectValue *value, const Context * const ObjectValue *import = i.object; const ImportInfo &info = i.info; - if (info.type() == ImportInfo::FileImport || info.type() == ImportInfo::QrcFileImport) { + if (info.type() == ImportType::File || info.type() == ImportType::QrcFile) { if (import == value) return import->className(); } else { diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h index 356f52bb387..936edced6e6 100644 --- a/src/libs/qmljs/qmljsinterpreter.h +++ b/src/libs/qmljs/qmljsinterpreter.h @@ -32,6 +32,7 @@ #include <qmljs/qmljsdocument.h> #include <qmljs/qmljs_global.h> +#include <qmljs/qmljsconstants.h> #include <QFileInfoList> #include <QList> @@ -866,17 +867,6 @@ public: class QMLJS_EXPORT ImportInfo { public: - enum Type { - InvalidImport, - ImplicitDirectoryImport, - LibraryImport, - FileImport, - DirectoryImport, - QrcFileImport, - QrcDirectoryImport, - UnknownFileImport // refers a file/directory that wasn't found - }; - ImportInfo(); static ImportInfo moduleImport(QString uri, LanguageUtils::ComponentVersion version, @@ -888,7 +878,7 @@ public: static ImportInfo implicitDirectoryImport(const QString &directory); bool isValid() const; - Type type() const; + ImportType::Enum type() const; // LibraryImport: uri with ',' separator // Other: non-absolute path @@ -905,7 +895,7 @@ public: AST::UiImport *ast() const; private: - Type _type; + ImportType::Enum _type; LanguageUtils::ComponentVersion _version; QString _name; QString _path; diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp index 1515286a54f..8868ceee21f 100644 --- a/src/libs/qmljs/qmljslink.cpp +++ b/src/libs/qmljs/qmljslink.cpp @@ -244,16 +244,16 @@ void LinkPrivate::populateImportedTypes(Imports *imports, Document::Ptr doc) if (!import.object) { switch (info.type()) { - case ImportInfo::FileImport: - case ImportInfo::DirectoryImport: - case ImportInfo::QrcFileImport: - case ImportInfo::QrcDirectoryImport: + case ImportType::File: + case ImportType::Directory: + case ImportType::QrcFile: + case ImportType::QrcDirectory: import = importFileOrDirectory(doc, info); break; - case ImportInfo::LibraryImport: + case ImportType::Library: import = importNonFile(doc, info); break; - case ImportInfo::UnknownFileImport: + case ImportType::UnknownFile: imports->setImportFailed(); if (info.ast()) { error(doc, info.ast()->fileNameToken, @@ -290,8 +290,8 @@ Import LinkPrivate::importFileOrDirectory(Document::Ptr doc, const ImportInfo &i QString path = importInfo.path(); - if (importInfo.type() == ImportInfo::DirectoryImport - || importInfo.type() == ImportInfo::ImplicitDirectoryImport) { + if (importInfo.type() == ImportType::Directory + || importInfo.type() == ImportType::ImplicitDirectory) { import.object = new ObjectValue(valueOwner); importLibrary(doc, path, &import); @@ -303,11 +303,11 @@ Import LinkPrivate::importFileOrDirectory(Document::Ptr doc, const ImportInfo &i import.object->setMember(targetName, importedDoc->bind()->rootObjectValue()); } } - } else if (importInfo.type() == ImportInfo::FileImport) { + } else if (importInfo.type() == ImportType::File) { Document::Ptr importedDoc = snapshot.document(path); if (importedDoc) import.object = importedDoc->bind()->rootObjectValue(); - } else if (importInfo.type() == ImportInfo::QrcFileImport) { + } else if (importInfo.type() == ImportType::QrcFile) { QLocale locale; QStringList filePaths = ModelManagerInterface::instance() ->filesAtQrcPath(path, &locale, 0, ModelManagerInterface::ActiveQrcResources); @@ -319,7 +319,7 @@ Import LinkPrivate::importFileOrDirectory(Document::Ptr doc, const ImportInfo &i if (importedDoc) import.object = importedDoc->bind()->rootObjectValue(); } - } else if (importInfo.type() == ImportInfo::QrcDirectoryImport){ + } else if (importInfo.type() == ImportType::QrcDirectory){ import.object = new ObjectValue(valueOwner); importLibrary(doc, path, &import); @@ -454,7 +454,7 @@ bool LinkPrivate::importLibrary(Document::Ptr doc, if (libraryInfo.pluginTypeInfoStatus() == LibraryInfo::NoTypeInfo) { ModelManagerInterface *modelManager = ModelManagerInterface::instance(); if (modelManager) { - if (importInfo.type() == ImportInfo::LibraryImport) { + if (importInfo.type() == ImportType::Library) { if (version.isValid()) { const QString uri = importInfo.name(); modelManager->loadPluginTypes( @@ -510,12 +510,12 @@ bool LinkPrivate::importLibrary(Document::Ptr doc, void LinkPrivate::error(const Document::Ptr &doc, const AST::SourceLocation &loc, const QString &message) { - appendDiagnostic(doc, DiagnosticMessage(DiagnosticMessage::Error, loc, message)); + appendDiagnostic(doc, DiagnosticMessage(Severity::Error, loc, message)); } void LinkPrivate::warning(const Document::Ptr &doc, const AST::SourceLocation &loc, const QString &message) { - appendDiagnostic(doc, DiagnosticMessage(DiagnosticMessage::Warning, loc, message)); + appendDiagnostic(doc, DiagnosticMessage(Severity::Warning, loc, message)); } void LinkPrivate::appendDiagnostic(const Document::Ptr &doc, const DiagnosticMessage &message) diff --git a/src/libs/qmljs/qmljsscopechain.cpp b/src/libs/qmljs/qmljsscopechain.cpp index 9ec4d0cf374..41cb3fb3567 100644 --- a/src/libs/qmljs/qmljsscopechain.cpp +++ b/src/libs/qmljs/qmljsscopechain.cpp @@ -258,7 +258,7 @@ void ScopeChain::update() const m_all += m_cppContextProperties; // the root scope in js files doesn't see instantiating components - if (m_document->language() != Document::JavaScriptLanguage || m_jsScopes.count() != 1) { + if (m_document->language() != Language::JavaScript || m_jsScopes.count() != 1) { if (m_qmlComponentScope) { foreach (const QmlComponentChain *parent, m_qmlComponentScope->instantiatingComponents()) collectScopes(parent, &m_all); @@ -312,8 +312,8 @@ void ScopeChain::initializeRootScope() if (!m_document->bind()->isJsLibrary()) { foreach (Document::Ptr otherDoc, snapshot) { foreach (const ImportInfo &import, otherDoc->bind()->imports()) { - if ((import.type() == ImportInfo::FileImport && m_document->fileName() == import.path()) - || (import.type() == ImportInfo::QrcFileImport + if ((import.type() == ImportType::File && m_document->fileName() == import.path()) + || (import.type() == ImportType::QrcFile && ModelManagerInterface::instance()->filesAtQrcPath(import.path()) .contains(m_document->fileName()))) { QmlComponentChain *component = new QmlComponentChain(otherDoc); diff --git a/src/libs/qmljs/qmljsstaticanalysismessage.cpp b/src/libs/qmljs/qmljsstaticanalysismessage.cpp index 6336bc21e29..57dc9b9ba70 100644 --- a/src/libs/qmljs/qmljsstaticanalysismessage.cpp +++ b/src/libs/qmljs/qmljsstaticanalysismessage.cpp @@ -28,6 +28,7 @@ ****************************************************************************/ #include "qmljsstaticanalysismessage.h" +#include "qmljsconstants.h" #include <utils/qtcassert.h> @@ -35,6 +36,7 @@ using namespace QmlJS; using namespace QmlJS::StaticAnalysis; +using namespace QmlJS::Severity; namespace { @@ -43,7 +45,7 @@ class StaticAnalysisMessages Q_DECLARE_TR_FUNCTIONS(QmlJS::StaticAnalysisMessages) public: - void newMsg(Type type, Severity severity, const QString &message, int placeholders = 0) + void newMsg(Type type, Enum severity, const QString &message, int placeholders = 0) { PrototypeMessageData prototype; prototype.type = type; @@ -152,7 +154,7 @@ StaticAnalysisMessages::StaticAnalysisMessages() tr("Unnecessary parentheses.")); newMsg(MaybeWarnEqualityTypeCoercion, MaybeWarning, tr("== and != may perform type coercion, use === or !== to avoid it.")); - newMsg(WarnConfusingExpressionStatement, Warning, + newMsg(WarnConfusingExpressionStatement, Error, tr("Expression statements should be assignments, calls or delete expressions only.")); newMsg(HintDeclarationsShouldBeAtStartOfFunction, Hint, tr("Place var declarations at the start of a function.")); @@ -168,17 +170,17 @@ StaticAnalysisMessages::StaticAnalysisMessages() tr("Prototype cycle, the last non-repeated component is '%1'."), 1); newMsg(ErrInvalidPropertyType, Error, tr("Invalid property type '%1'."), 1); - newMsg(WarnEqualityTypeCoercion, Warning, + newMsg(WarnEqualityTypeCoercion, Error, tr("== and != perform type coercion, use === or !== to avoid it.")); - newMsg(WarnExpectedNewWithUppercaseFunction, Warning, + newMsg(WarnExpectedNewWithUppercaseFunction, Error, tr("Calls of functions that start with an uppercase letter should use 'new'.")); - newMsg(WarnNewWithLowercaseFunction, Warning, + newMsg(WarnNewWithLowercaseFunction, Error, tr("Use 'new' only with functions that start with an uppercase letter.")); - newMsg(WarnNumberConstructor, Warning, + newMsg(WarnNumberConstructor, Error, msgInvalidConstructor("Function")); newMsg(HintBinaryOperatorSpacing, Hint, tr("Use spaces around binary operators.")); - newMsg(WarnUnintentinalEmptyBlock, Warning, + newMsg(WarnUnintentinalEmptyBlock, Error, tr("Unintentional empty block, use ({}) for empty object literal.")); newMsg(HintPreferNonVarPropertyType, Hint, tr("Use %1 instead of 'var' or 'variant' to improve performance."), 1); @@ -206,16 +208,16 @@ StaticAnalysisMessages::StaticAnalysisMessages() tr("Maximum string value length is %1."), 1); newMsg(ErrInvalidArrayValueLength, Error, tr("%1 elements expected in array value."), 1); - newMsg(WarnImperativeCodeNotEditableInVisualDesigner, Warning, + newMsg(WarnImperativeCodeNotEditableInVisualDesigner, Error, tr("Imperative code is not supported in the Qt Quick Designer.")); - newMsg(WarnUnsupportedTypeInVisualDesigner, Warning, + newMsg(WarnUnsupportedTypeInVisualDesigner, Error, tr("This type is not supported in the Qt Quick Designer.")); - newMsg(WarnReferenceToParentItemNotSupportedByVisualDesigner, Warning, + newMsg(WarnReferenceToParentItemNotSupportedByVisualDesigner, Error, tr("Reference to parent item cannot be resolved correctly by the Qt Quick Designer.")); - newMsg(WarnUndefinedValueForVisualDesigner, Warning, + newMsg(WarnUndefinedValueForVisualDesigner, Error, tr("This visual property binding cannot be evaluated in the local context " "and might not show up in Qt Quick Designer as expected.")); - newMsg(WarnStatesOnlyInRootItemForVisualDesigner, Warning, + newMsg(WarnStatesOnlyInRootItemForVisualDesigner, Error, tr("Qt Quick Designer only supports states in the root item.")); } @@ -271,10 +273,10 @@ DiagnosticMessage Message::toDiagnosticMessage() const case Hint: case MaybeWarning: case Warning: - diagnostic.kind = DiagnosticMessage::Warning; + diagnostic.kind = Warning; break; default: - diagnostic.kind = DiagnosticMessage::Error; + diagnostic.kind = Error; break; } diagnostic.loc = location; diff --git a/src/libs/qmljs/qmljsstaticanalysismessage.h b/src/libs/qmljs/qmljsstaticanalysismessage.h index 3cf29d7bba0..4e1ca5afc60 100644 --- a/src/libs/qmljs/qmljsstaticanalysismessage.h +++ b/src/libs/qmljs/qmljsstaticanalysismessage.h @@ -31,6 +31,7 @@ #define QMLJS_STATICANALYSIS_QMLJSSTATICANALYSISMESSAGE_H #include "qmljs_global.h" +#include "qmljsconstants.h" #include "parser/qmljsengine_p.h" #include <QRegExp> @@ -40,15 +41,6 @@ namespace QmlJS { namespace StaticAnalysis { -enum Severity -{ - Hint, // cosmetic or convention - MaybeWarning, // possibly a warning, insufficient information - Warning, // could cause unintended behavior - MaybeError, // possibly an error, insufficient information - Error // definitely an error -}; - enum Type { // Changing the numbers can break user code. @@ -134,7 +126,7 @@ enum Type class QMLJS_EXPORT PrototypeMessageData { public: Type type; - Severity severity; + Severity::Enum severity; QString message; int placeholders; }; @@ -159,7 +151,7 @@ public: AST::SourceLocation location; QString message; Type type; - Severity severity; + Severity::Enum severity; static const PrototypeMessageData prototypeForMessageType(Type type); }; diff --git a/src/libs/qmljs/qmljsutils.cpp b/src/libs/qmljs/qmljsutils.cpp index 28363502912..764a5c0f486 100644 --- a/src/libs/qmljs/qmljsutils.cpp +++ b/src/libs/qmljs/qmljsutils.cpp @@ -194,7 +194,7 @@ UiQualifiedId *QmlJS::qualifiedTypeNameId(Node *node) DiagnosticMessage QmlJS::errorMessage(const AST::SourceLocation &loc, const QString &message) { - return DiagnosticMessage(DiagnosticMessage::Error, loc, message); + return DiagnosticMessage(Severity::Error, loc, message); } bool QmlJS::isValidBuiltinPropertyType(const QString &name) diff --git a/src/libs/qmljs/qmljsutils.h b/src/libs/qmljs/qmljsutils.h index 30ec1ba69e7..5ac47f72077 100644 --- a/src/libs/qmljs/qmljsutils.h +++ b/src/libs/qmljs/qmljsutils.h @@ -67,7 +67,7 @@ AST::SourceLocation locationFromRange(const T *node) template <class T> DiagnosticMessage errorMessage(const T *node, const QString &message) { - return DiagnosticMessage(DiagnosticMessage::Error, + return DiagnosticMessage(Severity::Error, locationFromRange(node), message); } |