diff --git a/builtins.go b/builtins.go index 421d5d34..7f34206e 100644 --- a/builtins.go +++ b/builtins.go @@ -2533,6 +2533,11 @@ func builtInObjectRemoveKey(i *interpreter, objv value, keyv value) (value, erro ), nil } +func builtinIsNull(i *interpreter, v value) (value, error) { + _, isNull := v.(*valueNull) + return makeValueBoolean(isNull), nil +} + // Utils for builtins - TODO(sbarzowski) move to a separate file in another commit type builtin interface { @@ -2890,6 +2895,7 @@ var funcBuiltins = buildBuiltinMap([]builtin{ &unaryBuiltin{name: "sum", function: builtinSum, params: ast.Identifiers{"arr"}}, &unaryBuiltin{name: "avg", function: builtinAvg, params: ast.Identifiers{"arr"}}, &binaryBuiltin{name: "contains", function: builtinContains, params: ast.Identifiers{"arr", "elem"}}, + &unaryBuiltin{name: "isNull", function: builtinIsNull, params: ast.Identifiers{"x"}}, // internal &unaryBuiltin{name: "$objectFlatMerge", function: builtinUglyObjectFlatMerge, params: ast.Identifiers{"x"}}, diff --git a/linter/internal/types/stdlib.go b/linter/internal/types/stdlib.go index b1afb2d0..6f0f4a91 100644 --- a/linter/internal/types/stdlib.go +++ b/linter/internal/types/stdlib.go @@ -51,6 +51,7 @@ func prepareStdlib(g *typeGraph) { "isOdd": g.newSimpleFuncType(boolType, "x"), "isInteger": g.newSimpleFuncType(boolType, "x"), "isDecimal": g.newSimpleFuncType(boolType, "x"), + "isNull": g.newSimpleFuncType(boolType, "x"), // Mathematical utilities "abs": g.newSimpleFuncType(numberType, "n"), diff --git a/testdata/builtinIsNull.golden b/testdata/builtinIsNull.golden new file mode 100644 index 00000000..27ba77dd --- /dev/null +++ b/testdata/builtinIsNull.golden @@ -0,0 +1 @@ +true diff --git a/testdata/builtinIsNull.jsonnet b/testdata/builtinIsNull.jsonnet new file mode 100644 index 00000000..5a4aae70 --- /dev/null +++ b/testdata/builtinIsNull.jsonnet @@ -0,0 +1 @@ +std.isNull(null) \ No newline at end of file diff --git a/testdata/builtinIsNull.linter.golden b/testdata/builtinIsNull.linter.golden new file mode 100644 index 00000000..e69de29b diff --git a/testdata/builtinIsNull2.golden b/testdata/builtinIsNull2.golden new file mode 100644 index 00000000..c508d536 --- /dev/null +++ b/testdata/builtinIsNull2.golden @@ -0,0 +1 @@ +false diff --git a/testdata/builtinIsNull2.jsonnet b/testdata/builtinIsNull2.jsonnet new file mode 100644 index 00000000..f188efd5 --- /dev/null +++ b/testdata/builtinIsNull2.jsonnet @@ -0,0 +1 @@ +std.isNull("foo") \ No newline at end of file diff --git a/testdata/builtinIsNull2.linter.golden b/testdata/builtinIsNull2.linter.golden new file mode 100644 index 00000000..e69de29b