mirror of
				https://github.com/NotAShelf/nvf.git
				synced 2025-11-03 20:22:21 +00:00 
			
		
		
		
	Merge pull request #757 from NotAShelf/convert-null-ls
	
		
			
	
		
	
	
		
	
		
			Some checks are pending
		
		
	
	
		
			
				
	
				Set up binary cache / cachix (default) (push) Waiting to run
				
			
		
			
				
	
				Set up binary cache / cachix (maximal) (push) Waiting to run
				
			
		
			
				
	
				Set up binary cache / cachix (nix) (push) Waiting to run
				
			
		
			
				
	
				Treewide Checks / Validate flake (push) Waiting to run
				
			
		
			
				
	
				Treewide Checks / Check formatting (push) Waiting to run
				
			
		
			
				
	
				Treewide Checks / Check source tree for typos (push) Waiting to run
				
			
		
			
				
	
				Treewide Checks / Validate documentation builds (push) Waiting to run
				
			
		
			
				
	
				Treewide Checks / Validate hyperlinks in documentation sources (push) Waiting to run
				
			
		
			
				
	
				Treewide Checks / Validate Editorconfig conformance (push) Waiting to run
				
			
		
			
				
	
				Build and deploy documentation / Check latest commit (push) Waiting to run
				
			
		
			
				
	
				Build and deploy documentation / publish (push) Blocked by required conditions
				
			
		
		
	
	
		
	
		
			Some checks are pending
		
		
	
	Set up binary cache / cachix (default) (push) Waiting to run
				
			Set up binary cache / cachix (maximal) (push) Waiting to run
				
			Set up binary cache / cachix (nix) (push) Waiting to run
				
			Treewide Checks / Validate flake (push) Waiting to run
				
			Treewide Checks / Check formatting (push) Waiting to run
				
			Treewide Checks / Check source tree for typos (push) Waiting to run
				
			Treewide Checks / Validate documentation builds (push) Waiting to run
				
			Treewide Checks / Validate hyperlinks in documentation sources (push) Waiting to run
				
			Treewide Checks / Validate Editorconfig conformance (push) Waiting to run
				
			Build and deploy documentation / Check latest commit (push) Waiting to run
				
			Build and deploy documentation / publish (push) Blocked by required conditions
				
			lsp/null-ls: convert to new setupOpts format; get rid of prelude DAG
This commit is contained in:
		
				commit
				
					
						05489d95b6
					
				
			
		
					 3 changed files with 93 additions and 61 deletions
				
			
		| 
						 | 
					@ -5,6 +5,7 @@
 | 
				
			||||||
}: let
 | 
					}: let
 | 
				
			||||||
  inherit (builtins) toJSON;
 | 
					  inherit (builtins) toJSON;
 | 
				
			||||||
  inherit (lib.modules) mkIf mkMerge;
 | 
					  inherit (lib.modules) mkIf mkMerge;
 | 
				
			||||||
 | 
					  inherit (lib.generators) mkLuaInline;
 | 
				
			||||||
  inherit (lib.nvim.binds) addDescriptionsToMappings mkSetExprBinding mkSetLuaBinding pushDownDefault;
 | 
					  inherit (lib.nvim.binds) addDescriptionsToMappings mkSetExprBinding mkSetLuaBinding pushDownDefault;
 | 
				
			||||||
  inherit (lib.nvim.dag) entryAnywhere;
 | 
					  inherit (lib.nvim.dag) entryAnywhere;
 | 
				
			||||||
  inherit (lib.nvim.lua) toLuaObject;
 | 
					  inherit (lib.nvim.lua) toLuaObject;
 | 
				
			||||||
