prefer-named-boolean-parameters
- Group
- Style
- Path
lint/style/prefer-named-boolean-parameters- Default
- Off, opt in
- Origin
- Falcon
- Rule
- 389 of 512
Flags explicit positional bool parameters in private declarations and unconstrained closures.
This complements avoid-positional-boolean-parameters, covering declarations
that shipped rule skips. Enabling both gives full coverage of the explicit
bool/bool? forms described here without duplicate diagnostics.
Named arguments make boolean values understandable at call sites.
Private named functions (including local functions), constructors whose own
name starts with _, and private methods without inherited contracts are
checked. Closures are checked only as direct initializers of untyped variables
or fields, not in arguments, returns, assignments, or typed declarations.
The first required or optional positional bool/bool? is reported.
Named parameters, public signatures, setters, operators, extension-type
representation parameters, and Function(...) types are excluded, as are
aliases and inferred field/super parameters. Explicit types must resolve to
dart:core's bool, not a shadowing declaration or type parameter. Methods
with override annotations or unresolved inheritance are left alone.
void _configure(bool verbose) {} // Prefer `{required bool verbose}`.
final configure = (bool verbose) {}; // Prefer `({required bool verbose})`.
Invalid
void _configure(bool verbose) {}
void _optional([bool verbose = false]) {}
void _nullable(bool? enabled) {}
void _multiple(int count, bool verbose, bool dryRun) {}
class Settings {
Settings._internal(bool enabled);
Settings._optional([bool enabled = false]);
factory Settings._factory(bool enabled) => Settings._internal(enabled);
void _method(bool enabled) {}
static void _staticMethod(bool? enabled) {}
final callback = (bool enabled) {};
}
class Primary._hidden(bool enabled);
final callback = (bool enabled) {};
final nullableCallback = (bool? enabled) => enabled;
final optionalCallback = ([bool enabled = false]) {};
void outer() {
void _local(bool enabled) {}
final nested = (int count, bool enabled) {};
void _generic<bool>(bool enabled) {}
void _sibling(bool enabled) {}
final generic = <bool>(bool enabled) {};
final sibling = (bool enabled) {};
}
abstract class Contract {
void _fixed(bool enabled);
}
class Annotated extends Contract {
@override
void _fixed(bool enabled) {}
}
class Unannotated extends Contract {
void _fixed(bool enabled) {}
void _independent(bool enabled) {}
}
class Generic<bool> {
void _shadowed(bool enabled) {}
}
class AfterGeneric {
void _unshadowed(bool enabled) {}
}void _configure(bool verbose) {}void _configure(bool verbose) {}void _optional([bool verbose = false]) {}void _optional([bool verbose = false]) {}void _nullable(bool? enabled) {}void _nullable(bool? enabled) {}void _multiple(int count, bool verbose, bool dryRun) {}class Settings { Settings._internal(bool enabled); Settings._internal(bool enabled); Settings._optional([bool enabled = false]); Settings._optional([bool enabled = false]); factory Settings._factory(bool enabled) => Settings._internal(enabled); factory Settings._factory(bool enabled) => Settings._internal(enabled); void _method(bool enabled) {} void _method(bool enabled) {} static void _staticMethod(bool? enabled) {} static void _staticMethod(bool? enabled) {} final callback = (bool enabled) {}; class Primary._hidden(bool enabled); final callback = (bool enabled) {};final callback = (bool enabled) {};final nullableCallback = (bool? enabled) => enabled;final nullableCallback = (bool? enabled) => enabled;final optionalCallback = ([bool enabled = false]) {};void outer() { void _local(bool enabled) {} void _local(bool enabled) {} final nested = (int count, bool enabled) {}; void _generic<bool>(bool enabled) {} void _sibling(bool enabled) {} final generic = <bool>(bool enabled) {}; final sibling = (bool enabled) {};abstract class Contract { void _fixed(bool enabled); void _fixed(bool enabled) {} void _independent(bool enabled) {}class AfterGeneric { void _unshadowed(bool enabled) {}Valid
// Public signatures and Function types belong to the shipped rule.
void configure(bool verbose) {}
typedef Callback = void Function(bool enabled);
typedef void Legacy(bool enabled);
void _takesCallback(void callback(bool enabled)) {}
void _takesFunction(void Function(bool enabled) callback) {}
void _named({required bool verbose}) {}
void _optionalNamed({bool? enabled}) {}
void _nonBoolean(int count, String label) {}
void _inferred(enabled) {}
class Settings {
final bool enabled;
Settings(bool enabled) : enabled = enabled;
Settings._inferred(this.enabled);
Settings._named({required this.enabled});
void _method({required bool enabled}) {}
void method(bool enabled) {}
set flag(bool value) {}
}
class Child extends Settings {
Child._inferred(super.enabled);
}
class _PrivateClass {
// Constructor privacy is determined by its own name, not its class name.
_PrivateClass(bool enabled);
}
class NamedPrimary._hidden({required bool enabled});
class PublicPrimary(bool enabled);
set _flag(bool value) {}
final namedCallback = ({required bool enabled}) {};
final nonBooleanCallback = (int value) => value;
final inferredCallback = (value) => value;
void outer() {
void local(bool enabled) {}
void _localNamed({required bool enabled}) {}
}
// An alias is deliberately not an explicit bool spelling.
typedef Flag = bool;
void _alias(Flag enabled) {}
// Lexically shadowing type parameters are not dart:core bool.
void _generic<bool>(bool enabled) {}
final genericCallback = <bool>(bool enabled) {};
class Generic<bool> {
Generic._hidden(bool enabled);
void method() {
void _local(bool enabled) {}
final callback = (bool enabled) {};
}
}
void enclosing<bool>() {
void _local(bool enabled) {}
final callback = (bool enabled) {};
}
// These positional signatures are fixed by their contexts.
void consume(void Function(bool) callback) {}
void contextualCallbacks() {
consume((bool enabled) {});
void Function(bool) callback = (bool enabled) {};
callback = (bool enabled) {};
}
void Function(bool) returnedCallback() => (bool enabled) {};
final void Function(bool) typedCallback = (bool enabled) {};
class ContextualFields {
final void Function(bool) callback = (bool enabled) {};
}
// A representation parameter must stay positional.
extension type Representation._hidden(bool enabled) {}Configure prefer-named-boolean-parameters
Set its severity in falcon.json. See the configuration guide.
{
"linter": {
"rules": {
"style": {
"prefer-named-boolean-parameters": "error"
}
}
}
}Or silence one occurrence with a suppression comment; the reason is required.
// falcon-ignore lint/style/prefer-named-boolean-parameters: <reason>More style rules
- prefer-named-parameters
Prefer named parameters when a declaration exceeds
max-number(default 1). - prefer-null-aware-method-calls
prefer_null_aware_method_callsrecommendedPrefers
f?.call()to calling a null-checked function after a!= nulltest. - prefer-padding-over-containerflutter
Prefers
Paddingover aContainerused only forpadding. - prefer-provider-extensionsprovider
Prefer context.read/watch when provider extensions are in scope.
- prefer-returning-condition
Flags an
ifreturning a boolean literal followed by the opposite literal. - prefer-riverpod-notifier-suffixriverpod
Requires a
Notifiersuffix on classes extending resolved Riverpod notifiers. - prefer-riverpod-provider-suffixriverpod
Requires a Provider suffix on resolved Riverpod top-level providers and static fields.
- prefer-single-quotes
prefer_single_quotesFlags double-quoted string literals that could use single quotes without needing an escape.