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

chore: migrate to 1.7.0 analyzer #355

Merged
merged 6 commits into from
May 26, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
## Unreleased

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

## 3.2.2

Expand Down
1 change: 0 additions & 1 deletion example/example.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
// ignore_for_file: deprecated_member_use_from_same_package
import 'dart:io';

import 'package:dart_code_metrics/config.dart';
Expand Down
2 changes: 1 addition & 1 deletion lib/config.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
export 'package:dart_code_metrics/src/config_builder/config_builder.dart';
export 'package:dart_code_metrics/src/config_builder/models/config.dart';
export 'package:dart_code_metrics/src/config_builder/models/analysis_options.dart';
export 'package:dart_code_metrics/src/config_builder/models/config.dart';
6 changes: 3 additions & 3 deletions lib/metrics_analyzer.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
export 'package:dart_code_metrics/src/analyzers/lint_analyzer/lint_analyzer.dart';

export 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/reporters_list/console/lint_console_reporter.dart';
export 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/reporters_list/json/lint_json_reporter.dart';

export 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_factory.dart';
export 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value_level.dart';

export 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/reporters_list/console/lint_console_reporter.dart';
export 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/reporters_list/json/lint_json_reporter.dart';
2 changes: 1 addition & 1 deletion lib/reporters.dart
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
export 'package:dart_code_metrics/src/reporters/models/reporter.dart';
export 'package:dart_code_metrics/src/analyzers/models/file_report.dart';
export 'package:dart_code_metrics/src/reporters/models/reporter.dart';
98 changes: 48 additions & 50 deletions lib/src/analyzer_plugin/analyzer_plugin.dart
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
import 'dart:async';

