use-super-parameters
Same as use_super_parameters in Dart lints
- Group
- Style
- Path
lint/style/use-super-parameters- Default
- On (recommended)
- Origin
- Dart lints
- Rule
- 507 of 512
Prefer super parameters when a constructor only forwards parameters to its superclass.
Super parameters remove repeated parameter declarations and explicit forwarding arguments. This rule reports a constructor once when its positional parameters can be converted together, or when an individual named parameter can be converted without changing its type contract. Parameters used in the constructor body and field-initializing formals are not suggested.
Available starting with Dart 2.17. For example, replace
Child(int value) : super(value); with Child(super.value);.
Invalid
// Parameters forwarded verbatim to super and used nowhere else.
class Base {
Base(int a);
Base.two(int a, int b);
Base.named({int? x});
Base.both(int a, {int? x});
}
class A extends Base {
A(int a) : super(a);
}
class B extends Base {
B(int a, int b) : super.two(a, b);
}
class C extends Base {
C({int? x}) : super.named(x: x);
}
class D extends Base {
D(int a) : super(a);
}
class E extends Base {
E(int a) : super(a);
}
class ObjectBase {
ObjectBase(Object e);
}
class CatchBinding extends ObjectBase {
CatchBinding(Object e) : super(e) {
try {} catch (e) {}
}
}
class SkippedParameter extends Base {
SkippedParameter(String unused, int value) : super(value);
}
class Multiline extends Base {
Multiline(
int value,
) : super(value);
}
class InitializerReference extends Base {
final int saved;
InitializerReference(int value) : saved = value, super(value);
}
class Primary(int value) extends Base {
this : super(value);
}
class NamedConstructor extends Base {
NamedConstructor.named(int value) : super(value);
}
class FieldWithNamed extends Base {
final int field;
FieldWithNamed(this.field, {int? x}) : super.both(field, x: x);
}
class SkippedParameters extends Base {
SkippedParameters(String unused, int a, bool skipped, int b) : super.two(a, b);
}class A extends Base { A(int a) : super(a);class B extends Base { B(int a, int b) : super.two(a, b);class C extends Base { C({int? x}) : super.named(x: x);class D extends Base { D(int a) : super(a);class E extends Base { E(int a) : super(a);class CatchBinding extends ObjectBase { CatchBinding(Object e) : super(e) {class SkippedParameter extends Base { SkippedParameter(String unused, int value) : super(value);class Multiline extends Base { Multiline( final int saved; InitializerReference(int value) : saved = value, super(value); class Primary(int value) extends Base {class NamedConstructor extends Base { NamedConstructor.named(int value) : super(value); final int field; FieldWithNamed(this.field, {int? x}) : super.both(field, x: x);class SkippedParameters extends Base { SkippedParameters(String unused, int a, bool skipped, int b) : super.two(a, b);Valid
// Cases that must not be flagged.
class Base {
Base(int a);
Base.two(int a, int b);
}
class A extends Base {
A(int a) : super(a) {
print(a);
}
}
class B extends Base {
B(super.a);
}
class C extends Base {
C(int value) : super(value + 1);
}
class D extends Base {
D(int a, int b) : super.two(b, a);
}
class E extends Base {
E(int a, int b) : super.two(a, b) {
print(a);
print(b);
}
}
class PartialExpression extends Base {
PartialExpression(int a, int b) : super.two(a, b + 1);
}
class FieldBlocker extends Base {
final int field;
FieldBlocker(this.field, int a) : super(a);
}
class NamedToPositional extends Base {
NamedToPositional({required int a}) : super(a);
}
class WideBase {
WideBase({num? value});
}
class NarrowParameter extends WideBase {
NarrowParameter({int? value}) : super(value: value);
}
class NamedBase {
NamedBase({int? value});
}
class FinalDeclaringPrimary({final int? value}) extends NamedBase {
this : super(value: value);
}
class VarDeclaringPrimary({var int? value}) extends NamedBase {
this : super(value: value);
}
class RepeatedArgument extends Base {
RepeatedArgument(int a) : super.two(a, a);
}Configure use-super-parameters
Set its severity in falcon.json. See the configuration guide.
{
"linter": {
"rules": {
"style": {
"use-super-parameters": "error"
}
}
}
}Or silence one occurrence with a suppression comment; the reason is required.
// falcon-ignore lint/style/use-super-parameters: <reason>More style rules
- use-test-throws-matchers
use_test_throws_matchersrecommendedPrefers
throwsAmatchers overtry { ...; fail(...); } catch (...) {}. - use-to-and-as-if-applicable
use_to_and_as_if_applicableFlags conversion methods not named
to…oras…. - always-declare-return-types
always_declare_return_typesrecommendedFlags functions and methods declared without a return type.
- always-put-control-body-on-new-line
always_put_control_body_on_new_lineFlags a control-flow body that starts on the same line as its control clause.
- always-put-required-named-parameters-first
always_put_required_named_parameters_firstFlags a required named parameter declared after an optional named one.
- always-specify-types
always_specify_typesRequires explicit type annotations everywhere a type could be inferred.
- annotate-overrides
annotate_overridesrecommendedRequires
@overrideon members that override an inherited declaration. - arguments-ordering
Named arguments follow their resolved parameter declaration order by default.