diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json index 9c19e785b8b..981de4b8d4b 100644 --- a/.dart_tool/package_config.json +++ b/.dart_tool/package_config.json @@ -11,7 +11,7 @@ "constraint, update this by running tools/generate_package_config.dart." ], "configVersion": 2, - "generated": "2021-10-15T13:46:59.969883", + "generated": "2021-10-26T10:20:01.277340", "generator": "tools/generate_package_config.dart", "packages": [ { @@ -515,7 +515,7 @@ { "name": "package_deps", "rootUri": "../tools/package_deps", - "languageVersion": "2.8" + "languageVersion": "2.12" }, { "name": "path", diff --git a/tools/package_deps/bin/package_deps.dart b/tools/package_deps/bin/package_deps.dart index eab420139ad..d0a8abcdd02 100644 --- a/tools/package_deps/bin/package_deps.dart +++ b/tools/package_deps/bin/package_deps.dart @@ -1,6 +1,7 @@ import 'dart:io'; import 'package:cli_util/cli_logging.dart'; +import 'package:collection/collection.dart'; import 'package:path/path.dart' as path; import 'package:yaml/yaml.dart' as yaml; @@ -85,34 +86,59 @@ void main(List arguments) { } if (validateFailure) { - exit(1); + exitCode = 1; } } class Package implements Comparable { final String dir; + final _regularDependencies = {}; + final _devDependencies = {}; + final _declaredPubDeps = []; + final _declaredDevPubDeps = []; + final _declaredOverridePubDeps = []; + + late final String _packageName; + late final Set _declaredDependencies; + late final Set _declaredDevDependencies; + late final Set _declaredOverrideDependencies; + late final bool _publishToNone; Package(this.dir) { - _parsePubspec(); + var pubspec = File(path.join(dir, 'pubspec.yaml')); + var doc = yaml.loadYamlDocument(pubspec.readAsStringSync()); + dynamic docContents = doc.contents.value; + _packageName = docContents['name']; + _publishToNone = docContents['publish_to'] == 'none'; + + Set process(String section, List target) { + if (docContents[section] != null) { + final value = Set.from(docContents[section].keys); + + var deps = docContents[section]; + for (var package in deps.keys) { + target.add(PubDep.parse(package, deps[package])); + } + + return value; + } else { + return {}; + } + } + + _declaredDependencies = process('dependencies', _declaredPubDeps); + _declaredDevDependencies = process('dev_dependencies', _declaredDevPubDeps); + _declaredOverrideDependencies = + process('dependency_overrides', _declaredOverridePubDeps); } String get dirName => path.basename(dir); - final Set _regularDependencies = {}; - final Set _devDependencies = {}; - String _packageName; - String get packageName => _packageName; - Set _declaredDependencies; - List _declaredPubDeps; - Set _declaredDevDependencies; - List _declaredDevPubDeps; List get regularDependencies => _regularDependencies.toList()..sort(); List get devDependencies => _devDependencies.toList()..sort(); - bool _publishToNone; - bool get publishable => !_publishToNone; @override @@ -161,40 +187,6 @@ class Package implements Comparable { } } - void _parsePubspec() { - var pubspec = File(path.join(dir, 'pubspec.yaml')); - var doc = yaml.loadYamlDocument(pubspec.readAsStringSync()); - dynamic docContents = doc.contents.value; - _packageName = docContents['name']; - _publishToNone = docContents['publish_to'] == 'none'; - - _declaredPubDeps = []; - if (docContents['dependencies'] != null) { - _declaredDependencies = - Set.from(docContents['dependencies'].keys); - - var deps = docContents['dependencies']; - for (var package in deps.keys) { - _declaredPubDeps.add(PubDep.parse(package, deps[package])); - } - } else { - _declaredDependencies = {}; - } - - _declaredDevPubDeps = []; - if (docContents['dev_dependencies'] != null) { - _declaredDevDependencies = - Set.from(docContents['dev_dependencies'].keys); - - var deps = docContents['dev_dependencies']; - for (var package in deps.keys) { - _declaredDevPubDeps.add(PubDep.parse(package, deps[package])); - } - } else { - _declaredDevDependencies = {}; - } - } - bool _validatePubspecDeps(Logger logger, List pkgPackages) { var fail = false; @@ -300,6 +292,13 @@ class Package implements Comparable { if (!publishable) { for (PubDep dep in [..._declaredPubDeps, ..._declaredDevPubDeps]) { if (pkgPackages.contains(dep.name) && dep is! PathPubDep) { + // check to see if there is a dependency_override to a path dependency + final override = _declaredOverridePubDeps + .singleWhereOrNull((element) => element.name == dep.name); + if (override != null && override is PathPubDep) { + continue; + } + out(' Prefer a relative path dep for pkg/ packages:'); out(' $dep'); fail = true; @@ -368,13 +367,13 @@ class Package implements Comparable { var match = importRegex1.firstMatch(line); if (match != null) { - results.add(match.group(2)); + results.add(match.group(2)!); continue; } match = importRegex2.firstMatch(line); if (match != null) { - results.add(match.group(2)); + results.add(match.group(2)!); continue; } } @@ -418,9 +417,9 @@ class SdkDeps { var testedPkgDep = testedPkgRegExp.firstMatch(line); if (pkgDep != null) { - pkgs.add(pkgDep.group(1)); + pkgs.add(pkgDep.group(1)!); } else if (testedPkgDep != null) { - testedPkgs.add(testedPkgDep.group(1)); + testedPkgs.add(testedPkgDep.group(1)!); } } diff --git a/tools/package_deps/pubspec.yaml b/tools/package_deps/pubspec.yaml index ef104c953c4..184795eac6d 100644 --- a/tools/package_deps/pubspec.yaml +++ b/tools/package_deps/pubspec.yaml @@ -5,12 +5,10 @@ description: A tool to validate pubspec files in pkg/. publish_to: none environment: - sdk: '>=2.8.1 <3.0.0' + sdk: '>=2.12.0 <3.0.0' dependencies: cli_util: any + collection: any path: any yaml: any - -dev_dependencies: - pedantic: ^1.9.0