summaryrefslogtreecommitdiff
path: root/src/libs/qmljs/qmljsdocument.cpp
diff options
context:
space:
mode:
authorChristian Kamm <christian.d.kamm@nokia.com>2011-09-27 15:12:22 +0200
committerChristian Kamm <christian.d.kamm@nokia.com>2011-09-28 08:52:56 +0200
commit82cbd0a9740010021853d1c954d788131861fb04 (patch)
tree939dffe4b442fbe54f072c74e38309893da0ee35 /src/libs/qmljs/qmljsdocument.cpp
parentfaa792f3cdf7141004ea83cfc1406fc678520b58 (diff)
downloadqt-creator-82cbd0a9740010021853d1c954d788131861fb04.tar.gz
QmlJS: Support .import directives in js files.
* Allow .import... * Fix parsing of JS files when using Lexer::scanDirectives() * Clean up ImportInfo construction. * Rename ImportInfo::id to ImportInfo::as. Change-Id: I888da248f06dc6184db99aa74c3b50d7f2f5e491 Reviewed-on: http://codereview.qt-project.org/5625 Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
Diffstat (limited to 'src/libs/qmljs/qmljsdocument.cpp')
-rw-r--r--src/libs/qmljs/qmljsdocument.cpp38
1 files changed, 32 insertions, 6 deletions
diff --git a/src/libs/qmljs/qmljsdocument.cpp b/src/libs/qmljs/qmljsdocument.cpp
index 7455d421b7..843273ec91 100644
--- a/src/libs/qmljs/qmljsdocument.cpp
+++ b/src/libs/qmljs/qmljsdocument.cpp
@@ -211,6 +211,35 @@ QString Document::componentName() const
return _componentName;
}
+namespace {
+class CollectDirectives : public Directives
+{
+ QString documentPath;
+public:
+ CollectDirectives(const QString &documentPath)
+ : documentPath(documentPath)
+ , isLibrary(false)
+
+ {}
+
+ virtual void pragmaLibrary() { isLibrary = true; }
+ virtual void importFile(const QString &jsfile, const QString &module)
+ {
+ imports += ImportInfo::pathImport(
+ documentPath, jsfile, LanguageUtils::ComponentVersion(), module);
+ }
+
+ virtual void importModule(const QString &uri, const QString &version, const QString &module)
+ {
+ imports += ImportInfo::moduleImport(uri, LanguageUtils::ComponentVersion(version), module);
+ }
+
+ bool isLibrary;
+ QList<ImportInfo> imports;
+};
+
+} // anonymous namespace
+
bool Document::parse_helper(int startToken)
{
Q_ASSERT(! _engine);
@@ -225,11 +254,8 @@ bool Document::parse_helper(int startToken)
QString source = _source;
lexer.setCode(source, /*line = */ 1, /*qmlMode = */_language == QmlLanguage);
- if (startToken == QmlJSGrammar::T_FEED_JS_PROGRAM) {
- // ### use directives
- Directives directives;
- lexer.scanDirectives(&directives);
- }
+ CollectDirectives collectDirectives(path());
+ _engine->setDirectives(&collectDirectives);
switch (startToken) {
case QmlJSGrammar::T_FEED_UI_PROGRAM:
@@ -248,7 +274,7 @@ bool Document::parse_helper(int startToken)
_ast = parser.rootNode();
_diagnosticMessages = parser.diagnosticMessages();
- _bind = new Bind(this, &_diagnosticMessages);
+ _bind = new Bind(this, &_diagnosticMessages, collectDirectives.isLibrary, collectDirectives.imports);
return _parsedCorrectly;
}