LoginSignup
14
3

More than 3 years have passed since last update.

Swiftlint autocorrectでコードを自動修正する

Last updated at Posted at 2020-12-03

はじめに

この記事はand factory Advent Calendar 2020 の3日目の記事です。
昨日は@yasukotelinさんのKotlinでResult型使うならkotlin-resultを使おうでした🎉

やりたいこと

  • swiftlintのルールに合わせて、debugビルド時にコードを自動修正する

背景

僕のチームでは、
今期から3人で2つのプロジェクトの開発を担当しています。

それぞれswiftlintのルールが微妙に違うため、
プロジェクトごとに細かな記法を意識してコーディングする必要があり、
少し手間に感じていました。

そこで、今回swiftlintの機能を用いて
ルールに反したコードを自動修正する仕組みを導入します。

やること

1.Swiftlintを導入
2.BuildPhaseで実行するスクリプトを書く

swiftlintの導入

Mintで導入してます

Mintfile
realm/SwiftLint@0.39.2

BuildPhasesにscriptを定義

最終的に採用したスクリプト

script
if [ $CONFIGURATION = "Debug" ]; then
  git diff --name-only | grep .swift | grep -v Pods/ | grep -v R.generated.swift | while read filename; do
    xcrun --sdk macosx mint run SwiftLint swiftlint autocorrect --path "$filename"
  done
  xcrun --sdk macosx mint run SwiftLint swiftlint
fi

スタックしたポイント

エラー: Parse error(s)

下記スクリプトでビルドしてみると、エラーが。。。

script
if [ $CONFIGURATION = "Debug" ]; then
    mint run SwiftLint swiftlint autocorrect --path "$filename"
    mint run SwiftLint swiftlint
fi
error
github.com_realm_Swiftlint: manifest parse error(s)
unable to load standard library for target 'x86_64-apple-macosx-10.15'
warning
using sysroot for 'iPhoneSimulator' but targeting 'MacOSX'

上記エラーは
SwiftlintをmacOS用にビルドしようとしているのに、
利用するSDKがiOSシミュレーター用になっているのが原因のようです。

BuildPhaseに unset SDKROOT を追記することで
スクリプト実行の間だけ環境変数SDKROOTを解除し、回避することも可能ですが、
macosxのsdkを指定するほうがおすすめです。

xcrun --sdk macosx mint run SwiftLint swiftlint

各コミットで発生した差分のみ自動修正したい

while文で対象を指定することで解決しました。

git diff --name-only | grep .swift | grep -v Pods/ | grep -v R.generated.swift | while read filename; do
    xcrun --sdk macosx mint run SwiftLint swiftlint autocorrect --path "$filename"
 done

運用

autocorrect機能を本導入する際に、
プロジェクト全体を自動修正しておきます。

その後修正対象を差分に絞ると
debugビルドを実行するたびに差分を自動修正してくれます👏

まとめ

細かな記法を気にせず進めるために導入しましたが、
記法ミスがあっても勝手に修正されるのは気持ち的にかなり楽です。

参考URL

先人の知恵に感謝...🙏🙏🙏
おわり

14
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
3