aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorMaximilian Goldstein <max.goldstein@qt.io>2020-03-18 09:19:31 +0100
committerMaximilian Goldstein <max.goldstein@qt.io>2020-03-25 06:15:13 +0100
commit4faf242d1a18e206ddd9c567649a9dddbf6217df (patch)
treeb7e5c81f06123d0d67196609bfd13378224b8b9f /tools
parent2b8042182d77241ffe7e6b4edf4e727315f93147 (diff)
qmlformat: Add option for alternative line endings
Allows user to decide between native (default), macos (\r), unix (\n) or windows (\r\n) line endings. Fixes: QTBUG-82258 Change-Id: Ie1eb365085815cbbebbf0d026c6f72f0ef2acb9d Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tools')
-rw-r--r--tools/qmlformat/main.cpp35
1 files changed, 31 insertions, 4 deletions
diff --git a/tools/qmlformat/main.cpp b/tools/qmlformat/main.cpp
index da58ffd5d0..3e71110cf9 100644
--- a/tools/qmlformat/main.cpp
+++ b/tools/qmlformat/main.cpp
@@ -43,7 +43,7 @@
#include "dumpastvisitor.h"
#include "restructureastvisitor.h"
-bool parseFile(const QString& filename, bool inplace, bool verbose, bool sortImports, bool force)
+bool parseFile(const QString& filename, bool inplace, bool verbose, bool sortImports, bool force, const QString& newline)
{
QFile file(filename);
@@ -128,11 +128,27 @@ bool parseFile(const QString& filename, bool inplace, bool verbose, bool sortImp
}
}
+
+ const bool native = newline == "native";
+
+ if (!native) {
+ if (newline == "macos") {
+ dumpCode = dumpCode.replace("\n","\r");
+ } else if (newline == "windows") {
+ dumpCode = dumpCode.replace("\n", "\r\n");
+ } else if (newline == "unix") {
+ // Nothing needs to be done for unix line-endings
+ } else {
+ qWarning().noquote() << "Unknown line ending type" << newline;
+ return false;
+ }
+ }
+
if (inplace) {
if (verbose)
qWarning().noquote() << "Writing to file" << filename;
- if (!file.open(QIODevice::Text | QIODevice::WriteOnly))
+ if (!file.open(native ? QIODevice::WriteOnly | QIODevice::Text : QIODevice::WriteOnly))
{
qWarning().noquote() << "Failed to open" << filename << "for writing";
return false;
@@ -141,7 +157,9 @@ bool parseFile(const QString& filename, bool inplace, bool verbose, bool sortImp
file.write(dumpCode.toUtf8());
file.close();
} else {
- QTextStream(stdout) << dumpCode;
+ QFile out;
+ out.open(stdout, QIODevice::WriteOnly);
+ out.write(dumpCode.toUtf8());
}
return true;
@@ -172,6 +190,10 @@ int main(int argc, char *argv[])
parser.addOption(QCommandLineOption({"f", "force"},
QStringLiteral("Continue even if an error has occurred.")));
+ parser.addOption(QCommandLineOption({"l", "newline"},
+ QStringLiteral("Override the new line format to use (native macos unix windows)."),
+ "newline", "native"));
+
parser.addPositionalArgument("filenames", "files to be processed by qmlformat");
parser.process(app);
@@ -181,8 +203,13 @@ int main(int argc, char *argv[])
if (positionalArguments.isEmpty())
parser.showHelp(-1);
+ if (!parser.isSet("inplace") && parser.value("newline") != "native") {
+ qWarning() << "Error: The -l option can only be used with -i";
+ return -1;
+ }
+
for (const QString& file: parser.positionalArguments()) {
- if (!parseFile(file, parser.isSet("inplace"), parser.isSet("verbose"), !parser.isSet("no-sort"), parser.isSet("force")))
+ if (!parseFile(file, parser.isSet("inplace"), parser.isSet("verbose"), !parser.isSet("no-sort"), parser.isSet("force"), parser.value("newline")))
success = false;
}
#endif