mirror of
				https://github.com/NotAShelf/nvf.git
				synced 2025-11-04 12:42:21 +00:00 
			
		
		
		
	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>
This commit is contained in:
		
					parent
					
						
							
								3ace0780dd
							
						
					
				
			
			
				commit
				
					
						3e48f13c3c
					
				
			
		
					 8 changed files with 59 additions and 97 deletions
				
			
		
							
								
								
									
										1
									
								
								.github/typos.toml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/typos.toml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -9,5 +9,6 @@ default.extend-ignore-words-re = [
 | 
			
		|||
  "edn",
 | 
			
		||||
  "esy",
 | 
			
		||||
  "BA", # somehow "BANanaD3V" is valid, but BA is not...
 | 
			
		||||
  "Emac"
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -569,8 +569,7 @@
 | 
			
		|||
[typst-concealer]: https://github.com/PartyWumpus/typst-concealer
 | 
			
		||||
 | 
			
		||||
- Add inline typst concealing support under `vim.languages.typst` using
 | 
			
		||||
  [typst-concealer].
 | 
			
		||||
[simon-wg](https://github.com/simon-wg):
 | 
			
		||||
  [typst-concealer]. [simon-wg](https://github.com/simon-wg):
 | 
			
		||||
 | 
			
		||||
- Update `python` language module to use correct lsp binary.
 | 
			
		||||
- Fix `python` pyright and basedpyright language servers not using default on
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										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,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -93,7 +93,7 @@ in {
 | 
			
		|||
        accept = mkOption {
 | 
			
		||||
          type = nullOr str;
 | 
			
		||||
          default = "<M-l>";
 | 
			
		||||
          description = "Accept suggetion";
 | 
			
		||||
          description = "Accept suggestion";
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        acceptWord = mkOption {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -130,6 +130,9 @@
 | 
			
		|||
      # In systems where we only have a package and no module, this can be used
 | 
			
		||||
      # to access the built init.lua
 | 
			
		||||
      initLua = dummyInit;
 | 
			
		||||
 | 
			
		||||
      mnwConfig = neovim-wrapped.passthru.config;
 | 
			
		||||
      mnwConfigDir = neovim-wrapped.passthru.configDir;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    meta =
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue