Skip to content

Instantly share code, notes, and snippets.

@skfarhat
Last active August 3, 2016 13:06
Show Gist options
  • Save skfarhat/0c2ec62388214ea93a2f2b72ca6704b7 to your computer and use it in GitHub Desktop.
Save skfarhat/0c2ec62388214ea93a2f2b72ca6704b7 to your computer and use it in GitHub Desktop.
#!/bin/bash
# lint.sh
# This script is meant to sit alongside cpplint.py
#TODO(sami): add 'option' do same for all, so that lint doesn't keep asking
# for each file when you've already said no for the first one
#TODO(sami): add another mode to this script, one is commit-mode the other is
# normal mode, useful for when the user wants to check the linting of the script
# outside of commit environment
#TODO(sami): ensure cpplint.py is executable
exec < /dev/tty
# color stuff
export CLICOLOR=1
export LSCOLORS=ExFxCxDxBxegedabagacad
RED="$(tput setaf 1)"
CLEAR="$(tput sgr0)"
# get the script directory this is useful,
# for when lint.sh is not run from its own directory but from outside
# Note: this does not follow symlinks
SCRIPT_DIR="$(cd -P $(dirname ${BASH_SOURCE[0]}) && pwd)"
SCRIPT_PATH="$SCRIPT_DIR/$(basename $0)"
# main executable
CPPLINT="$SCRIPT_DIR/cpplint.py"
OUTPUT_FILE="$SCRIPT_DIR/linting.log"
# insure that cpplint.py resides in the same directory as lint.sh
if [ ! -f $CPPLINT ]; then
echo "Could not find cpplint.py, it should be in the same directory as lint.sh"
exit 1
fi
#FILTERS='--filter='
#build/header_guard
#build/include
#build/include_alpha
#build/include_order
#build/include_what_you_use
#build/namespaces
#build/printf_format
#build/storage_class
#readability/alt_tokens
#readability/braces
#readability/casting
#readability/check
#readability/constructors
#readability/fn_size
#readability/inheritance
#readability/multiline_comment
#readability/multiline_string
#readability/namespace
#readability/nolint
#readability/nul
#readability/strings
#readability/todo
#readability/utf8
#runtime/arrays
#runtime/casting
#runtime/explicit
#runtime/int
#runtime/init
#runtime/invalid_increment
#runtime/member_string_references
#runtime/memset
#runtime/indentation_namespace
#runtime/operator
#runtime/printf
#runtime/printf_format
#runtime/references
#runtime/string
#runtime/threadsafe_fn
#runtime/vlog
#whitespace/blank_line
#whitespace/braces
#whitespace/comma
#whitespace/comments
#whitespace/empty_conditional_body
#whitespace/empty_if_body
#whitespace/empty_loop_body
#whitespace/end_of_line
#whitespace/ending_newline
#whitespace/forcolon
#whitespace/indent
#whitespace/line_length
#whitespace/newline
#whitespace/operators
#whitespace/parens
#whitespace/semicolon
#whitespace/tab
#whitespace/todo
# execute cpplint.py
EXTENSIONS="--extensions=hpp,cpp,c,h"
lint_out="$($CPPLINT $EXTENSIONS $FILTERS $@ 2>&1)"
# TODO(sami): check what the python pass is in bash
if [ $? -eq 0 ]; then
# brilliant no issue
echo ""
exit 0
else
# ask the use if they want to see the errors
errcount=$(echo "${lint_out}" | grep -e "Total errors found" | grep -Eo "[0-9]+")
echo "cpplint.py detected $RED$errcount$CLEAR lint errors for file $1"
echo "Do you want to abort commit?"
echo "(0) Continue anyway"
echo "(1) Abort"
echo "(2) Abort and view log"
read choice
if [ "$choice" -eq 1 ]; then
echo "Aborting commit"
exit 1
elif [ "$choice" -eq 2 ]; then
#TODO(sami): check that this actually works
echo "Aborting commit"
less $OUTPUT_FILE
exit 1
elif [ "$choice" -eq 0 ];then
# proceed with commit
echo "Proceeding with commit.."
exit 0
fi
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment