🐾
SwiftLint自動フォーマット修正
開発中にいちいちcode formatを調整のは面倒なので、git commitの際にcodeを自動修正させたいです。
SwiftLintの導入
インストール終わったら、projectの下に.swiftlint.yml
隠しファイルがある。
swiftlint自動修正手動実行
コマンドラインで指定swiftファイルに指定swiftlint.ymlで自動フォーマット修正
swiftlint --config {.swiftlint.ymlファイルパス} --fix {swiftファイルパス}
git commitの際にswiftlint自動修正を実行
projectの下に隠しフォルダー.git
で、pre-commit.sample
をコピーして、.sample
拡張子を削除
任意code編集ツールでpre-commit
を開いて、以下のcodeを入力
#!/bin/sh
# 変更されたswiftファイルを検索
git_diff=$(git diff --cached --name-only --diff-filter=AM -- '*.swift')
# 指定.swiftlint.ymlを複製して、変更されたswiftファイルを追加
if [ -n "$git_diff" ]; then
cp .swiftlint.yml .swiftlint.precommit.yml
echo 'included:' >> .swiftlint.precommit.yml
echo "$git_diff" | sed -e "s/^/ - /" >> .swiftlint.precommit.yml
echo 'lint the following files'
echo "$git_diff" | sed -e "s/^/ - /"
echo ""
else
echo 'No changed .swift file'
exit 0;
fi
# swiftlintを実行して、swiftファイルのチェック結果を取得
lint_result=$(swiftlint --reporter emoji --quiet --config .swiftlint.precommit.yml)
# swiftlintにより変更があれば、git commitを止めて、swiftファイルを自動フォマートする
if [ -n "$lint_result" ]; then
swiftlint --reporter emoji --quiet --config .swiftlint.precommit.yml --fix
echo 'Some issues found.'
echo '====================================='
echo "$lint_result" | sed -e "s/^/>> /"
echo '====================================='
echo ''
rm .swiftlint.precommit.yml
exit 1;
else
echo 'No issues found!'
fi
# 実行を終わる前に複製したymlを削除
rm .swiftlint.precommit.yml
exit 0
使ってみる
フォーマットがバラバラのコードを書いて、コミットします。
コミットの前にswiftlintチェックを行い、コードフォーマットを自動修正できます。
もし修正がなければそのままコミットを行います。
一部のruleが自動修正できません。
コマンドラインでswiftlint rules
を実行して、correctableでnoになってるruleは自動修正対象外です。
株式会社SKIYAKIのテックブログです。ファンクラブプラットフォームBitfanの開発・運用にまつわる知見や調べたことなどを発信します。主な技術スタックは Ruby on Rails / React / AWS / Swift / Kotlin などです。 recruit.skiyaki.com/
Discussion