From d4d19351403de079ccb7dd715880f6c9c0cf456c Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Fri, 19 Jun 2020 17:03:03 +0000 Subject: [PATCH] Support for --packages in build mode. Bug: https://buganizer.corp.google.com/issues/159290352 Change-Id: I160938eacf996fbc708f42f161ddc36becb71c92 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151781 Reviewed-by: Brian Wilkerson Commit-Queue: Konstantin Shcheglov --- pkg/analyzer_cli/lib/src/build_mode.dart | 15 +++-- pkg/analyzer_cli/test/driver_test.dart | 82 ++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 4 deletions(-) diff --git a/pkg/analyzer_cli/lib/src/build_mode.dart b/pkg/analyzer_cli/lib/src/build_mode.dart index 60d403ec3d9..bf9eeb1d0bb 100644 --- a/pkg/analyzer_cli/lib/src/build_mode.dart +++ b/pkg/analyzer_cli/lib/src/build_mode.dart @@ -482,11 +482,18 @@ class BuildMode with HasContextMixin { } Packages _findPackages(String path) { - if (path != null) { - return findPackagesFrom(resourceProvider, resourceProvider.getFile(path)); - } else { - return Packages.empty; + var configPath = options.packageConfigPath; + if (configPath != null) { + var configFile = resourceProvider.getFile(configPath); + return parsePackagesFile(resourceProvider, configFile); } + + if (path != null) { + var file = resourceProvider.getFile(path); + return findPackagesFrom(resourceProvider, file); + } + + return Packages.empty; } /// Ensure that the parsed unit for [absoluteUri] is available. diff --git a/pkg/analyzer_cli/test/driver_test.dart b/pkg/analyzer_cli/test/driver_test.dart index 8a292422331..4735d8792f8 100644 --- a/pkg/analyzer_cli/test/driver_test.dart +++ b/pkg/analyzer_cli/test/driver_test.dart @@ -622,6 +622,88 @@ var b = new B(); }); } + Future test_packageConfig_packagesOptions() async { + await withTempDirAsync((tempDir) async { + var packagesPath = path.join(tempDir, 'aaa.packages'); + + var aaaRoot = path.join(tempDir, 'packages', 'aaa'); + var aPath = path.join(aaaRoot, 'lib', 'a.dart'); + + var aUri = 'package:aaa/a.dart'; + + File(packagesPath).createSync(recursive: true); + File(packagesPath).writeAsStringSync(''' +{ + "configVersion": 2, + "packages": [ + { + "name": "aaa", + "rootUri": "${path.toUri(aaaRoot)}", + "packageUri": "lib/", + "languageVersion": "2.4" + } + ] +} +'''); + + File(aPath).createSync(recursive: true); + File(aPath).writeAsStringSync(r''' +extension E on int {} +'''); + + // Analyze package:aaa/a.dart and compute errors. + await _doDrive( + aPath, + fileUri: aUri, + additionalArgs: [ + '--packages=$packagesPath', + ], + ); + expect(exitCode, ErrorSeverity.ERROR.ordinal); + expect(errorSink.toString(), contains('extension-methods')); + }); + } + + Future test_packageConfig_relativeToFile() async { + await withTempDirAsync((tempDir) async { + var packagesPath = path.join(tempDir, '.dart_tool/package_config.json'); + + var aaaRoot = path.join(tempDir, 'packages', 'aaa'); + var aPath = path.join(aaaRoot, 'lib', 'a.dart'); + + var aUri = 'package:aaa/a.dart'; + + File(packagesPath).createSync(recursive: true); + File(packagesPath).writeAsStringSync(''' +{ + "configVersion": 2, + "packages": [ + { + "name": "aaa", + "rootUri": "${path.toUri(aaaRoot)}", + "packageUri": "lib/", + "languageVersion": "2.4" + } + ] +} +'''); + + File(aPath).createSync(recursive: true); + File(aPath).writeAsStringSync(r''' +extension E on int {} +'''); + + // Analyze package:aaa/a.dart and compute errors. + await _doDrive( + aPath, + fileUri: aUri, + additionalArgs: [], + ); + expect(exitCode, ErrorSeverity.ERROR.ordinal); + expect(errorSink.toString(), contains('extension-methods')); + }); + } + Iterable _linkedLibraryUnitUriList( LinkedNodeBundle bundle2, String libraryUriStr,