scan method
Implementation
Future<ProjectDiagnosis> scan(String pubspecPath, ScanOptions opts) async {
final info = await PubspecParser().parse(pubspecPath);
final sdk = _detectSdk();
final packages = opts.includeDev ? info.all : info.dependencies;
if (packages.isEmpty) {
return ProjectDiagnosis(
results: [],
scannedAt: DateTime.now(),
pubspecPath: pubspecPath,
dartSdkVersion: sdk?.toString(),
);
}
Map<String, PackageMetadata> meta;
if (opts.offline) {
meta = await _fromCacheOnly(packages);
} else {
_pub ??= PubApiClient(cache: _cache, concurrency: opts.concurrency);
_gh ??= GitHubClient(cache: _cache);
meta = await _pub!.fetchAll(packages, fresh: opts.fresh);
await _augmentGitHub(meta);
await _probeRepos(meta);
}
final repoReachability = {
for (final m in meta.values)
if (m.repositoryUrl != null && m.repoHealth != null)
m.repositoryUrl.toString(): true,
};
final scorer =
RiskScorer(dartSdkVersion: sdk, repoReachability: repoReachability);
final results = meta.values.map(scorer.diagnose).toList()
..sort((a, b) => b.riskScore.compareTo(a.riskScore));
return ProjectDiagnosis(
results: results,
scannedAt: DateTime.now(),
pubspecPath: pubspecPath,
dartSdkVersion: sdk?.toString(),
);
}