mirror of
https://github.com/mikefarah/yq.git
synced 2026-09-01 14:14:52 +08:00
Refining add op
This commit is contained in:
@@ -38,9 +38,9 @@ func toNodes(candidate *CandidateNode, lhs *CandidateNode) []*CandidateNode {
|
||||
|
||||
func addOperator(d *dataTreeNavigator, context Context, expressionNode *ExpressionNode) (Context, error) {
|
||||
log.Debugf("Add operator")
|
||||
// if we don't have any matching nodes, but we were piped into (have a parent exp?) then we
|
||||
// shouldn't calcWhenEmpt
|
||||
calcWhenEmpty := expressionNode.Parent == nil
|
||||
// only calculate when empty IF we are the root expression; OR
|
||||
// calcWhenEmpty := expressionNode.Parent == nil || expressionNode.Parent.LHS == expressionNode
|
||||
calcWhenEmpty := context.MatchingNodes.Len() > 0
|
||||
|
||||
return crossFunction(d, context.ReadOnlyClone(), expressionNode, add, calcWhenEmpty)
|
||||
}
|
||||
|
||||
@@ -50,6 +50,62 @@ var addOperatorScenarios = []expressionScenario{
|
||||
expression: `select(.) | "cat" + .`,
|
||||
expected: []string{},
|
||||
},
|
||||
{
|
||||
skipDoc: true,
|
||||
document: `[]`,
|
||||
expression: `.[] | (.a + "|" + .b)`,
|
||||
expected: []string{},
|
||||
},
|
||||
{
|
||||
skipDoc: true,
|
||||
document: `[]`,
|
||||
expression: `.[] | (.a + "|")`,
|
||||
expected: []string{},
|
||||
},
|
||||
{
|
||||
skipDoc: true,
|
||||
document: `[]`,
|
||||
expression: `.[] | ("|" + .a)`,
|
||||
expected: []string{},
|
||||
},
|
||||
{
|
||||
skipDoc: true,
|
||||
document: `resources: [foo, bar, baz]`,
|
||||
expression: `.missing + .resources | .[]`,
|
||||
expected: []string{
|
||||
"D0, P[resources 0], (!!str)::foo\n",
|
||||
"D0, P[resources 1], (!!str)::bar\n",
|
||||
"D0, P[resources 2], (!!str)::baz\n",
|
||||
},
|
||||
},
|
||||
{
|
||||
skipDoc: true,
|
||||
document: `resources: [foo, bar, baz]`,
|
||||
expression: `. | .missing + .resources | .[]`,
|
||||
expected: []string{
|
||||
"D0, P[resources 0], (!!str)::foo\n",
|
||||
"D0, P[resources 1], (!!str)::bar\n",
|
||||
"D0, P[resources 2], (!!str)::baz\n",
|
||||
},
|
||||
},
|
||||
{
|
||||
skipDoc: true,
|
||||
document: `resources: [foo, bar, baz]`,
|
||||
expression: `. | .missing + .resources`,
|
||||
expected: []string{
|
||||
"D0, P[resources], (!!seq)::[foo, bar, baz]\n",
|
||||
},
|
||||
},
|
||||
{
|
||||
skipDoc: true,
|
||||
document: `resources: [foo, bar, baz]`,
|
||||
expression: `. | .missing + .resources | .[]`,
|
||||
expected: []string{
|
||||
"D0, P[resources 0], (!!str)::foo\n",
|
||||
"D0, P[resources 1], (!!str)::bar\n",
|
||||
"D0, P[resources 2], (!!str)::baz\n",
|
||||
},
|
||||
},
|
||||
{
|
||||
skipDoc: true,
|
||||
document: `[{a: foo, b: bar}, {a: 1, b: 2}]`,
|
||||
|
||||
Reference in New Issue
Block a user