diff --git a/pkg/yqlib/operator_filter.go b/pkg/yqlib/operator_filter.go index a473c40f..c4d2753e 100644 --- a/pkg/yqlib/operator_filter.go +++ b/pkg/yqlib/operator_filter.go @@ -23,15 +23,15 @@ func filterOperator(d *dataTreeNavigator, context Context, expressionNode *Expre for resultEl := filtered.MatchingNodes.Front(); resultEl != nil; resultEl = resultEl.Next() { result := resultEl.Value.(*CandidateNode) log.Warningf("filtered %#v", result) - selfExpression := &ExpressionNode{Operation: &Operation{OperationType: selfReferenceOpType}} - childCtx := context.SingleReadonlyChildContext(result) - collected, err := collectTogether(d, childCtx, selfExpression) - if err != nil { - return Context{}, err - } - collected.Node.Style = unwrapDoc(result.Node).Style - results.PushBack(collected) } + + selfExpression := &ExpressionNode{Operation: &Operation{OperationType: selfReferenceOpType}} + collected, err := collectTogether(d, filtered, selfExpression) + if err != nil { + return Context{}, err + } + collected.Node.Style = unwrapDoc(candidate.Node).Style + results.PushBack(collected) } return context.ChildContext(results), nil } diff --git a/pkg/yqlib/operator_filter_test.go b/pkg/yqlib/operator_filter_test.go index d5cd3af2..05a68161 100644 --- a/pkg/yqlib/operator_filter_test.go +++ b/pkg/yqlib/operator_filter_test.go @@ -10,8 +10,7 @@ var filterOperatorScenarios = []expressionScenario{ document: `[1,2,3]`, expression: `filter(. < 3)`, expected: []string{ - "D0, P[], (!!seq)::- 1\n", - "D0, P[], (!!seq)::- 2\n", + "D0, P[], (!!seq)::[1, 2]\n", }, }, { @@ -19,8 +18,7 @@ var filterOperatorScenarios = []expressionScenario{ document: `[1,2,3]`, expression: `filter(. > 1)`, expected: []string{ - "D0, P[], (!!seq)::- 2\n", - "D0, P[], (!!seq)::- 3\n", + "D0, P[], (!!seq)::[2, 3]\n", }, }, { @@ -29,6 +27,7 @@ var filterOperatorScenarios = []expressionScenario{ document: `[1,2,3]`, expression: `filter(. > 4)`, expected: []string{ + "D0, P[], (!!seq)::[]\n", }, }, { @@ -37,6 +36,7 @@ var filterOperatorScenarios = []expressionScenario{ document: `[]`, expression: `filter(. > 1)`, expected: []string{ + "D0, P[], (!!seq)::[]\n", }, }, }