|
| 1 | +// ignore_for_file: public_member_api_docs |
| 2 | + |
| 3 | +import 'package:analyzer/dart/ast/ast.dart'; |
| 4 | +import 'package:analyzer/dart/ast/visitor.dart'; |
| 5 | +import 'package:analyzer/dart/element/element.dart'; |
| 6 | + |
| 7 | +import '../../../../../utils/node_utils.dart'; |
| 8 | +import '../../../lint_utils.dart'; |
| 9 | +import '../../../models/internal_resolved_unit_result.dart'; |
| 10 | +import '../../../models/issue.dart'; |
| 11 | +import '../../../models/severity.dart'; |
| 12 | +import '../../models/common_rule.dart'; |
| 13 | +import '../../rule_utils.dart'; |
| 14 | + |
| 15 | +part 'visitor.dart'; |
| 16 | + |
| 17 | +class PreferEnumsByNameRule extends CommonRule { |
| 18 | + static const ruleId = 'prefer-enums-by-name'; |
| 19 | + static const _warningMessage = 'Prefer using values.byName'; |
| 20 | + |
| 21 | + PreferEnumsByNameRule([Map<String, Object> config = const {}]) |
| 22 | + : super( |
| 23 | + id: ruleId, |
| 24 | + severity: readSeverity(config, Severity.style), |
| 25 | + excludes: readExcludes(config), |
| 26 | + ); |
| 27 | + |
| 28 | + @override |
| 29 | + Iterable<Issue> check(InternalResolvedUnitResult source) { |
| 30 | + final visitor = _Visitor(); |
| 31 | + |
| 32 | + source.unit.visitChildren(visitor); |
| 33 | + |
| 34 | + return visitor.invocations |
| 35 | + .map((invocation) => createIssue( |
| 36 | + rule: this, |
| 37 | + location: nodeLocation( |
| 38 | + node: invocation, |
| 39 | + source: source, |
| 40 | + withCommentOrMetadata: false, |
| 41 | + ), |
| 42 | + message: _warningMessage, |
| 43 | + )) |
| 44 | + .toList(growable: false); |
| 45 | + } |
| 46 | +} |
0 commit comments