| 
						 | 
					@ -32,6 +33,7 @@ in {
 | 
				
			||||||
                return '<Ignore>'
 | 
					                return '<Ignore>'
 | 
				
			||||||
              end
 | 
					              end
 | 
				
			||||||
            '')
 | 
					            '')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            (mkSetExprBinding gsMappings.previousHunk ''
 | 
					            (mkSetExprBinding gsMappings.previousHunk ''
 | 
				
			||||||
              function()
 | 
					              function()
 | 
				
			||||||
                if vim.wo.diff then return ${toJSON gsMappings.previousHunk.value} end
 | 
					                if vim.wo.diff then return ${toJSON gsMappings.previousHunk.value} end
 | 
				
			||||||
| 
						 | 
					@ -77,13 +79,12 @@ in {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    (mkIf cfg.codeActions.enable {
 | 
					    (mkIf cfg.codeActions.enable {
 | 
				
			||||||
      vim.lsp.null-ls.enable = true;
 | 
					      vim.lsp.null-ls = {
 | 
				
			||||||
      vim.lsp.null-ls.sources.gitsigns-ca = ''
 | 
					        enable = true;
 | 
				
			||||||
        table.insert(
 | 
					        setupOpts.sources.gitsigns-ca = mkLuaInline ''
 | 
				
			||||||
          ls_sources,
 | 
					          require("null-ls").builtins.code_actions.gitsigns
 | 
				
			||||||
          null_ls.builtins.code_actions.gitsigns
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
        '';
 | 
					        '';
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
  ]);
 | 
					  ]);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,13 +4,12 @@
 | 
				
			||||||
  ...
 | 
					  ...
 | 
				
			||||||
}: let
 | 
					}: let
 | 
				
			||||||
  inherit (lib.modules) mkIf mkMerge;
 | 
					  inherit (lib.modules) mkIf mkMerge;
 | 
				
			||||||
  inherit (lib.attrsets) mapAttrs;
 | 
					  inherit (lib.nvim.lua) toLuaObject;
 | 
				
			||||||
  inherit (lib.trivial) boolToString;
 | 
					  inherit (lib.nvim.dag) entryAfter;
 | 
				
			||||||
  inherit (lib.nvim.dag) entryAnywhere entryAfter entryBetween;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  cfg = config.vim.lsp;
 | 
					  cfg = config.vim.lsp.null-ls;
 | 
				
			||||||
in {
 | 
					in {
 | 
				
			||||||
  config = mkIf cfg.null-ls.enable (mkMerge [
 | 
					  config = mkIf cfg.enable (mkMerge [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      vim = {
 | 
					      vim = {
 | 
				
			||||||
        startPlugins = [
 | 
					        startPlugins = [
 | 
				
			||||||
| 
						 | 
					@ -18,35 +17,14 @@ in {
 | 
				
			||||||
          "plenary-nvim"
 | 
					          "plenary-nvim"
 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # null-ls implies LSP already being set up
 | 
					        # null-ls implies that LSP is already being set up
 | 
				
			||||||
        # since it will hook into LSPs to receive information
 | 
					        # as it will hook into LSPs to receive information.
 | 
				
			||||||
        lsp.enable = true;
 | 
					        lsp.enable = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        pluginRC = {
 | 
					        pluginRC.null_ls = entryAfter ["lsp-setup"] ''
 | 
				
			||||||
          # early setup for null-ls
 | 
					          require('null-ls').setup(${toLuaObject cfg.setupOpts})
 | 
				
			||||||
          null_ls-setup = entryAnywhere ''
 | 
					 | 
				
			||||||
            local null_ls = require("null-ls")
 | 
					 | 
				
			||||||
            local null_helpers = require("null-ls.helpers")
 | 
					 | 
				
			||||||
            local null_methods = require("null-ls.methods")
 | 
					 | 
				
			||||||
            local ls_sources = {}
 | 
					 | 
				
			||||||
          '';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          # null-ls setup
 | 
					 | 
				
			||||||
          null_ls = entryAfter ["null_ls-setup" "lsp-setup"] ''
 | 
					 | 
				
			||||||
            require('null-ls').setup({
 | 
					 | 
				
			||||||
              debug = ${boolToString cfg.null-ls.debug},
 | 
					 | 
				
			||||||
              diagnostics_format = "${cfg.null-ls.diagnostics_format}",
 | 
					 | 
				
			||||||
              debounce = ${toString cfg.null-ls.debounce},
 | 
					 | 
				
			||||||
              default_timeout = ${toString cfg.null-ls.default_timeout},
 | 
					 | 
				
			||||||
              sources = ls_sources,
 | 
					 | 
				
			||||||
              on_attach = default_on_attach
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
        '';
 | 
					        '';
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      vim.pluginRC = mapAttrs (_: v: (entryBetween ["null_ls"] ["null_ls-setup"] v)) cfg.null-ls.sources;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  ]);
 | 
					  ]);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,34 +1,87 @@
 | 
				
			||||||
{lib, ...}: let
 | 
					{lib, ...}: let
 | 
				
			||||||
  inherit (lib.options) mkEnableOption mkOption;
 | 
					  inherit (lib.options) mkOption mkEnableOption;
 | 
				
			||||||
  inherit (lib.types) attrsOf str int;
 | 
					  inherit (lib.types) attrsOf str int nullOr;
 | 
				
			||||||
in {
 | 
					  inherit (lib.generators) mkLuaInline;
 | 
				
			||||||
  options.vim.lsp.null-ls = {
 | 
					  inherit (lib.nvim.types) luaInline mkPluginSetupOption;
 | 
				
			||||||
    enable = mkEnableOption "null-ls, also enabled automatically";
 | 
					  inherit (lib.nvim.config) batchRenameOptions;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    debug = mkEnableOption "debugging information for `null-ls";
 | 
					  migrationTable = {
 | 
				
			||||||
 | 
					    debug = "debug";
 | 
				
			||||||
 | 
					    diagnostics_format = "diagnostics_format";
 | 
				
			||||||
 | 
					    debounce = "debounce";
 | 
				
			||||||
 | 
					    default_timeout = "default_timeout";
 | 
				
			||||||
 | 
					    sources = "sources";
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  renamedSetupOpts =
 | 
				
			||||||
 | 
					    batchRenameOptions
 | 
				
			||||||
 | 
					    ["vim" "lsp" "null-ls"]
 | 
				
			||||||
 | 
					    ["vim" "lsp" "null-ls" "setupOpts"]
 | 
				
			||||||
 | 
					    migrationTable;
 | 
				
			||||||
 | 
					in {
 | 
				
			||||||
 | 
					  imports = renamedSetupOpts;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  options.vim.lsp.null-ls = {
 | 
				
			||||||
 | 
					    enable = mkEnableOption ''
 | 
				
			||||||
 | 
					      null-ls, plugin to use Neovim as a language server to inject LSP diagnostics,
 | 
				
			||||||
 | 
					      code actions, and more via Lua.
 | 
				
			||||||
 | 
					    '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    setupOpts = mkPluginSetupOption "null-ls" {
 | 
				
			||||||
 | 
					      debug = mkEnableOption ''
 | 
				
			||||||
 | 
					        debugging information for null-ls.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Displays all possible log messages and writes them to the null-ls log,
 | 
				
			||||||
 | 
					        which you can view with the command `:NullLsLog`
 | 
				
			||||||
 | 
					      '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      diagnostics_format = mkOption {
 | 
					      diagnostics_format = mkOption {
 | 
				
			||||||
        type = str;
 | 
					        type = str;
 | 
				
			||||||
        default = "[#{m}] #{s} (#{c})";
 | 
					        default = "[#{m}] #{s} (#{c})";
 | 
				
			||||||
      description = "Diagnostic output format for null-ls";
 | 
					        description = ''
 | 
				
			||||||
 | 
					          Sets the default format used for diagnostics. null-ls will replace th
 | 
				
			||||||
 | 
					          e following special components with the relevant diagnostic information:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          * `#{m}`: message
 | 
				
			||||||
 | 
					          * `#{s}`: source name (defaults to null-ls if not specified)
 | 
				
			||||||
 | 
					          * `#{c}`: code (if available)
 | 
				
			||||||
 | 
					        '';
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      debounce = mkOption {
 | 
					      debounce = mkOption {
 | 
				
			||||||
        type = int;
 | 
					        type = int;
 | 
				
			||||||
        default = 250;
 | 
					        default = 250;
 | 
				
			||||||
      description = "Default debounce";
 | 
					        description = ''
 | 
				
			||||||
 | 
					          Amount of time between the last change to a buffer and the next `textDocument/didChange` notification.
 | 
				
			||||||
 | 
					        '';
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      default_timeout = mkOption {
 | 
					      default_timeout = mkOption {
 | 
				
			||||||
        type = int;
 | 
					        type = int;
 | 
				
			||||||
        default = 5000;
 | 
					        default = 5000;
 | 
				
			||||||
      description = "Default timeout value, in milliseconds";
 | 
					        description = ''
 | 
				
			||||||
 | 
					          Amount of time (in milliseconds) after which built-in sources will time out.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          :::{.note}
 | 
				
			||||||
 | 
					          Built-in sources can define their own timeout period and users can override
 | 
				
			||||||
 | 
					          the timeout period on a per-source basis
 | 
				
			||||||
 | 
					          :::
 | 
				
			||||||
 | 
					        '';
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      sources = mkOption {
 | 
					      sources = mkOption {
 | 
				
			||||||
      description = "null-ls sources";
 | 
					        type = nullOr (attrsOf luaInline);
 | 
				
			||||||
      type = attrsOf str;
 | 
					        default = null;
 | 
				
			||||||
      default = {};
 | 
					        description = "Sources for null-ls to register";
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      on_attach = mkOption {
 | 
				
			||||||
 | 
					        type = nullOr luaInline;
 | 
				
			||||||
 | 
					        default = mkLuaInline "on_attach";
 | 
				
			||||||
 | 
					        description = ''
 | 
				
			||||||
 | 
					          Defines an on_attach callback to run whenever null-ls attaches to a buffer.
 | 
				
			||||||
 | 
					        '';
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue