lib/lua: add isKeyword and isIdentifier

Allow testing whether a string is a valid lua identifier or a reserved
keyword.
This commit is contained in:
Matt Sturgeon 2024-06-26 11:38:54 +01:00
parent b64ee08d6b
commit 01cf43dbaa
No known key found for this signature in database
GPG key ID: 4F91844CED1A8299
3 changed files with 118 additions and 3 deletions

View file

@ -1,6 +1,37 @@
{ lib }:
with lib;
rec {
# Whether the string is a reserved keyword in lua
isKeyword =
s:
elem s [
"and"
"break"
"do"
"else"
"elseif"
"end"
"false"
"for"
"function"
"if"
"in"
"local"
"nil"
"not"
"or"
"repeat"
"return"
"then"
"true"
"until"
"while"
];
# Valid lua identifiers are not reserved keywords, do not start with a digit,
# and contain only letters, digits, and underscores.
isIdentifier = s: !(isKeyword s) && (match "[A-Za-z_][0-9A-Za-z_]*" s) == [ ];
# Black functional magic that converts a bunch of different Nix types to their
# lua equivalents!
toLuaObject =