import 'package:analyzer/dart/analysis/context_builder.dart';
import 'package:analyzer/dart/analysis/context_locator.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/file_system/file_system.dart';
// ignore: implementation_imports
import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
// ignore: implementation_imports
import 'package:analyzer/src/context/builder.dart';
// ignore: implementation_imports
import 'package:analyzer/src/context/context_root.dart';
// ignore: implementation_imports
import 'package:analyzer/src/dart/analysis/driver.dart';
// ignore: implementation_imports
import 'package:analyzer/src/dart/analysis/file_state.dart';
import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
import 'package:analyzer_plugin/plugin/plugin.dart';
import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
import 'package:source_span/source_span.dart';
Expand Down Expand Up @@ -60,25 +58,28 @@ class MetricsAnalyzerPlugin extends ServerPlugin {
@override
AnalysisDriverGeneric createAnalysisDriver(plugin.ContextRoot contextRoot) {
final rootPath = contextRoot.root;
final root = ContextRoot(
rootPath,
contextRoot.exclude,
pathContext: resourceProvider.pathContext,
)..optionsFilePath = contextRoot.optionsFile;

final contextBuilder = ContextBuilder(resourceProvider, sdkManager, null)
..analysisDriverScheduler = analysisDriverScheduler
..byteStore = byteStore
..performanceLog = performanceLog
..fileContentOverlay = FileContentOverlay();

final workspace = ContextBuilder.createWorkspace(
resourceProvider: resourceProvider,
options: ContextBuilderOptions(),
rootPath: rootPath,
final locator =
ContextLocator(resourceProvider: resourceProvider).locateRoots(
includedPaths: [rootPath],
excludedPaths: contextRoot.exclude,
optionsFile: contextRoot.optionsFile,
);

final dartDriver = contextBuilder.buildDriver(root, workspace);
if (locator.isEmpty) {
final error = StateError('Unexpected empty context');
channel.sendNotification(plugin.PluginErrorParams(
true,
error.message,
error.stackTrace.toString(),
).toNotification());

throw error;
}

final builder = ContextBuilder(resourceProvider: resourceProvider);
final context = builder.createContext(contextRoot: locator.first)
as DriverBasedAnalysisContext;
final dartDriver = context.driver;
final config = _createConfig(dartDriver, rootPath);

if (config == null) {
Expand Down Expand Up @@ -141,8 +142,11 @@ class MetricsAnalyzerPlugin extends ServerPlugin {
) async {
try {
final driver = driverForPath(parameters.file) as AnalysisDriver;
// ignore: deprecated_member_use
final analysisResult = await driver.getResult(parameters.file);
final analysisResult = await driver.getResult2(parameters.file);

if (analysisResult is! ResolvedUnitResult) {
return plugin.EditGetFixesResult([]);
}

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

if (config != null) {
// ignore: deprecated_member_use
final root = driver.contextRoot?.root;
final root = driver.analysisContext?.contextRoot.root.path;

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

Expand Down Expand Up @@ -254,8 +257,8 @@ class MetricsAnalyzerPlugin extends ServerPlugin {
});
}

// ignore: deprecated_member_use
if (analysisResult.path == driver.contextRoot?.optionsFilePath) {
if (analysisResult.path ==
driver.analysisContext?.contextRoot.optionsFile?.path) {
final deprecations = checkConfigDeprecatedOptions(
config,
deprecatedOptions,
Expand All @@ -270,30 +273,25 @@ class MetricsAnalyzerPlugin extends ServerPlugin {
}

LintConfig? _createConfig(AnalysisDriver driver, String rootPath) {
// ignore: deprecated_member_use
final optionsPath = driver.contextRoot?.optionsFilePath;
if (optionsPath != null && optionsPath.isNotEmpty) {
final file = resourceProvider.getFile(optionsPath);
if (file.exists) {
final options = AnalysisOptions(yamlMapToDartMap(
AnalysisOptionsProvider(driver.sourceFactory)
.getOptionsFromFile(file),
));
final config = ConfigBuilder.getConfig(options);
final lintConfig = ConfigBuilder.getLintConfig(
config,
rootPath,
classMetrics: const [],
functionMetrics: [
CyclomaticComplexityMetric(config: config.metrics),
NumberOfParametersMetric(config: config.metrics),
],
);
final file = driver.analysisContext?.contextRoot.optionsFile;
if (file != null && file.exists) {
final options = AnalysisOptions(yamlMapToDartMap(
AnalysisOptionsProvider(driver.sourceFactory).getOptionsFromFile(file),
));
final config = ConfigBuilder.getConfig(options);
final lintConfig = ConfigBuilder.getLintConfig(
config,
rootPath,
classMetrics: const [],
functionMetrics: [
CyclomaticComplexityMetric(config: config.metrics),
NumberOfParametersMetric(config: config.metrics),
],
);

_configs[driver] = lintConfig;
_configs[driver] = lintConfig;

return lintConfig;
}
return lintConfig;
}

return null;
Expand Down
22 changes: 12 additions & 10 deletions lib/src/analyzers/lint_analyzer/lint_analyzer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -100,17 +100,19 @@ class LintAnalyzer {

final analysisContext = collection.contextFor(normalized);
final unit =
// ignore: deprecated_member_use
await analysisContext.currentSession.getResolvedUnit(normalized);
final result = _runAnalysisForFile(
unit,
config,
rootFolder,
filePath: filePath,
);
await analysisContext.currentSession.getResolvedUnit2(normalized);

if (unit is ResolvedUnitResult) {
final result = _runAnalysisForFile(
unit,
config,
rootFolder,
filePath: filePath,
);

if (result != null) {
analyzerResult.add(result);
if (result != null) {
analyzerResult.add(result);
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ environment:
sdk: ">=2.12.0 <3.0.0"

dependencies:
analyzer: ^1.4.0
analyzer: ^1.7.0
analyzer_plugin: ^0.6.0
ansicolor: ^2.0.1
args: ^2.0.0
Expand Down
22 changes: 18 additions & 4 deletions test/analyzers/lint_analyzer/lint_analyzer_test.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
@TestOn('vm')
import 'dart:io';

import 'package:dart_code_metrics/src/analyzers/lint_analyzer/lint_analyzer.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/lint_config.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value_level.dart';
import 'package:dart_code_metrics/src/analyzers/models/file_report.dart';
import 'package:dart_code_metrics/src/config_builder/config_builder.dart';
import 'package:dart_code_metrics/src/config_builder/models/config.dart';
import 'package:path/path.dart';
Expand Down Expand Up @@ -52,7 +54,10 @@ void main() {
config,
);

final report = result.first.functions.values.first;
final report = reportForFile(result, 'lint_analyzer_exclude_example.dart')
.functions
.values
.first;
final metrics = {for (final m in report.metrics) m.metricsId: m.level};

expect(metrics, {
Expand All @@ -75,7 +80,10 @@ void main() {
config,
);

final report = result.first.functions.values.first;
final report = reportForFile(result, 'lint_analyzer_exclude_example.dart')
.functions
.values
.first;
final metrics = {for (final m in report.metrics) m.metricsId: m.level};

expect(metrics, {
Expand All @@ -98,7 +106,9 @@ void main() {
config,
);

final report = result.first.functions.values;
final report = reportForFile(result, 'lint_analyzer_exclude_example.dart')
.functions
.values;

expect(report, isEmpty);
});
Expand All @@ -113,7 +123,8 @@ void main() {
config,
);

final issues = result.first.issues;
final issues =
reportForFile(result, 'lint_analyzer_exclude_example.dart').issues;
final ids = issues.map((issue) => issue.ruleId);

expect(ids, List.filled(6, 'prefer-trailing-comma'));
Expand All @@ -139,3 +150,6 @@ LintConfig _createConfig(
),
rootDirectory,
);

FileReport reportForFile(Iterable<FileReport> reports, String fileName) =>
reports.firstWhere((report) => report.relativePath.endsWith(fileName));
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
@TestOn('vm')
import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_documentation.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value_level.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/models/file_metrics_report.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/reporters_list/html/lint_html_reporter.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/reporters_list/html/utility_functions.dart';
import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart';
import 'package:test/test.dart';

void main() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ import 'dart:io';

import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_list/maximum_nesting_level/maximum_nesting_level_metric.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_list/number_of_methods_metric.dart';
import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_documentation.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value_level.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/reporters_list/code_climate/lint_code_climate_reporter.dart';
import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart';
import 'package:dart_code_metrics/src/analyzers/models/file_report.dart';
import 'package:dart_code_metrics/src/analyzers/models/issue.dart';
import 'package:dart_code_metrics/src/analyzers/models/replacement.dart';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_li
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_list/number_of_methods_metric.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_list/number_of_parameters_metric.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_list/source_lines_of_code/source_lines_of_code_metric.dart';
import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_documentation.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value_level.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/reporters_list/console/lint_console_reporter.dart';
import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart';
import 'package:dart_code_metrics/src/analyzers/models/file_report.dart';
import 'package:dart_code_metrics/src/analyzers/models/issue.dart';
import 'package:dart_code_metrics/src/analyzers/models/replacement.dart';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import 'package:analyzer/dart/ast/ast.dart';
import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_documentation.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value_level.dart';
import 'package:dart_code_metrics/src/analyzers/models/context_message.dart';
import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart';
import 'package:dart_code_metrics/src/analyzers/models/file_report.dart';
import 'package:dart_code_metrics/src/analyzers/models/issue.dart';
import 'package:dart_code_metrics/src/analyzers/models/report.dart';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
@TestOn('vm')
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_list/maximum_nesting_level/maximum_nesting_level_metric.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_list/number_of_methods_metric.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_list/number_of_parameters_metric.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/metrics_list/source_lines_of_code/source_lines_of_code_metric.dart';
import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_documentation.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/models/metric_value_level.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/utility_selector.dart';
import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart';
import 'package:dart_code_metrics/src/analyzers/models/file_report.dart';
import 'package:dart_code_metrics/src/analyzers/models/report.dart';
@TestOn('vm')
import 'package:test/test.dart';

import '../../../stubs_builders.dart';
Expand Down
2 changes: 1 addition & 1 deletion test/analyzers/utils/scope_utils_test.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
@TestOn('vm')
import 'package:analyzer/dart/ast/ast.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/scope_utils.dart';
import 'package:dart_code_metrics/src/analyzers/models/class_type.dart';
import 'package:dart_code_metrics/src/analyzers/models/function_type.dart';
import 'package:dart_code_metrics/src/analyzers/models/scoped_class_declaration.dart';
import 'package:dart_code_metrics/src/analyzers/models/scoped_function_declaration.dart';
import 'package:dart_code_metrics/src/analyzers/lint_analyzer/metrics/scope_utils.dart';
import 'package:mocktail/mocktail.dart';
import 'package:test/test.dart';

Expand Down
12 changes: 9 additions & 3 deletions test/helpers/file_resolver.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,20 @@ class FileResolver {
final file = File(filePath);

if (!file.existsSync()) {
throw StateError('Unable to find a file for the given path: $filePath');
throw ArgumentError(
'Unable to find a file for the given path: $filePath',
);
}

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

// ignore: deprecated_member_use
final parseResult = await resolveFile(path: path) as ResolvedUnitResult;
final parseResult = await resolveFile2(path: path);
if (parseResult is! ResolvedUnitResult) {
throw ArgumentError(
'Unable to correctly resolve file for given path: $path',
);
}

return InternalResolvedUnitResult(
sourceUrl,
Expand Down
Loading