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

Commit 316f32c

Browse files
chore: migrate to 1.7.0 analyzer (#355)
* chore: migrate to 1.7.0 analyzer * docs: update changelog * chore: replace deprecated members * chore: add missed trailing comma * fix: get get result in unordered iterable * fix: rephrase error tests Co-authored-by: Dmitry Krutskikh <[email protected]>
1 parent 2fe0033 commit 316f32c

17 files changed

+102
-82
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## Unreleased
44

55
* Remove deprecated `Lines of Executable Code` metric, use `Source lines of Code` instead.
6+
* Changed the supported `analyzer` version to `^1.7.0`.
67

78
## 3.2.2
89

example/example.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// ignore_for_file: deprecated_member_use_from_same_package
21
import 'dart:io';
32

43
import 'package:dart_code_metrics/config.dart';

lib/config.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
export 'package:dart_code_metrics/src/config_builder/config_builder.dart';
2-
export 'package:dart_code_metrics/src/config_builder/models/config.dart';
32
export 'package:dart_code_metrics/src/config_builder/models/analysis_options.dart';
3+
export 'package:dart_code_metrics/src/config_builder/models/config.dart';

lib/metrics_analyzer.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
export 'package:dart_code_metrics/src/analyzers/lint_analyzer/lint_analyzer.dart';
22

3-
export 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/reporters_list/console/lint_console_reporter.dart';
4-
export 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/reporters_list/json/lint_json_reporter.dart';
5-
63
export 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_factory.dart';
74
export 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value_level.dart';
5+
6+
export 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/reporters_list/console/lint_console_reporter.dart';
7+
export 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/reporters_list/json/lint_json_reporter.dart';

lib/reporters.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
export 'package:dart_code_metrics/src/reporters/models/reporter.dart';
21
export 'package:dart_code_metrics/src/analyzers/models/file_report.dart';
2+
export 'package:dart_code_metrics/src/reporters/models/reporter.dart';

lib/src/analyzer_plugin/analyzer_plugin.dart

Lines changed: 48 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
11
import 'dart:async';
22

3+
import 'package:analyzer/dart/analysis/context_builder.dart';
4+
import 'package:analyzer/dart/analysis/context_locator.dart';
35
import 'package:analyzer/dart/analysis/results.dart';
46
import 'package:analyzer/file_system/file_system.dart';
57
// ignore: implementation_imports
68
import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
79
// ignore: implementation_imports
8-
import 'package:analyzer/src/context/builder.dart';
9-
// ignore: implementation_imports
10-
import 'package:analyzer/src/context/context_root.dart';
11-
// ignore: implementation_imports
1210
import 'package:analyzer/src/dart/analysis/driver.dart';
1311
// ignore: implementation_imports
14-
import 'package:analyzer/src/dart/analysis/file_state.dart';
12+
import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
1513
import 'package:analyzer_plugin/plugin/plugin.dart';
1614
import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
1715
import 'package:source_span/source_span.dart';
@@ -60,25 +58,28 @@ class MetricsAnalyzerPlugin extends ServerPlugin {
6058
@override
6159
AnalysisDriverGeneric createAnalysisDriver(plugin.ContextRoot contextRoot) {
6260
final rootPath = contextRoot.root;
63-
final root = ContextRoot(
64-
rootPath,
65-
contextRoot.exclude,
66-
pathContext: resourceProvider.pathContext,
67-
)..optionsFilePath = contextRoot.optionsFile;
68-
69-
final contextBuilder = ContextBuilder(resourceProvider, sdkManager, null)
70-
..analysisDriverScheduler = analysisDriverScheduler
71-
..byteStore = byteStore
72-
..performanceLog = performanceLog
73-
..fileContentOverlay = FileContentOverlay();
74-
75-
final workspace = ContextBuilder.createWorkspace(
76-
resourceProvider: resourceProvider,
77-
options: ContextBuilderOptions(),
78-
rootPath: rootPath,
61+
final locator =
62+
ContextLocator(resourceProvider: resourceProvider).locateRoots(
63+
includedPaths: [rootPath],
64+
excludedPaths: contextRoot.exclude,
65+
optionsFile: contextRoot.optionsFile,
7966
);
8067

81-
final dartDriver = contextBuilder.buildDriver(root, workspace);
68+
if (locator.isEmpty) {
69+
final error = StateError('Unexpected empty context');
70+
channel.sendNotification(plugin.PluginErrorParams(
71+
true,
72+
error.message,
73+
error.stackTrace.toString(),
74+
).toNotification());
75+
76+
throw error;
77+
}
78+
79+
final builder = ContextBuilder(resourceProvider: resourceProvider);
80+
final context = builder.createContext(contextRoot: locator.first)
81+
as DriverBasedAnalysisContext;
82+
final dartDriver = context.driver;
8283
final config = _createConfig(dartDriver, rootPath);
8384

8485
if (config == null) {
@@ -141,8 +142,11 @@ class MetricsAnalyzerPlugin extends ServerPlugin {
141142
) async {
142143
try {
143144
final driver = driverForPath(parameters.file) as AnalysisDriver;
144-
// ignore: deprecated_member_use
145-
final analysisResult = await driver.getResult(parameters.file);
145+
final analysisResult = await driver.getResult2(parameters.file);
146+
147+
if (analysisResult is! ResolvedUnitResult) {
148+
return plugin.EditGetFixesResult([]);
149+
}
146150

147151
final fixes = _check(driver, analysisResult)
148152
.where((fix) =>
@@ -198,8 +202,7 @@ class MetricsAnalyzerPlugin extends ServerPlugin {
198202
final config = _configs[driver];
199203

200204
if (config != null) {
201-
// ignore: deprecated_member_use
202-
final root = driver.contextRoot?.root;
205+
final root = driver.analysisContext?.contextRoot.root.path;
203206

204207
final report = _analyzer.runPluginAnalysis(analysisResult, config, root!);
205208

@@ -254,8 +257,8 @@ class MetricsAnalyzerPlugin extends ServerPlugin {
254257
});
255258
}
256259

257-
// ignore: deprecated_member_use
258-
if (analysisResult.path == driver.contextRoot?.optionsFilePath) {
260+
if (analysisResult.path ==
261+
driver.analysisContext?.contextRoot.optionsFile?.path) {
259262
final deprecations = checkConfigDeprecatedOptions(
260263
config,
261264
deprecatedOptions,
@@ -270,30 +273,25 @@ class MetricsAnalyzerPlugin extends ServerPlugin {
270273
}
271274

272275
LintConfig? _createConfig(AnalysisDriver driver, String rootPath) {
273-
// ignore: deprecated_member_use
274-
final optionsPath = driver.contextRoot?.optionsFilePath;
275-
if (optionsPath != null && optionsPath.isNotEmpty) {
276-
final file = resourceProvider.getFile(optionsPath);
277-
if (file.exists) {
278-
final options = AnalysisOptions(yamlMapToDartMap(
279-
AnalysisOptionsProvider(driver.sourceFactory)
280-
.getOptionsFromFile(file),
281-
));
282-
final config = ConfigBuilder.getConfig(options);
283-
final lintConfig = ConfigBuilder.getLintConfig(
284-
config,
285-
rootPath,
286-
classMetrics: const [],
287-
functionMetrics: [
288-
CyclomaticComplexityMetric(config: config.metrics),
289-
NumberOfParametersMetric(config: config.metrics),
290-
],
291-
);
276+
final file = driver.analysisContext?.contextRoot.optionsFile;
277+
if (file != null && file.exists) {
278+
final options = AnalysisOptions(yamlMapToDartMap(
279+
AnalysisOptionsProvider(driver.sourceFactory).getOptionsFromFile(file),
280+
));
281+
final config = ConfigBuilder.getConfig(options);
282+
final lintConfig = ConfigBuilder.getLintConfig(
283+
config,
284+
rootPath,
285+
classMetrics: const [],
286+
functionMetrics: [
287+
CyclomaticComplexityMetric(config: config.metrics),
288+
NumberOfParametersMetric(config: config.metrics),
289+
],
290+
);
292291

293-
_configs[driver] = lintConfig;
292+
_configs[driver] = lintConfig;
294293

295-
return lintConfig;
296-
}
294+
return lintConfig;
297295
}
298296

299297
return null;

lib/src/analyzers/lint_analyzer/lint_analyzer.dart

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -100,17 +100,19 @@ class LintAnalyzer {
100100

101101
final analysisContext = collection.contextFor(normalized);
102102
final unit =
103-
// ignore: deprecated_member_use
104-
await analysisContext.currentSession.getResolvedUnit(normalized);
105-
final result = _runAnalysisForFile(
106-
unit,
107-
config,
108-
rootFolder,
109-
filePath: filePath,
110-
);
103+
await analysisContext.currentSession.getResolvedUnit2(normalized);
104+
105+
if (unit is ResolvedUnitResult) {
106+
final result = _runAnalysisForFile(
107+
unit,
108+
config,
109+
rootFolder,
110+
filePath: filePath,
111+
);
111112

112-
if (result != null) {
113-
analyzerResult.add(result);
113+
if (result != null) {
114+
analyzerResult.add(result);
115+
}
114116
}
115117
}
116118

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ environment:
99
sdk: ">=2.12.0 <3.0.0"
1010

1111
dependencies:
12-
analyzer: ^1.4.0
12+
analyzer: ^1.7.0
1313
analyzer_plugin: ^0.6.0
1414
ansicolor: ^2.0.1
1515
args: ^2.0.0

test/analyzers/lint_analyzer/lint_analyzer_test.dart

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
@TestOn('vm')
12
import 'dart:io';
23

34
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/lint_analyzer.dart';
45
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/lint_config.dart';
56
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value_level.dart';
7+
import 'package:dart_code_metrics/src/analyzers/models/file_report.dart';
68
import 'package:dart_code_metrics/src/config_builder/config_builder.dart';
79
import 'package:dart_code_metrics/src/config_builder/models/config.dart';
810
import 'package:path/path.dart';
@@ -52,7 +54,10 @@ void main() {
5254
config,
5355
);
5456

55-
final report = result.first.functions.values.first;
57+
final report = reportForFile(result, 'lint_analyzer_exclude_example.dart')
58+
.functions
59+
.values
60+
.first;
5661
final metrics = {for (final m in report.metrics) m.metricsId: m.level};
5762

5863
expect(metrics, {
@@ -75,7 +80,10 @@ void main() {
7580
config,
7681
);
7782

78-
final report = result.first.functions.values.first;
83+
final report = reportForFile(result, 'lint_analyzer_exclude_example.dart')
84+
.functions
85+
.values
86+
.first;
7987
final metrics = {for (final m in report.metrics) m.metricsId: m.level};
8088

8189
expect(metrics, {
@@ -98,7 +106,9 @@ void main() {
98106
config,
99107
);
100108

101-
final report = result.first.functions.values;
109+
final report = reportForFile(result, 'lint_analyzer_exclude_example.dart')
110+
.functions
111+
.values;
102112

103113
expect(report, isEmpty);
104114
});
@@ -113,7 +123,8 @@ void main() {
113123
config,
114124
);
115125

116-
final issues = result.first.issues;
126+
final issues =
127+
reportForFile(result, 'lint_analyzer_exclude_example.dart').issues;
117128
final ids = issues.map((issue) => issue.ruleId);
118129

119130
expect(ids, List.filled(6, 'prefer-trailing-comma'));
@@ -139,3 +150,6 @@ LintConfig _createConfig(
139150
),
140151
rootDirectory,
141152
);
153+
154+
FileReport reportForFile(Iterable<FileReport> reports, String fileName) =>
155+
reports.firstWhere((report) => report.relativePath.endsWith(fileName));

test/analyzers/lint_analyzer/reporters/reporters_list/html/utility_functions_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
@TestOn('vm')
2-
import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart';
32
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_documentation.dart';
43
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value.dart';
54
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value_level.dart';
65
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/models/file_metrics_report.dart';
76
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/reporters_list/html/lint_html_reporter.dart';
87
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/reporters_list/html/utility_functions.dart';
8+
import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart';
99
import 'package:test/test.dart';
1010

1111
void main() {

test/analyzers/lint_analyzer/reporters/reporters_list/lint_code_climate_reporter_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ import 'dart:io';
44

55
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_list/maximum_nesting_level/maximum_nesting_level_metric.dart';
66
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_list/number_of_methods_metric.dart';
7-
import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart';
87
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_documentation.dart';
98
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value.dart';
109
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value_level.dart';
1110
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/reporters_list/code_climate/lint_code_climate_reporter.dart';
11+
import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart';
1212
import 'package:dart_code_metrics/src/analyzers/models/file_report.dart';
1313
import 'package:dart_code_metrics/src/analyzers/models/issue.dart';
1414
import 'package:dart_code_metrics/src/analyzers/models/replacement.dart';

test/analyzers/lint_analyzer/reporters/reporters_list/lint_console_reporter_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_li
66
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_list/number_of_methods_metric.dart';
77
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_list/number_of_parameters_metric.dart';
88
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_list/source_lines_of_code/source_lines_of_code_metric.dart';
9-
import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart';
109
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_documentation.dart';
1110
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value.dart';
1211
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value_level.dart';
1312
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/reporters_list/console/lint_console_reporter.dart';
13+
import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart';
1414
import 'package:dart_code_metrics/src/analyzers/models/file_report.dart';
1515
import 'package:dart_code_metrics/src/analyzers/models/issue.dart';
1616
import 'package:dart_code_metrics/src/analyzers/models/replacement.dart';

test/analyzers/lint_analyzer/reporters/reporters_list/report_example.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import 'package:analyzer/dart/ast/ast.dart';
2-
import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart';
32
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_documentation.dart';
43
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value.dart';
54
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value_level.dart';
65
import 'package:dart_code_metrics/src/analyzers/models/context_message.dart';
6+
import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart';
77
import 'package:dart_code_metrics/src/analyzers/models/file_report.dart';
88
import 'package:dart_code_metrics/src/analyzers/models/issue.dart';
99
import 'package:dart_code_metrics/src/analyzers/models/report.dart';

test/analyzers/lint_analyzer/reporters/utility_selector_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1+
@TestOn('vm')
12
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_list/maximum_nesting_level/maximum_nesting_level_metric.dart';
23
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_list/number_of_methods_metric.dart';
34
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_list/number_of_parameters_metric.dart';
45
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_list/source_lines_of_code/source_lines_of_code_metric.dart';
5-
import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart';
66
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_documentation.dart';
77
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value.dart';
88
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value_level.dart';
99
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/utility_selector.dart';
10+
import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart';
1011
import 'package:dart_code_metrics/src/analyzers/models/file_report.dart';
1112
import 'package:dart_code_metrics/src/analyzers/models/report.dart';
12-
@TestOn('vm')
1313
import 'package:test/test.dart';
1414

1515
import '../../../stubs_builders.dart';

test/analyzers/utils/scope_utils_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
@TestOn('vm')
22
import 'package:analyzer/dart/ast/ast.dart';
3+
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/scope_utils.dart';
34
import 'package:dart_code_metrics/src/analyzers/models/class_type.dart';
45
import 'package:dart_code_metrics/src/analyzers/models/function_type.dart';
56
import 'package:dart_code_metrics/src/analyzers/models/scoped_class_declaration.dart';
67
import 'package:dart_code_metrics/src/analyzers/models/scoped_function_declaration.dart';
7-
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/scope_utils.dart';
88
import 'package:mocktail/mocktail.dart';
99
import 'package:test/test.dart';
1010

test/helpers/file_resolver.dart

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,20 @@ class FileResolver {
1212
final file = File(filePath);
1313

1414
if (!file.existsSync()) {
15-
throw StateError('Unable to find a file for the given path: $filePath');
15+
throw ArgumentError(
16+
'Unable to find a file for the given path: $filePath',
17+
);
1618
}
1719

1820
final path = normalize(file.absolute.path);
1921
final sourceUrl = Uri.parse(path);
2022

21-
// ignore: deprecated_member_use
22-
final parseResult = await resolveFile(path: path) as ResolvedUnitResult;
23+
final parseResult = await resolveFile2(path: path);
24+
if (parseResult is! ResolvedUnitResult) {
25+
throw ArgumentError(
26+
'Unable to correctly resolve file for given path: $path',
27+
);
28+
}
2329

2430
return InternalResolvedUnitResult(
2531
sourceUrl,

0 commit comments

Comments
 (0)