メインコンテンツにスキップ

null_closures

安定版
推奨
修正が利用可能です

クロージャが期待される場所で引数として null を渡さないでください。

詳細

#

渡さないでください クロージャが期待される場所で引数として null を渡さないでください。

多くの場合、メソッドに渡されるクロージャは条件付きで呼び出されるため、テストや「ハッピーパス」のプロダクション呼び出しでは null が例外をスローすることになることが明らかになりません。

このルールは、以下の場所でクロージャが期待される場所に渡される null リテラルのみを検出します

コンストラクタ

#
  • dart:async から
    • Future の 0 番目の位置パラメータ
    • Future.microtask の 0 番目の位置パラメータ
    • Future.sync の 0 番目の位置パラメータ
    • Timer の 0 番目の位置パラメータ
    • Timer.periodic の 1 番目の位置パラメータ
  • dart:core から
    • List.generate の 1 番目の位置パラメータ

静的関数

#
  • dart:async から
    • scheduleMicrotask の 0 番目の位置パラメータ
    • Future.doWhile の 0 番目の位置パラメータ
    • Future.forEach の 0 番目の位置パラメータ
    • Future.wait の名前付きパラメータ cleanup
    • Timer.run の 0 番目の位置パラメータ

インスタンスメソッド

#
  • dart:async から
    • Future.then の 0 番目の位置パラメータ
    • Future.complete の 0 番目の位置パラメータ
  • dart:collection から
    • Queue.removeWhere の 0 番目の位置パラメータ
    • `Queue.retain
    • Iterable.firstWhere の 0 番目の位置パラメータ、および名前付きパラメータ orElse
    • Iterable.forEach の 0 番目の位置パラメータ
    • Iterable.fold の 1 番目の位置パラメータ
    • Iterable.lastWhere の 0 番目の位置パラメータ、および名前付きパラメータ orElse
    • Iterable.map の 0 番目の位置パラメータ
    • Iterable.reduce の 0 番目の位置パラメータ
    • Iterable.singleWhere の 0 番目の位置パラメータ、および名前付きパラメータ orElse
    • Iterable.skipWhile の 0 番目の位置パラメータ
    • Iterable.takeWhile の 0 番目の位置パラメータ
    • Iterable.where の 0 番目の位置パラメータ
    • List.removeWhere の 0 番目の位置パラメータ
    • List.retainWhere の 0 番目の位置パラメータ
    • String.replaceAllMapped の 1 番目の位置パラメータ
    • String.replaceFirstMapped の 1 番目の位置パラメータ
    • String.splitMapJoin の名前付きパラメータ onMatch および onNonMatch

悪い例

dart
[1, 3, 5].firstWhere((e) => e.isOdd, orElse: null);

良い例

dart
[1, 3, 5].firstWhere((e) => e.isOdd, orElse: () => null);

有効にする

#

null_closures ルールを有効にするには、analysis_options.yaml ファイルの linter > rules の下に null_closures を追加します

analysis_options.yaml
yaml
linter:
  rules:
    - null_closures

代わりに linter ルールを構成するために YAML マップ構文を使用している場合は、linter > rules の下に null_closures: true を追加します

analysis_options.yaml
yaml
linter:
  rules:
    null_closures: true