mirror of
				https://github.com/koalaman/shellcheck.git
				synced 2025-11-04 18:28:23 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			79 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
# This file strips all unit tests from ShellCheck, removing
 | 
						|
# the dependency on QuickCheck and Template Haskell and
 | 
						|
# reduces the binary size considerably.
 | 
						|
set -o pipefail
 | 
						|
 | 
						|
sponge() {
 | 
						|
  local data
 | 
						|
  data="$(cat)"
 | 
						|
  printf '%s\n' "$data" > "$1"
 | 
						|
}
 | 
						|
 | 
						|
modify() {
 | 
						|
  if ! "${@:2}" < "$1" | sponge "$1"
 | 
						|
  then
 | 
						|
    {
 | 
						|
      printf 'Failed to modify %s: ' "$1"
 | 
						|
      printf '%q ' "${@:2}"
 | 
						|
      printf '\n'
 | 
						|
    } >&2
 | 
						|
    exit 1
 | 
						|
  fi
 | 
						|
}
 | 
						|
 | 
						|
detestify() {
 | 
						|
  printf '%s\n' '-- AUTOGENERATED from ShellCheck by striptests. Do not modify.'
 | 
						|
  awk '
 | 
						|
    BEGIN {
 | 
						|
      state = 0;
 | 
						|
    }
 | 
						|
 | 
						|
    /STRIP/ { next; }
 | 
						|
    /LANGUAGE TemplateHaskell/ { next; }
 | 
						|
    /^import.*Test\./ { next; }
 | 
						|
 | 
						|
    /^module/ {
 | 
						|
      sub(/,[^,)]*runTests/, "");
 | 
						|
    }
 | 
						|
 | 
						|
    # Delete tests
 | 
						|
    /^prop_/ { state = 1; next; }
 | 
						|
 | 
						|
    # ..and any blank lines following them.
 | 
						|
    state == 1 && /^ / { next; }
 | 
						|
 | 
						|
    # Template Haskell marker
 | 
						|
    /^return / {
 | 
						|
      exit;
 | 
						|
    }
 | 
						|
 | 
						|
    { state = 0; print; }
 | 
						|
    '
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
if [[ ! -e 'ShellCheck.cabal' ]]
 | 
						|
then
 | 
						|
  echo "Run me from the ShellCheck directory." >&2
 | 
						|
  exit 1
 | 
						|
fi
 | 
						|
 | 
						|
if [[ -d '.git' ]] && ! git diff --exit-code > /dev/null 2>&1
 | 
						|
then
 | 
						|
  echo "You have local changes! These may be overwritten." >&2
 | 
						|
  exit 2
 | 
						|
fi
 | 
						|
 | 
						|
modify 'ShellCheck.cabal' sed -e '
 | 
						|
  /QuickCheck/d
 | 
						|
  /^test-suite/{ s/.*//; q; }
 | 
						|
  '
 | 
						|
 | 
						|
find . -name '.git' -prune -o -type f -name '*.hs' -print |
 | 
						|
  while IFS= read -r file
 | 
						|
  do
 | 
						|
    modify "$file" detestify
 | 
						|
  done
 |