Skip to content
This repository was archived by the owner on Jul 16, 2023. It is now read-only.

Commit 29a75f1

Browse files
committed
Merge remote-tracking branch 'origin' into avoid-returning-widgets-option
2 parents 4ef4817 + cde4648 commit 29a75f1

File tree

25 files changed

+112
-271
lines changed

25 files changed

+112
-271
lines changed

.github/workflows/package_analyze.yaml

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -116,19 +116,6 @@ jobs:
116116
dart run coverage:format_coverage --in coverage --out coverage/coverage.lcov --lcov --report-on=lib
117117
bash <(curl -s https://codecov.io/bash) -f coverage/coverage.lcov
118118
119-
- name: Publish test results
120-
uses: dorny/[email protected]
121-
if: success() || failure() # run this step even if previous step failed
122-
with:
123-
name: Tests result
124-
path: reports/tests.json
125-
reporter: dart-json
126-
list-suites: "all"
127-
list-tests: "all"
128-
max-annotations: 16
129-
fail-on-error: true
130-
token: ${{ secrets.GITHUB_TOKEN }}
131-
132119
check-minimal-supported-dart-compatibility:
133120
needs: analysis
134121
runs-on: ubuntu-latest

CHANGELOG.md

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

55
* feat: add `allow-nullable` config option for [`avoid-returning-widgets`](https://dcm.dev/docs/individuals/rules/common/avoid-returning-widgets).
6+
* fix: support `assert(mounted)` for [`use-setstate-synchronously`](https://dcm.dev/docs/individuals/rules/flutter/use-setstate-synchronously).
7+
* fix: correctly support dartdoc tags for [`format-comment`](https://dcm.dev/docs/individuals/rules/common/format-comment).
68

79
## 5.6.0-dev.1
810

lib/src/analyzer_plugin/analyzer_plugin_utils.dart

Lines changed: 0 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
import 'package:analyzer/dart/analysis/results.dart';
22
import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin;
33
import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
4-
import 'package:source_span/source_span.dart';
54

6-
import '../analyzers/lint_analyzer/lint_analysis_config.dart';
75
import '../analyzers/lint_analyzer/models/issue.dart';
86
import '../analyzers/lint_analyzer/models/severity.dart';
9-
import '../config_builder/models/deprecated_option.dart';
107
import '../utils/path_utils.dart';
118

129
plugin.AnalysisErrorFixes codeIssueToAnalysisErrorFixes(
@@ -62,67 +59,6 @@ plugin.AnalysisErrorFixes codeIssueToAnalysisErrorFixes(
6259
);
6360
}
6461

65-
plugin.AnalysisErrorFixes metricReportToAnalysisErrorFixes(
66-
SourceLocation startLocation,
67-
int length,
68-
String message,
69-
String metricId,
70-
) =>
71-
plugin.AnalysisErrorFixes(plugin.AnalysisError(
72-
plugin.AnalysisErrorSeverity.INFO,
73-
plugin.AnalysisErrorType.LINT,
74-
plugin.Location(
75-
startLocation.sourceUrl!.path,
76-
startLocation.offset,
77-
length,
78-
startLocation.line,
79-
startLocation.column,
80-
endLine: startLocation.line,
81-
endColumn: startLocation.column,
82-
),
83-
message,
84-
metricId,
85-
hasFix: false,
86-
));
87-
88-
Iterable<plugin.AnalysisErrorFixes> checkConfigDeprecatedOptions(
89-
LintAnalysisConfig config,
90-
Iterable<DeprecatedOption> deprecatedOptions,
91-
String analysisOptionPath,
92-
) {
93-
final ids = {
94-
...config.codeRules.map((rule) => rule.id),
95-
...config.methodsMetrics.map((metric) => metric.id),
96-
...config.antiPatterns.map((pattern) => pattern.id),
97-
...config.metricsConfig.keys,
98-
};
99-
100-
final location =
101-
SourceLocation(0, sourceUrl: analysisOptionPath, line: 0, column: 0);
102-
103-
final documentation = Uri.parse(
104-
'https://github.com/dart-code-checker/dart-code-metrics/blob/master/CHANGELOG.md',
105-
);
106-
107-
return deprecatedOptions
108-
.where((option) => ids.contains(option.deprecated))
109-
.map((option) => codeIssueToAnalysisErrorFixes(
110-
Issue(
111-
ruleId: 'dart-code-metrics',
112-
documentation: documentation,
113-
location: SourceSpan(location, location, ''),
114-
severity: Severity.warning,
115-
message:
116-
'${option.deprecated} deprecated option. This option will be removed in ${option.supportUntilVersion} version.',
117-
verboseMessage: option.replacement != null
118-
? 'Please migrate on ${option.replacement}, and restart analysis server.'
119-
: null,
120-
),
121-
null,
122-
))
123-
.toList();
124-
}
125-
12662
const _severityMapping = {
12763
Severity.error: plugin.AnalysisErrorSeverity.ERROR,
12864
Severity.warning: plugin.AnalysisErrorSeverity.WARNING,

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import '../../../../utils/node_utils.dart';
88
import '../../lint_utils.dart';
99
import '../../metrics/metric_utils.dart';
1010
import '../../metrics/metrics_list/source_lines_of_code/source_lines_of_code_metric.dart';
11-
import '../../models/entity_type.dart';
1211
import '../../models/internal_resolved_unit_result.dart';
1312
import '../../models/issue.dart';
1413
import '../../models/report.dart';
@@ -35,7 +34,6 @@ class LongMethod extends Pattern {
3534
),
3635
super(
3736
id: patternId,
38-
supportedType: EntityType.methodEntity,
3937
severity: readSeverity(patternSettings, Severity.none),
4038
excludes: readExcludes(patternSettings),
4139
);

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import '../../../../utils/node_utils.dart';
44
import '../../lint_utils.dart';
55
import '../../metrics/metric_utils.dart';
66
import '../../metrics/metrics_list/number_of_parameters_metric.dart';
7-
import '../../models/entity_type.dart';
87
import '../../models/function_type.dart';
98
import '../../models/internal_resolved_unit_result.dart';
109
import '../../models/issue.dart';
@@ -33,7 +32,6 @@ class LongParameterList extends Pattern {
3332
),
3433
super(
3534
id: patternId,
36-
supportedType: EntityType.methodEntity,
3735
severity: readSeverity(patternSettings, Severity.none),
3836
excludes: readExcludes(patternSettings),
3937
);

lib/src/analyzers/lint_analyzer/anti_patterns/models/pattern.dart

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import '../../models/entity_type.dart';
21
import '../../models/internal_resolved_unit_result.dart';
32
import '../../models/issue.dart';
43
import '../../models/report.dart';
@@ -13,9 +12,6 @@ abstract class Pattern {
1312
/// The id of the pattern.
1413
final String id;
1514

16-
/// The type of entities which will be analyzed by the pattern.
17-
final EntityType supportedType;
18-
1915
/// The severity of issues emitted by the pattern.
2016
final Severity severity;
2117

@@ -27,7 +23,6 @@ abstract class Pattern {
2723

2824
const Pattern({
2925
required this.id,
30-
required this.supportedType,
3126
required this.severity,
3227
required this.excludes,
3328
});

lib/src/analyzers/lint_analyzer/anti_patterns/pattern_utils.dart

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
import 'package:analyzer/dart/ast/ast.dart';
21
import 'package:source_span/source_span.dart';
32

43
import '../models/issue.dart';
5-
import '../models/scoped_function_declaration.dart';
64
import 'models/pattern.dart';
75

86
Issue createIssue({
@@ -31,17 +29,3 @@ Uri documentation(Pattern pattern) => Uri(
3129
pattern.id,
3230
],
3331
);
34-
35-
int getArgumentsCount(ScopedFunctionDeclaration dec) {
36-
final declaration = dec.declaration;
37-
38-
int? argumentsCount;
39-
if (declaration is FunctionDeclaration) {
40-
argumentsCount =
41-
declaration.functionExpression.parameters?.parameters.length;
42-
} else if (declaration is MethodDeclaration) {
43-
argumentsCount = declaration.parameters?.parameters.length;
44-
}
45-
46-
return argumentsCount ?? 0;
47-
}

lib/src/analyzers/lint_analyzer/anti_patterns/patterns_factory.dart

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@ final _implementedPatterns = <String, CreatePattern>{
1717
),
1818
};
1919

20-
Iterable<Pattern> get allPatterns =>
21-
_implementedPatterns.keys.map((id) => _implementedPatterns[id]!({}, {}));
22-
2320
Iterable<Pattern> getPatternsById(LintConfig config) =>
2421
List.unmodifiable(_implementedPatterns.keys
2522
.where((id) => config.antiPatterns.keys.contains(id))

lib/src/analyzers/lint_analyzer/reporters/reporters_list/code_climate/models/code_climate_issue_category.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// ignore_for_file: unused-code
2+
13
/// Represents a Code Climate issue category.
24
class CodeClimateIssueCategory {
35
static const bugRisk = CodeClimateIssueCategory._('Bug Risk');

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -170,9 +170,6 @@ final _implementedRules = <String, Rule Function(Map<String, Object>)>{
170170

171171
Iterable<String> get allRuleIds => _implementedRules.keys;
172172

173-
Iterable<Rule> get allRules =>
174-
_implementedRules.keys.map((id) => _implementedRules[id]!({}));
175-
176173
Iterable<Rule> getRulesById(Map<String, Map<String, Object>> rulesConfig) =>
177174
List.unmodifiable(_implementedRules.keys
178175
.where((id) => rulesConfig.keys.contains(id))

lib/src/analyzers/lint_analyzer/rules/rules_list/format_comment/visitor.dart

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ part of 'format_comment_rule.dart';
33
const _punctuation = ['.', '!', '?', ':'];
44

55
final _sentencesRegExp = RegExp(r'(?<=([\.|:](?=\s|\n|$)))');
6-
final _regMacrosExp = RegExp('{@(template|macro) .+}');
7-
const _macrosEndExp = '{@endtemplate}';
6+
final _regMacrosExp = RegExp('{@.+}');
87
const _ignoreExp = 'ignore:';
98
const _ignoreForFileExp = 'ignore_for_file:';
109

@@ -141,16 +140,14 @@ class _Visitor extends RecursiveAstVisitor<void> {
141140
final trimmed = text.trim();
142141

143142
return _regMacrosExp.hasMatch(text) ||
144-
text.contains(_macrosEndExp) ||
145143
_isIgnoreComment(trimmed) ||
146144
_isIgnoredPattern(trimmed);
147145
}
148146

149147
bool _isIgnoreComment(String text) =>
150148
text.startsWith(_ignoreExp) || text.startsWith(_ignoreForFileExp);
151149

152-
bool _isMacros(String text) =>
153-
_regMacrosExp.hasMatch(text) || text == _macrosEndExp;
150+
bool _isMacros(String text) => _regMacrosExp.hasMatch(text);
154151

155152
bool _isIgnoredPattern(String text) =>
156153
_ignoredPatterns.any((regExp) => regExp.hasMatch(text));

lib/src/analyzers/lint_analyzer/rules/rules_list/prefer_correct_edge_insets_constructor/visitor.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ const _constructorNameOnly = 'only';
1111
class _Visitor extends RecursiveAstVisitor<void> {
1212
final _expressions = <InstanceCreationExpression, EdgeInsetsData>{};
1313

14-
final _Validator validator = _Validator();
15-
1614
Map<InstanceCreationExpression, EdgeInsetsData> get expressions =>
1715
_expressions;
1816

lib/src/analyzers/lint_analyzer/rules/rules_list/use_setstate_synchronously/use_setstate_synchronously_rule.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ import '../../../models/severity.dart';
1111
import '../../models/flutter_rule.dart';
1212
import '../../rule_utils.dart';
1313

14+
part 'config.dart';
1415
part 'fact.dart';
1516
part 'helpers.dart';
16-
part 'config.dart';
1717
part 'visitor.dart';
1818

1919
class UseSetStateSynchronouslyRule extends FlutterRule {
2020
static const ruleId = 'use-setstate-synchronously';
2121

22-
Set<String> methods;
22+
final Set<String> methods;
2323

2424
UseSetStateSynchronouslyRule([Map<String, Object> options = const {}])
2525
: methods = readMethods(options),

lib/src/analyzers/lint_analyzer/rules/rules_list/use_setstate_synchronously/visitor.dart

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ part of 'use_setstate_synchronously_rule.dart';
22

33
class _Visitor extends RecursiveAstVisitor<void> {
44
final Set<String> methods;
5+
56
_Visitor({required this.methods});
67

78
final nodes = <SimpleIdentifier>[];
@@ -43,6 +44,13 @@ class _AsyncSetStateVisitor extends RecursiveAstVisitor<void> {
4344
super.visitAwaitExpression(node);
4445
}
4546

47+
@override
48+
void visitAssertStatement(AssertStatement node) {
49+
final newMounted = _extractMountedCheck(node.condition);
50+
mounted = newMounted.or(mounted);
51+
super.visitAssertStatement(node);
52+
}
53+
4654
@override
4755
void visitMethodInvocation(MethodInvocation node) {
4856
if (!inAsync) {
@@ -65,7 +73,8 @@ class _AsyncSetStateVisitor extends RecursiveAstVisitor<void> {
6573
return node.visitChildren(this);
6674
}
6775

68-
node.condition.visitChildren(this);
76+
node.condition.accept(this);
77+
6978
final newMounted = _extractMountedCheck(node.condition);
7079
mounted = newMounted.or(mounted);
7180

@@ -99,7 +108,7 @@ class _AsyncSetStateVisitor extends RecursiveAstVisitor<void> {
99108
return node.visitChildren(this);
100109
}
101110

102-
node.condition.visitChildren(this);
111+
node.condition.accept(this);
103112

104113
final oldMounted = mounted;
105114
final newMounted = _extractMountedCheck(node.condition);
@@ -121,7 +130,7 @@ class _AsyncSetStateVisitor extends RecursiveAstVisitor<void> {
121130
return node.visitChildren(this);
122131
}
123132

124-
node.forLoopParts.visitChildren(this);
133+
node.forLoopParts.accept(this);
125134

126135
final oldInControlFlow = inControlFlow;
127136
inControlFlow = true;
@@ -153,9 +162,8 @@ class _AsyncSetStateVisitor extends RecursiveAstVisitor<void> {
153162
final oldMounted = mounted;
154163
node.body.visitChildren(this);
155164
final afterBody = mounted;
156-
// ignore: omit_local_variable_types
157-
final MountedFact beforeCatch =
158-
mounted == oldMounted ? oldMounted : false.asFact();
165+
final beforeCatch =
166+
mounted == oldMounted ? oldMounted : false.asFact<BinaryExpression>();
159167
for (final clause in node.catchClauses) {
160168
mounted = beforeCatch;
161169
clause.visitChildren(this);
@@ -176,7 +184,7 @@ class _AsyncSetStateVisitor extends RecursiveAstVisitor<void> {
176184
return node.visitChildren(this);
177185
}
178186

179-
node.expression.visitChildren(this);
187+
node.expression.accept(this);
180188

181189
final oldInControlFlow = inControlFlow;
182190
inControlFlow = true;

lib/src/cli/commands/analyze_command.dart

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import 'dart:io';
44

5-
import 'package:collection/collection.dart';
6-
75
import '../../analyzers/lint_analyzer/lint_analyzer.dart';
86
import '../../analyzers/lint_analyzer/metrics/metrics_factory.dart';
97
import '../../analyzers/lint_analyzer/metrics/models/metric_value_level.dart';
@@ -13,7 +11,6 @@ import '../../analyzers/lint_analyzer/reporters/lint_report_params.dart';
1311
import '../../analyzers/lint_analyzer/reporters/reporters_list/json/lint_json_reporter.dart';
1412
import '../../analyzers/lint_analyzer/utils/report_utils.dart';
1513
import '../../config_builder/config_builder.dart';
16-
import '../../config_builder/models/deprecated_option.dart';
1714
import '../../logger/logger.dart';
1815
import '../models/flag_names.dart';
1916
import '../models/parsed_arguments.dart';
@@ -160,15 +157,9 @@ class AnalyzeCommand extends BaseCommand {
160157
argParser.addSeparator('');
161158

162159
for (final metric in getMetrics(config: {})) {
163-
final deprecation = deprecatedOptions
164-
.firstWhereOrNull((option) => option.deprecated == metric.id);
165-
final deprecationMessage = deprecation != null
166-
? ' (deprecated, will be removed in ${deprecation.supportUntilVersion} version)'
167-
: '';
168-
169160
argParser.addOption(
170161
metric.id,
171-
help: '${metric.documentation.name} threshold$deprecationMessage.',
162+
help: '${metric.documentation.name} threshold.',
172163
valueHelp: '${metric.documentation.recommendedThreshold}',
173164
callback: (i) {
174165
if (i != null && int.tryParse(i) == null) {

lib/src/config_builder/models/deprecated_option.dart

Lines changed: 0 additions & 19 deletions
This file was deleted.

0 commit comments

Comments
 (0)