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