mirror of
https://github.com/NotAShelf/nvf.git
synced 2025-11-09 06:55: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
128
lib/lua.nix
128
lib/lua.nix
|
|
@ -1,92 +1,52 @@
|
||||||
# Helpers for converting values to lua
|
# Helpers for converting values to lua
|
||||||
{lib}: let
|
{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";
|
isLuaInline = object: (object._type or null) == "lua-inline";
|
||||||
|
|
||||||
toLuaObject = args:
|
toLuaObject = args:
|
||||||
if isAttrs args
|
{
|
||||||
then
|
int = toString args;
|
||||||
if isLuaInline 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
|
then args.expr
|
||||||
else if hasAttr "__empty" args
|
else "{${
|
||||||
then
|
lib.pipe args [
|
||||||
warn ''
|
(lib.filterAttrs (_: v: v != null))
|
||||||
Using `__empty` to define an empty lua table is deprecated. Use an empty attrset instead.
|
(builtins.mapAttrs (
|
||||||
'' "{ }"
|
n: v:
|
||||||
else
|
if lib.hasPrefix "@" n
|
||||||
"{"
|
|
||||||
+ (concatStringsSep ","
|
|
||||||
(mapAttrsToList
|
|
||||||
(n: v:
|
|
||||||
if head (stringToCharacters n) == "@"
|
|
||||||
then toLuaObject v
|
then toLuaObject v
|
||||||
else "[${toLuaObject n}] = " + (toLuaObject v))
|
else "[${toLuaObject n}] = ${toLuaObject v}"
|
||||||
(filterAttrs
|
))
|
||||||
(_: v: v != null)
|
builtins.attrValues
|
||||||
args)))
|
(lib.concatStringsSep ",\n")
|
||||||
+ "}"
|
]
|
||||||
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";
|
|
||||||
}
|
}
|
||||||
|
.${
|
||||||
|
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.strings) concatLines concatStringsSep optionalString;
|
||||||
inherit (lib.attrsets) mapAttrsToList;
|
inherit (lib.attrsets) mapAttrsToList;
|
||||||
inherit (lib.types) listOf str attrsOf;
|
inherit (lib.types) listOf str attrsOf;
|
||||||
inherit (lib.nvim.lua) listToLuaTable;
|
inherit (lib.nvim.lua) toLuaObject;
|
||||||
inherit (lib.nvim.dag) entryAfter;
|
inherit (lib.nvim.dag) entryAfter;
|
||||||
|
|
||||||
cfg = config.vim.spellcheck;
|
cfg = config.vim.spellcheck;
|
||||||
|
|
@ -152,7 +152,7 @@ in {
|
||||||
vim.api.nvim_create_augroup("nvf_autocmds", {clear = false})
|
vim.api.nvim_create_augroup("nvf_autocmds", {clear = false})
|
||||||
vim.api.nvim_create_autocmd({ "FileType" }, {
|
vim.api.nvim_create_autocmd({ "FileType" }, {
|
||||||
group = "nvf_autocmds",
|
group = "nvf_autocmds",
|
||||||
pattern = ${listToLuaTable cfg.ignoredFiletypes},
|
pattern = ${toLuaObject cfg.ignoredFiletypes},
|
||||||
callback = function()
|
callback = function()
|
||||||
vim.opt_local.spell = false
|
vim.opt_local.spell = false
|
||||||
end,
|
end,
|
||||||
|
|
|
||||||
|
|
@ -11,11 +11,10 @@
|
||||||
inherit (lib.modules) mkIf mkMerge;
|
inherit (lib.modules) mkIf mkMerge;
|
||||||
inherit (lib.nvim.types) mkGrammarOption;
|
inherit (lib.nvim.types) mkGrammarOption;
|
||||||
inherit (lib.nvim.dag) entryAfter;
|
inherit (lib.nvim.dag) entryAfter;
|
||||||
inherit (lib.nvim.lua) expToLua;
|
inherit (lib.nvim.lua) toLuaObject;
|
||||||
inherit (lib.meta) getExe';
|
inherit (lib.meta) getExe';
|
||||||
inherit (lib.generators) mkLuaInline;
|
inherit (lib.generators) mkLuaInline;
|
||||||
inherit (pkgs) haskellPackages;
|
inherit (pkgs) haskellPackages;
|
||||||
inherit (lib.nvim.lua) toLuaObject;
|
|
||||||
|
|
||||||
cfg = config.vim.languages.haskell;
|
cfg = config.vim.languages.haskell;
|
||||||
|
|
||||||
|
|
@ -120,7 +119,7 @@ in {
|
||||||
dap = {
|
dap = {
|
||||||
cmd = ${
|
cmd = ${
|
||||||
if isList cfg.dap.package
|
if isList cfg.dap.package
|
||||||
then expToLua cfg.dap.package
|
then toLuaObject cfg.dap.package
|
||||||
else ''{"${cfg.dap.package}/bin/haskell-debug-adapter"}''
|
else ''{"${cfg.dap.package}/bin/haskell-debug-adapter"}''
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
inherit (lib.lists) isList;
|
inherit (lib.lists) isList;
|
||||||
inherit (lib.types) bool package str listOf either enum;
|
inherit (lib.types) bool package str listOf either enum;
|
||||||
inherit (lib.nvim.types) mkGrammarOption;
|
inherit (lib.nvim.types) mkGrammarOption;
|
||||||
inherit (lib.nvim.lua) expToLua;
|
inherit (lib.nvim.lua) toLuaObject;
|
||||||
inherit (lib.nvim.dag) entryAfter entryAnywhere;
|
inherit (lib.nvim.dag) entryAfter entryAnywhere;
|
||||||
|
|
||||||
cfg = config.vim.languages.rust;
|
cfg = config.vim.languages.rust;
|
||||||
|
|
@ -153,7 +153,7 @@ in {
|
||||||
server = {
|
server = {
|
||||||
cmd = ${
|
cmd = ${
|
||||||
if isList cfg.lsp.package
|
if isList cfg.lsp.package
|
||||||
then expToLua cfg.lsp.package
|
then toLuaObject cfg.lsp.package
|
||||||
else ''{"${cfg.lsp.package}/bin/rust-analyzer"}''
|
else ''{"${cfg.lsp.package}/bin/rust-analyzer"}''
|
||||||
},
|
},
|
||||||
default_settings = {
|
default_settings = {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue