fix static method

FixReport fix(
  1. DialectProject project
)

Walk every ARB in project and re-emit it through ArbWriter. The writer's canonical form deterministically:

  • sorts keys byte-wise lexicographic,
  • hoists @@locale to the top,
  • places each @key block 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 @key metadata (namespace/description/context/placeholders — those live in the source), preserves state metadata (locked, source_hash), and stamps source_hash onto 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);
}