| 
									
										
										
										
											2017-01-22 14:54:57 +00:00
										 |  |  | #!/bin/bash -eu | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # 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: ./custom-checks [--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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-07 00:16:35 +00:00
										 |  |  | shopt -s globstar | 
					
						
							| 
									
										
										
										
											2017-01-22 14:54:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-27 20:09:23 +00:00
										 |  |  | directories=("$@") | 
					
						
							| 
									
										
										
										
											2017-02-21 11:50:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-07 00:16:35 +00:00
										 |  |  | check_errors() { | 
					
						
							|  |  |  |     regex="$1" | 
					
						
							|  |  |  |     message="$2" | 
					
						
							| 
									
										
										
										
											2017-02-21 11:50:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-27 20:09:23 +00:00
										 |  |  |     for directory in "${directories[@]}"; do | 
					
						
							|  |  |  |         while IFS= read -r match; do | 
					
						
							|  |  |  |             RETURN_CODE=1 | 
					
						
							|  |  |  |             echo "$match $message" | 
					
						
							|  |  |  |         done < <(grep -n "$regex" "$directory"/**/*.vim \ | 
					
						
							| 
									
										
										
										
											2017-06-06 09:22:52 +00:00
										 |  |  |             | grep -v 'no-custom-checks' \ | 
					
						
							| 
									
										
										
										
											2017-04-27 20:09:23 +00:00
										 |  |  |             | grep -o '^[^:]\+:[0-9]\+' \ | 
					
						
							|  |  |  |             | sed 's:^\./::') | 
					
						
							| 
									
										
										
										
											2017-03-07 00:16:35 +00:00
										 |  |  |     done | 
					
						
							| 
									
										
										
										
											2017-01-22 14:54:57 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-07 00:16:35 +00:00
										 |  |  | if (( FIX_ERRORS )); then | 
					
						
							| 
									
										
										
										
											2017-04-27 20:09:23 +00:00
										 |  |  |     for directory in "${directories[@]}"; do | 
					
						
							|  |  |  |         sed -i "s/^\(function.*)\) *$/\1 abort/" "$directory"/**/*.vim | 
					
						
							| 
									
										
										
										
											2017-05-15 19:21:18 +00:00
										 |  |  |         sed -i "s/shellescape(/ale#Escape(/" "$directory"/**/*.vim | 
					
						
							| 
									
										
										
										
											2017-08-08 07:39:13 +00:00
										 |  |  |         sed -i 's/==#/is#/g' "$directory"/**/*.vim | 
					
						
							|  |  |  |         sed -i 's/==?/is?/g' "$directory"/**/*.vim | 
					
						
							| 
									
										
										
										
											2017-08-10 23:31:42 +00:00
										 |  |  |         sed -i 's/!=#/isnot#/g' "$directory"/**/*.vim | 
					
						
							|  |  |  |         sed -i 's/!=?/isnot?/g' "$directory"/**/*.vim | 
					
						
							| 
									
										
										
										
											2017-04-27 20:09:23 +00:00
										 |  |  |     done | 
					
						
							| 
									
										
										
										
											2017-03-07 00:16:35 +00:00
										 |  |  | fi | 
					
						
							| 
									
										
										
										
											2017-01-22 14:54:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-07 00:16:35 +00:00
										 |  |  | check_errors \ | 
					
						
							| 
									
										
										
										
											2017-04-15 11:52:25 +00:00
										 |  |  |     '^function.*) *$' \ | 
					
						
							| 
									
										
										
										
											2017-03-07 00:16:35 +00:00
										 |  |  |     'Function without abort keyword (See :help except-compat)' | 
					
						
							| 
									
										
										
										
											2017-09-10 23:47:10 +00:00
										 |  |  | check_errors '^function[^!]' 'function without !' | 
					
						
							| 
									
										
										
										
											2017-04-15 11:52:25 +00:00
										 |  |  | 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' | 
					
						
							| 
									
										
										
										
											2017-04-15 12:35:54 +00:00
										 |  |  | # 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' | 
					
						
							| 
									
										
										
										
											2017-05-15 19:21:18 +00:00
										 |  |  | check_errors 'shellescape(' 'Use ale#Escape instead of shellescape' | 
					
						
							| 
									
										
										
										
											2017-07-05 14:51:31 +00:00
										 |  |  | check_errors 'simplify(' 'Use ale#path#Simplify instead of simplify' | 
					
						
							| 
									
										
										
										
											2017-06-06 09:22:52 +00:00
										 |  |  | check_errors "expand(['\"]%" "Use expand('#' . a:buffer . '...') instead. You might get a filename for the wrong buffer." | 
					
						
							| 
									
										
										
										
											2017-09-12 08:36:16 +00:00
										 |  |  | check_errors 'getcwd()' "Do not use getcwd(), as it could run from the wrong buffer. Use expand('#' . a:buffer . ':p:h') instead." | 
					
						
							| 
									
										
										
										
											2017-08-08 07:39:13 +00:00
										 |  |  | check_errors '==#' "Use 'is#' instead of '==#'. 0 ==# 'foobar' is true" | 
					
						
							|  |  |  | check_errors '==?' "Use 'is?' instead of '==?'. 0 ==? 'foobar' is true" | 
					
						
							| 
									
										
										
										
											2017-08-10 23:31:42 +00:00
										 |  |  | check_errors '!=#' "Use 'isnot#' instead of '!=#'. 0 !=# 'foobar' is false" | 
					
						
							|  |  |  | check_errors '!=?' "Use 'isnot?' instead of '!=?'. 0 !=? 'foobar' is false" | 
					
						
							| 
									
										
										
										
											2017-01-22 14:54:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | exit $RETURN_CODE |