forked from qt-creator/qt-creator
QmlDesigner: All importing a shared folder that is not a subfolder
Fixes: QDS-12228 Change-Id: I60b461b6e46739a93e21adb8d864681877610de3 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -781,13 +781,14 @@ bool skipModule(QStringView moduleName)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void collectPossibleFileImports(const QString &checkPath,
|
void collectPossibleFileImports(const QString &checkPath,
|
||||||
const QString &projectFolder,
|
const QDir &docDir,
|
||||||
QSet<QString> usedImportsSet,
|
QSet<QString> usedImportsSet,
|
||||||
QList<QmlDesigner::Import> &possibleImports)
|
QList<QmlDesigner::Import> &possibleImports)
|
||||||
{
|
{
|
||||||
const QStringList qmlList("*.qml");
|
const QStringList qmlList("*.qml");
|
||||||
const QStringList qmldirList("qmldir");
|
const QStringList qmldirList("qmldir");
|
||||||
const QChar delimeter('/');
|
const QChar delimeter('/');
|
||||||
|
const QString upDir("../");
|
||||||
|
|
||||||
if (QFileInfo(checkPath).isRoot())
|
if (QFileInfo(checkPath).isRoot())
|
||||||
return;
|
return;
|
||||||
@@ -800,30 +801,21 @@ void collectPossibleFileImports(const QString &checkPath,
|
|||||||
if (!dir.entryInfoList(qmlList, QDir::Files).isEmpty()
|
if (!dir.entryInfoList(qmlList, QDir::Files).isEmpty()
|
||||||
&& dir.entryInfoList(qmldirList, QDir::Files).isEmpty()
|
&& dir.entryInfoList(qmldirList, QDir::Files).isEmpty()
|
||||||
&& !usedImportsSet.contains(dirPath)) {
|
&& !usedImportsSet.contains(dirPath)) {
|
||||||
const QString importName = dir.path().mid(projectFolder.size() + 1);
|
const QString importName = docDir.relativeFilePath(dirPath);
|
||||||
|
|
||||||
|
// Omit all imports that would be just "../", "../../" etc. without additional subfolder,
|
||||||
|
// as we don't want to encourage bad design. "../MySharedComps" is a legitimate
|
||||||
|
// use, though.
|
||||||
|
if (importName.startsWith(upDir) && importName.lastIndexOf(upDir) == importName.size() - 3)
|
||||||
|
continue;
|
||||||
|
|
||||||
QmlDesigner::Import import = QmlDesigner::Import::createFileImport(importName);
|
QmlDesigner::Import import = QmlDesigner::Import::createFileImport(importName);
|
||||||
possibleImports.append(import);
|
possibleImports.append(import);
|
||||||
}
|
}
|
||||||
collectPossibleFileImports(dirPath, projectFolder, usedImportsSet, possibleImports);
|
collectPossibleFileImports(dirPath, docDir, usedImportsSet, possibleImports);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<QmlDesigner::Import> generatePossibleFileImports(const QString &path,
|
|
||||||
const QList<QmlJS::Import> &usedImports)
|
|
||||||
{
|
|
||||||
QSet<QString> usedImportsSet;
|
|
||||||
for (const QmlJS::Import &i : usedImports)
|
|
||||||
usedImportsSet.insert(i.info.path());
|
|
||||||
|
|
||||||
QList<QmlDesigner::Import> possibleImports;
|
|
||||||
|
|
||||||
QStringList fileImportPaths;
|
|
||||||
|
|
||||||
collectPossibleFileImports(path, path, usedImportsSet, possibleImports);
|
|
||||||
|
|
||||||
return possibleImports;
|
|
||||||
}
|
|
||||||
|
|
||||||
QmlDesigner::Imports createQt5Modules()
|
QmlDesigner::Imports createQt5Modules()
|
||||||
{
|
{
|
||||||
return {QmlDesigner::Import::createLibraryImport("QtQuick", "2.15"),
|
return {QmlDesigner::Import::createLibraryImport("QtQuick", "2.15"),
|
||||||
@@ -886,6 +878,25 @@ void TextToModelMerger::setupPossibleImports()
|
|||||||
if (m_rewriterView->isAttached())
|
if (m_rewriterView->isAttached())
|
||||||
m_rewriterView->model()->setPossibleImports(modules);
|
m_rewriterView->model()->setPossibleImports(modules);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QList<QmlDesigner::Import> TextToModelMerger::generatePossibleFileImports(
|
||||||
|
const QString &path, const QList<QmlJS::Import> &usedImports) const
|
||||||
|
{
|
||||||
|
if (!m_rewriterView)
|
||||||
|
return {};
|
||||||
|
|
||||||
|
QSet<QString> usedImportsSet;
|
||||||
|
for (const QmlJS::Import &i : usedImports)
|
||||||
|
usedImportsSet.insert(i.info.path());
|
||||||
|
|
||||||
|
QList<QmlDesigner::Import> possibleImports;
|
||||||
|
|
||||||
|
collectPossibleFileImports(m_rewriterView->externalDependencies().currentResourcePath().toLocalFile(),
|
||||||
|
QDir(path), usedImportsSet, possibleImports);
|
||||||
|
|
||||||
|
return possibleImports;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef QDS_USE_PROJECTSTORAGE
|
#ifndef QDS_USE_PROJECTSTORAGE
|
||||||
|
@@ -141,7 +141,10 @@ private:
|
|||||||
static QString textAt(const QmlJS::Document::Ptr &doc,
|
static QString textAt(const QmlJS::Document::Ptr &doc,
|
||||||
const QmlJS::SourceLocation &from,
|
const QmlJS::SourceLocation &from,
|
||||||
const QmlJS::SourceLocation &to);
|
const QmlJS::SourceLocation &to);
|
||||||
|
#ifndef QDS_USE_PROJECTSTORAGE
|
||||||
|
QList<QmlDesigner::Import> generatePossibleFileImports(
|
||||||
|
const QString &path, const QList<QmlJS::Import> &usedImports) const;
|
||||||
|
#endif
|
||||||
private:
|
private:
|
||||||
RewriterView *m_rewriterView;
|
RewriterView *m_rewriterView;
|
||||||
bool m_isActive;
|
bool m_isActive;
|
||||||
|
Reference in New Issue
Block a user