diff --git a/Library/Homebrew/utils/shfmt.sh b/Library/Homebrew/utils/shfmt.sh index 5b00521c13..dcae0f0c9d 100755 --- a/Library/Homebrew/utils/shfmt.sh +++ b/Library/Homebrew/utils/shfmt.sh @@ -49,6 +49,7 @@ do SHFMT_ARGS+=("${arg}") shift done +unset arg FILES=() for file in "$@" @@ -66,6 +67,7 @@ do exit 1 fi done +unset file if [[ "${#FILES[@]}" == 0 ]] then @@ -76,6 +78,32 @@ fi ### Custom shell script styling ### +# Check for specific patterns and prompt messages if detected +no_forbidden_patten() { + local file="$1" + local tempfile="$2" + local subject="$3" + local message="$4" + local regex_pos="$5" + local regex_neg="${6:-}" + local line + local num=0 + local retcode=0 + + while IFS='' read -r line + do + num="$((num + 1))" + if [[ "${line}" =~ ${regex_pos} ]] && + [[ -z "${regex_neg}" || ! "${line}" =~ ${regex_neg} ]] + then + onoe "${subject} detected at \"${file}\", line ${num}." + [[ -n "${message}" ]] && onoe "${message}" + retcode=1 + fi + done <"${file}" + return "${retcode}" +} + # Check pattern: # '^\t+' # @@ -84,22 +112,12 @@ fi no_tabs() { local file="$1" local tempfile="$2" - local line - local num=0 - local retcode=0 - local regex_pos='^[[:space:]]+' - local regex_neg='^ +' - while IFS='' read -r line - do - num="$((num + 1))" - if [[ "${line}" =~ ${regex_pos} && ! "${line}" =~ ${regex_neg} ]] - then - onoe "Indent by tab detected at \"${file}\", line ${num}." - retcode=1 - fi - done <"${file}" - return "${retcode}" + no_forbidden_patten "${file}" "${tempfile}" \ + "Indent with tab" \ + 'Replace tabs with 2 spaces instead.' \ + '^[[:space:]]+' \ + '^ +' } # Check pattern: @@ -116,18 +134,10 @@ no_tabs() { no_multiline_for_statements() { local file="$1" local tempfile="$2" - local line - local num=0 - local retcode=0 local regex='^ *for [_[:alnum:]]+ in .*\\$' - - while IFS='' read -r line - do - num="$((num + 1))" - if [[ "${line}" =~ ${regex} ]] - then - onoe "Multiline for statement detected at \"${file}\", line ${num}." - cat >&2 <&2 </dev/null' RETURN cp -af "${file}" "${tempfile}" @@ -325,15 +330,12 @@ format() { # Format with `shfmt` first if ! "${SHFMT}" -w "${SHFMT_ARGS[@]}" "${tempfile}" then - onoe "Failed to run \`shfmt\`" + onoe "Failed to run \`shfmt\` for file \"${file}\"." return 1 fi - # Fail fast when forbidden patterns detected - if ! no_forbiddens "${file}" "${tempfile}" - then - return 2 - fi + # Fail fast when forbidden styles detected + ! no_forbidden_styles "${file}" "${tempfile}" && return 2 # Tweak it with custom shell script styles wrap_then_do "${file}" "${tempfile}"