diff --git a/pkg/yqlib/candidate_node.go b/pkg/yqlib/candidate_node.go index 81642ac2..019dd8a7 100644 --- a/pkg/yqlib/candidate_node.go +++ b/pkg/yqlib/candidate_node.go @@ -85,14 +85,15 @@ func (n *CandidateNode) CreateChildInArray(index int, node *yaml.Node) *Candidat func (n *CandidateNode) CreateReplacement(node *yaml.Node) *CandidateNode { return &CandidateNode{ - Node: node, - Path: n.createChildPath(nil), - Parent: n.Parent, - Key: n.Key, - IsMapKey: n.IsMapKey, - Document: n.Document, - Filename: n.Filename, - FileIndex: n.FileIndex, + Node: node, + Path: n.createChildPath(nil), + LeadingContent: n.LeadingContent, + Parent: n.Parent, + Key: n.Key, + IsMapKey: n.IsMapKey, + Document: n.Document, + Filename: n.Filename, + FileIndex: n.FileIndex, } } diff --git a/pkg/yqlib/operator_comments.go b/pkg/yqlib/operator_comments.go index 23aa5c6a..ae037103 100644 --- a/pkg/yqlib/operator_comments.go +++ b/pkg/yqlib/operator_comments.go @@ -105,6 +105,7 @@ func getCommentsOperator(d *dataTreeNavigator, context Context, expressionNode * node := &yaml.Node{Kind: yaml.ScalarNode, Value: comment, Tag: "!!str"} result := candidate.CreateReplacement(node) + result.LeadingContent = "" // don't include the leading yaml content when retrieving a comment results.PushBack(result) } return context.ChildContext(results), nil diff --git a/pkg/yqlib/operator_sort_test.go b/pkg/yqlib/operator_sort_test.go index 075e81ac..8a208313 100644 --- a/pkg/yqlib/operator_sort_test.go +++ b/pkg/yqlib/operator_sort_test.go @@ -79,6 +79,15 @@ var sortByOperatorScenarios = []expressionScenario{ "D0, P[], (!!seq)::[{a: false, b: 1}, {a: false, b: 3}, {a: true, b: 2}]\n", }, }, + { + skipDoc: true, + description: "head comment", + document: "# abc\n- def\n# ghi", + expression: `sort`, + expected: []string{ + "D0, P[], (!!seq)::# abc\n- def\n# ghi\n", + }, + }, } func TestSortByOperatorScenarios(t *testing.T) { diff --git a/pkg/yqlib/stream_evaluator.go b/pkg/yqlib/stream_evaluator.go index 4f4d8f7d..36c2a4a4 100644 --- a/pkg/yqlib/stream_evaluator.go +++ b/pkg/yqlib/stream_evaluator.go @@ -61,6 +61,7 @@ func (s *streamEvaluator) EvaluateFiles(expression string, filenames []string, p for index, filename := range filenames { reader, leadingContent, err := readStream(filename, leadingContentPreProcessing) + log.Debug("leadingContent: %v", leadingContent) if index == 0 { firstFileLeadingContent = leadingContent