#!/bin/bash
#

# Copyright (C) 2009, 2011 Google Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.

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
