run method
Runs this command.
The return value is wrapped in a Future
if necessary and returned by
CommandRunner.runCommand
.
Implementation
@override
FutureOr<void> run() {
print("digraph packages {");
print(' size="10"; ratio=fill;');
for (final package in packages) {
print(
' ${package.name} [shape="box"; color="${getColor(package.name)}"];',
);
}
for (final package in packages) {
package.pubspec.allDependencies.keys
.where((dep) => packages.any((package) => package.name == dep))
.forEach((dep) {
final attrs = package.pubspec.dependencies.containsKey(dep)
? 'style="filled"; color="${getColor(dep)}"'
: 'style="dashed"; color="${getColor(dep)}"';
print(" ${package.name} -> $dep [$attrs];");
});
}
final groupedPackages =
packages.fold<Map<String, List<Package>>>({}, (grouped, package) {
if (!grouped.containsKey(package.namespace)) {
grouped[package.namespace] = [];
}
grouped[package.namespace]!.add(package);
return grouped;
});
groupedPackages.forEach((namespace, packagesInGroup) {
print(' subgraph "cluster $namespace" {');
print(' label="$namespace";');
print(' color="${getColor(namespace)}";');
for (final package in packagesInGroup) {
print(" ${package.name};");
}
print(" }");
});
print("}");
}