Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Jul 16, 2023. It is now read-only.

Commit 187b3cd

Browse files
2 parents 87add35 + 1edfd17 commit 187b3cd

File tree

20 files changed

+482
-11
lines changed

20 files changed

+482
-11
lines changed

‎CHANGELOG.md‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
## Unreleased
44

55
* fix: handle dynamics in map literals for [`avoid-dynamic`](https://dcm.dev/docs/individuals/rules/common/avoid-dynamic).
6+
* fix: change anti-patterns default severity to `warning`.
7+
* feat: add static code diagnostic [`prefer-define-hero-tag`](https://dcm.dev/docs/individuals/rules/common/prefer-define-hero-tag).
8+
* chore: restrict `analyzer` version to `>=5.1.0 <5.8.0`.
9+
* feat: add static code diagnostic [`avoid-substring`](https://dcm.dev/docs/individuals/rules/common/avoid-substring).
610

711
## 5.6.0
812

‎README.md‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ analyzer:
7070
dart_code_metrics:
7171
rules:
7272
- avoid-dynamic
73-
- avoid-redundant-async
7473
- avoid-passing-async-when-sync-expected
7574
- avoid-redundant-async
7675
- avoid-unnecessary-type-assertions
@@ -104,7 +103,6 @@ dart_code_metrics:
104103
- test/**
105104
rules:
106105
- avoid-dynamic
107-
- avoid-redundant-async
108106
- avoid-passing-async-when-sync-expected
109107
- avoid-redundant-async
110108
- avoid-unnecessary-type-assertions

‎lib/src/analyzers/lint_analyzer/anti_patterns/anti_patterns_list/long_method.dart‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class LongMethod extends Pattern {
3434
),
3535
super(
3636
id: patternId,
37-
severity: readSeverity(patternSettings, Severity.none),
37+
severity: readSeverity(patternSettings, Severity.warning),
3838
excludes: readExcludes(patternSettings),
3939
);
4040

‎lib/src/analyzers/lint_analyzer/anti_patterns/anti_patterns_list/long_parameter_list.dart‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class LongParameterList extends Pattern {
3232
),
3333
super(
3434
id: patternId,
35-
severity: readSeverity(patternSettings, Severity.none),
35+
severity: readSeverity(patternSettings, Severity.warning),
3636
excludes: readExcludes(patternSettings),
3737
);
3838

‎lib/src/analyzers/lint_analyzer/rules/rules_factory.dart‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import 'rules_list/avoid_redundant_async/avoid_redundant_async_rule.dart';
2424
import 'rules_list/avoid_redundant_async_on_load/avoid_redundant_async_on_load_rule.dart';
2525
import 'rules_list/avoid_returning_widgets/avoid_returning_widgets_rule.dart';
2626
import 'rules_list/avoid_shrink_wrap_in_lists/avoid_shrink_wrap_in_lists_rule.dart';
27+
import 'rules_list/avoid_substring/avoid_substring_rule.dart';
2728
import 'rules_list/avoid_throw_in_catch_block/avoid_throw_in_catch_block_rule.dart';
2829
import 'rules_list/avoid_top_level_members_in_tests/avoid_top_level_members_in_tests_rule.dart';
2930
import 'rules_list/avoid_unnecessary_conditionals/avoid_unnecessary_conditionals_rule.dart';
@@ -59,6 +60,7 @@ import 'rules_list/prefer_correct_edge_insets_constructor/prefer_correct_edge_in
5960
import 'rules_list/prefer_correct_identifier_length/prefer_correct_identifier_length_rule.dart';
6061
import 'rules_list/prefer_correct_test_file_name/prefer_correct_test_file_name_rule.dart';
6162
import 'rules_list/prefer_correct_type_name/prefer_correct_type_name_rule.dart';
63+
import 'rules_list/prefer_define_hero_tag/prefer_define_hero_tag_rule.dart';
6264
import 'rules_list/prefer_enums_by_name/prefer_enums_by_name_rule.dart';
6365
import 'rules_list/prefer_extracting_callbacks/prefer_extracting_callbacks_rule.dart';
6466
import 'rules_list/prefer_first/prefer_first_rule.dart';
@@ -107,6 +109,7 @@ final _implementedRules = <String, Rule Function(Map<String, Object>)>{
107109
AvoidRedundantAsyncOnLoadRule.ruleId: AvoidRedundantAsyncOnLoadRule.new,
108110
AvoidReturningWidgetsRule.ruleId: AvoidReturningWidgetsRule.new,
109111
AvoidShrinkWrapInListsRule.ruleId: AvoidShrinkWrapInListsRule.new,
112+
AvoidSubstringRule.ruleId: AvoidSubstringRule.new,
110113
AvoidThrowInCatchBlockRule.ruleId: AvoidThrowInCatchBlockRule.new,
111114
AvoidTopLevelMembersInTestsRule.ruleId: AvoidTopLevelMembersInTestsRule.new,
112115
AvoidUnnecessaryConditionalsRule.ruleId: AvoidUnnecessaryConditionalsRule.new,
@@ -149,6 +152,7 @@ final _implementedRules = <String, Rule Function(Map<String, Object>)>{
149152
PreferCorrectIdentifierLengthRule.new,
150153
PreferCorrectTestFileNameRule.ruleId: PreferCorrectTestFileNameRule.new,
151154
PreferCorrectTypeNameRule.ruleId: PreferCorrectTypeNameRule.new,
155+
PreferDefineHeroTagRule.ruleId: PreferDefineHeroTagRule.new,
152156
PreferEnumsByNameRule.ruleId: PreferEnumsByNameRule.new,
153157
PreferExtractingCallbacksRule.ruleId: PreferExtractingCallbacksRule.new,
154158
PreferFirstRule.ruleId: PreferFirstRule.new,

‎lib/src/analyzers/lint_analyzer/rules/rules_list/avoid_ignoring_return_values/visitor.dart‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class _Visitor extends RecursiveAstVisitor<void> {
3838
!_isEmptyFutureOrType(type);
3939

4040
bool _isEmptyType(DartType type) =>
41+
// ignore: deprecated_member_use
4142
type.isBottom || type.isDartCoreNull || type.isVoid;
4243

4344
bool _isEmptyFutureType(DartType type) =>
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
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+
6+
import '../../../../../utils/node_utils.dart';
7+
import '../../../lint_utils.dart';
8+
import '../../../models/internal_resolved_unit_result.dart';
9+
import '../../../models/issue.dart';
10+
import '../../../models/severity.dart';
11+
import '../../models/common_rule.dart';
12+
import '../../rule_utils.dart';
13+
14+
part 'visitor.dart';
15+
16+
class AvoidSubstringRule extends CommonRule {
17+
static const String ruleId = 'avoid-substring';
18+
19+
static const _warning =
20+
'Avoid using substring if you are having emojis in the string. Consider using characters.getRange instead.';
21+
22+
AvoidSubstringRule([Map<String, Object> config = const {}])
23+
: super(
24+
id: ruleId,
25+
severity: readSeverity(config, Severity.warning),
26+
excludes: readExcludes(config),
27+
includes: readIncludes(config),
28+
);
29+
30+
@override
31+
Iterable<Issue> check(InternalResolvedUnitResult source) {
32+
final visitor = _Visitor();
33+
34+
source.unit.visitChildren(visitor);
35+
36+
return visitor.expressions
37+
.map((expression) => createIssue(
38+
rule: this,
39+
location: nodeLocation(
40+
node: expression,
41+
source: source,
42+
),
43+
message: _warning,
44+
))
45+
.toList(growable: false);
46+
}
47+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
part of 'avoid_substring_rule.dart';
2+
3+
class _Visitor extends RecursiveAstVisitor<void> {
4+
final _expressions = <Expression>[];
5+
6+
Iterable<Expression> get expressions => _expressions;
7+
8+
@override
9+
void visitMethodInvocation(MethodInvocation node) {
10+
super.visitMethodInvocation(node);
11+
if (_isNotSubstringMethod(node)) {
12+
return;
13+
}
14+
_expressions.add(node);
15+
}
16+
17+
bool _isNotSubstringMethod(MethodInvocation node) =>
18+
node.methodName.name != 'substring';
19+
}

‎lib/src/analyzers/lint_analyzer/rules/rules_list/check_for_equals_in_render_object_setters/visitor.dart‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ class _ReturnVisitor extends RecursiveAstVisitor<void> {
9797

9898
final type = node.expression?.staticType;
9999

100+
// ignore: deprecated_member_use
100101
if (type == null || type.isVoid) {
101102
_hasValidReturn = true;
102103
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
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+
6+
import '../../../../../utils/node_utils.dart';
7+
import '../../../lint_utils.dart';
8+
import '../../../models/internal_resolved_unit_result.dart';
9+
import '../../../models/issue.dart';
10+
import '../../../models/severity.dart';
11+
import '../../models/flutter_rule.dart';
12+
import '../../rule_utils.dart';
13+
14+
part 'visitor.dart';
15+
16+
class PreferDefineHeroTagRule extends FlutterRule {
17+
static const ruleId = 'prefer-define-hero-tag';
18+
static const _issueMessage = 'Prefer define heroTag property.';
19+
20+
PreferDefineHeroTagRule([Map<String, Object> config = const {}])
21+
: super(
22+
id: ruleId,
23+
severity: readSeverity(config, Severity.warning),
24+
excludes: readExcludes(config),
25+
includes: readIncludes(config),
26+
);
27+
28+
@override
29+
Iterable<Issue> check(InternalResolvedUnitResult source) {
30+
final visitor = _Visitor();
31+
source.unit.visitChildren(visitor);
32+
33+
return visitor.invocations
34+
.map((invocation) => createIssue(
35+
rule: this,
36+
location: nodeLocation(node: invocation, source: source),
37+
message: _issueMessage,
38+
))
39+
.toList(growable: false);
40+
}
41+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /