From 0d8134aabedbb7209750e5cfad21959d0fdaebfb Mon Sep 17 00:00:00 2001 From: hkfires <10558748+hkfires@users.noreply.github.com> Date: Tue, 14 Oct 2025 13:17:04 +0800 Subject: [PATCH] feat(config): use block style for YAML maps/lists; keep [] for empty --- internal/config/config.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/internal/config/config.go b/internal/config/config.go index 50dcd5a5..68208e5a 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -326,6 +326,7 @@ func SaveConfigPreserveComments(configFile string, cfg *Config) error { // Merge generated into original in-place, preserving comments/order of existing nodes. mergeMappingPreserve(original.Content[0], generated.Content[0]) + normalizeCollectionNodeStyles(original.Content[0]) // Write back. f, err := os.Create(configFile) @@ -566,3 +567,30 @@ func removeMapKey(mapNode *yaml.Node, key string) { } } } + +// normalizeCollectionNodeStyles forces YAML collections to use block notation, keeping +// lists and maps readable. Empty sequences retain flow style ([]) so empty list markers +// remain compact. +func normalizeCollectionNodeStyles(node *yaml.Node) { + if node == nil { + return + } + switch node.Kind { + case yaml.MappingNode: + node.Style = 0 + for i := range node.Content { + normalizeCollectionNodeStyles(node.Content[i]) + } + case yaml.SequenceNode: + if len(node.Content) == 0 { + node.Style = yaml.FlowStyle + } else { + node.Style = 0 + } + for i := range node.Content { + normalizeCollectionNodeStyles(node.Content[i]) + } + default: + // Scalars keep their existing style to preserve quoting + } +}