FormatChecks #2
@@ -62,4 +62,4 @@ jobs:
|
||||
submodules: recursive
|
||||
|
||||
- name: Clang Format Checks
|
||||
run: chmod +x format.sh && ./format.sh Bigfoot checker
|
||||
run: ./format.sh --check Bigfoot
|
||||
86
format.bat
86
format.bat
@@ -1,30 +1,74 @@
|
||||
@echo off
|
||||
REM Variable that will hold the name of the clang-format command
|
||||
SETLOCAL ENABLEDELAYEDEXPANSION
|
||||
|
||||
REM =========================
|
||||
REM Variables
|
||||
REM =========================
|
||||
SET FMT=clang-format
|
||||
SET MODE=
|
||||
SET EXIT_CODE=0
|
||||
|
||||
REM Function to format files
|
||||
:format
|
||||
for /r %%f in (*.h *.hpp *.m *.mm *.c *.cpp) do (
|
||||
echo %%~nxf | findstr /i "_generated$" >nul
|
||||
if errorlevel 1 (
|
||||
echo format %%f
|
||||
%FMT% -i "%%f"
|
||||
REM =========================
|
||||
REM Parse arguments
|
||||
REM =========================
|
||||
:parse_args
|
||||
IF "%~1"=="" GOTO end_parse_args
|
||||
IF "%~1"=="--check" (
|
||||
SET MODE=check
|
||||
) ELSE IF "%~1"=="--fix" (
|
||||
SET MODE=fix
|
||||
) ELSE (
|
||||
SET DIRS=!DIRS! "%~1"
|
||||
)
|
||||
)
|
||||
echo ~~~ %1 Done ~~~
|
||||
exit /b
|
||||
SHIFT
|
||||
GOTO parse_args
|
||||
:end_parse_args
|
||||
|
||||
REM Check if argument is provided
|
||||
if "%1"=="" (
|
||||
echo Please provide a directory as an argument.
|
||||
exit /b
|
||||
IF "%MODE%"=="" (
|
||||
ECHO Usage: %~nx0 --check|--fix <directory> [<directory> ...]
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
REM Check if directory exists
|
||||
if not exist "%1" (
|
||||
echo %1 is not a valid directory.
|
||||
exit /b
|
||||
IF "%DIRS%"=="" (
|
||||
ECHO Please provide at least one directory.
|
||||
EXIT /B 1
|
||||
)
|
||||
|
||||
cd %1
|
||||
call :format
|
||||
REM =========================
|
||||
REM Iterate over directories
|
||||
REM =========================
|
||||
FOR %%D IN (%DIRS%) DO (
|
||||
IF NOT EXIST "%%~D" (
|
||||
ECHO %%~D is not a valid directory.
|
||||
SET EXIT_CODE=1
|
||||
GOTO :continue_dirs
|
||||
)
|
||||
|
||||
REM Recursively find source files
|
||||
FOR /R "%%~D" %%F IN (*.h *.hpp *.c *.cpp *.m *.mm) DO (
|
||||
SET FILE=%%F
|
||||
REM Skip *_generated* files
|
||||
ECHO !FILE! | FINDSTR /I "_generated" >nul
|
||||
IF ERRORLEVEL 1 (
|
||||
IF "%MODE%"=="fix" (
|
||||
ECHO Formatting !FILE!
|
||||
%FMT% -i "!FILE!"
|
||||
) ELSE (
|
||||
REM Check mode: run clang-format --dry-run --Werror
|
||||
%FMT% --dry-run --Werror "!FILE!" 2>nul
|
||||
IF ERRORLEVEL 1 (
|
||||
REM clang-format will already print diagnostic
|
||||
ECHO --- Diff for !FILE! ---
|
||||
REM Generate diff using fc
|
||||
%FMT% "!FILE!" > "%TEMP%\fmt.tmp"
|
||||
fc "!FILE!" "%TEMP%\fmt.tmp"
|
||||
SET EXIT_CODE=1
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
:continue_dirs
|
||||
)
|
||||
|
||||
EXIT /B %EXIT_CODE%
|
||||
|
||||
78
format.sh
78
format.sh
@@ -1,31 +1,63 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Variable that will hold the name of the clang-format command
|
||||
FMT="clang-format"
|
||||
MODE=""
|
||||
DIRS=()
|
||||
|
||||
# Function to format files
|
||||
format() {
|
||||
for f in $(find "$1" \( -name '*.h' -or -name '*.hpp' -or -name '*.m' -or -name '*.mm' -or -name '*.c' -or -name '*.cpp' \)); do
|
||||
# Skip *_generated.h files
|
||||
if [[ "$f" == *_generated* ]]; then
|
||||
# Parse arguments
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
--check)
|
||||
MODE="check"
|
||||
;;
|
||||
--fix)
|
||||
MODE="fix"
|
||||
;;
|
||||
*)
|
||||
DIRS+=("$arg")
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -z "$MODE" ]]; then
|
||||
echo "Usage: $0 --check|--fix <directory> [<directory> ...]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ${#DIRS[@]} -eq 0 ]]; then
|
||||
echo "Please provide at least one directory."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
EXIT_CODE=0
|
||||
|
||||
for DIR in "${DIRS[@]}"; do
|
||||
if [[ ! -d "$DIR" ]]; then
|
||||
echo "$DIR is not a valid directory."
|
||||
EXIT_CODE=1
|
||||
continue
|
||||
fi
|
||||
echo "format ${f}"
|
||||
${FMT} -i "${f}"
|
||||
|
||||
while IFS= read -r -d '' file; do
|
||||
[[ "$file" == *_generated* ]] && continue
|
||||
|
||||
if [[ "$MODE" == "fix" ]]; then
|
||||
echo "Formatting $file"
|
||||
$FMT -i "$file"
|
||||
else
|
||||
# Check mode: run clang-format with dry-run and Werror
|
||||
# Capture stdout/stderr for diagnostic
|
||||
if ! $FMT --dry-run --Werror "$file"; then
|
||||
# clang-format will already print:
|
||||
# Bigfoot/Tests/System/Time.cpp:21:46: error: code should be clang-formatted [-Wclang-format-violations]
|
||||
# Now additionally print the diff for clarity
|
||||
diff_output=$(diff -u "$file" <($FMT -style=file "$file") || true)
|
||||
echo "$diff_output"
|
||||
EXIT_CODE=1
|
||||
fi
|
||||
fi
|
||||
done < <(find "$DIR" \( -name '*.h' -o -name '*.hpp' -o -name '*.c' -o -name '*.cpp' -o -name '*.m' -o -name '*.mm' \) -print0)
|
||||
done
|
||||
echo "~~~ $1 Done ~~~"
|
||||
}
|
||||
|
||||
# Check if argument is provided
|
||||
if [ -z "$1" ]; then
|
||||
echo "Please provide a directory as an argument."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if directory exists
|
||||
if [ ! -d "$1" ]; then
|
||||
echo "$1 is not a valid directory."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
format "$1"
|
||||
exit $EXIT_CODE
|
||||
|
||||
Reference in New Issue
Block a user