getProjectLanguages method
Calculates per-language statistics for the project.
Implementation
Future<Map<String, LanguageStats>> getProjectLanguages(String path) async {
final fileCounts = <String, int>{};
final lineCounts = <String, int>{};
final files = await getProjectFiles(path);
for (final file in files) {
final ext = _extension(file);
final language = _extensionToLanguage[ext];
if (language == null) continue;
fileCounts[language] = (fileCounts[language] ?? 0) + 1;
try {
final fullPath = file.startsWith('/') ? file : '$path/$file';
final content = await File(fullPath).readAsString();
final lines = LineSplitter.split(content).length;
lineCounts[language] = (lineCounts[language] ?? 0) + lines;
} catch (_) {
// Binary or unreadable file.
}
}
final totalLines = lineCounts.values.fold<int>(0, (a, b) => a + b);
final result = <String, LanguageStats>{};
for (final language in fileCounts.keys) {
final lines = lineCounts[language] ?? 0;
result[language] = LanguageStats(
fileCount: fileCounts[language]!,
lineCount: lines,
percentage: totalLines > 0 ? (lines / totalLines) * 100 : 0,
);
}
return result;
}