check-style.sh revision 11986
111986Sandreas.sandberg@arm.com#!/bin/bash
211986Sandreas.sandberg@arm.com# 
311986Sandreas.sandberg@arm.com# Script to check include/test code for common pybind11 code style errors.
411986Sandreas.sandberg@arm.com# 
511986Sandreas.sandberg@arm.com# This script currently checks for
611986Sandreas.sandberg@arm.com#
711986Sandreas.sandberg@arm.com# 1. use of tabs instead of spaces
811986Sandreas.sandberg@arm.com# 2. MSDOS-style CRLF endings
911986Sandreas.sandberg@arm.com# 3. trailing spaces
1011986Sandreas.sandberg@arm.com# 4. missing space between keyword and parenthesis, e.g.: for(, if(, while(
1111986Sandreas.sandberg@arm.com# 5. Missing space between right parenthesis and brace, e.g. 'for (...){'
1211986Sandreas.sandberg@arm.com# 6. opening brace on its own line. It should always be on the same line as the
1311986Sandreas.sandberg@arm.com#    if/while/for/do statment.
1411986Sandreas.sandberg@arm.com# 
1511986Sandreas.sandberg@arm.com# Invoke as: tools/check-style.sh
1611986Sandreas.sandberg@arm.com#
1711986Sandreas.sandberg@arm.com
1811986Sandreas.sandberg@arm.comerrors=0
1911986Sandreas.sandberg@arm.comIFS=$'\n'
2011986Sandreas.sandberg@arm.comfound=
2111986Sandreas.sandberg@arm.com# The mt=41 sets a red background for matched tabs:
2211986Sandreas.sandberg@arm.comexec 3< <(GREP_COLORS='mt=41' grep $'\t' include/ tests/*.{cpp,py,h} docs/*.rst -rn --color=always)
2311986Sandreas.sandberg@arm.comwhile read -u 3 f; do
2411986Sandreas.sandberg@arm.com    if [ -z "$found" ]; then
2511986Sandreas.sandberg@arm.com        echo -e '\e[31m\e[01mError: found tabs instead of spaces in the following files:\e[0m'
2611986Sandreas.sandberg@arm.com        found=1
2711986Sandreas.sandberg@arm.com        errors=1
2811986Sandreas.sandberg@arm.com    fi
2911986Sandreas.sandberg@arm.com
3011986Sandreas.sandberg@arm.com    echo "    $f"
3111986Sandreas.sandberg@arm.comdone
3211986Sandreas.sandberg@arm.com
3311986Sandreas.sandberg@arm.comfound=
3411986Sandreas.sandberg@arm.com# The mt=41 sets a red background for matched MS-DOS CRLF line endings
3511986Sandreas.sandberg@arm.comexec 3< <(GREP_COLORS='mt=41' grep -IUlr $'\r' include/ tests/*.{cpp,py,h} docs/*.rst --color=always)
3611986Sandreas.sandberg@arm.comwhile read -u 3 f; do
3711986Sandreas.sandberg@arm.com    if [ -z "$found" ]; then
3811986Sandreas.sandberg@arm.com        echo -e '\e[31m\e[01mError: found CRLF characters in the following files:\e[0m'
3911986Sandreas.sandberg@arm.com        found=1
4011986Sandreas.sandberg@arm.com        errors=1
4111986Sandreas.sandberg@arm.com    fi
4211986Sandreas.sandberg@arm.com
4311986Sandreas.sandberg@arm.com    echo "    $f"
4411986Sandreas.sandberg@arm.comdone
4511986Sandreas.sandberg@arm.com
4611986Sandreas.sandberg@arm.comfound=
4711986Sandreas.sandberg@arm.com# The mt=41 sets a red background for matched trailing spaces
4811986Sandreas.sandberg@arm.comexec 3< <(GREP_COLORS='mt=41' grep '\s\+$' include/ tests/*.{cpp,py,h} docs/*.rst -rn --color=always)
4911986Sandreas.sandberg@arm.comwhile read -u 3 f; do
5011986Sandreas.sandberg@arm.com    if [ -z "$found" ]; then
5111986Sandreas.sandberg@arm.com        echo -e '\e[31m\e[01mError: found trailing spaces in the following files:\e[0m'
5211986Sandreas.sandberg@arm.com        found=1
5311986Sandreas.sandberg@arm.com        errors=1
5411986Sandreas.sandberg@arm.com    fi
5511986Sandreas.sandberg@arm.com
5611986Sandreas.sandberg@arm.com    echo "    $f"
5711986Sandreas.sandberg@arm.comdone
5811986Sandreas.sandberg@arm.com
5911986Sandreas.sandberg@arm.comfound=
6011986Sandreas.sandberg@arm.comexec 3< <(grep '\<\(if\|for\|while\|catch\)(\|){' include/ tests/*.{cpp,py,h} -rn --color=always)
6111986Sandreas.sandberg@arm.comwhile read -u 3 line; do
6211986Sandreas.sandberg@arm.com    if [ -z "$found" ]; then
6311986Sandreas.sandberg@arm.com        echo -e '\e[31m\e[01mError: found the following coding style problems:\e[0m'
6411986Sandreas.sandberg@arm.com        found=1
6511986Sandreas.sandberg@arm.com        errors=1
6611986Sandreas.sandberg@arm.com    fi
6711986Sandreas.sandberg@arm.com
6811986Sandreas.sandberg@arm.com    echo "    $line"
6911986Sandreas.sandberg@arm.comdone
7011986Sandreas.sandberg@arm.com
7111986Sandreas.sandberg@arm.comfound=
7211986Sandreas.sandberg@arm.comexec 3< <(GREP_COLORS='mt=41' grep '^\s*{\s*$' include/ docs/*.rst -rn --color=always)
7311986Sandreas.sandberg@arm.comwhile read -u 3 f; do
7411986Sandreas.sandberg@arm.com    if [ -z "$found" ]; then
7511986Sandreas.sandberg@arm.com        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'
7611986Sandreas.sandberg@arm.com        found=1
7711986Sandreas.sandberg@arm.com        errors=1
7811986Sandreas.sandberg@arm.com    fi
7911986Sandreas.sandberg@arm.com
8011986Sandreas.sandberg@arm.com    echo "    $f"
8111986Sandreas.sandberg@arm.comdone
8211986Sandreas.sandberg@arm.com
8311986Sandreas.sandberg@arm.comexit $errors
84