improve table keys

This commit is contained in:
Dmitriy Pleshevskiy 2024-04-24 18:41:46 +03:00
parent f981bcda07
commit dc43d7ceda
Signed by: pleshevskiy
GPG key ID: 17041163DA10A9A2
2 changed files with 7 additions and 4 deletions

View file

@ -184,8 +184,10 @@ let
wrapObj = expr: "{ ${concatStringsSep ", " expr} }"; wrapObj = expr: "{ ${concatStringsSep ", " expr} }";
in in
wrapObj (excludeNull (map onValue expr)); wrapObj (excludeNull (map onValue expr));
isValidFieldName = name: isString name && match "^[[:alpha:]_][[:alnum:]_]*$" name == [ ];
toLuaNamedField = name: expr: toLuaNamedField = name: expr:
if isNull expr then null if isNull expr then null
else if isValidFieldName name then "${name} = ${expr}"
else "[${toLuaString name}] = ${expr}"; else "[${toLuaString name}] = ${expr}";
toLuaTable = onValue: expr: onValue (attrValues (mapAttrs namedField expr)); toLuaTable = onValue: expr: onValue (attrValues (mapAttrs namedField expr));

View file

@ -85,12 +85,13 @@ with nix2lua; pkgs.lib.runTests {
float = 10.1; float = 10.1;
success = true; success = true;
fail = false; fail = false;
quoted-var = true;
}; };
expected = ''{ ["fail"] = false, ["float"] = 10.100000, ["foo"] = "hello", ["int"] = 10, ["success"] = true }''; expected = ''{ fail = false, float = 10.100000, foo = "hello", int = 10, ["quoted-var"] = true, success = true }'';
}; };
"test returns named table without nullable items" = { "test returns named table without nullable items" = {
expr = toLua { foo = "hello"; bar = null; }; expr = toLua { foo = "hello"; bar = null; };
expected = ''{ ["foo"] = "hello" }''; expected = ''{ foo = "hello" }'';
}; };
"test returns recursive named table" = { "test returns recursive named table" = {
expr = toLua { expr = toLua {
@ -100,7 +101,7 @@ with nix2lua; pkgs.lib.runTests {
}; };
}; };
}; };
expected = ''{ ["first"] = { ["second"] = { ["last"] = "hello" } } }''; expected = ''{ first = { second = { last = "hello" } } }'';
}; };
"test return recursive table" = { "test return recursive table" = {
expr = toLua [ [ [ "foo" ] "bar" ] ]; expr = toLua [ [ [ "foo" ] "bar" ] ];
@ -112,7 +113,7 @@ with nix2lua; pkgs.lib.runTests {
(namedField "foo" "hello") (namedField "foo" "hello")
10 10
]; ];
expected = ''{ "foo", ["foo"] = "hello", 10 }''; expected = ''{ "foo", foo = "hello", 10 }'';
}; };
"test returns raw string" = { "test returns raw string" = {
expr = toLua (raw "hello"); expr = toLua (raw "hello");