LoginSignup
45
45

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-01-17

テンプレート

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

また、0.7.1にてCustomRulesというものが追加されました。
こちらについてはSwiftLint 0.7.1 アップデート内容まとめ - CustomRulesを御覧ください。

※2016/02/21 追記
enabled_rulesはopt_in_rulesという名前に変わりました。
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一覧(実例付き)で詳しく書いたのでそちらをご参照ください。

enabled_rules

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

included

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

excluded

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

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

※2016/02/06 追記
SwiftLint0.7.0で書き方が変わりました。詳しくはこちらの記事を御覧ください。
SwiftLint 0.7.0 アップデート内容まとめ - SeverityLevelsConfig
SwiftLint 0.7.0 アップデート内容まとめ - 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を見ると、デフォルトでは"xcode"が指定されているようです。

エラーがある状態で以下の各種類を指定すると左ペインがこの状態になり、これをクリックすることでレポートを見ることができます。
スクリーンショット 2016-01-17 11.17.45.png

jsonを指定するとこんなかんじになります。
スクリーンショット 2016-01-16 22.29.24.png

csvを指定するとこんなかんじになります。
スクリーンショット 2016-01-16 22.32.37.png

checkstyle(XML)を指定するとこんなかんじになります。
※checkstyleは最近(0.5.4)追加されたので、以前のバージョンを使っている場合はアップデートをする必要があります。
スクリーンショット 2016-01-17 11.15.43.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が実行されるようです。

例えば

func hoge()
{
}

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

func hoge() {
}

に修正されます。

45
45
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
45
45