package yqlib import ( "container/list" "fmt" ) func reverseOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) { results := list.New() for el := context.MatchingNodes.Front(); el != nil; el = el.Next() { candidate := el.Value.(*CandidateNode) if candidate.Kind != SequenceNode { return context, fmt.Errorf("node at path [%v] is not an array (it's a %v)", candidate.GetNicePath(), candidate.Tag) } reverseList := candidate.CreateReplacementWithComments(SequenceNode, "!!seq", candidate.Style) reverseContent := make([]*CandidateNode, len(candidate.Content)) for i, originalNode := range candidate.Content { reverseContent[len(candidate.Content)-i-1] = originalNode } reverseList.AddChildren(reverseContent) results.PushBack(reverseList) } return context.ChildContext(results), nil }