Rules / Complexity / prefer-null-aware-operators
prefer-null-aware-operators
Flags x == null ? null : x.y (and the inverted x != null ? x.y : null).
Guarding a member access with a null-check ternary is what the ?.
null-aware operator does: x?.y. It is shorter and evaluates the receiver
only once. The rule fires when one branch is the null literal and the
other is a field access, index, or method call whose receiver matches the
checked operand (whitespace-insensitive).
Invalid
example.dartdart
void f(C? a, C? b) {
var r1 = a == null ? null : a.field;
var r2 = a != null ? a.field : null;
var r3 = a == null ? null : a.method();
var r4 = null == a ? null : a.field;
var r5 = b == null ? null : b.method();
print('$r1 $r2 $r3 $r4 $r5');
}
class C {
int? field;
int method() => 0;
}
Prefer using the null-aware operator '?.'.
1void f(C? a, C? b) {
2 var r1 = a == null ? null : a.field;
∙
Prefer using the null-aware operator '?.'.
2 var r1 = a == null ? null : a.field;
3 var r2 = a != null ? a.field : null;
∙
Prefer using the null-aware operator '?.'.
3 var r2 = a != null ? a.field : null;
4 var r3 = a == null ? null : a.method();
∙
Prefer using the null-aware operator '?.'.
4 var r3 = a == null ? null : a.method();
5 var r4 = null == a ? null : a.field;
∙
Prefer using the null-aware operator '?.'.
5 var r4 = null == a ? null : a.field;
6 var r5 = b == null ? null : b.method();
∙
Valid
example.dartdart
void f(C? a, C? b) {
var r1 = a == null ? a.field : null;
var r2 = a == null ? null : b.field;
var r3 = a != null ? null : a.field;
var r4 = a == null ? 0 : a.field;
var r5 = a?.field;
var r6 = a == null ? null : a;
print('$r1 $r2 $r3 $r4 $r5 $r6');
}
class C {
int? field;
int method() => 0;
}
How to configure
Set the severity of prefer-null-aware-operators in your falcon.json:
falcon.jsonjson
{
"linter": {
"rules": {
"complexity": {
"prefer-null-aware-operators": "error"
}
}
}
}