この間0.6.0がリリースされたと思ったらその10日後に0.7.0がリリースされ、そしてその2日後に0.7.1がリリースされました。
いろいろパワーアップしたり追加されたりしているので新しい記事として書くことにしました。
長くなるので0.7.0の記事と0.7.1の記事を分けます。
廃止されたもの
XPCDictionary
今まで使用していた全てのXPCDictionaryは[String: SourceKitRepresentable]に置き換えられました。
VariableNameMinLengthRule、VariableNameMaxLengthRule
代わりにVariableNameRuleに統合されました。
VariableNameRule
内容自体は以前のVariableNameMinLengthRule、VariableNameMaxLengthRule、VariableNameRuleが合わさったものと考えればいいと思います。
.swiftlint.ymlでは以下のように記述します(Configurationから抜粋)。
variable_name:
min_length:
error: 4 # only error
max_length: # warning and error
warning: 40
error: 50
excluded: # excluded via string array
- id
- URL
- GlobalAPIKey
従来まではerrorやwarningの値を定義するときは以下のように記述していましたね。
<rule name>:
- <数値> # warning
- <数値> # error
ViolationLevelRule
代わりにConfigProviderRuleとSeverityLevelsConfigが加わりました。
ConfigProviderRule
ConfigProviderRuleはプロトコルです。
ちゃんとわかっていないのでぼかしますが、ルールはこれに則っているべき、とかそういうかんじだと思います(後日ちゃんと書き直そうと思います)。
SeverityLevelsConfig
warning、errorがこれに該当します。
READMEによると、”severity”という文字列を明示的に記述することも、省略することもできるようです。
force_cast: warning # implicitly
force_try:
severity: warning # explicitly
さらに数値をカスタマイズするときの”warning”, “error”文字列ですが、これも明示的に記述することも、省略することもできるようです。
# implicitly
line_length: 110
# they can set both implicitly with an array
type_body_length:
- 300 # warning
- 400 # error
# or they can set both explicitly
file_length:
warning: 500
error: 1200
強化されたもの
TypeBodyLengthRule
コメント行や空行はカウントされなくなりました。
FunctionBodyLengthRule
コメント行や空行はカウントされなくなりました。
TypeNameRule、VariableNameRule
NameConfigを用いたConfigProviderRuleに準拠するようになり、min_length(最小文字数)、max_length(最大文字数)、excluded names(ルール適用外文字列)を指定できるようになりました。
CyclomaticComplexityRule
新しく追加されたルールです。直訳すると「循環的複雑度に関するルール」です。
循環的複雑度についてこの記事をもとにざっくりと理解したところでは「ある1つの関数がどれだけ複雑なのかを表した指標」であり、「デフォルトで数値は1で、条件分岐が増えるごとに+1される」といったかんじでしょうか。
SwiftLintのCyclomaticComplexityRuleでは、complexityを10以下に抑えないと警告が表示されます。
complexityが増えるキーワードとされているものは以下の通りです。
foreach, if, switch, case, guard, for, repeatwhile, while
全てのルール
全てのルールはSeverityConfigに基づいてwarningなどのseverityを設定できるようになりました。
バグFix
- ネストされた設定ファイルを使用した時に無限再帰が発生してしまってクラッシュする問題が修正されました。
- NULL文字が含まれていた場合にクラッシュする問題が修正されました。