YAML Sort Keys
Отсортировать ключи YAML по алфавиту.
Как это работает
Автосгенерированный YAML конфиг от одного инструмента и написанный руками YAML от разработчика редко совпадают по порядку полей, даже если данные внутри идентичны, из-за чего git diff между ними превращается в нечитаемую простыню. Yaml sort keys online приводит ключи к единому алфавитному порядку на всех уровнях вложенности.
Сортировка проходит рекурсивно через всю структуру документа, вложенные объекты внутри объектов тоже получают отсортированные по алфавиту ключи, а списки при этом сохраняют исходный порядок элементов, потому что в YAML порядок элементов списка обычно несет смысл, в отличие от порядка ключей объекта.
Полезно применять перед коммитом конфигов Kubernetes или docker compose, где несколько человек правят один и тот же файл в разное время, отсортированный порядок ключей делает будущие diff куда чище и понятнее при код ревью.
Частые вопросы
Сохраняются ли якоря и алиасы YAML при сортировке ключей?
Сортировка идет через промежуточное представление данных, поэтому якоря и ссылки при этом разворачиваются в свои полные значения, в результате вы получите документ без сокращений через анкоры, зато с полностью явной структурой.
Что происходит с комментариями в YAML файле при сортировке ключей?
Комментарии не сохраняются при этой операции, потому что парсинг идет через структуру данных, где комментарии уже отброшены, это стандартное поведение большинства инструментов трансформации YAML.
Меняется ли стиль отступов после сортировки?
Да, результат генерируется библиотекой сериализации YAML заново с ее собственным стилем отступов, обычно это два пробела, что может немного отличаться от исходного форматирования файла, даже если данные остались теми же.
Стоит ли сортировать ключи в файлах, которые читает человек в порядке логики, а не алфавита?
Не всегда, если исходный порядок ключей нес смысл, например сначала базовые настройки, потом продвинутые, алфавитная сортировка может немного ухудшить читаемость для человека ради выигрыша в чистоте git diff, тут стоит соотнести приоритеты конкретного файла.