analyze method
Analyze dependencies in the current project
Implementation
Future<AnalysisResult> analyze() async {
final pubspecFile = File(FileConfig.pubspecFile);
if (!pubspecFile.existsSync()) {
throw Exception('${FileConfig.pubspecFile} not found');
}
// Parse pubspec.yaml
final pubspecContent = await pubspecFile.readAsString();
final pubspec = loadYaml(pubspecContent) as Map;
// Extract dependencies
final dependencies = _extractDependencies(pubspec);
final devDependencies = _extractDevDependencies(pubspec);
// Scan Dart files for imports
final usageMap = await _scanDartFiles();
// Analyze each dependency
final results = <DependencyInfo>[];
// Analyze regular dependencies
for (final dep in dependencies.keys) {
if (dep == AnalysisConfig.flutterSdk) continue; // Skip Flutter SDK
final usage = usageMap[dep];
final 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 dep in devDependencies.keys) {
if (dep == AnalysisConfig.flutterSdk) continue; // Skip Flutter SDK
final usage = usageMap[dep];
final 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 duplicates = _findDuplicates(dependencies, devDependencies, usageMap);
return AnalysisResult(
dependencies: results,
duplicates: duplicates,
totalScanned: results.length,
);
}