#!/bin/bash
#

# Copyright (C) 2009, 2011 Google Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

set -e

# Ensure the checks always use the same locale
export LC_ALL=C

readonly maxlinelen=$(for ((i=0; i<81; ++i)); do echo -n .; done)

if [[ "${#maxlinelen}" != 81 ]]; then
  echo "Internal error: Check for line length is incorrect" >&2
  exit 1
fi

# "[...] If the last ARG evaluates to 0, let returns 1; 0 is returned
# otherwise.", hence ignoring the return value.
let problems=0 || :

for script; do
  if grep -n -H -F $'\t' "$script"; then
    let ++problems
    echo "Found tabs in $script" >&2
  fi

  if grep -n -H -E '[[:space:]]$' "$script"; then
    let ++problems
    echo "Found end-of-line-whitespace in $script" >&2
  fi

  # FIXME: This will also match "foo.xrange(...)"
  if grep -n -H -E '^[^#]*\<xrange\>' "$script"; then
    let ++problems
    echo "Forbidden function 'xrange' used in $script" >&2
  fi

  if grep -n -H -E -i '#[[:space:]]*(vim|Local[[:space:]]+Variables):' "$script"
  then
    let ++problems
    echo "Found editor-specific settings in $script" >&2
  fi

  if grep -n -H "^$maxlinelen" "$script"; then
    let ++problems
    echo "Longest line in $script is longer than 80 characters" >&2
  fi

  if grep -n -H -E -i \
    '#.*\bpylint[[:space:]]*:[[:space:]]*disable-msg\b' "$script"
  then
    let ++problems
    echo "Found old-style pylint disable pragma in $script" >&2
  fi
done

if [[ "$problems" -gt 0 ]]; then
  echo "Found $problems problem(s) while checking code." >&2
  exit 1
fi
