mirror of
https://github.com/google/go-jsonnet.git
synced 2025-09-28 08:51:01 +02:00
feat: implement std.contains (#691)
This commit is contained in:
parent
7903819abf
commit
76e4fc2221
22
builtins.go
22
builtins.go
@ -1935,6 +1935,27 @@ func builtinSum(i *interpreter, arrv value) (value, error) {
|
||||
return makeValueNumber(sum), nil
|
||||
}
|
||||
|
||||
func builtinContains(i *interpreter, arrv value, ev value) (value, error) {
|
||||
arr, err := i.getArray(arrv)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, 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 makeValueBoolean(true), nil
|
||||
}
|
||||
}
|
||||
return makeValueBoolean(false), nil
|
||||
}
|
||||
|
||||
// Utils for builtins - TODO(sbarzowski) move to a separate file in another commit
|
||||
|
||||
type builtin interface {
|
||||
@ -2245,6 +2266,7 @@ var funcBuiltins = buildBuiltinMap([]builtin{
|
||||
&generalBuiltin{name: "sort", function: builtinSort, params: []generalBuiltinParameter{{name: "arr"}, {name: "keyF", defaultValue: functionID}}},
|
||||
&unaryBuiltin{name: "native", function: builtinNative, params: ast.Identifiers{"x"}},
|
||||
&unaryBuiltin{name: "sum", function: builtinSum, params: ast.Identifiers{"arr"}},
|
||||
&binaryBuiltin{name: "contains", function: builtinContains, params: ast.Identifiers{"arr", "elem"}},
|
||||
|
||||
// internal
|
||||
&unaryBuiltin{name: "$objectFlatMerge", function: builtinUglyObjectFlatMerge, params: ast.Identifiers{"x"}},
|
||||
|
@ -140,6 +140,7 @@ func prepareStdlib(g *typeGraph) {
|
||||
"sort": g.newFuncType(anyArrayType, []ast.Parameter{required("arr"), optional("keyF")}),
|
||||
"uniq": g.newFuncType(anyArrayType, []ast.Parameter{required("arr"), optional("keyF")}),
|
||||
"sum": g.newSimpleFuncType(numberType, "arr"),
|
||||
"contains": g.newSimpleFuncType(boolType, "arr", "elem"),
|
||||
|
||||
// Sets
|
||||
|
||||
@ -176,8 +177,8 @@ func prepareStdlib(g *typeGraph) {
|
||||
|
||||
// Boolean
|
||||
|
||||
"xor": g.newSimpleFuncType(boolType, "x", "y"),
|
||||
"xnor": g.newSimpleFuncType(boolType, "x", "y"),
|
||||
"xor": g.newSimpleFuncType(boolType, "x", "y"),
|
||||
"xnor": g.newSimpleFuncType(boolType, "x", "y"),
|
||||
}
|
||||
|
||||
fieldContains := map[string][]placeholderID{}
|
||||
|
1
testdata/builtinContains.golden
vendored
Normal file
1
testdata/builtinContains.golden
vendored
Normal file
@ -0,0 +1 @@
|
||||
true
|
1
testdata/builtinContains.jsonnet
vendored
Normal file
1
testdata/builtinContains.jsonnet
vendored
Normal file
@ -0,0 +1 @@
|
||||
std.contains([1, 2, 3], 2)
|
0
testdata/builtinContains.linter.golden
vendored
Normal file
0
testdata/builtinContains.linter.golden
vendored
Normal file
1
testdata/builtinContains2.golden
vendored
Normal file
1
testdata/builtinContains2.golden
vendored
Normal file
@ -0,0 +1 @@
|
||||
false
|
1
testdata/builtinContains2.jsonnet
vendored
Normal file
1
testdata/builtinContains2.jsonnet
vendored
Normal file
@ -0,0 +1 @@
|
||||
std.contains([1, 2, 3], "foo")
|
0
testdata/builtinContains2.linter.golden
vendored
Normal file
0
testdata/builtinContains2.linter.golden
vendored
Normal file
Loading…
x
Reference in New Issue
Block a user