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

Commit 8be835d

Browse files
authored
feat: prepare to complex metrics (#448)
* feat: provide other metrics values to calculate new metric value * chore: up number-of-parameters limit
1 parent deb6c4a commit 8be835d

File tree

12 files changed

+75
-28
lines changed

12 files changed

+75
-28
lines changed

analysis_options.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ dart_code_metrics:
1818
metrics:
1919
cyclomatic-complexity: 20
2020
maximum-nesting: 5
21-
number-of-parameters: 4
21+
number-of-parameters: 5
2222
metrics-exclude:
2323
- test/analyzer_plugin/**
2424
- test/analyzers/**

lib/src/analyzers/lint_analyzer/lint_analyzer.dart

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -259,27 +259,33 @@ class LintAnalyzer {
259259
final classRecords = <ScopedClassDeclaration, Report>{};
260260

261261
for (final classDeclaration in visitor.classes) {
262+
final metrics = <MetricValue<num>>[];
263+
264+
for (final metric in config.classesMetrics) {
265+
if (metric.supports(
266+
classDeclaration.declaration,
267+
visitor.classes,
268+
visitor.functions,
269+
source,
270+
metrics,
271+
)) {
272+
metrics.add(metric.compute(
273+
classDeclaration.declaration,
274+
visitor.classes,
275+
visitor.functions,
276+
source,
277+
metrics,
278+
));
279+
}
280+
}
281+
262282
final report = Report(
263283
location: nodeLocation(
264284
node: classDeclaration.declaration,
265285
source: source,
266286
),
267287
declaration: classDeclaration.declaration,
268-
metrics: [
269-
for (final metric in config.classesMetrics)
270-
if (metric.supports(
271-
classDeclaration.declaration,
272-
visitor.classes,
273-
visitor.functions,
274-
source,
275-
))
276-
metric.compute(
277-
classDeclaration.declaration,
278-
visitor.classes,
279-
visitor.functions,
280-
source,
281-
),
282-
],
288+
metrics: metrics,
283289
);
284290

285291
classRecords[classDeclaration] = report;
@@ -296,21 +302,25 @@ class LintAnalyzer {
296302
final functionRecords = <ScopedFunctionDeclaration, Report>{};
297303

298304
for (final function in visitor.functions) {
299-
final metrics = [
300-
for (final metric in config.methodsMetrics)
301-
if (metric.supports(
305+
final metrics = <MetricValue<num>>[];
306+
307+
for (final metric in config.methodsMetrics) {
308+
if (metric.supports(
309+
function.declaration,
310+
visitor.classes,
311+
visitor.functions,
312+
source,
313+
metrics,
314+
)) {
315+
metrics.add(metric.compute(
302316
function.declaration,
303317
visitor.classes,
304318
visitor.functions,
305319
source,
306-
))
307-
metric.compute(
308-
function.declaration,
309-
visitor.classes,
310-
visitor.functions,
311-
source,
312-
),
313-
];
320+
metrics,
321+
));
322+
}
323+
}
314324

315325
final cyclomatic = metrics.firstWhereOrNull(
316326
(value) => value.metricsId == CyclomaticComplexityMetric.metricId,

lib/src/analyzers/lint_analyzer/metrics/metrics_list/weight_of_class_metric.dart

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import '../metric_utils.dart';
1111
import '../models/class_metric.dart';
1212
import '../models/metric_computation_result.dart';
1313
import '../models/metric_documentation.dart';
14+
import '../models/metric_value.dart';
1415
import '../scope_utils.dart';
1516

1617
const _documentation = MetricDocumentation(
@@ -43,8 +44,15 @@ class WeightOfClassMetric extends ClassMetric<double> {
4344
Iterable<ScopedClassDeclaration> classDeclarations,
4445
Iterable<ScopedFunctionDeclaration> functionDeclarations,
4546
InternalResolvedUnitResult source,
47+
Iterable<MetricValue<num>> otherMetricsValues,
4648
) =>
47-
super.supports(node, classDeclarations, functionDeclarations, source) &&
49+
super.supports(
50+
node,
51+
classDeclarations,
52+
functionDeclarations,
53+
source,
54+
otherMetricsValues,
55+
) &&
4856
classMethods(node, functionDeclarations)
4957
.where(_isPublicMethod)
5058
.isNotEmpty;

lib/src/analyzers/lint_analyzer/metrics/models/metric.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ abstract class Metric<T extends num> {
3939
Iterable<ScopedClassDeclaration> classDeclarations,
4040
Iterable<ScopedFunctionDeclaration> functionDeclarations,
4141
InternalResolvedUnitResult source,
42+
Iterable<MetricValue<num>> otherMetricsValues,
4243
) =>
4344
true;
4445

@@ -48,6 +49,7 @@ abstract class Metric<T extends num> {
4849
Iterable<ScopedClassDeclaration> classDeclarations,
4950
Iterable<ScopedFunctionDeclaration> functionDeclarations,
5051
InternalResolvedUnitResult source,
52+
Iterable<MetricValue<num>> otherMetricsValues,
5153
) {
5254
final result = computeImplementation(
5355
node,

test/analyzers/lint_analyzer/metrics/metrics_list/cyclomatic_complexity/cyclomatic_complexity_metric_test.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ Future<void> main() async {
2626
scopeVisitor.classes,
2727
scopeVisitor.functions,
2828
example,
29+
[],
2930
);
3031

3132
expect(metricValue.metricsId, equals(metric.id));
@@ -65,6 +66,7 @@ Future<void> main() async {
6566
scopeVisitor.classes,
6667
scopeVisitor.functions,
6768
example,
69+
[],
6870
);
6971

7072
expect(metricValue.metricsId, equals(metric.id));
@@ -90,6 +92,7 @@ Future<void> main() async {
9092
scopeVisitor.classes,
9193
scopeVisitor.functions,
9294
example,
95+
[],
9396
);
9497

9598
expect(metricValue.metricsId, equals(metric.id));

test/analyzers/lint_analyzer/metrics/metrics_list/halstead_volume/halstead_volume_metric_test.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Future<void> main() async {
2525
scopeVisitor.classes,
2626
scopeVisitor.functions,
2727
example,
28+
[],
2829
);
2930

3031
expect(metricValue.metricsId, equals(metric.id));
@@ -46,6 +47,7 @@ Future<void> main() async {
4647
scopeVisitor.classes,
4748
scopeVisitor.functions,
4849
example,
50+
[],
4951
);
5052

5153
expect(metricValue.metricsId, equals(metric.id));

test/analyzers/lint_analyzer/metrics/metrics_list/lines_of_code_metric_test.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Future<void> main() async {
2525
scopeVisitor.classes,
2626
scopeVisitor.functions,
2727
example,
28+
[],
2829
);
2930

3031
expect(metricValue.metricsId, equals(metric.id));
@@ -44,6 +45,7 @@ Future<void> main() async {
4445
scopeVisitor.classes,
4546
scopeVisitor.functions,
4647
example,
48+
[],
4749
);
4850

4951
expect(metricValue.metricsId, equals(metric.id));
@@ -63,6 +65,7 @@ Future<void> main() async {
6365
scopeVisitor.classes,
6466
scopeVisitor.functions,
6567
example,
68+
[],
6669
);
6770

6871
expect(metricValue.metricsId, equals(metric.id));

test/analyzers/lint_analyzer/metrics/metrics_list/maximum_nesting_level/maximum_nesting_level_metric_test.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ Future<void> main() async {
2626
scopeVisitor.classes,
2727
scopeVisitor.functions,
2828
example,
29+
[],
2930
);
3031

3132
expect(metricValue.metricsId, equals(metric.id));
@@ -54,6 +55,7 @@ Future<void> main() async {
5455
scopeVisitor.classes,
5556
scopeVisitor.functions,
5657
example,
58+
[],
5759
);
5860

5961
expect(metricValue.metricsId, equals(metric.id));
@@ -79,6 +81,7 @@ Future<void> main() async {
7981
scopeVisitor.classes,
8082
scopeVisitor.functions,
8183
example,
84+
[],
8285
);
8386

8487
expect(metricValue.metricsId, equals(metric.id));
@@ -104,6 +107,7 @@ Future<void> main() async {
104107
scopeVisitor.classes,
105108
scopeVisitor.functions,
106109
example,
110+
[],
107111
);
108112

109113
expect(metricValue.metricsId, equals(metric.id));

test/analyzers/lint_analyzer/metrics/metrics_list/number_of_methods_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ void main() {
5454
visitor.classes,
5555
visitor.functions,
5656
result,
57+
[],
5758
);
5859

5960
expect(metricValue.metricsId, equals(metric.id));

test/analyzers/lint_analyzer/metrics/metrics_list/number_of_parameters_metric_test.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ Future<void> main() async {
2626
scopeVisitor.classes,
2727
scopeVisitor.functions,
2828
example,
29+
[],
2930
);
3031

3132
expect(metricValue.metricsId, equals(metric.id));
@@ -45,6 +46,7 @@ Future<void> main() async {
4546
scopeVisitor.classes,
4647
scopeVisitor.functions,
4748
example,
49+
[],
4850
);
4951

5052
expect(metricValue.metricsId, equals(metric.id));
@@ -64,6 +66,7 @@ Future<void> main() async {
6466
scopeVisitor.classes,
6567
scopeVisitor.functions,
6668
example,
69+
[],
6770
);
6871

6972
expect(metricValue.metricsId, equals(metric.id));
@@ -83,6 +86,7 @@ Future<void> main() async {
8386
scopeVisitor.classes,
8487
scopeVisitor.functions,
8588
example,
89+
[],
8690
);
8791

8892
expect(metricValue.metricsId, equals(metric.id));
@@ -102,6 +106,7 @@ Future<void> main() async {
102106
scopeVisitor.classes,
103107
scopeVisitor.functions,
104108
example,
109+
[],
105110
);
106111

107112
expect(metricValue.metricsId, equals(metric.id));
@@ -121,6 +126,7 @@ Future<void> main() async {
121126
scopeVisitor.classes,
122127
scopeVisitor.functions,
123128
example,
129+
[],
124130
);
125131

126132
expect(metricValue.metricsId, equals(metric.id));

0 commit comments

Comments
 (0)