@echo off SETLOCAL ENABLEDELAYEDEXPANSION REM ========================= REM Variables REM ========================= SET FMT=clang-format SET MODE= SET EXIT_CODE=0 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 ( REM Accumulate directories SET DIRS=!DIRS! "%~1" ) SHIFT GOTO parse_args :end_parse_args IF "%MODE%"=="" ( ECHO Usage: %~nx0 --check|--fix [ ...] EXIT /B 1 ) IF "%DIRS%"=="" ( ECHO Please provide at least one directory. EXIT /B 1 ) 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 ( ECHO Checking !FILE! %FMT% --dry-run --Werror "!FILE!" 2>nul IF ERRORLEVEL 1 ( REM clang-format will already print diagnostics SET EXIT_CODE=1 ) ) ) ) :continue_dirs ) EXIT /B %EXIT_CODE%