sortPubspec function
Sorts pubspec.yaml content according to standard key order. Preserves comments (inline and standalone). Sorts package names alphabetically within dependency sections ONLY. Other nested maps (flutter, executables, etc.) are preserved as-is.
Implementation
String sortPubspec(String content) {
if (content.trim().isEmpty) {
return content;
}
// Parse original YAML to get structure and values
final yaml = loadYaml(content);
if (yaml is! YamlMap || yaml.isEmpty) {
return content;
}
final originalValues = <String, dynamic>{};
for (final MapEntry(:key, :value) in yaml.entries) {
originalValues[key as String] = value;
}
// Extract key entries from raw string
final entries = _extractKeyEntries(content);
if (entries.isEmpty) {
return content;
}
// Sort entries according to key order
final sortedEntries = _sortEntries(entries);
// Collect packages with complex values (to skip in placeholder filling)
final complexValuePackages = <(String, String)>{};
for (final entry in sortedEntries) {
if (_dependencySections.contains(entry.keyName)) {
for (final nested in entry.nestedEntries) {
if (nested.hasComplexValue) {
complexValuePackages.add((entry.keyName, nested.keyName));
}
}
}
}
// Build placeholder skeleton
final skeleton = _buildPlaceholderSkeleton(sortedEntries);
// Fill placeholders with yaml_edit
return _fillPlaceholders(skeleton, originalValues, complexValuePackages);
}