From cd50caf64ce5057de792b918f37543c56877e8d0 Mon Sep 17 00:00:00 2001 From: scbj Date: Tue, 21 Apr 2026 14:35:55 +0200 Subject: [PATCH] (scripts) extended whitespace remover script --- scripts/trailing-whitespace.sh | 143 ++++++++++++++++++--------------- 1 file changed, 80 insertions(+), 63 deletions(-) diff --git a/scripts/trailing-whitespace.sh b/scripts/trailing-whitespace.sh index a0e9ca6..da04b80 100755 --- a/scripts/trailing-whitespace.sh +++ b/scripts/trailing-whitespace.sh @@ -1,105 +1,122 @@ #!/usr/bin/env bash function remove-whitespace { + # exclude file types + # (ignore generated files/directories) + exclude_paths=( + "*/.git/*" + ) + exclude_files=( + "*.lst" + "*.map" + "*.svd" + "*.sym" + ) - unset line_endings unset help - unset quiet + unset silent + unset no_action + unset path_args + unset file_args + unset ffunix unset files for arg in $@; do case ${arg} in - "-e" | "--eol" | "--end-of-line") - line_endings="true" + "-u" | "--unix") + ffunix="true" continue ;; "-h" | "--help" | "-help") help="true" continue ;; - "-n" | "--quiet") - quiet="true" + "-n" | "--no-action") + no_action="true" + continue + ;; + "-s" | "--silent") + silent="true" continue ;; *) ;; esac - if [[ -f "${arg}" ]]; then - grep -Iq . "${arg}" && files=(${files} "${arg}") - continue - fi if [[ -d "${arg}" ]]; then - files=(${files} $(find "${arg}" \ - -not -path "*/.git/*" \ - -not -name "*.lst" \ - -not -name "*.map" \ - -not -name "*.svd" \ - -not -name "*.sym" \ - -type f \ - -exec grep -Iq . {} \; \ - -print)) + path_args+=("${arg}") + continue + elif [[ -f "${arg}" ]]; then + file_args+=("${arg}") continue fi + + echo "(unrecognised argument: '${arg}')" done - ## search current directory if no argument is provided - if [[ -z "${files[@]}" ]]; then - files=($(find . \ - -not -path "*/.git/*" \ - -not -name "*.lst" \ - -not -name "*.map" \ - -not -name "*.svd" \ - -not -name "*.sym" \ - -type f \ - -exec grep -Iq . {} \; \ - -print)) + if [[ -n "${ffunix}" ]]; then + sed_cmd='s/[[:space:]]\+$//' + grep_regex=$'[[:space:]]+$' + else + sed_cmd='s/[[:blank:]]\+\(\r\?\)$/\1/' + grep_regex=$'[[:blank:]]+\r?$' fi - if [[ -n "${dir_arg}" ]] && [[ -n "${file_arg}" ]]; then - help="true" - fi + for arg in ${path_args[@]}; do + files+=($( + find "${arg}" \ + "${exclude_paths[@]/#/-not -path }" \ + "${exclude_files[@]/#/-not -name }" \ + -type f \ + -exec grep -EIq "${grep_regex}" {} \; \ + -print + )) + done + for arg in ${file_args[@]}; do + grep -EIq "${grep_regex}" ${arg} && files+=("${arg}") + done - if [[ -n "${help}" ]]; then - echo "Usage: remove-whitespace [-h] [-n] path [path]" - echo "" - echo "Remove trailing whitespace from plain text files." - echo "Path points to either a file or directory, or both." - echo "Directories are search recursively for non binary." - echo "If no paths are provided, the current working" - echo "directory is search for plain text files." - echo "" - echo "Options:" - echo " -e, --eol," - echo " --end-of-line convert all line endings to unix style" - echo " line endings" - echo " -h, --help show this help" - echo " -n, --quiet suppress output" + if [[ -n "${help}" ]] || [[ -z "${files[@]}" ]]; then + cat <