diff --git a/checkwhitespace.d b/checkwhitespace.d index e2a2760..b709ae0 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);