The Pragmatic Ball boy

iOSを中心にやってる万年球拾いの老害エンジニアメモ

SwiftLint

Swiftでコーディング規約に沿っているかチェックするツールにSwiftLintというのがあるのでつかってみました。

SwiftLintではコーディング規約としてGithubのSwift style guildeを使っています。

使い方

  1. $ brew install swiftlint
  2. XcodeでSwiftLintをかけるプロジェクトを開く
  3. ProjectSettingのBuildPhasesを開く
  4. 左上の+ボタンを選択して、New Run Script Phaseを選択 f:id:yanamura:20160618211623p:plain
  5. Run Script内に以下を記載
if which swiftlint >/dev/null; then
  swiftlint
else
  echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi

f:id:yanamura:20160618211853p:plain

こうするとビルドするとコーディング規約のチェックが走るようになります。

例外

ただし、このままだと全てのファイルが対象となってしまい、3rd Partyのライブラリなども含まれてしまいます。

ディレクトリを対象からはずす

以下のようにして対象外のディレクトリを指定します

  • .swiftlint.yml というファイルをプロジェクトのトップディレクトリに作成します。
  • .swiftlint.yml内には以下のようにexcluded: 以下に、対象外とするディレクトリを列挙すればよいです
excluded:
      - Pods

ルールを変更する

このルールは適用したくないとか、errorではなくwarningにしたい場合は、ルールを.swift.ymlに書きます

# 除外するルール
disabled_rules:
    - line_length
    - trailing_whitespace
    - trailing_newline
    - function_parameter_count
    - force_try
    - type_name
    - function_body_length

# ルールの変更
force_cast: warning
variable_name:
    min_length: 2

ソースコードの行単位でルールを除外する

コメントで // swiftlint:disable:this <ルール名> で行単位で除外できます。

let cell = tableView.dequeueReusableCellWithIdentifier("cell1", forIndexPath: indexPath) as! Cell1 // swiftlint:disable:this force_cast

細かいところはSwiftLintのREADMEを読むとよいです。