#!/usr/bin/env bash
# Copyright 2020 The Verible Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

##
# Test for things that we don't want to introduce accidentally.
##

EXIT_CODE=0

# absl has a string_view but there is also std::string_view.
# Use the std::string_view throughout.
find verible -name "*.h" -o -name "*.cc" | xargs grep -n "absl::string_view"
if [ $? -eq 0 ]; then
  echo "::error:: use std::string_view instead of absl::string_view"
  echo
  EXIT_CODE=1
fi

# ... same for absl string_view dependency.
find verible -name BUILD | xargs grep -n absl/strings:string_view
if [ $? -eq 0 ]; then
  echo "::error:: use std::string_view instead of absl::string_view"
  echo
  EXIT_CODE=1
fi

# The status macros pollute the global namespace with names that might
# clash in other environments that include these headers and have that name
# defined differently.
#
# So let's make sure to only use them in our compilation units, not headers.
# (Not a super-strong potential problem, so we might consider removing
#  this test, but if we need RETURN_IF_ERROR() in a header file, maybe it
#  is a good idea to move an implementation to a *.cc file anyway)
#
# TODO(hzeller): Arguably this might be good for common/util/logging.h as well.
find . -name "*.h" | xargs grep -n '#include "verible/common/util/status_macros.h"'
if [ $? -eq 0 ]; then
  echo "::error:: using status_macros.h in a header pollutes global namespace."
  echo
  EXIT_CODE=1
fi

# Don't accidentally use anything from the verilog namespace in the common
# verible namespace to make sure common stays independent.
# Use of that namespace in a comment is ok, or if waived with // NOLINT
find verible/common -name "*.h" -o -name "*.cc" | xargs grep "verilog::" \
  | egrep -v "(//.*verilog::|// NOLINT)"
if [ $? -eq 0 ]; then
  echo "::error:: use of the verilog::-namespace inside common/"
  echo
  EXIT_CODE=1
fi

# Always use fully qualified include paths.
find verible -name "*.h" -o -name "*.cc" | \
  xargs egrep -n '#include "[^/]*"'
if [ $? -eq 0 ]; then
  echo "::error:: always use a fully qualified name for #includes"
  echo
  EXIT_CODE=1
fi

find verible -name "*.h" -o -name "*.cc" | grep _ | grep -v _test
if [ $? -eq 0 ]; then
  echo "::error:: File naming-convention for c++ files is to use dashes as separator with underscore only in test files; e.g. foo-bar_test.cc"
  echo
  EXIT_CODE=1
fi

find verible -name "*-test.cc" -o -name "*-test.sh" | grep test
if [ $? -eq 0 ]; then
  echo "::error:: File naming-convention for tests is to end with _test; e.g. foo-bar.cc has test foo-bar_test.cc; similar with shell-script tests"
  echo
  EXIT_CODE=1
fi

# bazelbuild/rules_python is broken as it downloads a dynamically
# linked pre-built binary - This makes it _very_ platform specific.
# This should either compile Python from scratch or use the local system Python.
# So before rules_python() is added here, this needs to be fixed first upstream.
# https://github.com/bazelbuild/rules_python/issues/1211
grep rules_python MODULE.bazel
if [ $? -eq 0 ]; then
  echo "::error:: rules_python() breaks platform independence with shared libs."
  echo
  EXIT_CODE=1
fi

# Never use std::regex.
find verible -name "*.h" -o -name "*.cc" | \
  xargs grep -n '#include <regex>'
if [ $? -eq 0 ]; then
  echo "::error:: Don't use stdlib regex, it is slow and requires exceptions. Use RE2 instead (https://github.com/google/re2; header #include \"re2/re2.h\")."
  echo
  EXIT_CODE=1
fi

if [ -e .bazelversion ]; then
  echo "Don't use .bazelversion. It is a poorly implemented bazel feature that does not support semantic versioning. Instead, make the repo work with all currently active bazel versions."
  EXIT_CODE=1
fi

exit "${EXIT_CODE}"
