forked from qt-creator/qt-creator
qmljs: generalize language treatement
* better support qbs and similar non QtQuick qml languages * begin to clean and migrate things from ModelManager to ModelManagerInterface Change-Id: Ifa39dc1e4c568e9e21307f4913dcb5989e80420f Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com>
This commit is contained in:
@@ -137,6 +137,34 @@ bool Document::isQmlLikeOrJsLanguage(Language::Enum language)
|
||||
}
|
||||
}
|
||||
|
||||
QList<Language::Enum> Document::companionLanguages(Language::Enum language)
|
||||
{
|
||||
QList<Language::Enum> langs;
|
||||
langs << language;
|
||||
switch (language) {
|
||||
case Language::JavaScript:
|
||||
case Language::Json:
|
||||
case Language::QmlProject:
|
||||
case Language::QmlTypeInfo:
|
||||
break;
|
||||
case Language::QmlQbs:
|
||||
langs << Language::JavaScript;
|
||||
break;
|
||||
case Language::Qml:
|
||||
langs << Language::QmlQtQuick1 << Language::QmlQtQuick2 << Language::JavaScript;
|
||||
break;
|
||||
case Language::QmlQtQuick1:
|
||||
case Language::QmlQtQuick2:
|
||||
langs << Language::Qml << Language::JavaScript;
|
||||
break;
|
||||
case Language::Unknown:
|
||||
langs << Language::JavaScript << Language::Json << Language::QmlProject << Language:: QmlQbs
|
||||
<< Language::QmlTypeInfo << Language::QmlQtQuick1 << Language::QmlQtQuick2 ;
|
||||
break;
|
||||
}
|
||||
return langs;
|
||||
}
|
||||
|
||||
Document::Document(const QString &fileName, Language::Enum language)
|
||||
: _engine(0)
|
||||
, _ast(0)
|
||||
@@ -177,19 +205,6 @@ Document::MutablePtr Document::create(const QString &fileName, Language::Enum la
|
||||
return doc;
|
||||
}
|
||||
|
||||
Language::Enum Document::guessLanguageFromSuffix(const QString &fileName)
|
||||
{
|
||||
if (fileName.endsWith(QLatin1String(".qml"), Qt::CaseInsensitive))
|
||||
return Language::Qml;
|
||||
if (fileName.endsWith(QLatin1String(".qbs"), Qt::CaseInsensitive))
|
||||
return Language::QmlQbs;
|
||||
if (fileName.endsWith(QLatin1String(".js"), Qt::CaseInsensitive))
|
||||
return Language::JavaScript;
|
||||
if (fileName.endsWith(QLatin1String(".json"), Qt::CaseInsensitive))
|
||||
return Language::Json;
|
||||
return Language::Unknown;
|
||||
}
|
||||
|
||||
Document::Ptr Document::ptr() const
|
||||
{
|
||||
return _ptr.toStrongRef();
|
||||
|
||||
@@ -56,6 +56,7 @@ public:
|
||||
static bool isQmlLikeLanguage(Language::Enum languge);
|
||||
static bool isFullySupportedLanguage(Language::Enum language);
|
||||
static bool isQmlLikeOrJsLanguage(Language::Enum language);
|
||||
static QList<Language::Enum> companionLanguages(Language::Enum language);
|
||||
protected:
|
||||
Document(const QString &fileName, Language::Enum language);
|
||||
|
||||
@@ -63,7 +64,6 @@ public:
|
||||
~Document();
|
||||
|
||||
static MutablePtr create(const QString &fileName, Language::Enum language);
|
||||
static Language::Enum guessLanguageFromSuffix(const QString &fileName);
|
||||
|
||||
Document::Ptr ptr() const;
|
||||
|
||||
|
||||
@@ -330,7 +330,7 @@ Import LinkPrivate::importFileOrDirectory(Document::Ptr doc, const ImportInfo &i
|
||||
->filesInQrcPath(path));
|
||||
while (iter.hasNext()) {
|
||||
iter.next();
|
||||
if (Document::isQmlLikeLanguage(Document::guessLanguageFromSuffix(iter.key()))) {
|
||||
if (Document::isQmlLikeLanguage(ModelManagerInterface::guessLanguageOfFile(iter.key()))) {
|
||||
Document::Ptr importedDoc = snapshot.document(iter.value().at(0));
|
||||
if (importedDoc && importedDoc->bind()->rootObjectValue()) {
|
||||
const QString targetName = QFileInfo(iter.key()).baseName();
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
|
||||
#include "qmljsmodelmanagerinterface.h"
|
||||
|
||||
#include <QFileInfo>
|
||||
|
||||
using namespace QmlJS;
|
||||
|
||||
/*!
|
||||
@@ -65,8 +67,54 @@ ModelManagerInterface::~ModelManagerInterface()
|
||||
g_instance = 0;
|
||||
}
|
||||
|
||||
static QHash<QString, Language::Enum> defaultLanguageMapping()
|
||||
{
|
||||
QHash<QString, Language::Enum> res;
|
||||
res[QLatin1String("js")] = Language::JavaScript;
|
||||
res[QLatin1String("qml")] = Language::Qml;
|
||||
res[QLatin1String("qmltypes")] = Language::QmlTypeInfo;
|
||||
res[QLatin1String("qmlproject")] = Language::QmlProject;
|
||||
res[QLatin1String("json")] = Language::Json;
|
||||
res[QLatin1String("qbs")] = Language::QmlQbs;
|
||||
return res;
|
||||
}
|
||||
|
||||
Language::Enum ModelManagerInterface::guessLanguageOfFile(const QString &fileName)
|
||||
{
|
||||
QHash<QString, Language::Enum> lMapping;
|
||||
if (instance())
|
||||
lMapping = instance()->languageForSuffix();
|
||||
else
|
||||
lMapping = defaultLanguageMapping();
|
||||
const QFileInfo info(fileName);
|
||||
const QString fileSuffix = info.suffix();
|
||||
return lMapping.value(fileSuffix, Language::Unknown);
|
||||
}
|
||||
|
||||
QStringList ModelManagerInterface::globPatternsForLanguages(const QList<Language::Enum> languages)
|
||||
{
|
||||
QHash<QString, Language::Enum> lMapping;
|
||||
if (instance())
|
||||
lMapping = instance()->languageForSuffix();
|
||||
else
|
||||
lMapping = defaultLanguageMapping();
|
||||
QStringList patterns;
|
||||
QHashIterator<QString,Language::Enum> i(lMapping);
|
||||
while (i.hasNext()) {
|
||||
i.next();
|
||||
if (languages.contains(i.value()))
|
||||
patterns << QLatin1String("*.") + i.key();
|
||||
}
|
||||
return patterns;
|
||||
}
|
||||
|
||||
ModelManagerInterface *ModelManagerInterface::instance()
|
||||
{
|
||||
return g_instance;
|
||||
}
|
||||
|
||||
QHash<QString, Language::Enum> ModelManagerInterface::languageForSuffix() const
|
||||
{
|
||||
return defaultLanguageMapping();
|
||||
}
|
||||
|
||||
|
||||
@@ -139,6 +139,8 @@ public:
|
||||
ModelManagerInterface(QObject *parent = 0);
|
||||
virtual ~ModelManagerInterface();
|
||||
|
||||
static Language::Enum guessLanguageOfFile(const QString &fileName);
|
||||
static QStringList globPatternsForLanguages(const QList<Language::Enum> languages);
|
||||
static ModelManagerInterface *instance();
|
||||
|
||||
virtual WorkingCopy workingCopy() const = 0;
|
||||
@@ -184,7 +186,6 @@ public:
|
||||
|
||||
// Blocks until all parsing threads are done. Used for testing.
|
||||
virtual void joinAllThreads() = 0;
|
||||
|
||||
public slots:
|
||||
virtual void resetCodeModel() = 0;
|
||||
|
||||
@@ -194,6 +195,8 @@ signals:
|
||||
void aboutToRemoveFiles(const QStringList &files);
|
||||
void libraryInfoUpdated(const QString &path, const QmlJS::LibraryInfo &info);
|
||||
void projectInfoUpdated(const ProjectInfo &pinfo);
|
||||
protected:
|
||||
virtual QHash<QString,Language::Enum> languageForSuffix() const;
|
||||
};
|
||||
|
||||
} // namespace QmlJS
|
||||
|
||||
Reference in New Issue
Block a user