推奨されないコードを機械的に発見出来る部分は人間がコードレビューなどで指摘するのではなくLinterで気づきたい。 なので、プロジェクトごとにLinterのCustom Ruleを作りたいのだが、DartのLinterはCustom Ruleに対応していない。
このイシューに書かれてある通り、linterコマンドを自分で作る方法とanalyzer_pluginを利用する方法がある。
linterコマンドを自分で作る
この方法は実装が簡単というメリットがあり、IDE上ではエラーや警告が表示されないというデメリットがある。
linter/linter.dart at master · dart-lang/linter · GitHub
linter.dart の中で自分で作ったRuleを登録してあげて実行する。まあこういう感じで出来る
Future main(List<String> args) async { final enableRules = [ MyCustomRule(), ]; for (final rule in enableRules) { Analyzer.facade.register(rule); } await cli.run([ '--packages=.packages', '--rules=${enableRules.map((r) => r.name).join(",")}', 'lib', 'test', ]); }
analyzer_pluginを利用する方法
この方法はIDE上でもエラーや警告が表示されるというメリットがあり、実装やデバッグがめんどくさいというデメリットがある。
analyzer_plugin | Dart Packageを利用する。
めんどくさい実装をメンテし続けるのはつらいので、dart_code_metricsというライブラリをforkして自前のルールを追加するのはどうかと思ってやってみた。
試しに追加したのは、 DateTime.utc()
とかを使うとエラーにするRule
これでDateTime.utc(2020)
とかするとIDE上でエラーになる。ただまあ、forkなのであんまりやりたくないなと思っている。