From f3c2d2ee81ba4d163bc183d6f68f10ac079fdbb3 Mon Sep 17 00:00:00 2001 From: Sam Rawlins Date: Fri, 6 May 2022 03:08:28 +0000 Subject: [PATCH] Support an sdk-path option in dart analyze Bug: https://github.com/dart-lang/sdk/issues/48959 Change-Id: I4c386f1f7c474c1ff809d15d597d3f8f2de0418a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/243847 Reviewed-by: Brian Wilkerson Reviewed-by: Konstantin Shcheglov Commit-Queue: Samuel Rawlins --- pkg/dartdev/lib/src/commands/analyze.dart | 29 ++++++++++++++++++++- pkg/dartdev/test/commands/analyze_test.dart | 20 ++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/pkg/dartdev/lib/src/commands/analyze.dart b/pkg/dartdev/lib/src/commands/analyze.dart index 10d97e2102f..5dc3ae70283 100644 --- a/pkg/dartdev/lib/src/commands/analyze.dart +++ b/pkg/dartdev/lib/src/commands/analyze.dart @@ -74,6 +74,12 @@ class AnalyzeCommand extends DartdevCommand { help: 'The path to the package resolution configuration file, which ' 'supplies a mapping of package names\ninto paths.', hide: !verbose, + ) + ..addOption( + 'sdk-path', + valueHelp: 'path', + help: 'The path to the Dart SDK.', + hide: !verbose, ); } @@ -110,9 +116,30 @@ class AnalyzeCommand extends DartdevCommand { var progress = machineFormat ? null : log.progress('Analyzing $targetsNames'); + io.Directory sdkPath; + if (args.wasParsed('sdk-path')) { + sdkPath = io.Directory(args['sdk-path'] as String); + if (!sdkPath.existsSync()) { + usageException('Invalid Dart SDK path: $sdkPath'); + } + final snapshotPath = path.join( + sdkPath.path, + 'bin', + 'snapshots', + 'analysis_server.dart.snapshot', + ); + if (!io.File(snapshotPath).existsSync()) { + usageException( + 'Invalid Dart SDK path has no analysis_server.dart.snapshot file: ' + '$sdkPath'); + } + } else { + sdkPath = io.Directory(sdk.sdkPath); + } + final AnalysisServer server = AnalysisServer( _packagesFile(), - io.Directory(sdk.sdkPath), + sdkPath, targets, cacheDirectoryPath: args['cache'], commandName: 'analyze', diff --git a/pkg/dartdev/test/commands/analyze_test.dart b/pkg/dartdev/test/commands/analyze_test.dart index 2ca1456586e..051384951c7 100644 --- a/pkg/dartdev/test/commands/analyze_test.dart +++ b/pkg/dartdev/test/commands/analyze_test.dart @@ -5,6 +5,7 @@ import 'package:cli_util/cli_logging.dart'; import 'package:dartdev/src/analysis_server.dart'; import 'package:dartdev/src/commands/analyze.dart'; +import 'package:dartdev/src/sdk.dart'; import 'package:test/test.dart'; import '../utils.dart'; @@ -355,6 +356,25 @@ void defineAnalyze() { expect(result.stdout, contains('1 issue found.')); }); + test('--sdk-path value does not exist', () async { + p = project(); + var result = await p.run(['analyze', '--sdk-path=bad']); + + expect(result.exitCode, 64); + expect(result.stderr, contains('Invalid Dart SDK path: bad')); + expect(result.stderr, contains(_analyzeUsageText)); + }); + + test('--sdk-path', () async { + var sdkPath = sdk.sdkPath; + p = project(); + var result = await p.run(['analyze', '--sdk-path=$sdkPath']); + + expect(result.exitCode, 0); + expect(result.stdout, contains('No issues found!')); + expect(result.stderr, isEmpty); + }); + test('--verbose', () async { p = project(mainSrc: ''' int f() {