fix static method
Walk every ARB in project and re-emit it through ArbWriter. The
writer's canonical form deterministically:
- sorts keys byte-wise lexicographic,
- hoists
@@localeto the top, - places each
@keyblock immediately after its key, - emits
@@file-level metadata (preserved verbatim) after@@locale, - drops
orphanMetadata(by construction — writer never emits it), - in translation ARBs, strips descriptive
@keymetadata (namespace/description/context/placeholders— those live in the source), preserves state metadata (locked,source_hash), and stampssource_hashonto unlocked entries that lack one (see normalizeTranslation).
Files that are already canonical are not touched. Returns a FixReport for terminal display.
Implementation
static FixReport fix(DialectProject project) {
final changed = <String>[];
final sourceHashes = computeSourceHashes(project.source);
_maybeRewrite(project.source, changed);
for (final t in project.translations.values) {
_maybeRewrite(normalizeTranslation(t, sourceHashes), changed);
}
return FixReport(changedFiles: changed);
}