LOG IN

Swiftlintのunused_importを使う

by shimastripe

Analyze(Experimental)のノリがパッと見て分からなかったので走り書き備忘録

(なんだかg.o.a.tの箇条書きやらブロックボタンが死んでいるのでとりあえず羅列。今度ちゃんとコードっぽく直すかな)

Swiftlintのルールで0.28.0あたりからunused_importやらunused_declarationといったASTを使った静的解析

支援でどこまでできるのか気になる機能が追加されたので使ってみたくなった。しかし、AnalyzeはまだExperimentalな機能で使ってみるのに苦労したのでまとめておく。ドキュメント見ながら試行錯誤して動いた感じなので間違いもっと簡単な方法あればぜひ指摘を。

The experimental swiftlint analyze command can lint Swift files using the full type-checked AST. The compiler log path containing the clean swiftc build command invocation (incremental builds will fail) must be passed to analyze via the --compiler-log-path flag. e.g. --compiler-log-path /path/to/xcodebuild.log

引用元:https://github.com/realm/SwiftLint#analyze-experimental

上に書いてあるように通常のxcodeのclean build.logファイルが必要。AST作るから当然といえば当然なんだけど初め差分Buildした結果、Lintが特に警告しなかったりして困ったりした。

```.swiftlint.yml

opt_in_rules:

  # 通常の追加ルール

analyzer_rules:

  - unused_import

  - explicit_self

unused_import:

  severity: error

```

analyzeに使うルールは通常のopt_in_rulesの方と別個に記述。レベルはWarning, Errorなど指定可能。

$ xcodebuild -project ./Example.xcodeproj -scheme release > xcodebuild.log

$ swiftlint analyze --compiler-log-path ./xcodebuild.log --autocorrect

こんな感じで実行可能。--autocorrectオプションで自動修正可能なものは直せる。

結果

めっちゃunused_importが消えた。Release note見てるとそりゃあ静的解析だしFalsePositive出るだろうけど自分の環境だとひとまず普通にBuildできた。SAIKO。みなさんも使ってみてください。

Cons

まあ静的解析だしASTゴリゴリ見るからめっちゃ重いし時間がかかる。CIに毎回やらせるとキュー詰まっちゃいそうでどの段階で実行させるようにすべきか思案中。。。

OTHER SNAPS