From c3349fd512c11c4b69e91155fb9a27ef095ea0f2 Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Sun, 11 Feb 2018 10:36:39 +0100 Subject: [PATCH] checkwhitespace.d: Allow individual errors to be turned off. To allow running checkwhitespace on files not recognized by the program, e.g: 'checkwhitespace --allow-tabs Makefile' --- checkwhitespace.d | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/checkwhitespace.d b/checkwhitespace.d index e2a2760004..b709ae00d2 100755 --- a/checkwhitespace.d +++ b/checkwhitespace.d @@ -15,6 +15,13 @@ import std.path; int main(string[] args) { + import std.getopt; + bool allowdos, allowtabs, allowtrailing; + getopt(args, + "allow-windows-newlines", &allowdos, + "allow-tabs", &allowtabs, + "allow-trailing-whitespace", &allowtrailing); + bool error; auto r = regex(r" +\n"); foreach(a; args[1..$]) @@ -23,18 +30,18 @@ int main(string[] args) { ptrdiff_t pos; auto str = a.readText(); - if ((pos = str.indexOf("\r\n")) >= 0) + if (!allowdos && (pos = str.indexOf("\r\n")) >= 0) { writefln("Error - file '%s' contains windows line endings at line %d", a, str[0..pos].count('\n') + 1); error = true; } - if (a.extension() != ".mak" && (pos = str.indexOf('\t')) >= 0) + if (!allowtabs && a.extension() != ".mak" && (pos = str.indexOf('\t')) >= 0) { writefln("Error - file '%s' contains tabs at line %d", a, str[0..pos].count('\n') + 1); error = true; } auto m = str.matchFirst(r); - if (!m.empty) + if (!allowtrailing && !m.empty) { pos = m.front.ptr - str.ptr; // assume the match is a slice of the string writefln("Error - file '%s' contains trailing whitespace at line %d", a, str[0..pos].count('\n') + 1);