From c948b61e9423a2fc419a360971fa6d72b8852440 Mon Sep 17 00:00:00 2001 From: Shreyas Dudul Date: Thu, 8 May 2025 11:01:13 +0530 Subject: [PATCH 1/3] feat: implement std.isNull --- builtins.go | 6 ++++++ linter/internal/types/stdlib.go | 1 + testdata/builtinIsNull.golden | 1 + testdata/builtinIsNull.jsonnet | 1 + testdata/builtinIsNull.linter.golden | 0 testdata/builtinIsNull2.golden | 1 + testdata/builtinIsNull2.jsonnet | 1 + testdata/builtinIsNull2.linter.golden | 0 8 files changed, 11 insertions(+) create mode 100644 testdata/builtinIsNull.golden create mode 100644 testdata/builtinIsNull.jsonnet create mode 100644 testdata/builtinIsNull.linter.golden create mode 100644 testdata/builtinIsNull2.golden create mode 100644 testdata/builtinIsNull2.jsonnet create mode 100644 testdata/builtinIsNull2.linter.golden diff --git a/builtins.go b/builtins.go index 6ecbd989e..9452ef4c9 100644 --- a/builtins.go +++ b/builtins.go @@ -2535,6 +2535,11 @@ func builtInObjectRemoveKey(i *interpreter, objv value, keyv value) (value, erro ), nil } +func builtinIsNull(i *interpreter, strv value) (value, error) { + _, isNull := strv.(*valueNull) + return makeValueBoolean(isNull), nil +} + // Utils for builtins - TODO(sbarzowski) move to a separate file in another commit type builtin interface { @@ -2892,6 +2897,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 b1afb2d02..6f0f4a91d 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 000000000..27ba77dda --- /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 000000000..5a4aae70d --- /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 000000000..e69de29bb diff --git a/testdata/builtinIsNull2.golden b/testdata/builtinIsNull2.golden new file mode 100644 index 000000000..c508d5366 --- /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 000000000..f188efd5c --- /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 000000000..e69de29bb From 381c13030bf8b489ab4b845439dd181af1380993 Mon Sep 17 00:00:00 2001 From: Shreyas Dudul Date: Fri, 9 May 2025 11:27:08 +0000 Subject: [PATCH 2/3] feat: update parameter name --- builtins.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/builtins.go b/builtins.go index 9452ef4c9..64975af42 100644 --- a/builtins.go +++ b/builtins.go @@ -2535,8 +2535,8 @@ func builtInObjectRemoveKey(i *interpreter, objv value, keyv value) (value, erro ), nil } -func builtinIsNull(i *interpreter, strv value) (value, error) { - _, isNull := strv.(*valueNull) +func builtinIsNull(i *interpreter, v value) (value, error) { + _, isNull := v.(*valueNull) return makeValueBoolean(isNull), nil } From 2752a4418e03b8aa9be635f7de9611467919fe08 Mon Sep 17 00:00:00 2001 From: John Bartholomew Date: Mon, 26 Jan 2026 19:35:00 +0000 Subject: [PATCH 3/3] add trailing newline in testdata/builtinIsNull{,2}.jsonnet --- testdata/builtinIsNull.jsonnet | 2 +- testdata/builtinIsNull2.jsonnet | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/testdata/builtinIsNull.jsonnet b/testdata/builtinIsNull.jsonnet index 5a4aae70d..2e9336565 100644 --- a/testdata/builtinIsNull.jsonnet +++ b/testdata/builtinIsNull.jsonnet @@ -1 +1 @@ -std.isNull(null) \ No newline at end of file +std.isNull(null) diff --git a/testdata/builtinIsNull2.jsonnet b/testdata/builtinIsNull2.jsonnet index f188efd5c..3f88c70fd 100644 --- a/testdata/builtinIsNull2.jsonnet +++ b/testdata/builtinIsNull2.jsonnet @@ -1 +1 @@ -std.isNull("foo") \ No newline at end of file +std.isNull("foo")