From 1e1244fad8da39a749970f8d4d9347dfdfeb7243 Mon Sep 17 00:00:00 2001 From: san7890 Date: Sun, 17 Jul 2022 02:16:31 -0600 Subject: [PATCH] Updates check_grep.sh to have more clarity and contrast (#68387) * Updates check_grep.sh to have more clarity Hey there, One issue with check_grep is that it was very inconsistent in how it handled the error conditions and echos to the end user. Some of them didn't have ERROR:, some of them didn't have two echos to separate them from the actual grep result, etc. This should add more clarity to all of it by making each error line exit with a RED color, the boilerplate lines with a BLUE color, having an echo in each line to separate, etc. This should be much easier to see for anyone at a glance. This works on my local machine, and I suppose we'll find out how it looks on GitHub. --- tools/ci/check_grep.sh | 159 ++++++++++++++++++++++++++--------------- 1 file changed, 103 insertions(+), 56 deletions(-) mode change 100755 => 100644 tools/ci/check_grep.sh diff --git a/tools/ci/check_grep.sh b/tools/ci/check_grep.sh old mode 100755 new mode 100644 index 6ac8b36c1de..c8abd410af1 --- a/tools/ci/check_grep.sh +++ b/tools/ci/check_grep.sh @@ -4,175 +4,205 @@ set -euo pipefail #nb: must be bash to support shopt globstar shopt -s globstar +#ANSI Escape Codes for colors to increase contrast of errors +RED="\033[0;31m" +GREEN="\033[0;32m" +BLUE="\033[0;34m" +NC="\033[0m" # No Color + st=0 -echo "Checking for map issues" +echo -e "${BLUE}Checking for map issues...${NC}" + if grep -El '^\".+\" = \(.+\)' _maps/**/*.dmm; then - echo "ERROR: Non-TGM formatted map detected. Please convert it using Map Merger!" + echo + echo -e "${RED}ERROR: Non-TGM formatted map detected. Please convert it using Map Merger!${NC}" st=1 fi; if grep -P '//' _maps/**/*.dmm | grep -v '//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE' | grep -Ev 'name|desc'; then - echo "ERROR: Unexpected commented out line detected in this map file. Please remove it." + echo + echo -e "${RED}ERROR: Unexpected commented out line detected in this map file. Please remove it.${NC}" st=1 fi; if grep -P 'Merge Conflict Marker' _maps/**/*.dmm; then - echo "ERROR: Merge conflict markers detected in map, please resolve all merge failures!" + echo + echo -e "${RED}ERROR: Merge conflict markers detected in map, please resolve all merge failures!${NC}" st=1 fi; # We check for this as well to ensure people aren't actually using this mapping effect in their maps. if grep -P '/obj/merge_conflict_marker' _maps/**/*.dmm; then - echo "ERROR: Merge conflict markers detected in map, please resolve all merge failures!" + echo + echo -e "${RED}ERROR: Merge conflict markers detected in map, please resolve all merge failures!${NC}" st=1 fi; if grep -P '^\ttag = \"icon' _maps/**/*.dmm; then - echo "ERROR: tag vars from icon state generation detected in maps, please remove them." + echo + echo -e "${RED}ERROR: Tag vars from icon state generation detected in maps, please remove them.${NC}" st=1 fi; if grep -P 'step_[xy]' _maps/**/*.dmm; then - echo "ERROR: step_x/step_y variables detected in maps, please remove them." + echo + echo -e "${RED}ERROR: step_x/step_y variables detected in maps, please remove them.${NC}" st=1 fi; if grep -P 'pixel_[^xy]' _maps/**/*.dmm; then - echo "ERROR: incorrect pixel offset variables detected in maps, please remove them." + echo + echo -e "${RED}ERROR: incorrect pixel offset variables detected in maps, please remove them.${NC}" st=1 fi; if grep -P '/obj/structure/cable(/\w+)+\{' _maps/**/*.dmm; then - echo "ERROR: vareditted cables detected, please remove them." + echo + echo -e "${RED}ERROR: Variable editted cables detected, please remove them.${NC}" st=1 fi; if grep -P '\td[1-2] =' _maps/**/*.dmm; then - echo "ERROR: d1/d2 cable variables detected in maps, please remove them." + echo + echo -e "${RED}ERROR: d1/d2 cable variables detected in maps, please remove them.${NC}" st=1 fi; if grep -Pzo '"\w+" = \(\n[^)]*?/obj/structure/cable,\n[^)]*?/obj/structure/cable,\n[^)]*?/area/.+?\)' _maps/**/*.dmm; then echo - echo "ERROR: found multiple cables on the same tile, please remove them." + echo -e "${RED}ERROR: Found multiple cables on the same tile, please remove them.${NC}" st=1 fi; if grep -Pzo '"\w+" = \(\n[^)]*?/obj/structure/lattice[/\w]*?,\n[^)]*?/obj/structure/lattice[/\w]*?,\n[^)]*?/area/.+?\)' _maps/**/*.dmm; then echo - echo "ERROR: found multiple lattices on the same tile, please remove them." + echo -e "${RED}ERROR: Found multiple lattices on the same tile, please remove them.${NC}" st=1 fi; if grep -Pzo '"\w+" = \(\n[^)]*?/obj/machinery/atmospherics/pipe/(?[/\w]*),\n[^)]*?/obj/machinery/atmospherics/pipe/\g{type},\n[^)]*?/area/.+\)' _maps/**/*.dmm; then echo - echo "ERROR: found multiple identical pipes on the same tile, please remove them." + echo -e "${RED}ERROR: Found multiple identical pipes on the same tile, please remove them.${NC}" st=1 fi; if grep -Pzo '"\w+" = \(\n[^)]*?/obj/structure/barricade/(?[/\w]*),\n[^)]*?/obj/structure/barricade/\g{type},\n[^)]*?/area/.+\)' _maps/**/*.dmm; then echo - echo "ERROR: found multiple identical barricades on the same tile, please remove them." + echo -e "${RED}ERROR: Found multiple identical barricades on the same tile, please remove them.${NC}" st=1 fi; if grep -Pzo '"\w+" = \(\n[^)]*?/obj/structure/table/(?[/\w]*),\n[^)]*?/obj/structure/table/\g{type},\n[^)]*?/area/.+\)' _maps/**/*.dmm; then echo - echo "ERROR: found multiple identical tables on the same tile, please remove them." + echo -e "${RED}ERROR: Found multiple identical tables on the same tile, please remove them.${NC}" st=1 fi; if grep -Pzo '"\w+" = \(\n[^)]*?/obj/structure/chair/(?[/\w]*),\n[^)]*?/obj/structure/chair/\g{type},\n[^)]*?/area/.+\)' _maps/**/*.dmm; then echo - echo "ERROR: found multiple identical chairs on the same tile, please remove them." + echo -e "${RED}ERROR: Found multiple identical chairs on the same tile, please remove them.${NC}" st=1 fi; if grep -Pzo '"\w+" = \(\n[^)]*?/obj/machinery/door/airlock[/\w]*?,\n[^)]*?/obj/machinery/door/airlock[/\w]*?,\n[^)]*?/area/.+\)' _maps/**/*.dmm; then echo - echo "ERROR: found multiple airlocks on the same tile, please remove them." + echo -e "${RED}ERROR: Found multiple airlocks on the same tile, please remove them.${NC}" st=1 fi; if grep -Pzo '"\w+" = \(\n[^)]*?/obj/machinery/door/firedoor[/\w]*?,\n[^)]*?/obj/machinery/door/firedoor[/\w]*?,\n[^)]*?/area/.+\)' _maps/**/*.dmm; then echo - echo "ERROR: found multiple firelocks on the same tile, please remove them." + echo -e "${RED}ERROR: Found multiple firelocks on the same tile, please remove them.${NC}" st=1 fi; if grep -Pzo '"\w+" = \(\n[^)]*?/obj/structure/closet/(?[/\w]*),\n[^)]*?/obj/structure/closet/\g{type},\n[^)]*?/area/.+\)' _maps/**/*.dmm; then echo - echo "ERROR: found multiple identical closets on the same tile, please remove them." + echo -e "${RED}ERROR: Found multiple identical closets on the same tile, please remove them.${NC}" st=1 fi; if grep -Pzo '"\w+" = \(\n[^)]*?/obj/structure/grille/(?[/\w]*),\n[^)]*?/obj/structure/grille/\g{type},\n[^)]*?/area/.+\)' _maps/**/*.dmm; then echo - echo "ERROR: found multiple identical grilles on the same tile, please remove them." + echo -e "${RED}ERROR: Found multiple identical grilles on the same tile, please remove them.${NC}" st=1 fi; if grep -Pzo '"\w+" = \(\n[^)]*?/obj/structure/girder/(?[/\w]*),\n[^)]*?/obj/structure/girder/\g{type},\n[^)]*?/area/.+\)' _maps/**/*.dmm; then echo - echo "ERROR: found multiple identical girders on the same tile, please remove them." + echo -e "${RED}ERROR: Found multiple identical girders on the same tile, please remove them.${NC}" st=1 fi; if grep -Pzo '"\w+" = \(\n[^)]*?/obj/structure/stairs/(?[/\w]*),\n[^)]*?/obj/structure/stairs/\g{type},\n[^)]*?/area/.+\)' _maps/**/*.dmm; then echo - echo "ERROR: found multiple identical stairs on the same tile, please remove them." + echo -e "${RED}ERROR: Found multiple identical stairs on the same tile, please remove them.${NC}" st=1 fi; if grep -rzoP 'machinery/door.*{([^}]|\n)*name = .*("|\s)(?!of|and|to)[a-z].*\n' _maps/**/*.dmm; then echo - echo "ERROR: found door names without proper upper-casing. Please upper-case your door names." + echo -e "${RED}ERROR: Found door names without proper upper-casing. Please upper-case your door names.${NC}" st=1 fi; if grep -Pzo '/obj/machinery/power/apc[/\w]*?\{\n[^}]*?pixel_[xy] = -?[013-9]\d*?[^\d]*?\s*?\},?\n' _maps/**/*.dmm || grep -Pzo '/obj/machinery/power/apc[/\w]*?\{\n[^}]*?pixel_[xy] = -?\d+?[0-46-9][^\d]*?\s*?\},?\n' _maps/**/*.dmm || grep -Pzo '/obj/machinery/power/apc[/\w]*?\{\n[^}]*?pixel_[xy] = -?\d{3,1000}[^\d]*?\s*?\},?\n' _maps/**/*.dmm ; then echo - echo "ERROR: found an APC with a manually set pixel_x or pixel_y that is not +-25." + echo -e "${RED}ERROR: Found an APC with a manually set pixel_x or pixel_y that is not +-25. Use the directional variants when possible.${NC}" st=1 fi; if grep -Pzo '"\w+" = \(\n[^)]*?/obj/structure/lattice[/\w]*?,\n[^)]*?/turf/closed/wall[/\w]*?,\n[^)]*?/area/.+?\)' _maps/**/*.dmm; then echo - echo "ERROR: found lattice stacked with a wall, please remove them." + echo -e "${RED}ERROR: Found a lattice stacked with a wall, please remove them.${NC}" st=1 fi; if grep -Pzo '"\w+" = \(\n[^)]*?/obj/structure/lattice[/\w]*?,\n[^)]*?/turf/closed[/\w]*?,\n[^)]*?/area/.+?\)' _maps/**/*.dmm; then echo - echo "ERROR: found lattice stacked within a wall, please remove them." + echo -e "${RED}ERROR: Found a lattice stacked within a wall, please remove them.${NC}" st=1 fi; if grep -Pzo '"\w+" = \(\n[^)]*?/obj/structure/window[/\w]*?,\n[^)]*?/turf/closed[/\w]*?,\n[^)]*?/area/.+?\)' _maps/**/*.dmm; then echo - echo "ERROR: found a window stacked within a wall, please remove it." + echo -e "${RED}ERROR: Found a window stacked within a wall, please remove it.${NC}" st=1 fi; if grep -Pzo '"\w+" = \(\n[^)]*?/obj/machinery/door/airlock[/\w]*?,\n[^)]*?/turf/closed[/\w]*?,\n[^)]*?/area/.+?\)' _maps/**/*.dmm; then echo - echo "ERROR: found an airlock stacked within a wall, please remove it." + echo -e "${RED}ERROR: Found an airlock stacked within a wall, please remove it.${NC}" st=1 fi; if grep -Pzo '"\w+" = \(\n[^)]*?/obj/structure/stairs[/\w]*?,\n[^)]*?/turf/open/genturf[/\w]*?,\n[^)]*?/area/.+?\)' _maps/**/*.dmm; then echo - echo "ERROR: found a staircase on top of a genturf. Please replace the genturf with a proper tile." + echo -e "${RED}ERROR: Found a staircase on top of a gen_turf. Please replace the gen_turf with a proper turf.${NC}" st=1 fi; if grep -Pzo '/obj/machinery/conveyor/inverted[/\w]*?\{\n[^}]*?dir = [1248];[^}]*?\},?\n' _maps/**/*.dmm; then echo - echo "ERROR: found an inverted conveyor belt with a cardinal dir. Please replace it with a normal conveyor belt." + echo -e "${RED}ERROR: Found an inverted conveyor belt with a cardinal dir. Please replace it with a normal conveyor belt.${NC}" st=1 fi; if grep -P '^/area/.+[\{]' _maps/**/*.dmm; then - echo "ERROR: Vareditted /area path use detected in maps, please replace with proper paths." + echo + echo -e "${RED}ERROR: Variable editted /area path use detected in a map, please replace with a proper area path.${NC}" st=1 fi; if grep -P '\W\/turf\s*[,\){]' _maps/**/*.dmm; then - echo "ERROR: base /turf path use detected in maps, please replace with proper paths." + echo + echo -e "${RED}ERROR: Base /turf path use detected in maps, please replace a with proper turf path.${NC}" st=1 fi; if grep -Pzo '"\w+" = \(\n[^)]*?/turf/[/\w]*?,\n[^)]*?/turf/[/\w]*?,\n[^)]*?/area/.+?\)' _maps/**/*.dmm; then - echo "ERROR: Multiple turfs detected on the same tile! Please choose only one turf!" + echo + echo -e "${RED}ERROR: Multiple turfs detected on the same tile! Please choose only one turf!${NC}" st=1 fi; if grep -Pzo '"\w+" = \(\n[^)]*?/area/.+?,\n[^)]*?/area/.+?\)' _maps/**/*.dmm; then - echo "ERROR: Multiple areas detected on the same tile! Please choose only one area!" + echo + echo -e "${RED}ERROR: Multiple areas detected on the same tile! Please choose only one area!${NC}" st=1 fi; -if grep -P '^/*var/' code/**/*.dm; then - echo "ERROR: Unmanaged global var use detected in code, please use the helpers." +if grep -ni 'nanotransen' _maps/**/*.dmm; then + echo + echo -e "${RED}ERROR: Misspelling of Nanotrasen detected in maps, please remove the extra N(s).${NC}" st=1 fi; -echo "Checking for whitespace issues" +if grep -i 'centcomm' _maps/**/*.dmm; then + echo + echo -e "${RED}ERROR: Misspelling(s) of CentCom detected in maps, please remove the extra M(s).${NC}" + st=1 +fi; + +echo -e "${BLUE}Checking for whitespace issues...${NC}" + if grep -P '(^ {2})|(^ [^ * ])|(^ +)' code/**/*.dm; then - echo "ERROR: space indentation detected" + echo + echo -e "${RED}ERROR: Space indentation detected, please use tab indentation.${NC}" st=1 fi; if grep -P '^\t+ [^ *]' code/**/*.dm; then - echo "ERROR: mixed indentation detected" + echo + echo -e "${RED}ERROR: Mixed indentation detected, please stick to tab indentation.${NC}" st=1 fi; nl=' @@ -181,41 +211,47 @@ nl=$'\n' while read f; do t=$(tail -c2 "$f"; printf x); r1="${nl}$"; r2="${nl}${r1}" if [[ ! ${t%x} =~ $r1 ]]; then - echo "file $f is missing a trailing newline" + echo + echo -e "${RED}ERROR: file $f is missing a trailing newline.${NC}" st=1 fi; done < <(find . -type f -name '*.dm') -echo "Checking for common mistakes" + +echo -e "${BLUE}Checking for common mistakes...${NC}" + +if grep -P '^/*var/' code/**/*.dm; then + echo + echo -e "${RED}ERROR: Unmanaged global var use detected in code, please use the helpers.${NC}" + st=1 +fi; if grep -P '^/[\w/]\S+\(.*(var/|, ?var/.*).*\)' code/**/*.dm; then - echo "changed files contains proc argument starting with 'var'" + echo + echo -e "${RED}ERROR: Changed files contains a proc argument starting with 'var'.${NC}" st=1 fi; if grep 'balloon_alert\(".+"\)' code/**/*.dm; then - echo "ERROR: Balloon alert with improper arguments." + echo + echo -e "${RED}ERROR: Found a balloon alert with improper arguments.${NC}" st=1 fi; if grep -i 'centcomm' code/**/*.dm; then - echo "ERROR: Misspelling(s) of CENTCOM detected in code, please remove the extra M(s)." - st=1 -fi; -if grep -i 'centcomm' _maps/**/*.dmm; then - echo "ERROR: Misspelling(s) of CENTCOM detected in maps, please remove the extra M(s)." + echo + echo -e "${RED}ERROR: Misspelling(s) of CentCom detected in code, please remove the extra M(s).${NC}" st=1 fi; if grep -ni 'nanotransen' code/**/*.dm; then - echo "Misspelling(s) of nanotrasen detected in code, please remove the extra N(s)." - st=1 -fi; -if grep -ni 'nanotransen' _maps/**/*.dmm; then - echo "Misspelling(s) of nanotrasen detected in maps, please remove the extra N(s)." + echo + echo -e "${RED}ERROR: Misspelling(s) of Nanotrasen detected in code, please remove the extra N(s).${NC}" st=1 fi; if ls _maps/*.json | grep -P "[A-Z]"; then - echo "Uppercase in a map json detected, these must be all lowercase." + echo + echo -e "${RED}ERROR: Uppercase in a map .JSON file detected, these must be all lowercase.${NC}" st=1 fi; if grep -i '/obj/effect/mapping_helpers/custom_icon' _maps/**/*.dmm; then - echo "Custom icon helper found. Please include dmis as standard assets instead for built-in maps." + echo + echo -e "${RED}ERROR: Custom icon helper found. Please include DMI files as standard assets instead for repository maps.${NC}" st=1 fi; for json in _maps/*.json @@ -225,10 +261,21 @@ do filename="_maps/$map_path/$map_file" if [ ! -f $filename ] then - echo "found invalid file reference to $filename in _maps/$json" + echo + echo -e "${RED}ERROR: Found an invalid file reference to $filename in _maps/$json ${NC}" st=1 fi done < <(jq -r '[.map_file] | flatten | .[]' $json) done +if [ $st = 0 ]; then + echo + echo -e "${GREEN}No errors found using grep!${NC}" +fi; + +if [ $st = 1 ]; then + echo + echo -e "${RED}Errors found, please fix them and try again.${NC}" +fi; + exit $st