QmlDesigner: Refactor convertTypeToImportAlias method

- Removed `getUrlFromType` function and integrated its logic directly
into `convertTypeToImportAlias`.
- Simplified the process of extracting the simplified type and URL from
the input type.
- Utilized C++20 ranges and views for more concise and readable code.
- Improved the search for import aliases by using modern C++ features.
- Optimized memory allocations by reducing unnecessary QString
constructions and copies.

Change-Id: Ife1ad69c3b42b7c578659d2342866edeaf354092
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Marco Bubke
2025-04-26 22:23:06 +02:00
parent f00999d61d
commit 85a7a79d00
2 changed files with 18 additions and 39 deletions

View File

@@ -129,7 +129,7 @@ public:
const QmlJS::ScopeChain *scopeChain() const; const QmlJS::ScopeChain *scopeChain() const;
#endif #endif
QString convertTypeToImportAlias(const QString &type) const; QString convertTypeToImportAlias(QStringView type) const;
bool checkSemanticErrors() const { return m_checkSemanticErrors; } bool checkSemanticErrors() const { return m_checkSemanticErrors; }

View File

@@ -962,50 +962,29 @@ QmlJS::Document::Ptr RewriterView::document() const
return textToModelMerger()->document(); return textToModelMerger()->document();
} }
inline static QString getUrlFromType(const QString &typeName) QString RewriterView::convertTypeToImportAlias(QStringView type) const
{ {
QStringList nameComponents = typeName.split('.'); auto simplifiedTypeBegin = std::ranges::find(type | std::views::reverse, u'.').base();
QString result; const auto simplifiedType = QStringView{simplifiedTypeBegin, type.end()}.toString();
if (type.begin() == simplifiedTypeBegin)
return simplifiedType;
for (int i = 0; i < (nameComponents.size() - 1); i++) { QStringView url{type.begin(), std::prev(simplifiedTypeBegin)};
result += nameComponents.at(i); auto &&imports = model()->imports();
} auto projection = [](auto &&import) {
return import.isFileImport() ? import.file() : import.url();
};
auto found = std::ranges::find(imports, url, projection);
return result; if (found == imports.end())
} return simplifiedType;
QString RewriterView::convertTypeToImportAlias(const QString &type) const auto &&alias = found->alias();
{
QString url;
QString simplifiedType = type;
if (type.contains('.')) {
QStringList nameComponents = type.split('.');
url = getUrlFromType(type);
simplifiedType = nameComponents.constLast();
}
QString alias; if (alias.isEmpty())
if (!url.isEmpty()) { return simplifiedType;
for (const Import &import : model()->imports()) {
if (import.url() == url) {
alias = import.alias();
break;
}
if (import.file() == url) {
alias = import.alias();
break;
}
}
}
QString result; return alias + '.'_L1 + simplifiedType;
if (!alias.isEmpty())
result = alias + '.';
result += simplifiedType;
return result;
} }
QStringList RewriterView::importDirectories() const QStringList RewriterView::importDirectories() const