Merge pull request #42 from dart-lang/pack_discovery
.packages discovery.
diff --git a/lib/src/driver.dart b/lib/src/driver.dart
index 57fd9e5..b807bdd 100644
--- a/lib/src/driver.dart
+++ b/lib/src/driver.dart
@@ -29,6 +29,7 @@
import 'package:analyzer_cli/src/options.dart';
import 'package:dev_compiler/strong_mode.dart';
import 'package:linter/src/plugin/linter_plugin.dart';
+import 'package:package_config/discovery.dart' as pkgDiscovery;
import 'package:package_config/packages.dart' show Packages;
import 'package:package_config/packages_file.dart' as pkgfile show parse;
import 'package:package_config/src/packages_impl.dart' show MapPackages;
@@ -280,19 +281,25 @@
JavaFile packageDirectory = new JavaFile(options.packageRootPath);
resolvers.add(new PackageUriResolver([packageDirectory]));
} else {
+ fileSystem.Resource cwd =
+ PhysicalResourceProvider.INSTANCE.getResource('.');
- //TODO(pquitslund): add .packages config discovery
+ // Look for .packages.
+ packages = _discoverPackagespec(new Uri.directory(cwd.path));
- PubPackageMapProvider pubPackageMapProvider =
- new PubPackageMapProvider(PhysicalResourceProvider.INSTANCE, sdk);
- PackageMapInfo packageMapInfo = pubPackageMapProvider.computePackageMap(
- PhysicalResourceProvider.INSTANCE.getResource('.'));
- Map<String, List<fileSystem.Folder>> packageMap =
- packageMapInfo.packageMap;
- if (packageMap != null) {
- resolvers.add(new SdkExtUriResolver(packageMap));
- resolvers.add(new PackageMapUriResolver(
- PhysicalResourceProvider.INSTANCE, packageMap));
+ // Fall back to pub list-dir.
+ if (packages == null) {
+ PubPackageMapProvider pubPackageMapProvider =
+ new PubPackageMapProvider(PhysicalResourceProvider.INSTANCE, sdk);
+ PackageMapInfo packageMapInfo =
+ pubPackageMapProvider.computePackageMap(cwd);
+ Map<String, List<fileSystem.Folder>> packageMap =
+ packageMapInfo.packageMap;
+ if (packageMap != null) {
+ resolvers.add(new SdkExtUriResolver(packageMap));
+ resolvers.add(new PackageMapUriResolver(
+ PhysicalResourceProvider.INSTANCE, packageMap));
+ }
}
}
resolvers.add(new FileUriResolver());
@@ -366,6 +373,21 @@
_context = context;
}
+ /// Return discovered packagespec, or `null` if none is found.
+ Packages _discoverPackagespec(Uri root) {
+ try {
+ Packages packages =
+ pkgDiscovery.findPackagesFromFile(new Uri.directory(root.path));
+ if (packages != Packages.noPackages) {
+ return packages;
+ }
+ } catch (_) {
+ // Ignore and fall through to null.
+ }
+
+ return null;
+ }
+
void _processAnalysisOptions(CommandLineOptions options) {
// Determine options file path.
var filePath = options.analysisOptionsFile != null