forked from dart-code-checker/dart-code-metrics
-
Notifications
You must be signed in to change notification settings - Fork 0
/
prefer_extracting_callbacks_rule.dart
56 lines (46 loc) · 1.76 KB
/
prefer_extracting_callbacks_rule.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// ignore_for_file: public_member_api_docs
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import '../../../../../utils/flutter_types_utils.dart';
import '../../../../../utils/node_utils.dart';
import '../../../lint_utils.dart';
import '../../../metrics/metrics_list/source_lines_of_code/source_code_visitor.dart';
import '../../../models/internal_resolved_unit_result.dart';
import '../../../models/issue.dart';
import '../../../models/severity.dart';
import '../../models/flutter_rule.dart';
import '../../rule_utils.dart';
part 'config_parser.dart';
part 'visitor.dart';
class PreferExtractingCallbacksRule extends FlutterRule {
static const String ruleId = 'prefer-extracting-callbacks';
static const _warningMessage =
'Prefer extracting the callback to a separate widget method.';
final Iterable<String> _ignoredArguments;
final int? _allowedLineCount;
PreferExtractingCallbacksRule([Map<String, Object> config = const {}])
: _ignoredArguments = _ConfigParser.parseIgnoredArguments(config),
_allowedLineCount = _ConfigParser.parseAllowedLineCount(config),
super(
id: ruleId,
severity: readSeverity(config, Severity.style),
excludes: readExcludes(config),
);
@override
Iterable<Issue> check(InternalResolvedUnitResult source) {
final visitor = _Visitor(source, _ignoredArguments, _allowedLineCount);
source.unit.visitChildren(visitor);
return visitor.expressions
.map(
(expression) => createIssue(
rule: this,
location: nodeLocation(
node: expression,
source: source,
),
message: _warningMessage,
),
)
.toList(growable: false);
}
}