52 lines
1.1 KiB
Text
52 lines
1.1 KiB
Text
|
#!/usr/bin/awk -f
|
||
|
|
||
|
BEGIN {
|
||
|
isatty = system("test -t 1") == "0"
|
||
|
retcode = 0
|
||
|
}
|
||
|
|
||
|
function color(code, s) {
|
||
|
if (isatty) {
|
||
|
return "\033[" code "m" s "\033[0m"
|
||
|
}
|
||
|
return s
|
||
|
}
|
||
|
function red(s) { return color("31", s) }
|
||
|
function green(s) { return color("32", s) }
|
||
|
function magenta(s) { return color("35", s) }
|
||
|
function cyan(s) { return color("36", s) }
|
||
|
function bg_red(s) { return color("41", s) }
|
||
|
function hl_ws(s, pattern) {
|
||
|
gsub(pattern, bg_red("&"), s)
|
||
|
# convert tab characters to 8 spaces to allow coloring
|
||
|
gsub(/\t/, " ", s)
|
||
|
return s
|
||
|
}
|
||
|
|
||
|
/ +\t+/ {
|
||
|
retcode = 1
|
||
|
print magenta(FILENAME) cyan(":") green(FNR) cyan(":") \
|
||
|
hl_ws($0, " +\\t+") red("<-- space(s) followed by tab(s)")
|
||
|
}
|
||
|
|
||
|
/[ \t]+$/ {
|
||
|
retcode = 1
|
||
|
print magenta(FILENAME) cyan(":") green(FNR) cyan(":") \
|
||
|
hl_ws($0, "[ \\t]+$") red("<-- trailing whitespace")
|
||
|
}
|
||
|
|
||
|
ENDFILE {
|
||
|
# will only match on GNU awk, ignored on non-GNU versions
|
||
|
if ($0 ~ /^[ \t]*$/) {
|
||
|
retcode = 1
|
||
|
print magenta(FILENAME) cyan(": ") red("trailing new line(s)")
|
||
|
} else if (RT != "\n") {
|
||
|
retcode = 1
|
||
|
print magenta(FILENAME) cyan(": ") red("no new line at end of file")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
END {
|
||
|
exit retcode
|
||
|
}
|