check-style.sh revision 11986:c12e4625ab56
1#!/bin/bash 2# 3# Script to check include/test code for common pybind11 code style errors. 4# 5# This script currently checks for 6# 7# 1. use of tabs instead of spaces 8# 2. MSDOS-style CRLF endings 9# 3. trailing spaces 10# 4. missing space between keyword and parenthesis, e.g.: for(, if(, while( 11# 5. Missing space between right parenthesis and brace, e.g. 'for (...){' 12# 6. opening brace on its own line. It should always be on the same line as the 13# if/while/for/do statment. 14# 15# Invoke as: tools/check-style.sh 16# 17 18errors=0 19IFS=$'\n' 20found= 21# The mt=41 sets a red background for matched tabs: 22exec 3< <(GREP_COLORS='mt=41' grep $'\t' include/ tests/*.{cpp,py,h} docs/*.rst -rn --color=always) 23while read -u 3 f; do 24 if [ -z "$found" ]; then 25 echo -e '\e[31m\e[01mError: found tabs instead of spaces in the following files:\e[0m' 26 found=1 27 errors=1 28 fi 29 30 echo " $f" 31done 32 33found= 34# The mt=41 sets a red background for matched MS-DOS CRLF line endings 35exec 3< <(GREP_COLORS='mt=41' grep -IUlr $'\r' include/ tests/*.{cpp,py,h} docs/*.rst --color=always) 36while read -u 3 f; do 37 if [ -z "$found" ]; then 38 echo -e '\e[31m\e[01mError: found CRLF characters in the following files:\e[0m' 39 found=1 40 errors=1 41 fi 42 43 echo " $f" 44done 45 46found= 47# The mt=41 sets a red background for matched trailing spaces 48exec 3< <(GREP_COLORS='mt=41' grep '\s\+$' include/ tests/*.{cpp,py,h} docs/*.rst -rn --color=always) 49while read -u 3 f; do 50 if [ -z "$found" ]; then 51 echo -e '\e[31m\e[01mError: found trailing spaces in the following files:\e[0m' 52 found=1 53 errors=1 54 fi 55 56 echo " $f" 57done 58 59found= 60exec 3< <(grep '\<\(if\|for\|while\|catch\)(\|){' include/ tests/*.{cpp,py,h} -rn --color=always) 61while read -u 3 line; do 62 if [ -z "$found" ]; then 63 echo -e '\e[31m\e[01mError: found the following coding style problems:\e[0m' 64 found=1 65 errors=1 66 fi 67 68 echo " $line" 69done 70 71found= 72exec 3< <(GREP_COLORS='mt=41' grep '^\s*{\s*$' include/ docs/*.rst -rn --color=always) 73while read -u 3 f; do 74 if [ -z "$found" ]; then 75 echo -e '\e[31m\e[01mError: braces should occur on the same line as the if/while/.. statement. Found issues in the following files: \e[0m' 76 found=1 77 errors=1 78 fi 79 80 echo " $f" 81done 82 83exit $errors 84