summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFawzi Mohamed <fawzi.mohamed@digia.com>2012-12-06 12:11:12 +0100
committerFawzi Mohamed <fawzi.mohamed@digia.com>2013-01-31 11:50:35 +0100
commit174baf5ea1b47b44471f737dd29cd758763e2c1a (patch)
tree9bb2b807c8c066d0747ba05bcb65ca2424e3eb11
parenta839a46d4f822e0a77c33a80612b6fcd484f4808 (diff)
downloadqt-creator-174baf5ea1b47b44471f737dd29cd758763e2c1a.tar.gz
qmljs: differnt language constants for the different qml flavors
Added separated qbs, qmltypes, QtQuick1, and QtQuick2 and "generic" Qml languages. Cleaned up the mime types a bit, preparing for registered mime types. Change-Id: I0e484c93e003176cd659acc546baa6d024defa19 Reviewed-by: Tobias Hunger <tobias.hunger@digia.com> Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
-rw-r--r--src/libs/qmljs/qmljsdocument.cpp23
-rw-r--r--src/libs/qmljs/qmljsdocument.h15
-rw-r--r--src/plugins/cpaster/protocol.cpp2
-rw-r--r--src/plugins/projectexplorer/projectexplorerconstants.h2
-rw-r--r--src/plugins/projectexplorer/projectnodes.cpp3
-rw-r--r--src/plugins/qmljseditor/QmlJSEditor.mimetypes.xml18
-rw-r--r--src/plugins/qmljseditor/qmljseditorfactory.cpp3
-rw-r--r--src/plugins/qmljstools/qmljsmodelmanager.cpp22
-rw-r--r--src/plugins/qmljstools/qmljstoolsconstants.h5
-rw-r--r--src/plugins/qmljstools/qmljstoolssettings.cpp9
-rw-r--r--src/plugins/qmlprofiler/qmlprofilerdetailsrewriter.cpp2
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectconstants.h4
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectfile.cpp2
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectmanager.cpp2
14 files changed, 91 insertions, 21 deletions
diff --git a/src/libs/qmljs/qmljsdocument.cpp b/src/libs/qmljs/qmljsdocument.cpp
index a8698aaf1f..26e651e064 100644
--- a/src/libs/qmljs/qmljsdocument.cpp
+++ b/src/libs/qmljs/qmljsdocument.cpp
@@ -83,6 +83,21 @@ using namespace QmlJS::AST;
*/
+bool Document::isQmlLikeLanguage(Document::Language language)
+{
+ switch (language) {
+ case QmlLanguage:
+ case QmlQtQuick1Language:
+ case QmlQtQuick2Language:
+ case QmlQbsLanguage:
+ case QmlProjectLanguage:
+ case QmlTypeInfoLanguage:
+ return true;
+ default:
+ return false;
+ }
+}
+
Document::Document(const QString &fileName, Language language)
: _engine(0)
, _ast(0)
@@ -95,7 +110,7 @@ Document::Document(const QString &fileName, Language language)
QFileInfo fileInfo(fileName);
_path = QDir::cleanPath(fileInfo.absolutePath());
- if (language == QmlLanguage) {
+ if (isQmlLikeLanguage(language)) {
_componentName = fileInfo.baseName();
if (! _componentName.isEmpty()) {
@@ -127,6 +142,8 @@ Document::Language Document::guessLanguageFromSuffix(const QString &fileName)
{
if (fileName.endsWith(QLatin1String(".qml"), Qt::CaseInsensitive))
return QmlLanguage;
+ if (fileName.endsWith(QLatin1String(".qbs"), Qt::CaseInsensitive))
+ return QmlQbsLanguage;
if (fileName.endsWith(QLatin1String(".js"), Qt::CaseInsensitive))
return JavaScriptLanguage;
if (fileName.endsWith(QLatin1String(".json"), Qt::CaseInsensitive))
@@ -141,7 +158,7 @@ Document::Ptr Document::ptr() const
bool Document::isQmlDocument() const
{
- return _language == QmlLanguage;
+ return isQmlLikeLanguage(_language);
}
Document::Language Document::language() const
@@ -259,7 +276,7 @@ bool Document::parse_helper(int startToken)
Parser parser(_engine);
QString source = _source;
- lexer.setCode(source, /*line = */ 1, /*qmlMode = */_language == QmlLanguage);
+ lexer.setCode(source, /*line = */ 1, /*qmlMode = */isQmlLikeLanguage(_language));
CollectDirectives collectDirectives(path());
_engine->setDirectives(&collectDirectives);
diff --git a/src/libs/qmljs/qmljsdocument.h b/src/libs/qmljs/qmljsdocument.h
index c852a4ad11..d8798aee4d 100644
--- a/src/libs/qmljs/qmljsdocument.h
+++ b/src/libs/qmljs/qmljsdocument.h
@@ -51,15 +51,20 @@ public:
typedef QSharedPointer<const Document> Ptr;
typedef QSharedPointer<Document> MutablePtr;
- // used in a 3-bit bitfield
enum Language
{
- QmlLanguage = 0,
+ UnknownLanguage = 0,
JavaScriptLanguage = 1,
JsonLanguage = 2,
- UnknownLanguage = 3
+ QmlLanguage = 3,
+ QmlQtQuick1Language = 4,
+ QmlQtQuick2Language = 5,
+ QmlQbsLanguage = 6,
+ QmlProjectLanguage = 7,
+ QmlTypeInfoLanguage = 8
};
+ static bool isQmlLikeLanguage(Language languge);
protected:
Document(const QString &fileName, Language language);
@@ -117,8 +122,8 @@ private:
QString _source;
QWeakPointer<Document> _ptr;
int _editorRevision;
- Language _language : 3;
- bool _parsedCorrectly : 1;
+ Language _language;
+ bool _parsedCorrectly;
// for documentFromSource
friend class Snapshot;
diff --git a/src/plugins/cpaster/protocol.cpp b/src/plugins/cpaster/protocol.cpp
index f092ef09d1..7a8bcdc2b3 100644
--- a/src/plugins/cpaster/protocol.cpp
+++ b/src/plugins/cpaster/protocol.cpp
@@ -96,6 +96,8 @@ Protocol::ContentType Protocol::contentType(const QString &mt)
|| mt == QLatin1String(CppTools::Constants::OBJECTIVE_CPP_SOURCE_MIMETYPE))
return Cpp;
if (mt == QLatin1String(QmlJSTools::Constants::QML_MIMETYPE)
+ || mt == QLatin1String(QmlJSTools::Constants::QMLPROJECT_MIMETYPE)
+ || mt == QLatin1String(QmlJSTools::Constants::QBS_MIMETYPE)
|| mt == QLatin1String(QmlJSTools::Constants::JS_MIMETYPE)
|| mt == QLatin1String(QmlJSTools::Constants::JSON_MIMETYPE))
return JavaScript;
diff --git a/src/plugins/projectexplorer/projectexplorerconstants.h b/src/plugins/projectexplorer/projectexplorerconstants.h
index 74c33d738e..2964c6b137 100644
--- a/src/plugins/projectexplorer/projectexplorerconstants.h
+++ b/src/plugins/projectexplorer/projectexplorerconstants.h
@@ -170,7 +170,7 @@ const char C_HEADER_MIMETYPE[] = "text/x-chdr";
const char CPP_SOURCE_MIMETYPE[] = "text/x-c++src";
const char CPP_HEADER_MIMETYPE[] = "text/x-c++hdr";
const char FORM_MIMETYPE[] = "application/x-designer";
-const char QML_MIMETYPE[] = "application/x-qml";
+const char QML_MIMETYPE[] = "application/x-qml"; // separate def also in qmljstoolsconstants.h
const char RESOURCE_MIMETYPE[] = "application/vnd.nokia.xml.qt.resource";
// Settings page
diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp
index 696ca553e8..73f1f4fce8 100644
--- a/src/plugins/projectexplorer/projectnodes.cpp
+++ b/src/plugins/projectexplorer/projectnodes.cpp
@@ -796,7 +796,8 @@ FileType typeForFileName(const Core::MimeDatabase *db, const QFileInfo &file)
return ResourceType;
if (typeName == QLatin1String(Constants::FORM_MIMETYPE))
return FormType;
- if (typeName == QLatin1String(Constants::QML_MIMETYPE))
+ if (mt.subClassesOf().contains(QLatin1String(Constants::QML_MIMETYPE))
+ || typeName == QLatin1String(Constants::QML_MIMETYPE))
return QMLType;
return UnknownFileType;
}
diff --git a/src/plugins/qmljseditor/QmlJSEditor.mimetypes.xml b/src/plugins/qmljseditor/QmlJSEditor.mimetypes.xml
index 6c17c14689..a1bdef531e 100644
--- a/src/plugins/qmljseditor/QmlJSEditor.mimetypes.xml
+++ b/src/plugins/qmljseditor/QmlJSEditor.mimetypes.xml
@@ -5,10 +5,24 @@
<sub-class-of type="text/plain"/>
<comment>QML file</comment>
<glob pattern="*.qml"/>
+ </mime-type>
+ <mime-type type="application/x-qt.qbs+qml">
+ <alias type="text/x-qt.qbs+qml"/>
+ <sub-class-of type="application/x-qml"/>
+ <comment>Qt Build Suite file</comment>
+ <glob pattern="*.qbs"/>
+ </mime-type>
+ <mime-type type="application/x-qmlproject">
+ <alias type="text/x-qmlproject"/>
+ <sub-class-of type="application/x-qml"/>
+ <comment>Qt Creator Qt UI project file</comment>
<glob pattern="*.qmlproject"/>
+ </mime-type>
+ <mime-type type="application/x-qt.meta-info+qml">
+ <alias type="text/x-qt.meta-info+qml"/>
+ <sub-class-of type="application/x-qml"/>
+ <comment>QML file</comment>
<glob pattern="*.qmltypes"/>
- <glob pattern="*.qbs"/>
- <glob pattern="*.qbp"/>
</mime-type>
<mime-type type="application/javascript">
<alias type="application/x-javascript"/>
diff --git a/src/plugins/qmljseditor/qmljseditorfactory.cpp b/src/plugins/qmljseditor/qmljseditorfactory.cpp
index 17a9841b5f..eecf99cfcd 100644
--- a/src/plugins/qmljseditor/qmljseditorfactory.cpp
+++ b/src/plugins/qmljseditor/qmljseditorfactory.cpp
@@ -59,6 +59,9 @@ QmlJSEditorFactory::QmlJSEditorFactory(QObject *parent)
{
m_mimeTypes
<< QLatin1String(QmlJSTools::Constants::QML_MIMETYPE)
+ << QLatin1String(QmlJSTools::Constants::QMLPROJECT_MIMETYPE)
+ << QLatin1String(QmlJSTools::Constants::QBS_MIMETYPE)
+ << QLatin1String(QmlJSTools::Constants::QMLTYPES_MIMETYPE)
<< QLatin1String(QmlJSTools::Constants::JS_MIMETYPE)
<< QLatin1String(QmlJSTools::Constants::JSON_MIMETYPE)
;
diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp
index 9cfb1073ea..b6a71e3310 100644
--- a/src/plugins/qmljstools/qmljsmodelmanager.cpp
+++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp
@@ -70,27 +70,41 @@ using namespace QmlJSTools::Internal;
static QStringList environmentImportPaths();
+static void mergeSuffixes(QStringList &l1, const QStringList &l2)
+{
+ if (!l2.isEmpty())
+ l1 = l2;
+}
+
QmlJS::Document::Language QmlJSTools::languageOfFile(const QString &fileName)
{
QStringList jsSuffixes(QLatin1String("js"));
QStringList qmlSuffixes(QLatin1String("qml"));
+ QStringList qmlProjectSuffixes(QLatin1String("qmlproject"));
QStringList jsonSuffixes(QLatin1String("json"));
+ QStringList qbsSuffixes(QLatin1String("qbs"));
if (Core::ICore::instance()) {
Core::MimeDatabase *db = Core::ICore::mimeDatabase();
Core::MimeType jsSourceTy = db->findByType(QLatin1String(Constants::JS_MIMETYPE));
- jsSuffixes = jsSourceTy.suffixes();
+ mergeSuffixes(jsSuffixes, jsSourceTy.suffixes());
Core::MimeType qmlSourceTy = db->findByType(QLatin1String(Constants::QML_MIMETYPE));
- qmlSuffixes = qmlSourceTy.suffixes();
+ mergeSuffixes(qmlSuffixes, qmlSourceTy.suffixes());
+ Core::MimeType qbsSourceTy = db->findByType(QLatin1String(Constants::QBS_MIMETYPE));
+ mergeSuffixes(qbsSuffixes, qbsSourceTy.suffixes());
+ Core::MimeType qmlProjectSourceTy = db->findByType(QLatin1String(Constants::QMLPROJECT_MIMETYPE));
+ mergeSuffixes(qbsSuffixes, qmlProjectSourceTy.suffixes());
Core::MimeType jsonSourceTy = db->findByType(QLatin1String(Constants::JSON_MIMETYPE));
- jsonSuffixes = jsonSourceTy.suffixes();
+ mergeSuffixes(jsonSuffixes, jsonSourceTy.suffixes());
}
const QFileInfo info(fileName);
const QString fileSuffix = info.suffix();
if (jsSuffixes.contains(fileSuffix))
return QmlJS::Document::JavaScriptLanguage;
- if (qmlSuffixes.contains(fileSuffix))
+ if (qbsSuffixes.contains(fileSuffix))
+ return QmlJS::Document::QmlQbsLanguage;
+ if (qmlSuffixes.contains(fileSuffix) || qmlProjectSuffixes.contains(fileSuffix))
return QmlJS::Document::QmlLanguage;
if (jsonSuffixes.contains(fileSuffix))
return QmlJS::Document::JsonLanguage;
diff --git a/src/plugins/qmljstools/qmljstoolsconstants.h b/src/plugins/qmljstools/qmljstoolsconstants.h
index 4fb73ae2f7..dc7c730242 100644
--- a/src/plugins/qmljstools/qmljstoolsconstants.h
+++ b/src/plugins/qmljstools/qmljstoolsconstants.h
@@ -35,7 +35,10 @@
namespace QmlJSTools {
namespace Constants {
-const char QML_MIMETYPE[] = "application/x-qml";
+const char QML_MIMETYPE[] = "application/x-qml"; // separate def also in projectexplorerconstants.h
+const char QBS_MIMETYPE[] = "application/x-qt.qbs+qml";
+const char QMLPROJECT_MIMETYPE[] = "application/x-qmlproject";
+const char QMLTYPES_MIMETYPE[] = "application/x-qt.meta-info+qml";
const char JS_MIMETYPE[] = "application/javascript";
const char JSON_MIMETYPE[] = "application/json";
diff --git a/src/plugins/qmljstools/qmljstoolssettings.cpp b/src/plugins/qmljstools/qmljstoolssettings.cpp
index be35adb071..5291384194 100644
--- a/src/plugins/qmljstools/qmljstoolssettings.cpp
+++ b/src/plugins/qmljstools/qmljstoolssettings.cpp
@@ -141,6 +141,15 @@ QmlJSToolsSettings::QmlJSToolsSettings(QObject *parent)
QLatin1String(Constants::QML_MIMETYPE),
Constants::QML_JS_SETTINGS_ID);
textEditorSettings->registerMimeTypeForLanguageId(
+ QLatin1String(Constants::QBS_MIMETYPE),
+ Constants::QML_JS_SETTINGS_ID);
+ textEditorSettings->registerMimeTypeForLanguageId(
+ QLatin1String(Constants::QMLPROJECT_MIMETYPE),
+ Constants::QML_JS_SETTINGS_ID);
+ textEditorSettings->registerMimeTypeForLanguageId(
+ QLatin1String(Constants::QMLTYPES_MIMETYPE),
+ Constants::QML_JS_SETTINGS_ID);
+ textEditorSettings->registerMimeTypeForLanguageId(
QLatin1String(Constants::JS_MIMETYPE),
Constants::QML_JS_SETTINGS_ID);
textEditorSettings->registerMimeTypeForLanguageId(
diff --git a/src/plugins/qmlprofiler/qmlprofilerdetailsrewriter.cpp b/src/plugins/qmlprofiler/qmlprofilerdetailsrewriter.cpp
index 22c6eb72c1..9d142d0fe5 100644
--- a/src/plugins/qmlprofiler/qmlprofilerdetailsrewriter.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilerdetailsrewriter.cpp
@@ -129,7 +129,7 @@ void QmlProfilerDetailsRewriter::requestDetailsForLocation(int type,
QFileInfo fileInfo(localFile);
if (!fileInfo.exists() || !fileInfo.isReadable())
return;
- if (QmlJSTools::languageOfFile(localFile) != QmlJS::Document::QmlLanguage)
+ if (!QmlJS::Document::isQmlLikeLanguage(QmlJSTools::languageOfFile(localFile)))
return;
PendingEvent ev = {location, localFile, type};
diff --git a/src/plugins/qmlprojectmanager/qmlprojectconstants.h b/src/plugins/qmlprojectmanager/qmlprojectconstants.h
index c0803d5d53..db9e9bc76d 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectconstants.h
+++ b/src/plugins/qmlprojectmanager/qmlprojectconstants.h
@@ -30,12 +30,14 @@
#ifndef QMLPROJECTCONSTANTS_H
#define QMLPROJECTCONSTANTS_H
+#include <qmljstools/qmljstoolsconstants.h>
+
namespace QmlProjectManager {
namespace Constants {
const char *const PROJECTCONTEXT = "QmlProject.ProjectContext";
const char *const LANG_QML = "QML";
-const char *const QMLMIMETYPE = "application/x-qmlproject";
+const char *const QMLPROJECT_MIMETYPE = QmlJSTools::Constants::QMLPROJECT_MIMETYPE;
} // namespace Constants
} // namespace QmlProjectManager
diff --git a/src/plugins/qmlprojectmanager/qmlprojectfile.cpp b/src/plugins/qmlprojectmanager/qmlprojectfile.cpp
index ff09f1fba4..0640b2fa50 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectfile.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectfile.cpp
@@ -77,7 +77,7 @@ QString QmlProjectFile::suggestedFileName() const
QString QmlProjectFile::mimeType() const
{
- return QLatin1String(Constants::QMLMIMETYPE);
+ return QLatin1String(Constants::QMLPROJECT_MIMETYPE);
}
bool QmlProjectFile::isModified() const
diff --git a/src/plugins/qmlprojectmanager/qmlprojectmanager.cpp b/src/plugins/qmlprojectmanager/qmlprojectmanager.cpp
index e73fbb0a75..fe83c3079d 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectmanager.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectmanager.cpp
@@ -47,7 +47,7 @@ Manager::Manager()
}
QString Manager::mimeType() const
-{ return QLatin1String(Constants::QMLMIMETYPE); }
+{ return QLatin1String(Constants::QMLPROJECT_MIMETYPE); }
ProjectExplorer::Project *Manager::openProject(const QString &fileName, QString *errorString)
{