2月6日にSwiftLint0.8.0がリリースされたのでまとめます。
廃止、変更されたもの
SeverityLevelsConfigの設定
背景として、今までは.swiftlint.ymlファイルでwarningの値のみを設定していた場合、warningの値はデフォルト値から変更されますが、errorの値は変更されない状態でした。
そのため、例えばFileLengthのwarningのみ400から1200に上げてerrorは何もいじらないと、errorはデフォルトの1000が設定されたままになっており、FileLengthが1100の状態でビルドするとwarningには引っかからないのにerrorで引っかかってしまうという現象が起きていました。
しかし今回のアップデートで、warningしか設定していない場合、errorの値は使用されないという動作をするようになりました。
enabled_rules
opt_in_rulesという名前に変わりました。
強化、追加されたもの
whitelist_rules
SwiftLintのアップデートによって前回Lintを適用したときには採用していなかったルールも適用されてしまい、CIプロセスを破壊してしまう状況を防ぐために作られたものです。
whitelistはdisabled_rules(≒ブラックリスト)やopt_in_rulesと併用することはできません。
whitelistを使用した場合、列挙されたルールのみ適用してコードチェックを行うという動作になります。
プルリクはこちらです。
パフォーマンス改善
ColonRule, LineLengthRule, syntaxKindsByLineのパフォーマンスが改善されました。
rulesコマンド
$ swiftlint rules <rule identifier>
というコマンドを打つと、ルールの概要が表示されるようになりました。
また、identifierを指定しないで$ swiftlint rules
と打った場合は
- identifier
- opt-inかどうか
- autocorrectコマンドで修正されるルールか
- デフォルトでenabledなのかどうか
- 警告を出すルールなのか、エラーを出すルールなのか、一定の数値に達した時に警告/エラーを出すルールなのか
の値が出力されるようになりました。
FunctionParameterCountRule
description: "Number of function parameters should be low."
新しく追加されたルールです。引数の数が6〜8個だと警告に、9以上だとエラーになります。
なので、5個以内に抑えれば警告もエラーも出ません。
CyclomaticComplexityRule
循環的複雑度ルールでは、ネスト内の関数は別で計算する必要があるのでは、という指摘を受けて修正されました。
OpeningBraceRule
OpeningBraceRuleに例外が追加されました。if/guard/whileの条件文が複数行に渡る場合はopening braceが次の行になっても構わないというルールに変更されました。
該当のissueを見てみると、issue作成者は1つのif文で複数のバインディングやwhereがあるときに、1つの文ごとに改行してインデントを揃えて書くことがあるそうです。
その場合、opening braceをその末尾に持って行くよりも改行した方が読みやすいのではないかという提案をしています。
if
let blah = blah,
let foo = blah.foo
where foo.something {
// do something
}
if
let blah = blah,
let foo = blah.foo
where foo.something
{
// do something
}
メモリ
最大メモリ量が軽減されています。
バグFix
ValidDocsRule
偽陽性の修正が入りました。
TrailingNewlineのautocorrect
行ごとに複数のルール違反を扱えるように、TrailingNewlineのautocorrectに修正が入ったようです。
CyclomaticComplexityRule
switch文が含まれている時のcomplexityの計算が修正されました。