diff --git a/pkg/yqlib/operator_delete.go b/pkg/yqlib/operator_delete.go index b0a2f14e..9ac084c7 100644 --- a/pkg/yqlib/operator_delete.go +++ b/pkg/yqlib/operator_delete.go @@ -71,6 +71,29 @@ func deleteFromMap(node *CandidateNode, childPath interface{}) { node.Content = newContents } +func normaliseEmptySequenceMapKeyComment(node *CandidateNode) { + if node.Kind != SequenceNode || len(node.Content) != 0 || node.LineComment != "" { + return + } + + key := node.Key + if node.Parent != nil && node.Parent.Kind == MappingNode { + for index := 0; index < len(node.Parent.Content)-1; index += 2 { + if node.Parent.Content[index+1] == node { + key = node.Parent.Content[index] + break + } + } + } + if key == nil || key.LineComment == "" { + return + } + + node.LineComment = key.LineComment + key.LineComment = "" + node.Style = FlowStyle +} + func deleteFromArray(node *CandidateNode, childPath interface{}) { log.Debug("deleteFromArray") contents := node.Content @@ -87,4 +110,5 @@ func deleteFromArray(node *CandidateNode, childPath interface{}) { } } node.Content = newContents + normaliseEmptySequenceMapKeyComment(node) } diff --git a/pkg/yqlib/operator_delete_test.go b/pkg/yqlib/operator_delete_test.go index bc3375a0..57eb3ff9 100644 --- a/pkg/yqlib/operator_delete_test.go +++ b/pkg/yqlib/operator_delete_test.go @@ -119,6 +119,19 @@ var deleteOperatorScenarios = []expressionScenario{ "D0, P[], (!!map)::a: []\n", }, }, + { + skipDoc: true, + description: "Delete all entries from list with inline key comment", + document: `testList: # A comment +- name: test1 + value: 123 +- name: test2 + value: 456`, + expression: `del(.testList[])`, + expected: []string{ + "D0, P[], (!!map)::testList: [] # A comment\n", + }, + }, { skipDoc: true, description: "Delete entry appended to an array",