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

avoid_catches_without_on_clauses

安定版

on句なしのcatchは避ける。

詳細

#

From Effective Dart

避けるべき: on句なしのcatch。

on句なしのcatch句を使用すると、コードは意図しないエラーに遭遇しやすくなります。これらのエラーはスローされない(そのため、見過ごされる)可能性があります。

悪い例

dart
try {
 somethingRisky()
} catch(e) {
  doSomething(e);
}

良い例

dart
try {
 somethingRisky()
} on Exception catch(e) {
  doSomething(e);
}

いくつかの例外的なケースは許可されます

  • catchブロックの本体が例外を再スローする場合。
  • キャッチされた例外がFuture.errorCompleter.completeError、またはFlutterError.reportError、あるいは戻り値の型がNeverである任意の関数の引数で「直接使用」されている場合。
  • キャッチされた例外が新しいthrow式で「直接使用」されている場合。

これらのケースでは、「直接使用」とは、例外が関連コード(引数内など)内で参照されていることを意味します。例外変数が、たとえばラッパー例外をインスタンス化するために、関連コードの*前に*参照されている場合、その変数は「直接使用」されているとはみなされません。

有効にする

#

avoid_catches_without_on_clausesルールを有効にするには、analysis_options.yamlファイルのlinter > rulesの下にavoid_catches_without_on_clausesを追加してください。

analysis_options.yaml
yaml
linter:
  rules:
    - avoid_catches_without_on_clauses

代わりにYAMLマップ構文を使用してlinterルールを構成している場合は、linter > rulesの下にavoid_catches_without_on_clauses: trueを追加してください。

analysis_options.yaml
yaml
linter:
  rules:
    avoid_catches_without_on_clauses: true