diff --git a/src/libs/utils/filepath.h b/src/libs/utils/filepath.h index 46f855365d1..e97ee4f2708 100644 --- a/src/libs/utils/filepath.h +++ b/src/libs/utils/filepath.h @@ -109,7 +109,7 @@ public: bool createDir() const; QList dirEntries(const QStringList &nameFilters, - QDir::Filters filters, + QDir::Filters filters = QDir::NoFilter, QDir::SortFlags sort = QDir::NoSort) const; QList dirEntries(QDir::Filters filters) const; QByteArray fileContents(qint64 maxSize = -1, qint64 offset = 0) const; diff --git a/src/plugins/texteditor/snippets/snippetscollection.cpp b/src/plugins/texteditor/snippets/snippetscollection.cpp index e814607a123..d47e50fdf75 100644 --- a/src/plugins/texteditor/snippets/snippetscollection.cpp +++ b/src/plugins/texteditor/snippets/snippetscollection.cpp @@ -41,8 +41,10 @@ #include #include -using namespace TextEditor; -using namespace Internal; +using namespace Utils; + +namespace TextEditor { +namespace Internal { /* TRANSLATOR TextEditor::Internal::Snippets @@ -51,8 +53,6 @@ using namespace Internal; disambiguate between snippets with the same trigger. */ -namespace { - static bool snippetComp(const Snippet &a, const Snippet &b) { const int comp = a.trigger().toLower().localeAwareCompare(b.trigger().toLower()); @@ -64,16 +64,14 @@ static bool snippetComp(const Snippet &a, const Snippet &b) return false; } -} // Anonymous - -const QLatin1String SnippetsCollection::kSnippet("snippet"); -const QLatin1String SnippetsCollection::kSnippets("snippets"); -const QLatin1String SnippetsCollection::kTrigger("trigger"); -const QLatin1String SnippetsCollection::kId("id"); -const QLatin1String SnippetsCollection::kComplement("complement"); -const QLatin1String SnippetsCollection::kGroup("group"); -const QLatin1String SnippetsCollection::kRemoved("removed"); -const QLatin1String SnippetsCollection::kModified("modified"); +const QLatin1String kSnippet("snippet"); +const QLatin1String kSnippets("snippets"); +const QLatin1String kTrigger("trigger"); +const QLatin1String kId("id"); +const QLatin1String kComplement("complement"); +const QLatin1String kGroup("group"); +const QLatin1String kRemoved("removed"); +const QLatin1String kModified("modified"); // Hint SnippetsCollection::Hint::Hint(int index) : m_index(index) @@ -95,13 +93,9 @@ SnippetsCollection *SnippetsCollection::instance() // SnippetsCollection SnippetsCollection::SnippetsCollection() - : m_userSnippetsPath(Core::ICore::userResourcePath().pathAppended("snippets/").toString()) - , m_userSnippetsFile(QLatin1String("snippets.xml")) + : m_userSnippetsFile(Core::ICore::userResourcePath("snippets/snippets.xml")), + m_builtInSnippetsFiles(Core::ICore::resourcePath("snippets").dirEntries({"*.xml"})) { - QDir dir = Core::ICore::resourcePath("snippets").toDir(); - dir.setNameFilters(QStringList(QLatin1String("*.xml"))); - foreach (const QFileInfo &fi, dir.entryInfoList()) - m_builtInSnippetsFiles.append(fi.absoluteFilePath()); connect(Core::ICore::instance(), &Core::ICore::coreOpened, this, &SnippetsCollection::identifyGroups); @@ -249,7 +243,7 @@ void SnippetsCollection::restoreRemovedSnippets(const QString &groupId) QVector toRestore(std::distance(m_activeSnippetsEnd[group], m_snippets[group].end())); std::copy(m_activeSnippetsEnd[group], m_snippets[group].end(), toRestore.begin()); m_snippets[group].erase(m_activeSnippetsEnd[group], m_snippets[group].end()); - foreach (Snippet snippet, toRestore) { + for (Snippet snippet : qAsConst(toRestore)) { snippet.setIsRemoved(false); insertSnippet(snippet); } @@ -260,7 +254,7 @@ Snippet SnippetsCollection::revertedSnippet(int index, const QString &groupId) c const Snippet &candidate = snippet(index, groupId); Q_ASSERT(candidate.isBuiltIn()); - foreach (const QString &fileName, m_builtInSnippetsFiles) { + for (const FilePath &fileName : m_builtInSnippetsFiles) { const QList &builtIn = readXML(fileName, candidate.id()); if (builtIn.size() == 1) return builtIn.at(0); @@ -273,7 +267,7 @@ void SnippetsCollection::reset(const QString &groupId) clearSnippets(groupIndex(groupId)); const QList &builtInSnippets = allBuiltInSnippets(); - foreach (const Snippet &snippet, builtInSnippets) + for (const Snippet &snippet : builtInSnippets) if (groupId == snippet.groupId()) insertSnippet(snippet); } @@ -284,29 +278,29 @@ void SnippetsCollection::reload() const QList &builtInSnippets = allBuiltInSnippets(); QHash activeBuiltInSnippets; - foreach (const Snippet &snippet, builtInSnippets) + for (const Snippet &snippet : builtInSnippets) activeBuiltInSnippets.insert(snippet.id(), snippet); - const QList &userSnippets = readXML(m_userSnippetsPath + m_userSnippetsFile); - foreach (const Snippet &snippet, userSnippets) { + const QList &userSnippets = readXML(m_userSnippetsFile); + for (const Snippet &snippet : userSnippets) { if (snippet.isBuiltIn()) // This user snippet overrides the corresponding built-in snippet. activeBuiltInSnippets.remove(snippet.id()); insertSnippet(snippet); } - foreach (const Snippet &snippet, activeBuiltInSnippets) + for (const Snippet &snippet : qAsConst(activeBuiltInSnippets)) insertSnippet(snippet); } bool SnippetsCollection::synchronize(QString *errorString) { - if (!QFile::exists(m_userSnippetsPath) && !QDir().mkpath(m_userSnippetsPath)) { - *errorString = tr("Cannot create user snippet directory %1").arg( - QDir::toNativeSeparators(m_userSnippetsPath)); + if (!m_userSnippetsFile.parentDir().ensureWritableDir()) { + *errorString = tr("Cannot create user snippet directory %1") + .arg(m_userSnippetsFile.parentDir().toUserOutput()); return false; } - Utils::FileSaver saver(Utils::FilePath::fromString(m_userSnippetsPath + m_userSnippetsFile)); + FileSaver saver(m_userSnippetsFile); if (!saver.hasError()) { using GroupIndexByIdConstIt = QHash::ConstIterator; @@ -349,10 +343,10 @@ void SnippetsCollection::writeSnippetXML(const Snippet &snippet, QXmlStreamWrite writer->writeEndElement(); } -QList SnippetsCollection::readXML(const QString &fileName, const QString &snippetId) const +QList SnippetsCollection::readXML(const FilePath &fileName, const QString &snippetId) const { QList snippets; - QFile file(fileName); + QFile file(fileName.toString()); if (file.exists() && file.open(QIODevice::ReadOnly)) { QXmlStreamReader xml(&file); if (xml.readNextStartElement()) { @@ -415,7 +409,7 @@ QList SnippetsCollection::readXML(const QString &fileName, const QStrin QList SnippetsCollection::allBuiltInSnippets() const { QList builtInSnippets; - foreach (const QString &fileName, m_builtInSnippetsFiles) + for (const FilePath &fileName : m_builtInSnippetsFiles) builtInSnippets.append(readXML(fileName)); return builtInSnippets; } @@ -442,3 +436,6 @@ bool SnippetsCollection::isGroupKnown(const QString &groupId) const { return m_groupIndexById.value(groupId, -1) != -1; } + +} // Internal +} // TextEditor diff --git a/src/plugins/texteditor/snippets/snippetscollection.h b/src/plugins/texteditor/snippets/snippetscollection.h index 0f4ba67899a..98be56b452f 100644 --- a/src/plugins/texteditor/snippets/snippetscollection.h +++ b/src/plugins/texteditor/snippets/snippetscollection.h @@ -27,6 +27,8 @@ #include "snippet.h" +#include + #include #include #include @@ -104,26 +106,16 @@ private: void updateActiveSnippetsEnd(int groupIndex); - QList readXML(const QString &fileName, const QString &snippetId = QString()) const; + QList readXML(const Utils::FilePath &fileName, const QString &snippetId = {}) const; void writeSnippetXML(const Snippet &snippet, QXmlStreamWriter *writer) const; QList allBuiltInSnippets() const; - static const QLatin1String kSnippet; - static const QLatin1String kSnippets; - static const QLatin1String kTrigger; - static const QLatin1String kId; - static const QLatin1String kComplement; - static const QLatin1String kGroup; - static const QLatin1String kRemoved; - static const QLatin1String kModified; - // Built-in snippets are specified in XMLs distributed in a system's folder. Snippets // created or modified/removed (if they are built-ins) by the user are stored in user's // folder. - QString m_userSnippetsPath; - QString m_userSnippetsFile; - QStringList m_builtInSnippetsFiles; + const Utils::FilePath m_userSnippetsFile; + const Utils::FilePaths m_builtInSnippetsFiles; // Snippets for each group are kept in a list. However, not all of them are necessarily // active. Specifically, removed built-in snippets are kept as the last ones (for each