Rules / Complexity / prefer-if-null-operators

prefer-if-null-operators

lint/complexity/prefer-if-null-operators
recommended
Same as prefer_if_null_operators · Dart lints

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"
      }
    }
  }
}