mirror of
https://github.com/google/go-jsonnet.git
synced 2025-09-29 09:21:03 +02:00
feat: implement std.remove and std.removeAt (#689)
* feat: implement std.remove and std.removeAt * Update builtins.go --------- Co-authored-by: Dave Cunningham <sparkprime@gmail.com>
This commit is contained in:
parent
3c7c0cbac8
commit
25d3372c98
37
builtins.go
37
builtins.go
@ -1990,6 +1990,41 @@ func builtinContains(i *interpreter, arrv value, ev value) (value, error) {
|
|||||||
return makeValueBoolean(false), nil
|
return makeValueBoolean(false), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func builtinRemove(i *interpreter, arrv value, ev value) (value, error) {
|
||||||
|
arr, err := i.getArray(arrv)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for idx, elem := range arr.elements {
|
||||||
|
val, err := elem.getValue(i)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
eq, err := rawEquals(i, val, ev)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if eq {
|
||||||
|
return builtinRemoveAt(i, arrv, intToValue(idx))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return arr, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func builtinRemoveAt(i *interpreter, arrv value, idxv value) (value, error) {
|
||||||
|
arr, err := i.getArray(arrv)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
idx, err := i.getInt(idxv)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
newArr := append(arr.elements[:idx], arr.elements[idx+1:]...)
|
||||||
|
return makeValueArray(newArr), nil
|
||||||
|
}
|
||||||
|
|
||||||
func builtInObjectRemoveKey(i *interpreter, objv value, keyv value) (value, error) {
|
func builtInObjectRemoveKey(i *interpreter, objv value, keyv value) (value, error) {
|
||||||
obj, err := i.getObject(objv)
|
obj, err := i.getObject(objv)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -2286,6 +2321,8 @@ var funcBuiltins = buildBuiltinMap([]builtin{
|
|||||||
&ternaryBuiltin{name: "foldl", function: builtinFoldl, params: ast.Identifiers{"func", "arr", "init"}},
|
&ternaryBuiltin{name: "foldl", function: builtinFoldl, params: ast.Identifiers{"func", "arr", "init"}},
|
||||||
&ternaryBuiltin{name: "foldr", function: builtinFoldr, params: ast.Identifiers{"func", "arr", "init"}},
|
&ternaryBuiltin{name: "foldr", function: builtinFoldr, params: ast.Identifiers{"func", "arr", "init"}},
|
||||||
&binaryBuiltin{name: "member", function: builtinMember, params: ast.Identifiers{"arr", "x"}},
|
&binaryBuiltin{name: "member", function: builtinMember, params: ast.Identifiers{"arr", "x"}},
|
||||||
|
&binaryBuiltin{name: "remove", function: builtinRemove, params: ast.Identifiers{"arr", "elem"}},
|
||||||
|
&binaryBuiltin{name: "removeAt", function: builtinRemoveAt, params: ast.Identifiers{"arr", "i"}},
|
||||||
&binaryBuiltin{name: "range", function: builtinRange, params: ast.Identifiers{"from", "to"}},
|
&binaryBuiltin{name: "range", function: builtinRange, params: ast.Identifiers{"from", "to"}},
|
||||||
&binaryBuiltin{name: "primitiveEquals", function: primitiveEquals, params: ast.Identifiers{"x", "y"}},
|
&binaryBuiltin{name: "primitiveEquals", function: primitiveEquals, params: ast.Identifiers{"x", "y"}},
|
||||||
&binaryBuiltin{name: "equals", function: builtinEquals, params: ast.Identifiers{"x", "y"}},
|
&binaryBuiltin{name: "equals", function: builtinEquals, params: ast.Identifiers{"x", "y"}},
|
||||||
|
@ -142,6 +142,8 @@ func prepareStdlib(g *typeGraph) {
|
|||||||
"sum": g.newSimpleFuncType(numberType, "arr"),
|
"sum": g.newSimpleFuncType(numberType, "arr"),
|
||||||
"minArray": g.newSimpleFuncType(anyType, "arr"),
|
"minArray": g.newSimpleFuncType(anyType, "arr"),
|
||||||
"contains": g.newSimpleFuncType(boolType, "arr", "elem"),
|
"contains": g.newSimpleFuncType(boolType, "arr", "elem"),
|
||||||
|
"remove": g.newSimpleFuncType(anyArrayType, "arr", "elem"),
|
||||||
|
"removeAt": g.newSimpleFuncType(anyArrayType, "arr", "i"),
|
||||||
|
|
||||||
// Sets
|
// Sets
|
||||||
|
|
||||||
|
4
testdata/builtinRemove.golden
vendored
Normal file
4
testdata/builtinRemove.golden
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[
|
||||||
|
1,
|
||||||
|
3
|
||||||
|
]
|
1
testdata/builtinRemove.jsonnet
vendored
Normal file
1
testdata/builtinRemove.jsonnet
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
std.remove([1,2,3],2)
|
0
testdata/builtinRemove.linter.golden
vendored
Normal file
0
testdata/builtinRemove.linter.golden
vendored
Normal file
4
testdata/builtinRemoveAt.golden
vendored
Normal file
4
testdata/builtinRemoveAt.golden
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[
|
||||||
|
1,
|
||||||
|
3
|
||||||
|
]
|
1
testdata/builtinRemoveAt.jsonnet
vendored
Normal file
1
testdata/builtinRemoveAt.jsonnet
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
std.removeAt([1,2,3],1)
|
0
testdata/builtinRemoveAt.linter.golden
vendored
Normal file
0
testdata/builtinRemoveAt.linter.golden
vendored
Normal file
Loading…
x
Reference in New Issue
Block a user