少し前まで black を使っていたが、より早くフォーマットできる ruff に切り替えた
Vim
ruff を実行するコマンドを作成しよう
nnoremap <buffer> gF <Cmd>call Preserve(':silent !ruff format ' .. expand('%'))<CR>もしくは保存するたびに実行することもできる
augroup format-with-ruff-on-save
au BufWritePost *.py call Preserve(':silent !ruff format ' .. expand('%'))
augroup END- ruff はとても速いので、保存するたびに実行しても遅延はわずかであり気にならない
- この設定だと他の人が書いたコードを編集して保存したときにもファイル全体がフォーマットされてしまうので注意
Git でコミットする前にファイルがフォーマットされていることを確認する
pre-commit hook を使うことで、コードをコミットする前に、コミットしようとしているファイルがフォーマットされているかを確認することができる。
以下を .git/hooks/pre-commit として保存する
#!/bin/zsh
command -v ruff || (echo "ruff not found" >&2; exit 1)
TARGET_VERSION=py311
non_formatted_files=""
for FILE in $(git diff --staged --name-only | grep .py); do
if [[ ! -f $FILE ]]; then
continue
fi
ruff check --target-version $TARGET_VERSION -q --extend-select I $FILE || non_formatted_files=$non_formatted_files\ $FILE
ruff format --check --line-length=140 --target-version $TARGET_VERSION -q $FILE || non_formatted_files=$non_formatted_files\ $FILE
# If failed in execution, exit
if [ $? -ne 0 ]; then
echo "ruff failed to execute for $FILE" >&2
exit 1
fi
done
if [[ $non_formatted_files != "" ]]; then
echo "Files that aren't formatted:"$non_formatted_files >&2
exit 1
fi