diff --git a/src/plugins/beautifier/artisticstyle/artisticstyle.cpp b/src/plugins/beautifier/artisticstyle/artisticstyle.cpp index 36d6280ea9c..68d546508d6 100644 --- a/src/plugins/beautifier/artisticstyle/artisticstyle.cpp +++ b/src/plugins/beautifier/artisticstyle/artisticstyle.cpp @@ -36,7 +36,6 @@ #include #include #include -#include #include #include #include @@ -276,14 +275,14 @@ void ArtisticStyle::updateActions(Core::IEditor *editor) void ArtisticStyle::formatFile() { - const QString cfgFileName = configurationFile(); + const FilePath cfgFileName = configurationFile(); if (cfgFileName.isEmpty()) showError(BeautifierTool::msgCannotGetConfigurationFile(asDisplayName())); else - formatCurrentFile(command(cfgFileName)); + formatCurrentFile(command(cfgFileName.toFSPathString())); } -QString ArtisticStyle::configurationFile() const +FilePath ArtisticStyle::configurationFile() const { if (settings().useCustomStyle()) return settings().styleFileName(settings().customStyle()); @@ -291,39 +290,38 @@ QString ArtisticStyle::configurationFile() const if (settings().useOtherFiles()) { if (const ProjectExplorer::Project *project = ProjectExplorer::ProjectTree::currentProject()) { - const Utils::FilePaths astyleRcfiles = project->files( + const FilePaths astyleRcfiles = project->files( [](const ProjectExplorer::Node *n) { return n->filePath().endsWith(".astylerc"); }); - for (const Utils::FilePath &file : astyleRcfiles) { - const QFileInfo fi = file.toFileInfo(); - if (fi.isReadable()) - return file.toString(); + for (const FilePath &file : astyleRcfiles) { + if (file.isReadableFile()) + return file; } } } if (settings().useSpecificConfigFile()) { - const Utils::FilePath file = settings().specificConfigFile(); + const FilePath file = settings().specificConfigFile(); if (file.exists()) - return file.toUserOutput(); + return file; } if (settings().useHomeFile()) { - const QDir homeDirectory = QDir::home(); - QString file = homeDirectory.filePath(".astylerc"); - if (QFile::exists(file)) + const FilePath homeDirectory = FileUtils::homePath(); + FilePath file = homeDirectory / ".astylerc"; + if (file.exists()) return file; - file = homeDirectory.filePath("astylerc"); - if (QFile::exists(file)) + file = homeDirectory / "astylerc"; + if (file.exists()) return file; } - return QString(); + return {}; } Command ArtisticStyle::command() const { - const QString cfgFile = configurationFile(); - return cfgFile.isEmpty() ? Command() : command(cfgFile); + const FilePath cfgFile = configurationFile(); + return cfgFile.isEmpty() ? Command() : command(cfgFile.toFSPathString()); } bool ArtisticStyle::isApplicable(const Core::IDocument *document) const diff --git a/src/plugins/beautifier/artisticstyle/artisticstyle.h b/src/plugins/beautifier/artisticstyle/artisticstyle.h index db0af2bc1c8..45b94fbd463 100644 --- a/src/plugins/beautifier/artisticstyle/artisticstyle.h +++ b/src/plugins/beautifier/artisticstyle/artisticstyle.h @@ -23,7 +23,7 @@ public: private: void formatFile(); - QString configurationFile() const; + Utils::FilePath configurationFile() const; TextEditor::Command command(const QString &cfgFile) const; QAction *m_formatFile = nullptr; diff --git a/src/plugins/beautifier/beautifiertool.cpp b/src/plugins/beautifier/beautifiertool.cpp index 3fe53070d04..85c70fee264 100644 --- a/src/plugins/beautifier/beautifiertool.cpp +++ b/src/plugins/beautifier/beautifiertool.cpp @@ -17,7 +17,6 @@ #include #include -#include #include #include #include @@ -127,8 +126,7 @@ private: AbstractSettings::AbstractSettings(const QString &name, const QString &ending) : m_ending(ending) , m_styleDir(Core::ICore::userResourcePath(Beautifier::Constants::SETTINGS_DIRNAME) - .pathAppended(name) - .toString()) + .pathAppended(name)) { setSettingsGroups(Utils::Constants::BEAUTIFIER_SETTINGS_GROUP, name); @@ -187,15 +185,15 @@ bool AbstractSettings::styleExists(const QString &key) const bool AbstractSettings::styleIsReadOnly(const QString &key) { - const QFileInfo fi(m_styleDir.absoluteFilePath(key + m_ending)); - if (!fi.exists()) { + const FilePath filePath = m_styleDir.pathAppended(key + m_ending); + if (!filePath.exists()) { // newly added style which was not saved yet., thus it is not read only. //TODO In a later version when we have predefined styles in Core::ICore::resourcePath() // we need to check if it is a read only global config file... return false; } - return !fi.isWritable(); + return !filePath.isWritableFile(); } void AbstractSettings::setStyle(const QString &key, const QString &value) @@ -222,9 +220,9 @@ void AbstractSettings::replaceStyle(const QString &oldKey, const QString &newKey m_changedStyles.insert(newKey); } -QString AbstractSettings::styleFileName(const QString &key) const +FilePath AbstractSettings::styleFileName(const QString &key) const { - return m_styleDir.absoluteFilePath(key + m_ending); + return m_styleDir.pathAppended(key + m_ending); } QVersionNumber AbstractSettings::version() const @@ -285,10 +283,14 @@ void AbstractSettings::save() // remove old files and possible subfolder for (const QString &key : std::as_const(m_stylesToRemove)) { - const QFileInfo fi(styleFileName(key)); - QFile::remove(fi.absoluteFilePath()); - if (fi.absoluteDir() != m_styleDir) - m_styleDir.rmdir(fi.absolutePath()); + FilePath filePath = styleFileName(key); + filePath.removeFile(); + QTC_ASSERT(m_styleDir.isAbsolutePath(), break); + QTC_ASSERT(!m_styleDir.needsDevice(), break); + if (filePath.parentDir() != m_styleDir) { + // FIXME: Missing in FilePath + QDir(m_styleDir.toString()).rmdir(filePath.parentDir().toString()); + } } m_stylesToRemove.clear(); @@ -300,23 +302,23 @@ void AbstractSettings::save() continue; } - const QFileInfo fi(styleFileName(iStyles.key())); - if (!(m_styleDir.mkpath(fi.absolutePath()))) { + const FilePath filePath = styleFileName(iStyles.key()); + if (!filePath.parentDir().ensureWritableDir()) { BeautifierTool::showError(Tr::tr("Cannot save styles. %1 does not exist.") - .arg(fi.absolutePath())); + .arg(filePath.toUserOutput())); continue; } - FileSaver saver(FilePath::fromUserInput(fi.absoluteFilePath())); + FileSaver saver(filePath); if (saver.hasError()) { BeautifierTool::showError(Tr::tr("Cannot open file \"%1\": %2.") - .arg(saver.filePath().toUserOutput()) + .arg(filePath.toUserOutput()) .arg(saver.errorString())); } else { saver.write(iStyles.value().toLocal8Bit()); if (!saver.finalize()) { BeautifierTool::showError(Tr::tr("Cannot save file \"%1\": %2.") - .arg(saver.filePath().toUserOutput()) + .arg(filePath.toUserOutput()) .arg(saver.errorString())); } } @@ -405,18 +407,17 @@ void AbstractSettings::readStyles() if (!m_styleDir.exists()) return; - const QStringList files - = m_styleDir.entryList({'*' + m_ending}, - QDir::Files | QDir::Readable | QDir::NoDotAndDotDot); - for (const QString &filename : files) { + const FileFilter filter = {{'*' + m_ending}, QDir::Files | QDir::Readable | QDir::NoDotAndDotDot}; + const FilePaths files = m_styleDir.dirEntries(filter); + for (const FilePath &filePath : files) { // do not allow empty file names - if (filename == m_ending) + if (filePath.fileName() == m_ending) continue; - QFile file(m_styleDir.absoluteFilePath(filename)); - if (file.open(QIODevice::ReadOnly)) { + if (auto contents = filePath.fileContents()) { + const QString filename = filePath.fileName(); m_styles.insert(filename.left(filename.length() - m_ending.length()), - QString::fromLocal8Bit(file.readAll())); + QString::fromLocal8Bit(*contents)); } } } diff --git a/src/plugins/beautifier/beautifiertool.h b/src/plugins/beautifier/beautifiertool.h index 0c6bdfd37b5..5b2c130a7d0 100644 --- a/src/plugins/beautifier/beautifiertool.h +++ b/src/plugins/beautifier/beautifiertool.h @@ -9,7 +9,6 @@ #include -#include #include #include #include @@ -73,7 +72,7 @@ public: void setStyle(const QString &key, const QString &value); void removeStyle(const QString &key); void replaceStyle(const QString &oldKey, const QString &newKey, const QString &value); - virtual QString styleFileName(const QString &key) const; + virtual Utils::FilePath styleFileName(const QString &key) const; Utils::FilePathAspect command{this}; Utils::StringAspect supportedMimeTypes{this}; @@ -92,7 +91,7 @@ protected: QMap m_styles; QString m_ending; - QDir m_styleDir; + Utils::FilePath m_styleDir; void readDocumentation(); virtual void readStyles(); diff --git a/src/plugins/beautifier/clangformat/clangformat.cpp b/src/plugins/beautifier/clangformat/clangformat.cpp index 345cf870d50..8277af19fb7 100644 --- a/src/plugins/beautifier/clangformat/clangformat.cpp +++ b/src/plugins/beautifier/clangformat/clangformat.cpp @@ -103,7 +103,7 @@ public: SelectionAspect fallbackStyle{this}; StringAspect customStyle{this}; - QString styleFileName(const QString &key) const override; + Utils::FilePath styleFileName(const QString &key) const override; private: void readStyles() override; @@ -215,18 +215,17 @@ QStringList ClangFormatSettings::completerWords() }; } -QString ClangFormatSettings::styleFileName(const QString &key) const +FilePath ClangFormatSettings::styleFileName(const QString &key) const { - return m_styleDir.absolutePath() + '/' + key + '/' + m_ending; + return m_styleDir / key / m_ending; } void ClangFormatSettings::readStyles() { - const QStringList dirs = m_styleDir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot); - for (const QString &dir : dirs) { - QFile file(m_styleDir.absoluteFilePath(dir + '/' + m_ending)); - if (file.open(QIODevice::ReadOnly)) - m_styles.insert(dir, QString::fromLocal8Bit(file.readAll())); + const FilePaths dirs = m_styleDir.dirEntries(QDir::AllDirs | QDir::NoDotAndDotDot); + for (const FilePath &dir : dirs) { + if (auto contents = dir.pathAppended(m_ending).fileContents()) + m_styles.insert(dir.fileName(), QString::fromLocal8Bit(*contents)); } } @@ -495,9 +494,9 @@ Command ClangFormat::command() const command.addOption("-assume-filename=%file"); } else { command.addOption("-style=file"); - const QString path = - QFileInfo(settings().styleFileName(settings().customStyle())).absolutePath(); - command.addOption("-assume-filename=" + path + QDir::separator() + "%filename"); + const FilePath path = settings().styleFileName(settings().customStyle()) + .absolutePath().pathAppended("%filename"); + command.addOption("-assume-filename=" + path.nativePath()); } return command; diff --git a/src/plugins/beautifier/uncrustify/uncrustify.cpp b/src/plugins/beautifier/uncrustify/uncrustify.cpp index eae39aad591..819906266f8 100644 --- a/src/plugins/beautifier/uncrustify/uncrustify.cpp +++ b/src/plugins/beautifier/uncrustify/uncrustify.cpp @@ -320,7 +320,7 @@ void Uncrustify::formatSelectedText() FilePath Uncrustify::configurationFile() const { if (settings().useCustomStyle()) - return FilePath::fromUserInput(settings().styleFileName(settings().customStyle())); + return settings().styleFileName(settings().customStyle()); if (settings().useOtherFiles()) { using namespace ProjectExplorer;