-
Notifications
You must be signed in to change notification settings - Fork 55
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Automatically detect missing doxygen comments (#1226)
Fixes #1216
- Loading branch information
Showing
16 changed files
with
234 additions
and
132 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
#!/bin/bash | ||
|
||
# Note: This script is intended to be run from the root of the repository. | ||
# | ||
# Not really a hook but should be used to check the completness of documentation for added code, otherwise CI will come for you. | ||
# It's good to have /tmp as the output so that consecutive runs are fast but no clutter in the repository. | ||
|
||
echo "+ Checking documentation..." | ||
|
||
ROOT=$(pwd) | ||
DOXYGEN=$(command -v doxygen) | ||
TMPDIR=${ROOT}/.cache/doxygen | ||
TMPFILE=${TMPDIR}/docs.log | ||
DOCDIR=${TMPDIR}/out | ||
|
||
if [ -z "$DOXYGEN" ]; then | ||
# No hard error if doxygen is not installed yet | ||
cat <<EOF | ||
WARNING | ||
----------------------------------------------------------------------------- | ||
'doxygen' is required to check documentation. | ||
Please install it for next time. For the time being it's on CI. | ||
----------------------------------------------------------------------------- | ||
EOF | ||
exit 0 | ||
fi | ||
|
||
mkdir -p ${DOCDIR} > /dev/null 2>&1 | ||
pushd ${DOCDIR} > /dev/null 2>&1 | ||
|
||
cat ${ROOT}/Doxyfile | \ | ||
sed \ | ||
-e "s/\${LINT}/YES/" \ | ||
-e "s!\${SOURCE}!${ROOT}!" \ | ||
-e "s/\${USE_DOT}/NO/" \ | ||
-e "s/\${EXCLUDES}/impl/" \ | ||
| ${DOXYGEN} - 2> ${TMPFILE} 1> /dev/null | ||
|
||
# We don't want to check for default values and typedefs as well as for member variables | ||
OUT=$(cat ${TMPFILE} \ | ||
| grep -v "=default" \ | ||
| grep -v "\(variable\)" \ | ||
| grep -v "\(typedef\)") | ||
|
||
rm -rf ${TMPFILE} > /dev/null 2>&1 | ||
popd > /dev/null 2>&1 | ||
|
||
if [[ ! -z "$OUT" ]]; then | ||
cat <<EOF | ||
ERROR | ||
----------------------------------------------------------------------------- | ||
Found issues with documentation: | ||
$OUT | ||
----------------------------------------------------------------------------- | ||
EOF | ||
exit 2 | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
#!/bin/bash | ||
|
||
# Note: This script is intended to be run from the root of the repository. | ||
# | ||
# This script checks the format of the code and cmake files. | ||
# In many cases it will automatically fix the issues and abort the commit. | ||
|
||
echo "+ Checking code format..." | ||
|
||
# paths to check and re-format | ||
sources="src unittests" | ||
formatter="clang-format -i" | ||
version=$($formatter --version | grep -o '[0-9\.]*') | ||
|
||
if [[ "17.0.0" > "$version" ]]; then | ||
cat <<EOF | ||
ERROR | ||
----------------------------------------------------------------------------- | ||
A minimum of version 17 of `which clang-format` is required. | ||
Your version is $version. | ||
Please fix paths and run again. | ||
----------------------------------------------------------------------------- | ||
EOF | ||
exit 3 | ||
fi | ||
|
||
# check there is no .h headers, only .hpp | ||
wrong_headers=$(find $sources -name "*.h" | sed 's/^/ - /') | ||
if [[ ! -z "$wrong_headers" ]]; then | ||
cat <<EOF | ||
ERROR | ||
----------------------------------------------------------------------------- | ||
Found .h headers in the source code. Please rename them to .hpp: | ||
$wrong_headers | ||
----------------------------------------------------------------------------- | ||
EOF | ||
exit 2 | ||
fi | ||
|
||
if ! command -v cmake-format &> /dev/null; then | ||
cat <<EOF | ||
ERROR | ||
----------------------------------------------------------------------------- | ||
'cmake-format' is required to run this script. | ||
Please install it and run again. | ||
----------------------------------------------------------------------------- | ||
EOF | ||
exit 3 | ||
fi | ||
|
||
function grep_code { | ||
grep -l "${1}" ${sources} -r --include \*.hpp --include \*.cpp | ||
} | ||
|
||
if [[ "$OSTYPE" == "darwin"* ]]; then | ||
# make all includes to be <...> style | ||
grep_code '#include ".*"' | xargs sed -i '' -E 's|#include "(.*)"|#include <\1>|g' | ||
|
||
# make local includes to be "..." style | ||
main_src_dirs=$(find ./src -maxdepth 1 -type d -exec basename {} \; | tr '\n' '|' | sed 's/|$//' | sed 's/|/\\|/g') | ||
grep_code "#include <\($main_src_dirs\)/.*>" | xargs sed -i '' -E "s|#include <(($main_src_dirs)/.*)>|#include \"\1\"|g" | ||
else | ||
# make all includes to be <...> style | ||
grep_code '#include ".*"' | xargs sed -i -E 's|#include "(.*)"|#include <\1>|g' | ||
|
||
# make local includes to be "..." style | ||
main_src_dirs=$(find ./src -type d -maxdepth 1 -exec basename {} \; | paste -sd '|' | sed 's/|/\\|/g') | ||
grep_code "#include <\($main_src_dirs\)/.*>" | xargs sed -i -E "s|#include <(($main_src_dirs)/.*)>|#include \"\1\"|g" | ||
fi | ||
|
||
cmake_dirs=$(echo CMake $sources) | ||
cmake_files=$(find $cmake_dirs -type f \( -name "CMakeLists.txt" -o -name "*.cmake" \)) | ||
cmake_files=$(echo $cmake_files ./CMakeLists.txt) | ||
|
||
first=$(git diff $sources $cmake_files) | ||
find $sources -type f \( -name '*.cpp' -o -name '*.hpp' -o -name '*.ipp' \) -print0 | xargs -0 $formatter | ||
cmake-format -i $cmake_files | ||
second=$(git diff $sources $cmake_files) | ||
changes=$(diff <(echo "$first") <(echo "$second") | wc -l | sed -e 's/^[[:space:]]*//') | ||
|
||
if [ "$changes" != "0" ]; then | ||
cat <<\EOF | ||
WARNING | ||
----------------------------------------------------------------------------- | ||
Automatically re-formatted code with 'clang-format' - commit was aborted. | ||
Please manually add any updated files and commit again. | ||
----------------------------------------------------------------------------- | ||
EOF | ||
exit 1 | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,93 +1,6 @@ | ||
#!/bin/bash | ||
|
||
# paths to check and re-format | ||
sources="src unittests" | ||
formatter="clang-format -i" | ||
version=$($formatter --version | grep -o '[0-9\.]*') | ||
|
||
if [[ "17.0.0" > "$version" ]]; then | ||
cat <<EOF | ||
ERROR | ||
----------------------------------------------------------------------------- | ||
A minimum of version 17 of `which clang-format` is required. | ||
Your version is $version. | ||
Please fix paths and run again. | ||
----------------------------------------------------------------------------- | ||
EOF | ||
exit 3 | ||
fi | ||
|
||
# check there is no .h headers, only .hpp | ||
wrong_headers=$(find $sources -name "*.h" | sed 's/^/ - /') | ||
if [[ ! -z "$wrong_headers" ]]; then | ||
cat <<EOF | ||
ERROR | ||
----------------------------------------------------------------------------- | ||
Found .h headers in the source code. Please rename them to .hpp: | ||
$wrong_headers | ||
----------------------------------------------------------------------------- | ||
EOF | ||
exit 2 | ||
fi | ||
|
||
if ! command -v cmake-format &> /dev/null; then | ||
cat <<EOF | ||
ERROR | ||
----------------------------------------------------------------------------- | ||
`cmake-format` is required to run this script. | ||
Please install it and run again. | ||
----------------------------------------------------------------------------- | ||
EOF | ||
exit 3 | ||
fi | ||
|
||
function grep_code { | ||
grep -l "${1}" ${sources} -r --include \*.hpp --include \*.cpp | ||
} | ||
|
||
if [[ "$OSTYPE" == "darwin"* ]]; then | ||
# make all includes to be <...> style | ||
grep_code '#include ".*"' | xargs sed -i '' -E 's|#include "(.*)"|#include <\1>|g' | ||
|
||
# make local includes to be "..." style | ||
main_src_dirs=$(find ./src -maxdepth 1 -type d -exec basename {} \; | tr '\n' '|' | sed 's/|$//' | sed 's/|/\\|/g') | ||
grep_code "#include <\($main_src_dirs\)/.*>" | xargs sed -i '' -E "s|#include <(($main_src_dirs)/.*)>|#include \"\1\"|g" | ||
else | ||
# make all includes to be <...> style | ||
grep_code '#include ".*"' | xargs sed -i -E 's|#include "(.*)"|#include <\1>|g' | ||
|
||
# make local includes to be "..." style | ||
main_src_dirs=$(find ./src -type d -maxdepth 1 -exec basename {} \; | paste -sd '|' | sed 's/|/\\|/g') | ||
grep_code "#include <\($main_src_dirs\)/.*>" | xargs sed -i -E "s|#include <(($main_src_dirs)/.*)>|#include \"\1\"|g" | ||
fi | ||
|
||
cmake_dirs=$(echo CMake $sources) | ||
cmake_files=$(find $cmake_dirs -type f \( -name "CMakeLists.txt" -o -name "*.cmake" \)) | ||
cmake_files=$(echo $cmake_files ./CMakeLists.txt) | ||
|
||
first=$(git diff $sources $cmake_files) | ||
find $sources -type f \( -name '*.cpp' -o -name '*.hpp' -o -name '*.ipp' \) -print0 | xargs -0 $formatter | ||
cmake-format -i $cmake_files | ||
second=$(git diff $sources $cmake_files) | ||
changes=$(diff <(echo "$first") <(echo "$second") | wc -l | sed -e 's/^[[:space:]]*//') | ||
|
||
if [ "$changes" != "0" ]; then | ||
cat <<\EOF | ||
WARNING | ||
----------------------------------------------------------------------------- | ||
Automatically re-formatted code with `clang-format` - commit was aborted. | ||
Please manually add any updated files and commit again. | ||
----------------------------------------------------------------------------- | ||
EOF | ||
exit 1 | ||
fi | ||
# This script is intended to be run from the root of the repository. | ||
|
||
source .githooks/check-format | ||
source .githooks/check-docs |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.