 ae85695543
			
		
	
	
		ae85695543
		
	
	
	
	
		
			
			* Update run-tests to make use of /usr/bin/env * Update run-vint * Update run-vader-tests * Update custom-linting-rules * Update custom-checks * Update check-toc * Update check-supported-tools-tables
		
			
				
	
	
		
			99 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| 
 | |
| set -e
 | |
| set -u
 | |
| 
 | |
| # This Bash script implements custom sanity checks for scripts beyond what
 | |
| # Vint covers, which are easy to check with regex.
 | |
| 
 | |
| # A flag for automatically fixing some errors.
 | |
| FIX_ERRORS=0
 | |
| RETURN_CODE=0
 | |
| 
 | |
| function print_help() {
 | |
|     echo "Usage: test/script/custom-linting-rules [--fix] [DIRECTORY]" 1>&2
 | |
|     echo 1>&2
 | |
|     echo "  -h, --help    Print this help text" 1>&2
 | |
|     echo "      --fix     Automatically fix some errors" 1>&2
 | |
|     exit 1
 | |
| }
 | |
| 
 | |
| while [ $# -ne 0 ]; do
 | |
|     case $1 in
 | |
|     -h) ;& --help)
 | |
|         print_help
 | |
|     ;;
 | |
|     --fix)
 | |
|         FIX_ERRORS=1
 | |
|         shift
 | |
|     ;;
 | |
|     --)
 | |
|         shift
 | |
|         break
 | |
|     ;;
 | |
|     -?*)
 | |
|         echo "Invalid argument: $1" 1>&2
 | |
|         exit 1
 | |
|     ;;
 | |
|     *)
 | |
|         break
 | |
|     ;;
 | |
|     esac
 | |
| done
 | |
| 
 | |
| if [ $# -eq 0 ] || [ -z "$1" ]; then
 | |
|     print_help
 | |
| fi
 | |
| 
 | |
| shopt -s globstar
 | |
| 
 | |
| directories=("$@")
 | |
| 
 | |
| check_errors() {
 | |
|     regex="$1"
 | |
|     message="$2"
 | |
| 
 | |
|     for directory in "${directories[@]}"; do
 | |
|         while IFS= read -r match; do
 | |
|             RETURN_CODE=1
 | |
|             echo "$match $message"
 | |
|         done < <(grep -n "$regex" "$directory"/**/*.vim \
 | |
|             | grep -v 'no-custom-checks' \
 | |
|             | grep -o '^[^:]\+:[0-9]\+' \
 | |
|             | sed 's:^\./::')
 | |
|     done
 | |
| }
 | |
| 
 | |
| if (( FIX_ERRORS )); then
 | |
|     for directory in "${directories[@]}"; do
 | |
|         sed -i "s/^\(function.*)\) *$/\1 abort/" "$directory"/**/*.vim
 | |
|         sed -i "s/shellescape(/ale#Escape(/" "$directory"/**/*.vim
 | |
|         sed -i 's/==#/is#/g' "$directory"/**/*.vim
 | |
|         sed -i 's/==?/is?/g' "$directory"/**/*.vim
 | |
|         sed -i 's/!=#/isnot#/g' "$directory"/**/*.vim
 | |
|         sed -i 's/!=?/isnot?/g' "$directory"/**/*.vim
 | |
|     done
 | |
| fi
 | |
| 
 | |
| check_errors \
 | |
|     '^function.*) *$' \
 | |
|     'Function without abort keyword (See :help except-compat)'
 | |
| check_errors '^function[^!]' 'function without !'
 | |
| check_errors ' \+$' 'Trailing whitespace'
 | |
| check_errors '^ * end\?i\? *$' 'Write endif, not en, end, or endi'
 | |
| check_errors '^  [^ ]' 'Use four spaces, not two spaces'
 | |
| check_errors $'\t' 'Use four spaces, not tabs'
 | |
| # This check should prevent people from using a particular inconsistent name.
 | |
| check_errors 'let g:ale_\w\+_\w\+_args =' 'Name your option g:ale_<filetype>_<lintername>_options instead'
 | |
| check_errors 'shellescape(' 'Use ale#Escape instead of shellescape'
 | |
| check_errors 'simplify(' 'Use ale#path#Simplify instead of simplify'
 | |
| check_errors "expand(['\"]%" "Use expand('#' . a:buffer . '...') instead. You might get a filename for the wrong buffer."
 | |
| check_errors 'getcwd()' "Do not use getcwd(), as it could run from the wrong buffer. Use expand('#' . a:buffer . ':p:h') instead."
 | |
| check_errors '==#' "Use 'is#' instead of '==#'. 0 ==# 'foobar' is true"
 | |
| check_errors '==?' "Use 'is?' instead of '==?'. 0 ==? 'foobar' is true"
 | |
| check_errors '!=#' "Use 'isnot#' instead of '!=#'. 0 !=# 'foobar' is false"
 | |
| check_errors '!=?' "Use 'isnot?' instead of '!=?'. 0 !=? 'foobar' is false"
 | |
| check_errors '^ *:\?echo' "Stray echo line. Use \`execute echo\` if you want to echo something"
 | |
| 
 | |
| exit $RETURN_CODE
 |