Rules / Complexity / prefer-if-null-operators
prefer-if-null-operators
Flags x == null ? y : x (and the inverted x != null ? x : y).
A ternary that returns its own operand on the non-null branch is exactly the
?? if-null operator: x ?? y. The operator is shorter and evaluates x
only once. The rule takes the operand of the == null/!= null check and
compares it (ignoring whitespace) against the branch that falls through to
it, firing when the two are textually equal.
Invalid
example.dartdart
void f(int? a, int? b, String fallback, C obj) {
var r1 = a == null ? b : a;
var r2 = a != null ? a : b;
var r3 = null == a ? b : a;
var r4 = a == null ? 0 : a;
var r5 = obj.name == null ? fallback : obj.name;
print('$r1 $r2 $r3 $r4 $r5');
}
class C {
String? name;
}
Prefer using the if-null operator '??'.
1void f(int? a, int? b, String fallback, C obj) {
2 var r1 = a == null ? b : a;
∙
Prefer using the if-null operator '??'.
2 var r1 = a == null ? b : a;
3 var r2 = a != null ? a : b;
∙
Prefer using the if-null operator '??'.
3 var r2 = a != null ? a : b;
4 var r3 = null == a ? b : a;
∙
Prefer using the if-null operator '??'.
4 var r3 = null == a ? b : a;
5 var r4 = a == null ? 0 : a;
∙
Prefer using the if-null operator '??'.
5 var r4 = a == null ? 0 : a;
6 var r5 = obj.name == null ? fallback : obj.name;
∙
Valid
example.dartdart
void f(int? a, int? b, C obj) {
var r1 = a == null ? a : b;
var r2 = a == null ? b : b;
var r3 = a != null ? b : a;
var r4 = a! > 0 ? a : b;
var r5 = obj.name == null ? a : obj.other;
var r6 = a ?? b;
print('$r1 $r2 $r3 $r4 $r5 $r6');
}
class C {
int? name;
int? other;
}
How to configure
Set the severity of prefer-if-null-operators in your falcon.json:
falcon.jsonjson
{
"linter": {
"rules": {
"complexity": {
"prefer-if-null-operators": "error"
}
}
}
}