From cf281717c3cdb604ab72fbfa732002fc5043c31b Mon Sep 17 00:00:00 2001 From: He-Pin Date: Mon, 26 Jan 2026 22:30:22 +0800 Subject: [PATCH] feat: Add std.isNull, port https://github.com/google/jsonnet/pull/1237 --- sjsonnet/src/sjsonnet/stdlib/TypeModule.scala | 6 ++++++ sjsonnet/test/resources/test_suite/stdlib.jsonnet | 2 ++ 2 files changed, 8 insertions(+) diff --git a/sjsonnet/src/sjsonnet/stdlib/TypeModule.scala b/sjsonnet/src/sjsonnet/stdlib/TypeModule.scala index 204af15f..e5019047 100644 --- a/sjsonnet/src/sjsonnet/stdlib/TypeModule.scala +++ b/sjsonnet/src/sjsonnet/stdlib/TypeModule.scala @@ -36,6 +36,11 @@ object TypeModule extends AbstractFunctionModule { Val.bool(pos, v.force.isInstanceOf[Val.Func]) } + private object IsNull extends Val.Builtin1("isNull", "v") { + def evalRhs(v: Lazy, ev: EvalScope, pos: Position): Val = + Val.bool(pos, v.force.isInstanceOf[Val.Null]) + } + private object Type extends Val.Builtin1("type", "x") { def evalRhs(x: Lazy, ev: EvalScope, pos: Position): Val = Val.Str(pos, x.force.prettyName) } @@ -57,6 +62,7 @@ object TypeModule extends AbstractFunctionModule { builtin(IsObject), builtin(IsArray), builtin(IsFunction), + builtin(IsNull), builtin(Type), builtin("equals", "a", "b") { (_, ev, a: Val, b: Val) => ev.equal(a, b) diff --git a/sjsonnet/test/resources/test_suite/stdlib.jsonnet b/sjsonnet/test/resources/test_suite/stdlib.jsonnet index 9d11766a..6d3a40dc 100644 --- a/sjsonnet/test/resources/test_suite/stdlib.jsonnet +++ b/sjsonnet/test/resources/test_suite/stdlib.jsonnet @@ -121,6 +121,8 @@ std.assertEqual(std.isNumber(0), true) && std.assertEqual(std.isObject({}), true) && std.assertEqual(std.isArray([]), true) && std.assertEqual(std.isFunction(function() 0), true) && +std.assertEqual(std.isNull(null), true) && +std.assertEqual(std.isNull('foo'), false) && std.assertEqual(std.isString(null), false) && std.assertEqual(std.isBoolean(null), false) &&