Pular para o conteúdo principal

exhaustive_cases

Saiba mais sobre a regra de lint exhaustive_cases.

Estável
Recomendado
Correção disponível
Lançado no Dart 2.9

Defina cláusulas case para todas as constantes em tipos semelhantes a enum.

Detalhes

#

Usar switch sobre instâncias de tipos semelhantes a enum deve cobrir todas as constantes conhecidas.

Tipos semelhantes a enum são classes ou extension types que têm:

  • apenas construtores privados não-factory
  • dois ou mais campos static const cujo tipo é o tipo que os contém

Além disso, classes semelhantes a enum são concretas (não abstratas) e não têm subclasses na biblioteca que as define.

FAÇA defina cláusulas case para todas as constantes em tipos semelhantes a enum.

Extension types também podem ser semelhantes a enum:

dart
extension type const E._(int value) {
  static const E a = E._(1);
  static const E b = E._(2);
}
​
void f(E e) {
  switch (e) { // LINT
    case E.a:
      print('a');
  }
}

RUIM:

dart
class EnumLike {
  final int i;
  const EnumLike._(this.i);
​
  static const e = EnumLike._(1);
  static const f = EnumLike._(2);
  static const g = EnumLike._(3);
}
​
void bad(EnumLike e) {
  // Missing case.
  switch(e) { // LINT
    case EnumLike.e :
      print('e');
      break;
    case EnumLike.f :
      print('f');
      break;
  }
}

BOM:

dart
class EnumLike {
  final int i;
  const EnumLike._(this.i);
​
  static const e = EnumLike._(1);
  static const f = EnumLike._(2);
  static const g = EnumLike._(3);
}
​
void ok(EnumLike e) {
  // All cases covered.
  switch(e) { // OK
    case EnumLike.e :
      print('e');
      break;
    case EnumLike.f :
      print('f');
      break;
    case EnumLike.g :
      print('g');
      break;
  }
}

Ativar

#

Para ativar a regra exhaustive_cases, adicione exhaustive_cases em linter > rules no seu arquivo analysis_options.yaml:

analysis_options.yaml
yaml
linter:
  rules:
    - exhaustive_cases

Se você usa a sintaxe de mapa YAML para configurar as regras de lint, adicione exhaustive_cases: true em linter > rules:

analysis_options.yaml
yaml
linter:
  rules:
    exhaustive_cases: true

Encontrou essa página sem tradução ou que precisa de correção? Abra uma issue e nos ajude a manter esse site em PT-BR para ajudar pessoas como você.