Compare commits

...

2 commits

Author SHA1 Message Date
Gerg-L
3e48f13c3c
lib: rewrite toLuaObject, deprecate everything else (#1178)
* lint: typos

* wrapper/build: passthru mnw stuff

* lib: rewrite toLuaObject, deprecate everything else

* docs: deno fmt

* Emac

---------

Co-authored-by: Ching Pei Yang <59727193+horriblename@users.noreply.github.com>
2025-10-13 18:56:11 +02:00
Ching Pei Yang
3ace0780dd
ci: fix typo in typo fix 2025-10-13 17:55:33 +02:00
9 changed files with 60 additions and 98 deletions

1
.github/typos.toml vendored
View file

@ -9,5 +9,6 @@ default.extend-ignore-words-re = [
"edn", "edn",
"esy", "esy",
"BA", # somehow "BANanaD3V" is valid, but BA is not... "BA", # somehow "BANanaD3V" is valid, but BA is not...
"Emac"
] ]

View file

@ -170,7 +170,7 @@ The changes are, in no particular order:
- Add [ocaml-lsp] support - Add [ocaml-lsp] support
- Fix "Emac" typo - Fix misspelled "Emacs"
- Add [new-file-template.nvim] to automatically fill new file contents using - Add [new-file-template.nvim] to automatically fill new file contents using
templates templates

View file

@ -569,8 +569,7 @@
[typst-concealer]: https://github.com/PartyWumpus/typst-concealer [typst-concealer]: https://github.com/PartyWumpus/typst-concealer
- Add inline typst concealing support under `vim.languages.typst` using - Add inline typst concealing support under `vim.languages.typst` using
[typst-concealer]. [typst-concealer]. [simon-wg](https://github.com/simon-wg):
[simon-wg](https://github.com/simon-wg):
- Update `python` language module to use correct lsp binary. - Update `python` language module to use correct lsp binary.
- Fix `python` pyright and basedpyright language servers not using default on - Fix `python` pyright and basedpyright language servers not using default on

View file

@ -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 builtins.typeOf args
# This should be enough! }
toJSON args or (builtins.throw "Could not convert object of type `${builtins.typeOf args}` to lua object");
else if isPath args in
then toJSON (toString args) {
else if isBool args inherit isLuaInline toLuaObject;
then "${boolToString args}" luaTable = x: (toLuaObject (map lib.mkLuaInline x));
else if isFloat args }
then "${toString args}" // lib.genAttrs [
else if isInt args "nullString"
then "${toString args}" "expToLua"
else if (args == null) "listToLuaTable"
then "nil" "attrsetToLuaTable"
else throw "could not convert object of type `${typeOf args}` to lua object"; ] (name: lib.warn "${name} is deprecated use toLuaObject instead" toLuaObject)
}

View file

@ -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,

View file

@ -93,7 +93,7 @@ in {
accept = mkOption { accept = mkOption {
type = nullOr str; type = nullOr str;
default = "<M-l>"; default = "<M-l>";
description = "Accept suggetion"; description = "Accept suggestion";
}; };
acceptWord = mkOption { acceptWord = mkOption {

View file

@ -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"}''
}, },
}, },

View file

@ -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 = {

View file

@ -130,6 +130,9 @@
# In systems where we only have a package and no module, this can be used # In systems where we only have a package and no module, this can be used
# to access the built init.lua # to access the built init.lua
initLua = dummyInit; initLua = dummyInit;
mnwConfig = neovim-wrapped.passthru.config;
mnwConfigDir = neovim-wrapped.passthru.configDir;
}; };
meta = meta =