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 <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
This commit is contained in:
Sam Rawlins 2022-05-06 03:08:28 +00:00 committed by Commit Bot
parent 0c8e32d98c
commit f3c2d2ee81
2 changed files with 48 additions and 1 deletions

View file

@ -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',

View file

@ -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() {