diff --git a/bin/clang-format-fix b/bin/clang-format-fix index ba16ec9..92a4051 100755 --- a/bin/clang-format-fix +++ b/bin/clang-format-fix @@ -1,3 +1,26 @@ #!/bin/bash -find src lib \( -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -exec clang-format -style=file -i {} + +# Configuration: Standard arguments for clang-format +STYLE_ARGS="-style=file -i" + +# --- Main Logic --- + +if [[ "$1" == "-g" ]]; then + # Mode: Format all modified files (staged and unstaged) + + # Use 'git ls-files' to get a list of all files with pending changes: + # --modified: files tracked by git that have been modified (staged or unstaged) + # --exclude-standard: ignores files in .gitignore + git ls-files --modified --exclude-standard \ + | grep -E '\.(c|cpp|h|hpp)$' \ + | xargs -r clang-format $STYLE_ARGS + + # NOTE: We skip the 'git add' step from before. + # When running on unstaged files, 'clang-format -i' modifies them + # in the working directory, where they remain unstaged (M). + +else + # Executes original working command directly. + find src lib \( -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -exec clang-format $STYLE_ARGS {} + + +fi