yaml-tidy

Range un fichier YAML : trie les clés (récursif) en préservant les commentaires.

= yaml-tidy

Range un fichier YAML : trie les clés des mappings par ordre alphabétique, récursivement à tous les niveaux (enfants, petits-enfants, et même les clés à l'intérieur d'un item de séquence qui est un mapping), en préservant les commentaires — ce que YAML.parse + to_yaml de la stdlib détruisent.

Pensé pour des fichiers de config tenus à la main, où l'ordre alphabétique des clés évite de parcourir tout le fichier pour trouver son bonheur, et où les commentaires portent l'essentiel de l'info.

== Ce qui est garanti

  • Clés de mapping triées alpha, récursif, y compris dans les « dash-maps » (- name: x + groups: … → groups avant name, la 1ʳᵉ clé restant sur la ligne du tiret).
  • Commentaires au-dessus d'une clé : déplacés AVEC elle au tri.
  • Commentaires inline : préservés.
  • Éléments des séquences en bloc (- …) triés alpha aussi : un scalaire par son texte (- zsh), un mapping par son name: s'il en a un, sinon par sa première clé (- netif-ipv6: { … }) ; à égalité, l'ordre d'origine. Le commentaire au-dessus d'un élément le suit ; un commentaire de fin de liste reste à la fin.
  • Séquences en ligne ([a, b]) : laissées telles quelles — l'ordre y porte souvent un sens (paire [active, suivante]).
  • Aucune donnée perdue ou altérée : YAML.parse du résultat == YAML.parse de l'entrée, à l'ordre des listes en bloc près. C'est VÉRIFIÉ à chaque appel : sinon YamlTidy::Error, jamais un fichier altéré.
  • En-tête optionnel épinglé en 1ʳᵉ ligne (idempotent).

== Usage

[source,crystal]

require "yaml-tidy"

YamlTidy.tidy(File.read("conf.yml")) # tri seul YamlTidy.tidy(content, header: "monserveur.example.net") # + # monserveur.example.net en tête

== Limites

Approche ligne-à-ligne (pour préserver les commentaires). Suppose une indentation par espaces. Les scalaires multi-lignes — blocs | et > (avec leurs indicateurs), chaînes entre apostrophes ou guillemets sur plusieurs lignes — sont recopiés tels quels : leurs lignes sont du texte, jamais des clés à trier, même si elles contiennent « : ». Adapté aux fichiers de config réguliers, pas à du YAML arbitraire.

== Licence

MIT — ALOLI sas.

Repository

yaml-tidy

Owner
Statistic
  • 0
  • 0
  • 0
  • 1
  • 1
  • 15 days ago
  • June 18, 2026
License

MIT License

Links
Synced at

Mon, 26 Oct 2026 16:15:06 GMT

Languages