avoid-unrelated-type-casts
- Group
- Correctness
- Path
lint/correctness/avoid-unrelated-type-casts- Default
- On (recommended)
- Origin
- Falcon
- Rule
- 179 of 512
Flags casts between types proven unrelated by canonical type resolution.
Checks as expressions, cast patterns, and SDK collection cast<T>()
element/key/value conversions. Dynamic, unresolved, and potentially related
types are not reported. Collection casts are lazy but fail when an element
of the incompatible type is read.
Invalid
void casts(String text, int number, List<int> numbers, Set<int> unique, Map<String, int> map) {
print(text as int);
print(number as String);
print(numbers as List<String>);
print(numbers.cast<String>());
print(unique.cast<String>());
print(map.cast<int, int>());
print(map.cast<String, String>());
}
class Animal {}
class NotAnimal {}
void unrelatedClasses(Animal animal) {
print(animal as NotAnimal);
}
void castPattern(String text) {
if (text case final number as int) print(number);
}void casts(String text, int number, List<int> numbers, Set<int> unique, Map<String, int> map) { print(text as int); print(text as int); print(number as String); print(number as String); print(numbers as List<String>); print(numbers as List<String>); print(numbers.cast<String>()); print(numbers.cast<String>()); print(unique.cast<String>()); print(unique.cast<String>()); print(map.cast<int, int>()); print(map.cast<int, int>()); print(map.cast<String, String>());void unrelatedClasses(Animal animal) { print(animal as NotAnimal);void castPattern(String text) { if (text case final number as int) print(number);Valid
import 'dart:async';
void casts(Object value, dynamic unknown, List<num> numbers, Map<Object, Object> map) {
print(value as String);
print(unknown as int);
print(numbers as List<int>);
print(numbers.cast<int>());
print(numbers.cast<Object>());
print(map.cast<String, int>());
}
class Custom {
Custom cast<T>() => this;
}
void custom(Custom item) { item.cast<String>(); }
extension type Id(int value) {}
void erasedAndStructural<T>(int number, Object value, Object recordValue, Function callback, T generic, FutureOr<int> futureOr) {
print(number as Id);
print(value as void Function());
print(callback as void Function(int));
print(recordValue as (int, String));
print((1, 2) as Object);
print(generic as void Function());
print(futureOr as int);
if (value case final callback as void Function()) print(callback);
}Configure avoid-unrelated-type-casts
Set its severity in falcon.json. See the configuration guide.
{
"linter": {
"rules": {
"correctness": {
"avoid-unrelated-type-casts": "error"
}
}
}
}Or silence one occurrence with a suppression comment; the reason is required.
// falcon-ignore lint/correctness/avoid-unrelated-type-casts: <reason>More correctness rules
- avoid-unsafe-collection-methods
Flags potentially throwing element access on SDK collections.
- avoid-unsafe-reduce
Warn when SDK Iterable.reduce can receive an empty collection.
- avoid-unused-after-null-check
Reports a null-checked local ignored by a branch that passes another local of the same resolved type to a call.
- avoid-unused-parameters
avoid-unused-parametersrecommendedDisallow declared parameters that are never used, excluding primary constructors.
- avoid-watch-outside-buildrecommendedprovider
Flags listening Provider accesses proven to run outside Flutter builds.
- avoid-web-libraries-in-flutter
avoid_web_libraries_in_flutterrecommendedflutterDisallow importing web-only
dart:libraries from Flutter code. - await-only-futures
await_only_futuresrecommendedAwait only values assignable to futures;
FutureOr, dynamic, bottom types and extension types are accepted like the analyzer. - banned-importscross-file
Report imports forbidden by package-relative architectural boundaries.