mirror of
https://github.com/NotAShelf/nvf.git
synced 2025-11-08 22:45:30 +00:00
lib: rewrite toLuaObject, deprecate everything else
This commit is contained in:
parent
83f4a8ebd7
commit
c8734cc4db
4 changed files with 53 additions and 94 deletions
134
lib/lua.nix
134
lib/lua.nix
|
|
@ -1,92 +1,52 @@
|
|||
# Helpers for converting values to lua
|
||||
{lib}: let
|
||||
inherit (builtins) hasAttr head throw typeOf isList isAttrs isBool isInt isString isPath isFloat toJSON;
|
||||
inherit (lib.attrsets) mapAttrsToList filterAttrs;
|
||||
inherit (lib.strings) concatStringsSep concatMapStringsSep stringToCharacters;
|
||||
inherit (lib.trivial) boolToString warn;
|
||||
in rec {
|
||||
# Convert a null value to lua's nil
|
||||
nullString = value:
|
||||
if value == null
|
||||
then "nil"
|
||||
else "'${value}'";
|
||||
|
||||
# convert an expression to lua
|
||||
expToLua = exp:
|
||||
if isList exp
|
||||
then listToLuaTable exp # if list, convert to lua table
|
||||
else if isAttrs exp
|
||||
then attrsetToLuaTable exp # if attrs, convert to table
|
||||
else if isBool exp
|
||||
then boolToString exp # if bool, convert to string
|
||||
else if isInt exp
|
||||
then toString exp # if int, convert to string
|
||||
else if exp == null
|
||||
then "nil"
|
||||
else (toJSON exp); # otherwise jsonify the value and print as is
|
||||
|
||||
# convert list to a lua table
|
||||
listToLuaTable = list:
|
||||
"{ " + (concatStringsSep ", " (map expToLua list)) + " }";
|
||||
|
||||
# convert attrset to a lua table
|
||||
attrsetToLuaTable = attrset:
|
||||
"{ "
|
||||
+ (
|
||||
concatStringsSep ", "
|
||||
(
|
||||
mapAttrsToList (
|
||||
name: value:
|
||||
name
|
||||
+ " = "
|
||||
+ (expToLua value)
|
||||
)
|
||||
attrset
|
||||
)
|
||||
)
|
||||
+ " }";
|
||||
# Convert a list of lua expressions to a lua table. The difference to listToLuaTable is that the elements here are expected to be lua expressions already, whereas listToLuaTable converts from nix types to lua first
|
||||
luaTable = items: ''{${concatStringsSep "," items}}'';
|
||||
|
||||
isLuaInline = object: (object._type or null) == "lua-inline";
|
||||
|
||||
toLuaObject = args:
|
||||
if isAttrs args
|
||||
then
|
||||
if isLuaInline args
|
||||
then args.expr
|
||||
else if hasAttr "__empty" args
|
||||
then
|
||||
warn ''
|
||||
Using `__empty` to define an empty lua table is deprecated. Use an empty attrset instead.
|
||||
'' "{ }"
|
||||
else
|
||||
"{"
|
||||
+ (concatStringsSep ","
|
||||
(mapAttrsToList
|
||||
(n: v:
|
||||
if head (stringToCharacters n) == "@"
|
||||
then toLuaObject v
|
||||
else "[${toLuaObject n}] = " + (toLuaObject v))
|
||||
(filterAttrs
|
||||
(_: v: v != null)
|
||||
args)))
|
||||
+ "}"
|
||||
else if isList args
|
||||
then "{" + concatMapStringsSep "," toLuaObject args + "}"
|
||||
else if isString args
|
||||
then
|
||||
# This should be enough!
|
||||
toJSON args
|
||||
else if isPath args
|
||||
then toJSON (toString args)
|
||||
else if isBool args
|
||||
then "${boolToString args}"
|
||||
else if isFloat args
|
||||
then "${toString args}"
|
||||
else if isInt args
|
||||
then "${toString args}"
|
||||
else if (args == null)
|
||||
then "nil"
|
||||
else throw "could not convert object of type `${typeOf args}` to lua object";
|
||||
}
|
||||
{
|
||||
int = toString args;
|
||||
float = toString args;
|
||||
|
||||
# escapes \ and quotes
|
||||
string = builtins.toJSON args;
|
||||
path = builtins.toJSON args;
|
||||
|
||||
bool = lib.boolToString args;
|
||||
null = "nil";
|
||||
|
||||
list = "{${lib.concatMapStringsSep ",\n" toLuaObject args}}";
|
||||
|
||||
set =
|
||||
if lib.isDerivation args
|
||||
then ''"${args}"''
|
||||
else if isLuaInline args
|
||||
then args.expr
|
||||
else "{${
|
||||
lib.pipe args [
|
||||
(lib.filterAttrs (_: v: v != null))
|
||||
(builtins.mapAttrs (
|
||||
n: v:
|
||||
if lib.hasPrefix "@" n
|
||||
then toLuaObject v
|
||||
else "[${toLuaObject n}] = ${toLuaObject v}"
|
||||
))
|
||||
builtins.attrValues
|
||||
(lib.concatStringsSep ",\n")
|
||||
]
|
||||
}}";
|
||||
}
|
||||
.${
|
||||
builtins.typeOf args
|
||||
}
|
||||
or (builtins.throw "Could not convert object of type `${builtins.typeOf args}` to lua object");
|
||||
in
|
||||
{
|
||||
inherit isLuaInline toLuaObject;
|
||||
luaTable = x: (toLuaObject (map lib.mkLuaInline x));
|
||||
}
|
||||
// lib.genAttrs [
|
||||
"nullString"
|
||||
"expToLua"
|
||||
"listToLuaTable"
|
||||
"attrsetToLuaTable"
|
||||
] (name: lib.warn "${name} is deprecated use toLuaObject instead" toLuaObject)
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
inherit (lib.strings) concatLines concatStringsSep optionalString;
|
||||
inherit (lib.attrsets) mapAttrsToList;
|
||||
inherit (lib.types) listOf str attrsOf;
|
||||
inherit (lib.nvim.lua) listToLuaTable;
|
||||
inherit (lib.nvim.lua) toLuaObject;
|
||||
inherit (lib.nvim.dag) entryAfter;
|
||||
|
||||
cfg = config.vim.spellcheck;
|
||||
|
|
@ -152,7 +152,7 @@ in {
|
|||
vim.api.nvim_create_augroup("nvf_autocmds", {clear = false})
|
||||
vim.api.nvim_create_autocmd({ "FileType" }, {
|
||||
group = "nvf_autocmds",
|
||||
pattern = ${listToLuaTable cfg.ignoredFiletypes},
|
||||
pattern = ${toLuaObject cfg.ignoredFiletypes},
|
||||
callback = function()
|
||||
vim.opt_local.spell = false
|
||||
end,
|
||||
|
|
|
|||
|
|
@ -11,11 +11,10 @@
|
|||
inherit (lib.modules) mkIf mkMerge;
|
||||
inherit (lib.nvim.types) mkGrammarOption;
|
||||
inherit (lib.nvim.dag) entryAfter;
|
||||
inherit (lib.nvim.lua) expToLua;
|
||||
inherit (lib.nvim.lua) toLuaObject;
|
||||
inherit (lib.meta) getExe';
|
||||
inherit (lib.generators) mkLuaInline;
|
||||
inherit (pkgs) haskellPackages;
|
||||
inherit (lib.nvim.lua) toLuaObject;
|
||||
|
||||
cfg = config.vim.languages.haskell;
|
||||
|
||||
|
|
@ -120,7 +119,7 @@ in {
|
|||
dap = {
|
||||
cmd = ${
|
||||
if isList cfg.dap.package
|
||||
then expToLua cfg.dap.package
|
||||
then toLuaObject cfg.dap.package
|
||||
else ''{"${cfg.dap.package}/bin/haskell-debug-adapter"}''
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
inherit (lib.lists) isList;
|
||||
inherit (lib.types) bool package str listOf either enum;
|
||||
inherit (lib.nvim.types) mkGrammarOption;
|
||||
inherit (lib.nvim.lua) expToLua;
|
||||
inherit (lib.nvim.lua) toLuaObject;
|
||||
inherit (lib.nvim.dag) entryAfter entryAnywhere;
|
||||
|
||||
cfg = config.vim.languages.rust;
|
||||
|
|
@ -153,7 +153,7 @@ in {
|
|||
server = {
|
||||
cmd = ${
|
||||
if isList cfg.lsp.package
|
||||
then expToLua cfg.lsp.package
|
||||
then toLuaObject cfg.lsp.package
|
||||
else ''{"${cfg.lsp.package}/bin/rust-analyzer"}''
|
||||
},
|
||||
default_settings = {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue