avoid-duplicate-initializers

Path
lint/correctness/avoid-duplicate-initializers
Default
Off, opt in
Origin
Falcon
Rule
50 of 512

Flags final/const variables with identical initializers in the same scope. Calls, construction, await, mutation, collection allocation, and closures are excluded. Non-declaration statements invalidate local candidates, so writes or calls between reads cannot turn an intentional state snapshot into a lint. Lazy static initializers are compared only when they contain no state reads.

Invalid

example.dartdart
void fields(dynamic param) {
  final first = param.value.isNotEmpty;
  final second = param.value.isNotEmpty;
}
void identifiers(int input) {
  final first = input;
  final second = input;
}
void operators(int input) {
  final first = input + 1;
  final second = input + 1;
}
void constants() {
  const first = 'same';
  const second = 'same';
}
class A {
  final first = 42;
  final second = 42;
}
class B {
  static const first = true;
  static const second = true;
}
class LazyConstants {
  static final first = 1 + 2;
  static final second = 1 + 2;
}
class InstanceSnapshots {
  final first = current;
  final second = current;
}
int current = 0;
class MixedSnapshots {
  final first = 1;
  static const firstConst = 2;
  static final snapshot = current;
  final second = 1;
  static const secondConst = 2;
}
This initializer duplicates `first` — reuse that variable or correct this initializer.
2 final first = param.value.isNotEmpty;
3 final second = param.value.isNotEmpty;
This initializer duplicates `first` — reuse that variable or correct this initializer.
6 final first = input;
7 final second = input;
This initializer duplicates `first` — reuse that variable or correct this initializer.
10 final first = input + 1;
11 final second = input + 1;
This initializer duplicates `first` — reuse that variable or correct this initializer.
14 const first = 'same';
15 const second = 'same';
This initializer duplicates `first` — reuse that variable or correct this initializer.
18 final first = 42;
19 final second = 42;
This initializer duplicates `first` — reuse that variable or correct this initializer.
22 static const first = true;
23 static const second = true;
This initializer duplicates `first` — reuse that variable or correct this initializer.
26 static final first = 1 + 2;
27 static final second = 1 + 2;
This initializer duplicates `first` — reuse that variable or correct this initializer.
30 final first = current;
31 final second = current;
This initializer duplicates `first` — reuse that variable or correct this initializer.
37 static final snapshot = current;
38 final second = 1;
This initializer duplicates `firstConst` — reuse that variable or correct this initializer.
38 final second = 1;
39 static const secondConst = 2;

Valid

example.dartdart
void changed(int input) {
  final first = input;
  input = 2;
  final second = input;
}
void effects(dynamic object) {
  final first = object.value;
  object.update();
  final second = object.value;
}
void calls(dynamic object) {
  final first = object.read();
  final second = object.read();
}
void allocations() {
  final first = Object();
  final second = Object();
  final third = <int>[];
  final fourth = <int>[];
}
void scopes(int input) {
  if (input > 0) { final first = input; }
  if (input < 0) { final second = input; }
}
void distinct(dynamic object) {
  final first = object.first;
  final second = object.second;
  final text = 'a b';
  final other = 'ab';
}
void mutable(int input) {
  var first = input;
  var second = input;
}
class A {
  final first = Object();
  final second = Object();
}
class B {
  final first = 1;
  static final second = 1;
}
int current = 0;
final firstSnapshot = current;
final secondSnapshot = current;
class LazySnapshots {
  static final first = current;
  static final second = current;
  static final incremented = current + 1;
  static final incrementedAgain = current + 1;
  static final text = 'value: $current';
  static final textAgain = 'value: $current';
}

Configure avoid-duplicate-initializers

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

falcon.jsonjson
{
  "linter": {
    "rules": {
      "correctness": {
        "avoid-duplicate-initializers": "error"
      }
    }
  }
}

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

example.dartdart
// falcon-ignore lint/correctness/avoid-duplicate-initializers: <reason>