diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e90a8f10a..5678526f78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/example/example.dart b/example/example.dart index ad4d43baf3..7a9abfc387 100644 --- a/example/example.dart +++ b/example/example.dart @@ -1,4 +1,3 @@ -// ignore_for_file: deprecated_member_use_from_same_package import 'dart:io'; import 'package:dart_code_metrics/config.dart'; diff --git a/lib/config.dart b/lib/config.dart index a62c383070..2eef235f39 100644 --- a/lib/config.dart +++ b/lib/config.dart @@ -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'; diff --git a/lib/metrics_analyzer.dart b/lib/metrics_analyzer.dart index eae66f2e6f..f6330d37f1 100644 --- a/lib/metrics_analyzer.dart +++ b/lib/metrics_analyzer.dart @@ -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'; diff --git a/lib/reporters.dart b/lib/reporters.dart index c12a690010..3fae2ee847 100644 --- a/lib/reporters.dart +++ b/lib/reporters.dart @@ -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'; diff --git a/lib/src/analyzer_plugin/analyzer_plugin.dart b/lib/src/analyzer_plugin/analyzer_plugin.dart index f386ee8cb4..7036aa2c08 100644 --- a/lib/src/analyzer_plugin/analyzer_plugin.dart +++ b/lib/src/analyzer_plugin/analyzer_plugin.dart @@ -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'; @@ -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) { @@ -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) => @@ -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!); @@ -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, @@ -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; diff --git a/lib/src/analyzers/lint_analyzer/lint_analyzer.dart b/lib/src/analyzers/lint_analyzer/lint_analyzer.dart index 052d7ba2bc..3074fce5f0 100644 --- a/lib/src/analyzers/lint_analyzer/lint_analyzer.dart +++ b/lib/src/analyzers/lint_analyzer/lint_analyzer.dart @@ -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); + } } } diff --git a/pubspec.yaml b/pubspec.yaml index 32b96205c3..23bff02c38 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -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 diff --git a/test/analyzers/lint_analyzer/lint_analyzer_test.dart b/test/analyzers/lint_analyzer/lint_analyzer_test.dart index d50f7719f6..7e759ef519 100644 --- a/test/analyzers/lint_analyzer/lint_analyzer_test.dart +++ b/test/analyzers/lint_analyzer/lint_analyzer_test.dart @@ -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'; @@ -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, { @@ -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, { @@ -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); }); @@ -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')); @@ -139,3 +150,6 @@ LintConfig _createConfig( ), rootDirectory, ); + +FileReport reportForFile(Iterable reports, String fileName) => + reports.firstWhere((report) => report.relativePath.endsWith(fileName)); diff --git a/test/analyzers/lint_analyzer/reporters/reporters_list/html/utility_functions_test.dart b/test/analyzers/lint_analyzer/reporters/reporters_list/html/utility_functions_test.dart index 5a63d4679a..d0fc6aff09 100644 --- a/test/analyzers/lint_analyzer/reporters/reporters_list/html/utility_functions_test.dart +++ b/test/analyzers/lint_analyzer/reporters/reporters_list/html/utility_functions_test.dart @@ -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() { diff --git a/test/analyzers/lint_analyzer/reporters/reporters_list/lint_code_climate_reporter_test.dart b/test/analyzers/lint_analyzer/reporters/reporters_list/lint_code_climate_reporter_test.dart index 259fb2fac3..1438977405 100644 --- a/test/analyzers/lint_analyzer/reporters/reporters_list/lint_code_climate_reporter_test.dart +++ b/test/analyzers/lint_analyzer/reporters/reporters_list/lint_code_climate_reporter_test.dart @@ -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'; diff --git a/test/analyzers/lint_analyzer/reporters/reporters_list/lint_console_reporter_test.dart b/test/analyzers/lint_analyzer/reporters/reporters_list/lint_console_reporter_test.dart index b6f5834fba..d42b8590b9 100644 --- a/test/analyzers/lint_analyzer/reporters/reporters_list/lint_console_reporter_test.dart +++ b/test/analyzers/lint_analyzer/reporters/reporters_list/lint_console_reporter_test.dart @@ -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'; diff --git a/test/analyzers/lint_analyzer/reporters/reporters_list/report_example.dart b/test/analyzers/lint_analyzer/reporters/reporters_list/report_example.dart index 365ce73f9d..90ce7e3437 100644 --- a/test/analyzers/lint_analyzer/reporters/reporters_list/report_example.dart +++ b/test/analyzers/lint_analyzer/reporters/reporters_list/report_example.dart @@ -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'; diff --git a/test/analyzers/lint_analyzer/reporters/utility_selector_test.dart b/test/analyzers/lint_analyzer/reporters/utility_selector_test.dart index 2c515b2489..8f7ba5ba03 100644 --- a/test/analyzers/lint_analyzer/reporters/utility_selector_test.dart +++ b/test/analyzers/lint_analyzer/reporters/utility_selector_test.dart @@ -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'; diff --git a/test/analyzers/utils/scope_utils_test.dart b/test/analyzers/utils/scope_utils_test.dart index 5956541480..b8ff85e8da 100644 --- a/test/analyzers/utils/scope_utils_test.dart +++ b/test/analyzers/utils/scope_utils_test.dart @@ -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'; diff --git a/test/helpers/file_resolver.dart b/test/helpers/file_resolver.dart index 631f700248..594fabef3e 100644 --- a/test/helpers/file_resolver.dart +++ b/test/helpers/file_resolver.dart @@ -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, diff --git a/test/stubs_builders.dart b/test/stubs_builders.dart index a14aa52bc9..9116a8536f 100644 --- a/test/stubs_builders.dart +++ b/test/stubs_builders.dart @@ -5,12 +5,12 @@ 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_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/lint_analyzer/metrics/metrics_list/weight_of_class_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/models/class_metrics_report.dart'; import 'package:dart_code_metrics/src/analyzers/lint_analyzer/reporters/models/function_metrics_report.dart'; +import 'package:dart_code_metrics/src/analyzers/models/entity_type.dart'; import 'package:dart_code_metrics/src/analyzers/models/report.dart'; import 'package:mocktail/mocktail.dart'; import 'package:source_span/source_span.dart';