analyze method
Analyze dependencies in the current project
Implementation
Future<AnalysisResult> analyze() async {
final File pubspecFile = File(FileConfig.pubspecFile);
if (!pubspecFile.existsSync()) {
throw Exception('${FileConfig.pubspecFile} not found');
}
// Parse pubspec.yaml
final String pubspecContent = await pubspecFile.readAsString();
final Map pubspec = Map<dynamic, dynamic>.from(
loadYaml(pubspecContent) ?? <dynamic, dynamic>{});
// Extract dependencies
final Map<String, dynamic> dependencies = _extractDependencies(pubspec);
final Map<String, dynamic> devDependencies =
_extractDevDependencies(pubspec);
// Scan Dart files for imports
final Map<String, PackageUsage> usageMap = await _scanDartFiles();
// Analyze each dependency
final List<DependencyInfo> results = <DependencyInfo>[];
// Analyze regular dependencies
for (final String dep in dependencies.keys) {
if (dep == AnalysisConfig.flutterSdk) continue; // Skip Flutter SDK
final PackageUsage? usage = usageMap[dep];
final DependencyInfo info = DependencyInfo(
name: dep,
version: dependencies[dep].toString(),
section: DependencySection.dependencies,
status: _determineDependencyStatus(dep, usage),
usedInLib: usage?.usedInLib ?? false,
usedInTest: usage?.usedInTest ?? false,
usedInBin: usage?.usedInBin ?? false,
usedInTool: usage?.usedInTool ?? false,
);
results.add(info);
}
// Analyze dev dependencies
for (final String dep in devDependencies.keys) {
if (dep == AnalysisConfig.flutterSdk) continue; // Skip Flutter SDK
final PackageUsage? usage = usageMap[dep];
final DependencyInfo info = DependencyInfo(
name: dep,
version: devDependencies[dep].toString(),
section: DependencySection.devDependencies,
status: _determineDevDependencyStatus(dep, usage),
usedInLib: usage?.usedInLib ?? false,
usedInTest: usage?.usedInTest ?? false,
usedInBin: usage?.usedInBin ?? false,
usedInTool: usage?.usedInTool ?? false,
);
results.add(info);
}
// Check for duplicates
final List<DuplicateDependency> duplicates =
_findDuplicates(dependencies, devDependencies, usageMap);
return AnalysisResult(
dependencies: results,
duplicates: duplicates,
totalScanned: results.length,
);
}