@@ -88,10 +88,38 @@ format:
8888# 指定ファイルがある場合、そのファイルにclang-formatを適用する
8989ifdef FILES
9090 clang-format -i -style=file $(FILES)
91+ @ echo "フォーマットを適用しました: $(FILES)"
9192# ない場合、変更されたファイルのうち、cpp、hファイルにclang-formatを適用する
9293else
93- git diff origin/main --name-only | awk '/\.cpp$$|\.h$$/ {print $$1}' | xargs clang-format -i -style=file
94+ # 変更されたファイルと未追跡のファイル (新規追加など) の両方を検出
95+ @{ \
96+ CANDIDATE_FILES =$$( (git diff origin/main --name-only; git ls-files --others --exclude-standard ) | grep -E '\.cpp$$|\.h$$' || true ); \
97+ ACTUALLY_FORMATTED_FILES=""; \
98+ FORMATTED_COUNT=0; \
99+ if [ -n "$$CANDIDATE_FILES" ]; then \
100+ for FILE_PATH in $$CANDIDATE_FILES; do \
101+ REPLACEMENTS_XML=$$(clang-format -style=file --output-replacements-xml "$$FILE_PATH" 2>/dev/null ) ; \
102+ if echo "$$REPLACEMENTS_XML" | grep -q "<replacement "; then \
103+ clang-format -i -style=file "$$FILE_PATH"; \
104+ if [ -z "$$ACTUALLY_FORMATTED_FILES" ]; then \
105+ ACTUALLY_FORMATTED_FILES="$$FILE_PATH"; \
106+ else \
107+ ACTUALLY_FORMATTED_FILES="$${ACTUALLY_FORMATTED_FILES}\n$$FILE_PATH"; \
108+ fi; \
109+ FORMATTED_COUNT=$$(($$FORMATTED_COUNT + 1 ) ); \
110+ fi; \
111+ done; \
112+ if [ $$FORMATTED_COUNT -gt 0 ]; then \
113+ echo "以下のファイルにフォーマットを適用しました ($$FORMATTED_COUNT 件):"; \
114+ printf "%b\n" "$$ACTUALLY_FORMATTED_FILES"; \
115+ else \
116+ echo "検査したファイルは全てフォーマット済みでした。適用された変更はありません。"; \
117+ fi; \
118+ else \
119+ echo "フォーマットをチェックする対象の .cpp または .h ファイルがありません。"; \
120+ fi \
121+ }
94122endif
95123
96124format-check :
97- find ./test ./modules -type f -name " *.cpp" -o -name " *.h" | xargs clang-format --dry-run --Werror * .h * .cpp
125+ find ./tests ./modules -type f -name " *.cpp" -o -name " *.h" | xargs clang-format --dry-run --Werror * .h * .cpp
0 commit comments