avoid-suspicious-super-overrides

Path
lint/suspicious/avoid-suspicious-super-overrides
Default
Off, opt in
Origin
Falcon
Rule
144 of 512

Finds getters hiding fields supplied via the immediate super constructor's this. formals or declaring primary-constructor parameters. Initializer-list assignments and forwarding through intermediate classes are not tracked.

Invalid

example.dartdart
class Base {
  final String issueType;
  const Base({required this.issueType});
  const Base.named(this.issueType);
}
class Child extends Base {
  Child() : super(issueType: 'promotion');
  @override
  String get issueType => 'hidden';
}
class Positional extends Base {
  Positional() : super.named('promotion');
  @override
  String get issueType => 'hidden';
}
class Forwarded extends Base {
  Forwarded({required super.issueType});
  @override
  String get issueType => 'hidden';
}
class PositionalForwarded extends Base {
  PositionalForwarded(super.issueType) : super.named();
  @override
  String get issueType => 'hidden';
}
This getter hides a field already supplied to the super constructor; remove it or reference the super field.
8 @override
9 String get issueType => 'hidden';
This getter hides a field already supplied to the super constructor; remove it or reference the super field.
13 @override
14 String get issueType => 'hidden';
This getter hides a field already supplied to the super constructor; remove it or reference the super field.
18 @override
19 String get issueType => 'hidden';
This getter hides a field already supplied to the super constructor; remove it or reference the super field.
23 @override
24 String get issueType => 'hidden';

Valid

example.dartdart
class Base {
  final String issueType;
  const Base({required this.issueType});
}
class NoOverride extends Base {
  NoOverride() : super(issueType: 'promotion');
}
class UsesSuper extends Base {
  UsesSuper() : super(issueType: 'promotion');
  @override
  String get issueType => '${super.issueType}: detail';
}
class DefaultBase {
  final String issueType;
  DefaultBase({this.issueType = 'default'});
}
class NoPassedValue extends DefaultBase {
  @override
  String get issueType => 'different';
}
class GetterBase {
  GetterBase({required String issueType});
  String get issueType => 'base';
}
class OverridesGetter extends GetterBase {
  OverridesGetter() : super(issueType: 'promotion');
  @override
  String get issueType => 'child';
}
class UnrelatedParameterBase {
  final String issueType = 'stored';
  UnrelatedParameterBase({required String issueType});
}
class UnrelatedParameter extends UnrelatedParameterBase {
  UnrelatedParameter() : super(issueType: 'not stored');
  @override
  String get issueType => 'child';
}

class MixedBase {
  final int count;
  final String issueType;
  MixedBase(this.count, {this.issueType = 'default'});
}
class PositionalNameOnly extends MixedBase {
  PositionalNameOnly(super.issueType);
  @override
  String get issueType => 'hidden';
}

class InitializedBase {
  final String issueType;
  InitializedBase(String issueType) : issueType = issueType;
}
class InitializedChild extends InitializedBase {
  InitializedChild() : super('promotion');
  @override
  String get issueType => 'hidden';
}
class Intermediate extends Base {
  Intermediate({required super.issueType});
}
class IndirectChild extends Intermediate {
  IndirectChild() : super(issueType: 'promotion');
  @override
  String get issueType => 'hidden';
}

Configure avoid-suspicious-super-overrides

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

falcon.jsonjson
{
  "linter": {
    "rules": {
      "suspicious": {
        "avoid-suspicious-super-overrides": "error"
      }
    }
  }
}

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

example.dartdart
// falcon-ignore lint/suspicious/avoid-suspicious-super-overrides: <reason>