move-variable-closer-to-its-usage
- Group
- Performance
- 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
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); }
}void example(bool enabled) { final count = 3;void alternative(bool enabled) { final value = 1.5;void shadowed(bool enabled) { final count = 3;void constant(bool enabled) { const count = 3;void boolean(bool enabled) { final value = false;Valid
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.
{
"linter": {
"rules": {
"performance": {
"move-variable-closer-to-its-usage": "error"
}
}
}
}Or silence one occurrence with a suppression comment; the reason is required.
// falcon-ignore lint/performance/move-variable-closer-to-its-usage: <reason>More performance rules
- move-variable-outside-iteration
Reports loop-local final variables whose computation is independent of the loop.
- noop-primitive-operations
noop_primitive_operationsrecommendedFlags primitive operations that return their receiver unchanged.
- prefer-const-border-radius
prefer-const-border-radiusrecommendedflutterFlags
BorderRadius.only(...)whose four corner radii are all equal. - prefer-contains
prefer_containsrecommendedPrefers
containsto comparing the result ofindexOfwith a constant. - prefer-correct-edge-insets-constructor
prefer-correct-edge-insets-constructorrecommendedflutterFlags an
EdgeInsets.only(...)that a more specific constructor expresses better. - prefer-declaring-const-constructor
prefer_declaring_const_constructorflutterFlags a generative constructor that is legally eligible to be
const. - prefer-foreach
prefer_foreachPrefers
forEachto afor-in loop that only passes each element to a function. - prefer-return-await
Await returned SDK Futures inside a try body protected by a catch clause.