avoid-non-final-exception-class-fields

Path
lint/suspicious/avoid-non-final-exception-class-fields
Default
Off, opt in
Origin
Falcon
Rule
105 of 512

Exception and Error payloads should not change after construction.

Invalid

example.dartdart
class Failure implements Exception {
  String message;
  int code = 0;
  int count = 0;
  late Object detail;
  Failure(this.message);
}
class SpecificFailure extends Failure {
  String context = '';
  SpecificFailure() : super('failure');
}
class FailureError extends Error {
  int code = 0;
}
Make exception instance fields `final`.
1class Failure implements Exception {
2 String message;
Make exception instance fields `final`.
2 String message;
3 int code = 0;
Make exception instance fields `final`.
3 int code = 0;
4 int count = 0;
Make exception instance fields `final`.
4 int count = 0;
5 late Object detail;
Make exception instance fields `final`.
8class SpecificFailure extends Failure {
9 String context = '';
Make exception instance fields `final`.
12class FailureError extends Error {
13 int code = 0;

Valid

example.dartdart
class Failure implements Exception {
  final String message;
  late final Object detail;
  static int total = 0;
  static const category = 'failure';
  Failure(this.message);
  String get description => message;
}
class SpecificFailure extends Failure {
  final String context;
  SpecificFailure(this.context) : super('failure');
}
class FailureError extends Error { final int code = 1; }
class NotAnException { int mutable = 0; }

Configure avoid-non-final-exception-class-fields

Set its severity in falcon.json. See the configuration guide.

falcon.jsonjson
{
  "linter": {
    "rules": {
      "suspicious": {
        "avoid-non-final-exception-class-fields": "error"
      }
    }
  }
}

Or silence one occurrence with a suppression comment; the reason is required.

example.dartdart
// falcon-ignore lint/suspicious/avoid-non-final-exception-class-fields: <reason>