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

@ -10,10 +10,10 @@ let
nixvimUtils = import ./utils.nix { inherit lib nixvimTypes _nixvimTests; };
nixvimOptions = import ./options.nix { inherit lib nixvimTypes nixvimUtils; };
nixvimDeprecation = import ./deprecation.nix { inherit lib; };
inherit (import ./to-lua.nix { inherit lib; }) toLuaObject;
in
{
rec {
maintainers = import ./maintainers.nix;
lua = import ./to-lua.nix { inherit lib; };
keymaps = import ./keymap-helpers.nix { inherit lib nixvimOptions nixvimTypes; };
autocmd = import ./autocmd-helpers.nix { inherit lib nixvimOptions nixvimTypes; };
neovim-plugin = import ./neovim-plugin.nix {
@ -26,7 +26,7 @@ in
};
vim-plugin = import ./vim-plugin.nix { inherit lib nixvimOptions nixvimUtils; };
inherit nixvimTypes;
inherit toLuaObject;
inherit (lua) toLuaObject;
}
// nixvimUtils
// nixvimOptions

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 =