move-variable-closer-to-its-usage

Path
lint/performance/move-variable-closer-to-its-usage
Default
Off, opt in
Origin
Falcon
Rule
271 of 512

Move final/const scalar literals into their only branch, or after an if.

Literal initialization has no observable side effects. Declaration-resolved references exclude shadowed names and captures. ignore-const defaults to false; ignore-after-if defaults to true. Effectful/late/mutable variables are deliberately excluded.

Invalid

example.dartdart
void example(bool enabled) {
  final count = 3;
  if (enabled) {
    print(count);
    print(count);
  }
}
void alternative(bool enabled) {
  final value = 1.5;
  if (enabled) {
    print('enabled');
  } else {
    print(value);
  }
}
void shadowed(bool enabled) {
  final count = 3;
  if (enabled) { print(count); }
  { final count = 4; print(count); }
}
void constant(bool enabled) {
  const count = 3;
  if (enabled) { print(count); }
}
void boolean(bool enabled) {
  final value = false;
  if (enabled) { print(value); }
}
This variable is used in only one branch. Move its declaration into that branch, closer to its uses.
1void example(bool enabled) {
2 final count = 3;
This variable is used in only one branch. Move its declaration into that branch, closer to its uses.
8void alternative(bool enabled) {
9 final value = 1.5;
This variable is used in only one branch. Move its declaration into that branch, closer to its uses.
16void shadowed(bool enabled) {
17 final count = 3;
This variable is used in only one branch. Move its declaration into that branch, closer to its uses.
21void constant(bool enabled) {
22 const count = 3;
This variable is used in only one branch. Move its declaration into that branch, closer to its uses.
25void boolean(bool enabled) {
26 final value = false;

Valid

example.dartdart
int compute() => 3;
void example(bool enabled) {
  final count = 3;
  if (enabled) { print(count); } else { print(count); }
  final effectful = compute();
  if (enabled) { print(effectful); }
  var mutable = 1;
  if (enabled) { mutable++; print(mutable); }
  late final deferred = 3;
  if (enabled) { print(deferred); }
  final condition = true;
  if (condition) { print(condition); }
  final escaped = 3;
  if (enabled) { print(escaped); }
  print(escaped);
  final captured = 3;
  if (enabled) { final callback = () => captured; print(callback); }
  final first = 1, second = 2;
  if (enabled) { print(first); print(second); }
  final values = [1, 2];
  if (enabled) { print(values); }
}
void constantPattern(bool condition, int value) {
  const limit = 3;
  if (condition) { print(limit); }
  switch (value) {
    case limit: break;
    default: break;
  }
}
void ifCasePattern(bool condition, int value) {
  const limit = 3;
  if (condition) { print(limit); }
  if (value case limit) { print('matched'); }
}

Configure move-variable-closer-to-its-usage

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

falcon.jsonjson
{
  "linter": {
    "rules": {
      "performance": {
        "move-variable-closer-to-its-usage": "error"
      }
    }
  }
}

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

example.dartdart
// falcon-ignore lint/performance/move-variable-closer-to-its-usage: <reason>