SwiftLintの.swiftlint.yml記述方式とその詳細

# テンプレート

※2016/02/06 追記
enabled_rulesについて追記しました。
もう少ししたらopt_in_rulesになるようです。
その際にwhitelist_rulesというのも追加されるようです。

また、0.7.1にてCustomRulesというものが追加されました。
こちらについては[SwiftLint 0.7.1 アップデート内容まとめ - CustomRules](http://qiita.com/akatsuki174/items/703f5c829bf1fbae19e7#customrules)を御覧ください。

※2016/02/21 追記
enabled_rulesはopt_in_rulesという名前に変わりました。
whitelist_rulesについては[こちら](http://qiita.com/akatsuki174/items/c37dfcae3ff3a79fb8cf#whitelist_rules)に書きました。

```
# 無効にするルール
disabled_rules:
- <ルール名>

# 採用するopt-inのルール
enabled_rules:
- <ルール名>

# Lint対象にするファイル
included:
- <パス>

# Lint対象から外すファイル
excluded:
- <パス>

# 数値化できるパラメータをカスタマイズ
<rule name>:
- <数値> # warning
- <数値> # error

# レポートの種類
reporter:
- <種類名>

# ネストしたconfigファイルを使うかどうか
use_nested_configs: <Bool値>
```

# disabled_rules

[SwiftLintのdisabled_rules一覧(実例付き)](http://qiita.com/akatsuki174/items/6da27f7ccdd0572f8927)で詳しく書いたのでそちらをご参照ください。

# enabled_rules

多くのルールはdisabled_rulesに記述しない限りそのルールが適用されるのに対し、いくつかのルール（0.7.2時点ではempty_countとmissing_docs、force_unwrappingだけだと思います）はここに記述しない限りルールとして適用されません。

# included

Lint対象のファイルがあるパスを記述します。プロジェクト名を書いておけば大丈夫です。
ここのへんについては[SwiftLintの.swiftlint.ymlで起きたエラーへの対処](http://qiita.com/akatsuki174/items/cd54e739ceec7cdbb8ef)の記事でも少し触れてます。

# excluded

Lint対象から外すファイルがあるパスを記述します。
Pods, Carthageやその他特定のディレクトリ、ファイルを指定できます。

# パラメータのカスタマイズ

※2016/02/06 追記
SwiftLint0.7.0で書き方が変わりました。詳しくはこちらの記事を御覧ください。
[SwiftLint 0.7.0 アップデート内容まとめ - SeverityLevelsConfig](http://qiita.com/akatsuki174/items/b4a8b8a51fd3be94ae05#severitylevelsconfig)
[SwiftLint 0.7.0 アップデート内容まとめ - VariableNameRule](http://qiita.com/akatsuki174/items/b4a8b8a51fd3be94ae05#variablenamerule)

数値化できるパラメータの場合はカスタマイズすることができます。
例えばこんなかんじです。

```
file_length:
  - 600  # warning
  - 1200 # error
```

最初に指定した数値がwarningの数値、次に指定した数値がerrorの数値になります。
ちなみに実際に動かして試した限りだと、`file_length:600`のように一つだけ指定するとwarningだけ値が書き変わって、errorはデフォルト値(file_lengthの場合は1000)のまま適用されるようです。

# reporter

レポートの種類を指定できます。レポートの種類にはxcode, json, csv, checkstyleがあります。
[Configuration.swiftのinit](https://github.com/realm/SwiftLint/blob/b9a13bea6a93ed8b68ed59029f924624ed4af8e4/Source/SwiftLintFramework/Models/Configuration.swift#L43)を見ると、デフォルトでは"xcode"が指定されているようです。

エラーがある状態で以下の各種類を指定すると左ペインがこの状態になり、これをクリックすることでレポートを見ることができます。
![スクリーンショット 2016-01-17 11.17.45.png](https://qiita-image-store.s3.amazonaws.com/0/100736/9f945ebc-63d8-547d-af3d-6184e990a0fc.png)

jsonを指定するとこんなかんじになります。
![スクリーンショット 2016-01-16 22.29.24.png](https://qiita-image-store.s3.amazonaws.com/0/100736/9808c105-1a78-67a8-14d6-4e5da0486a44.png)

csvを指定するとこんなかんじになります。
![スクリーンショット 2016-01-16 22.32.37.png](https://qiita-image-store.s3.amazonaws.com/0/100736/4a38eef8-397c-c132-cac0-3159d3b70445.png)

checkstyle(XML)を指定するとこんなかんじになります。
※checkstyleは最近(0.5.4)追加されたので、以前のバージョンを使っている場合はアップデートをする必要があります。
![スクリーンショット 2016-01-17 11.15.43.png](https://qiita-image-store.s3.amazonaws.com/0/100736/93903ed1-ac78-09f7-bf74-3b64e1fa9253.png)

# use_nested_configs

configファイルをネストさせた状態で置くこともできるようです。デフォルトはfalseです。
いまいち理解できていない部分もあるので原文載せておきます。

```
#### Nested Configurations

SwiftLint supports nesting configuration files for more granular control over
the linting process.

  * Set the `use_nested_configs: true` value in your root `.swiftlint.yml` file
  * Include additional `.swiftlint.yml` files where necessary in your directory
    structure.
  * Each file will be linted using the configuration file that is in it's
    directory or at the deepest level of it's parent directories. Otherwise the
    root configuration will be used.
  * `excluded`, `included`, and `use_nested_configs` are ignored for nested
    configurations
```

ちなみに、SwiftLintのテストには以下の階層に置かれていました。

Source/SwiftLintFrameworkTests/Resources/ProjectMock/.swiftlint.yml
Source/SwiftLintFrameworkTests/Resources/ProjectMock/Level1/Level2/.swiftlint.yml

# おまけ：autocorrect

.swiftlint.ymlに関係のある話ではないのですが、適切な書き場所がなかったのでここでおまけとして書きます。

SwiftLintにはautocorrect機能があります。コマンドラインで`swiftlint autocorrect`を叩けば実行されます。
もちろん警告が出ているところ全てが修正されるわけではなくて(file_lengthで警告が出ているからといって勝手に行をごっそり削除されたら大変ですね)、特定の項目においてautocorrectが実行されるようです。

例えば

```swift
func hoge()
{
}
```

上記のコードでopening_braceの警告が出ている状態で上記コマンドを実行すると

```swift
func hoge() {
}
```

に修正されます。