mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 12:32:48 +01:00
7be2b2456a
fa3c910bfeab00703c947c5200a64c21225b50ef test: Move linters to test/lint, add readme (MarcoFalke) Pull request description: This moves the checks and linters from `devtools` to a subfolder in `test`. (Motivated by my opinion that the dev tools are mostly for generating code and updating the repo whereas the linters are read-only checks.) Also, adds a readme to clarify that checks and linters are only meant to prevent bugs and user facing issues, not merely stylistic preference or inconsistencies. (This is motivated by the diversity in developers and work flows as well as existing code styles. It would be too disruptive to change all existing code to a single style or too burdensome to force all developers to adhere to a single style. Also note that our style guide is changing, so locking in at the wrong style "too early" would only waste resources.) Tree-SHA512: 9b10e89f2aeaf0c8a9ae248aa891d74e0abf0569f8e5dfd266446efa8bfaf19f0ea0980abf0b0b22f0d8416ee90d7435d21a9f9285b66df43f370b7979173406
123 lines
4.1 KiB
Bash
Executable File
123 lines
4.1 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Copyright (c) 2018 The Bitcoin Core developers
|
|
# Distributed under the MIT software license, see the accompanying
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
#
|
|
# Check for duplicate includes.
|
|
# Guard against accidental introduction of new Boost dependencies.
|
|
# Check includes: Check for duplicate includes. Enforce bracket syntax includes.
|
|
|
|
export LC_ALL=C
|
|
IGNORE_REGEXP="/(leveldb|secp256k1|univalue)/"
|
|
|
|
filter_suffix() {
|
|
git ls-files | grep -E "^src/.*\.${1}"'$' | grep -Ev "${IGNORE_REGEXP}"
|
|
}
|
|
|
|
EXIT_CODE=0
|
|
|
|
for HEADER_FILE in $(filter_suffix h); do
|
|
DUPLICATE_INCLUDES_IN_HEADER_FILE=$(grep -E "^#include " < "${HEADER_FILE}" | sort | uniq -d)
|
|
if [[ ${DUPLICATE_INCLUDES_IN_HEADER_FILE} != "" ]]; then
|
|
echo "Duplicate include(s) in ${HEADER_FILE}:"
|
|
echo "${DUPLICATE_INCLUDES_IN_HEADER_FILE}"
|
|
echo
|
|
EXIT_CODE=1
|
|
fi
|
|
done
|
|
|
|
for CPP_FILE in $(filter_suffix cpp); do
|
|
DUPLICATE_INCLUDES_IN_CPP_FILE=$(grep -E "^#include " < "${CPP_FILE}" | sort | uniq -d)
|
|
if [[ ${DUPLICATE_INCLUDES_IN_CPP_FILE} != "" ]]; then
|
|
echo "Duplicate include(s) in ${CPP_FILE}:"
|
|
echo "${DUPLICATE_INCLUDES_IN_CPP_FILE}"
|
|
echo
|
|
EXIT_CODE=1
|
|
fi
|
|
done
|
|
|
|
INCLUDED_CPP_FILES=$(git grep -E "^#include [<\"][^>\"]+\.cpp[>\"]" -- "*.cpp" "*.h")
|
|
if [[ ${INCLUDED_CPP_FILES} != "" ]]; then
|
|
echo "The following files #include .cpp files:"
|
|
echo "${INCLUDED_CPP_FILES}"
|
|
echo
|
|
EXIT_CODE=1
|
|
fi
|
|
|
|
EXPECTED_BOOST_INCLUDES=(
|
|
boost/algorithm/string.hpp
|
|
boost/algorithm/string/case_conv.hpp
|
|
boost/algorithm/string/classification.hpp
|
|
boost/algorithm/string/replace.hpp
|
|
boost/algorithm/string/split.hpp
|
|
boost/bind.hpp
|
|
boost/chrono/chrono.hpp
|
|
boost/date_time/posix_time/posix_time.hpp
|
|
boost/filesystem.hpp
|
|
boost/filesystem/detail/utf8_codecvt_facet.hpp
|
|
boost/filesystem/fstream.hpp
|
|
boost/function.hpp
|
|
boost/interprocess/sync/file_lock.hpp
|
|
boost/lexical_cast.hpp
|
|
boost/lockfree/queue.hpp
|
|
boost/multi_index/hashed_index.hpp
|
|
boost/multi_index/ordered_index.hpp
|
|
boost/multi_index/sequenced_index.hpp
|
|
boost/multi_index_container.hpp
|
|
boost/optional.hpp
|
|
boost/pool/pool_alloc.hpp
|
|
boost/preprocessor/cat.hpp
|
|
boost/preprocessor/stringize.hpp
|
|
boost/program_options/detail/config_file.hpp
|
|
boost/program_options/parsers.hpp
|
|
boost/scoped_array.hpp
|
|
boost/signals2/last_value.hpp
|
|
boost/signals2/signal.hpp
|
|
boost/test/unit_test.hpp
|
|
boost/test/unit_test_monitor.hpp
|
|
boost/thread.hpp
|
|
boost/thread/condition_variable.hpp
|
|
boost/thread/mutex.hpp
|
|
boost/thread/thread.hpp
|
|
boost/variant.hpp
|
|
boost/variant/apply_visitor.hpp
|
|
boost/variant/static_visitor.hpp
|
|
)
|
|
|
|
for BOOST_INCLUDE in $(git grep '^#include <boost/' -- "*.cpp" "*.h" | cut -f2 -d: | cut -f2 -d'<' | cut -f1 -d'>' | sort -u); do
|
|
IS_EXPECTED_INCLUDE=0
|
|
for EXPECTED_BOOST_INCLUDE in "${EXPECTED_BOOST_INCLUDES[@]}"; do
|
|
if [[ "${BOOST_INCLUDE}" == "${EXPECTED_BOOST_INCLUDE}" ]]; then
|
|
IS_EXPECTED_INCLUDE=1
|
|
break
|
|
fi
|
|
done
|
|
if [[ ${IS_EXPECTED_INCLUDE} == 0 ]]; then
|
|
EXIT_CODE=1
|
|
echo "A new Boost dependency in the form of \"${BOOST_INCLUDE}\" appears to have been introduced:"
|
|
git grep "${BOOST_INCLUDE}" -- "*.cpp" "*.h"
|
|
echo
|
|
fi
|
|
done
|
|
|
|
for EXPECTED_BOOST_INCLUDE in "${EXPECTED_BOOST_INCLUDES[@]}"; do
|
|
if ! git grep -q "^#include <${EXPECTED_BOOST_INCLUDE}>" -- "*.cpp" "*.h"; then
|
|
echo "Good job! The Boost dependency \"${EXPECTED_BOOST_INCLUDE}\" is no longer used."
|
|
echo "Please remove it from EXPECTED_BOOST_INCLUDES in $0"
|
|
echo "to make sure this dependency is not accidentally reintroduced."
|
|
echo
|
|
EXIT_CODE=1
|
|
fi
|
|
done
|
|
|
|
QUOTE_SYNTAX_INCLUDES=$(git grep '^#include "' -- "*.cpp" "*.h" | grep -Ev "${IGNORE_REGEXP}")
|
|
if [[ ${QUOTE_SYNTAX_INCLUDES} != "" ]]; then
|
|
echo "Please use bracket syntax includes (\"#include <foo.h>\") instead of quote syntax includes:"
|
|
echo "${QUOTE_SYNTAX_INCLUDES}"
|
|
echo
|
|
EXIT_CODE=1
|
|
fi
|
|
|
|
exit ${EXIT_CODE}
|