avoid-missing-completer-stack-trace
- Group
- Correctness
- Path
lint/correctness/avoid-missing-completer-stack-trace- Default
- Off, opt in
- Origin
- Falcon
- Rule
- 84 of 512
Preserve error origins when calling SDK Completer.completeError.
Pass the caught stack trace, or StackTrace.current, as the second argument.
Checks ordinary, null-aware, and cascade calls using resolved receiver types. Explicit null is missing too. Custom same-named methods and dynamic receivers are ignored; inherited methods are checked only when their SDK owner resolves and library/import lookup does not select a different completeError function.
Reference: https://dcm.dev/docs/rules/common/avoid-missing-completer-stack-trace/
Invalid
import 'dart:async';
import 'dart:async' as async;
void errors(Completer<int> completer, Completer<void>? nullable, async.Completer<String> prefixed) {
completer.completeError('first');
completer.completeError('second', null);
nullable?.completeError('third');
prefixed.completeError('fourth');
completer..completeError('fifth');
}void errors(Completer<int> completer, Completer<void>? nullable, async.Completer<String> prefixed) { completer.completeError('first'); completer.completeError('first'); completer.completeError('second', null); completer.completeError('second', null); nullable?.completeError('third'); nullable?.completeError('third'); prefixed.completeError('fourth'); prefixed.completeError('fourth'); completer..completeError('fifth');Valid
import 'dart:async';
class Custom {
void completeError(Object error) {}
}
void errors(Completer<int> completer, Completer<void>? nullable, dynamic unknown, StackTrace trace) {
completer.completeError('first', trace);
completer.completeError('second', StackTrace.current);
nullable?.completeError('third', trace);
completer..completeError('fourth', trace);
Custom().completeError('custom');
unknown.completeError('unknown');
completer.complete(1);
}
abstract class Overriding<T> implements Completer<T> {
void completeError(Object error, [StackTrace? stackTrace]) {}
void fail(Object error) {
completeError(error);
}
}
extension CustomCompleterErrors<T> on Completer<T> {
void completeError(Object error) {}
void failWithCustomHandler(Object error) {
completeError(error);
}
}Configure avoid-missing-completer-stack-trace
Set its severity in falcon.json. See the configuration guide.
{
"linter": {
"rules": {
"correctness": {
"avoid-missing-completer-stack-trace": "error"
}
}
}
}Or silence one occurrence with a suppression comment; the reason is required.
// falcon-ignore lint/correctness/avoid-missing-completer-stack-trace: <reason>More correctness rules
- avoid-missing-controllerflutter
Require Flutter text fields to expose their updated value.
- avoid-missing-enum-constant-in-map
Require enum-keyed map literals to include every declared enum value.
- avoid-missing-interpolationrecommended
Flags missing interpolation around visible String variables or member accesses and calls.
- avoid-misused-hooksrecommendedflutter_hooks
Flags confirmed Flutter hooks called directly in non-hook Flutter widget builds.
- avoid-mounted-in-setstateflutter
Check mounted before invoking Flutter State.setState, never inside its callback.
- avoid-mutable-equatable-subclass-fieldsrecommendedequatable
Flags mutable instance fields on subclasses inheriting Equatable equality.
- avoid-mutable-global-variables
avoid_mutable_global_variablesDisallow mutable top-level variables.
- avoid-nested-futures
Avoid
Future<Future<T>>,FutureOr<Future<T>>, and other directly nested future wrappers.