mirror of
				https://github.com/koalaman/shellcheck.git
				synced 2025-10-31 14:39:20 +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;
 | |
|     }
 | |
| 
 | |
|     /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
 | |
| 
 |