| #!/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 | |
| # Need to skip this until https://github.com/chipsalliance/verible/issues/2435 | |
| # resolved. | |
| #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}" |