Skip to content
This repository was archived by the owner on Nov 20, 2024. It is now read-only.

Commit dbb7b11

Browse files
authored
enahnced enum support for sort_constructors_first (#3247)
1 parent 5a8c913 commit dbb7b11

File tree

3 files changed

+61
-3
lines changed

3 files changed

+61
-3
lines changed

lib/src/rules/sort_constructors_first.dart

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class SortConstructorsFirst extends LintRule {
4646
NodeLintRegistry registry, LinterContext context) {
4747
var visitor = _Visitor(this);
4848
registry.addClassDeclaration(this, visitor);
49+
registry.addEnumDeclaration(this, visitor);
4950
}
5051
}
5152

@@ -54,10 +55,9 @@ class _Visitor extends SimpleAstVisitor<void> {
5455

5556
_Visitor(this.rule);
5657

57-
@override
58-
void visitClassDeclaration(ClassDeclaration node) {
58+
void check(NodeList<ClassMember> classMembers) {
5959
// Sort members by offset.
60-
var members = node.members.toList()
60+
var members = classMembers.toList()
6161
..sort((ClassMember m1, ClassMember m2) => m1.offset - m2.offset);
6262

6363
var other = false;
@@ -71,4 +71,14 @@ class _Visitor extends SimpleAstVisitor<void> {
7171
}
7272
}
7373
}
74+
75+
@override
76+
void visitClassDeclaration(ClassDeclaration node) {
77+
check(node.members);
78+
}
79+
80+
@override
81+
void visitEnumDeclaration(EnumDeclaration node) {
82+
check(node.members);
83+
}
7484
}

test/rules/all.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import 'prefer_generic_function_type_aliases_test.dart'
5656
as prefer_generic_function_type_aliases;
5757
import 'prefer_spread_collections_test.dart' as prefer_spread_collections;
5858
import 'public_member_api_docs_test.dart' as public_member_api_docs;
59+
import 'sort_constructors_first.dart' as sort_constructors_first;
5960
import 'super_goes_last_test.dart' as super_goes_last;
6061
import 'tighten_type_of_initializing_formals_test.dart'
6162
as tighten_type_of_initializing_formals;
@@ -104,6 +105,7 @@ void main() {
104105
prefer_generic_function_type_aliases.main();
105106
prefer_spread_collections.main();
106107
public_member_api_docs.main();
108+
sort_constructors_first.main();
107109
super_goes_last.main();
108110
tighten_type_of_initializing_formals.main();
109111
type_init_formals.main();
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
import 'package:test_reflective_loader/test_reflective_loader.dart';
6+
7+
import '../rule_test_support.dart';
8+
9+
main() {
10+
defineReflectiveSuite(() {
11+
defineReflectiveTests(SortConstructorsFirstTest);
12+
});
13+
}
14+
15+
@reflectiveTest
16+
class SortConstructorsFirstTest extends LintRuleTest {
17+
@override
18+
List<String> get experiments => [
19+
EnableString.enhanced_enums,
20+
];
21+
22+
@override
23+
String get lintRule => 'sort_constructors_first';
24+
25+
test_ok() async {
26+
await assertNoDiagnostics(r'''
27+
enum A {
28+
a,b,c;
29+
const A();
30+
int f() => 0;
31+
}
32+
''');
33+
}
34+
35+
test_unsorted() async {
36+
await assertDiagnostics(r'''
37+
enum A {
38+
a,b,c;
39+
int f() => 0;
40+
const A();
41+
}
42+
''', [
43+
lint('sort_constructors_first', 42, 1),
44+
]);
45+
}
46+
}

0 commit comments

Comments
 (0)