Rules / Style / avoid-positional-fields-in-records
avoid-positional-fields-in-records
Flags positional fields in record types.
Positional record fields are accessed as $1, $2, and so on, which convey
nothing about what each field means and break silently when fields are
reordered. Named fields (({int x, int y})) document intent at both the
declaration and every use site. The check recurses through type arguments
and nested record and function types, so a positional field buried inside a
generic is still reported.
Invalid
example.dartdart
class RecordExamples {
/// Positional fields in record literal
void example1() {
final record = (1, 'hello');
print(record);
}
/// Positional fields in record type return
(int, String) getInfo() {
return (42, 'answer');
}
/// Positional fields in record type parameter
void processRecord((int, String) data) {
print(data);
}
/// Positional fields in record type variable
void example2() {
(String, bool, int) tuple = ('test', true, 5);
print(tuple);
}
/// Positional fields in record literal with multiple
void example3() {
final result = (1, 2, 3, 'four');
print(result);
}
}
Avoid positional fields in records. Use named fields instead.
3 void example1() {
4 final record = (1, 'hello');
∙
Avoid positional fields in records. Use named fields instead.
8 /// Positional fields in record type return
9 (int, String) getInfo() {
∙
Avoid positional fields in records. Use named fields instead.
13 /// Positional fields in record type parameter
14 void processRecord((int, String) data) {
∙
Avoid positional fields in records. Use named fields instead.
19 void example2() {
20 (String, bool, int) tuple = ('test', true, 5);
∙
Avoid positional fields in records. Use named fields instead.
25 void example3() {
26 final result = (1, 2, 3, 'four');
∙
Valid
example.dartdart
class RecordExamples {
/// Named fields in record literal
void example1() {
final record = (id: 1, name: 'hello');
print(record);
}
/// Named fields in record type return
({int id, String name}) getInfo() {
return (id: 42, name: 'answer');
}
/// Named fields in record type parameter
void processRecord(({int id, String name}) data) {
print(data);
}
/// Named fields in record type variable
void example2() {
({String name, bool active, int count}) tuple = (name: 'test', active: true, count: 5);
print(tuple);
}
/// Named fields in record literal with multiple
void example3() {
final result = (a: 1, b: 2, c: 3, d: 'four');
print(result);
}
/// Record with mixed named fields
void example4() {
final data = (userId: 100, isActive: true);
print(data.userId);
print(data.isActive);
}
}
How to configure
Set the severity of avoid-positional-fields-in-records in your falcon.json:
falcon.jsonjson
{
"linter": {
"rules": {
"style": {
"avoid-positional-fields-in-records": "error"
}
}
}
}