mirror of
				https://github.com/NotAShelf/nvf.git
				synced 2025-11-03 20:22:21 +00:00 
			
		
		
		
	Compare commits
	
		
			2 commits
		
	
	
		
			
				36146ca31d
			
			...
			
				11bb5982c5
			
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
							 | 
						11bb5982c5 | ||
| 
							 | 
						cbd8b66669 | 
					 2 changed files with 147 additions and 79 deletions
				
			
		| 
						 | 
				
			
			@ -8,57 +8,114 @@
 | 
			
		|||
  inherit (lib.options) mkEnableOption mkOption literalExpression;
 | 
			
		||||
  inherit (lib.meta) getExe;
 | 
			
		||||
  inherit (lib.modules) mkIf mkMerge;
 | 
			
		||||
  inherit (lib.lists) isList;
 | 
			
		||||
  inherit (lib.types) enum either listOf package str bool;
 | 
			
		||||
  inherit (lib.nvim.lua) expToLua;
 | 
			
		||||
  inherit (lib.types) enum listOf package str bool;
 | 
			
		||||
  inherit (lib.nvim.attrsets) mapListToAttrs;
 | 
			
		||||
  inherit (lib.generators) mkLuaInline;
 | 
			
		||||
  inherit (lib.nvim.dag) entryBefore;
 | 
			
		||||
 | 
			
		||||
  cfg = config.vim.languages.python;
 | 
			
		||||
 | 
			
		||||
  defaultServer = "basedpyright";
 | 
			
		||||
  defaultServers = ["basedpyright"];
 | 
			
		||||
  servers = {
 | 
			
		||||
    pyright = {
 | 
			
		||||
      package = pkgs.pyright;
 | 
			
		||||
      lspConfig = ''
 | 
			
		||||
        lspconfig.pyright.setup{
 | 
			
		||||
          capabilities = capabilities;
 | 
			
		||||
          on_attach = default_on_attach;
 | 
			
		||||
          cmd = ${
 | 
			
		||||
          if isList cfg.lsp.package
 | 
			
		||||
          then expToLua cfg.lsp.package
 | 
			
		||||
          else ''{"${cfg.lsp.package}/bin/pyright-langserver", "--stdio"}''
 | 
			
		||||
        }
 | 
			
		||||
        }
 | 
			
		||||
      enable = true;
 | 
			
		||||
      cmd = [(getExe pkgs.pyright) "--stdio"];
 | 
			
		||||
      filetypes = ["python"];
 | 
			
		||||
      root_markers = [
 | 
			
		||||
        "pyproject.toml"
 | 
			
		||||
        "setup.py"
 | 
			
		||||
        "setup.cfg"
 | 
			
		||||
        "requirements.txt"
 | 
			
		||||
        "Pipfile"
 | 
			
		||||
        "pyrightconfig.json"
 | 
			
		||||
        ".git"
 | 
			
		||||
      ];
 | 
			
		||||
      settings = {
 | 
			
		||||
        python = {
 | 
			
		||||
          analysis = {
 | 
			
		||||
            autoSearchPaths = true;
 | 
			
		||||
            useLibraryCodeForTypes = true;
 | 
			
		||||
            diagnosticMode = "openFilesOnly";
 | 
			
		||||
          };
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
      on_attach = mkLuaInline ''
 | 
			
		||||
        function(client, bufnr)
 | 
			
		||||
          vim.api.nvim_buf_create_user_command(bufnr, 'LspPyrightOrganizeImports', function()
 | 
			
		||||
            client:exec_cmd({
 | 
			
		||||
              command = 'pyright.organizeimports',
 | 
			
		||||
              arguments = { vim.uri_from_bufnr(bufnr) },
 | 
			
		||||
            })
 | 
			
		||||
          end, {
 | 
			
		||||
            desc = 'Organize Imports',
 | 
			
		||||
          })
 | 
			
		||||
          vim.api.nvim_buf_create_user_command(bufnr, 'LspPyrightSetPythonPath', function(opts)
 | 
			
		||||
            set_python_path('pyright', opts.args)
 | 
			
		||||
          end, {
 | 
			
		||||
            desc = 'Reconfigure pyright with the provided python path',
 | 
			
		||||
            nargs = 1,
 | 
			
		||||
            complete = 'file',
 | 
			
		||||
          })
 | 
			
		||||
        end
 | 
			
		||||
      '';
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    basedpyright = {
 | 
			
		||||
      package = pkgs.basedpyright;
 | 
			
		||||
      lspConfig = ''
 | 
			
		||||
        lspconfig.basedpyright.setup{
 | 
			
		||||
          capabilities = capabilities;
 | 
			
		||||
          on_attach = default_on_attach;
 | 
			
		||||
          cmd = ${
 | 
			
		||||
          if isList cfg.lsp.package
 | 
			
		||||
          then expToLua cfg.lsp.package
 | 
			
		||||
          else ''{"${cfg.lsp.package}/bin/basedpyright-langserver", "--stdio"}''
 | 
			
		||||
        }
 | 
			
		||||
        }
 | 
			
		||||
      enable = true;
 | 
			
		||||
      cmd = [(getExe pkgs.basedpyright) "--stdio"];
 | 
			
		||||
      filetypes = ["python"];
 | 
			
		||||
      root_markers = [
 | 
			
		||||
        "pyproject.toml"
 | 
			
		||||
        "setup.py"
 | 
			
		||||
        "setup.cfg"
 | 
			
		||||
        "requirements.txt"
 | 
			
		||||
        "Pipfile"
 | 
			
		||||
        "pyrightconfig.json"
 | 
			
		||||
        ".git"
 | 
			
		||||
      ];
 | 
			
		||||
      settings = {
 | 
			
		||||
        basedpyright = {
 | 
			
		||||
          analysis = {
 | 
			
		||||
            autoSearchPaths = true;
 | 
			
		||||
            useLibraryCodeForTypes = true;
 | 
			
		||||
            diagnosticMode = "openFilesOnly";
 | 
			
		||||
          };
 | 
			
		||||
        };
 | 
			
		||||
      };
 | 
			
		||||
      on_attach = mkLuaInline ''
 | 
			
		||||
        function(client, bufnr)
 | 
			
		||||
          vim.api.nvim_buf_create_user_command(bufnr, 'LspPyrightOrganizeImports', function()
 | 
			
		||||
            client:exec_cmd({
 | 
			
		||||
              command = 'basedpyright.organizeimports',
 | 
			
		||||
              arguments = { vim.uri_from_bufnr(bufnr) },
 | 
			
		||||
            })
 | 
			
		||||
          end, {
 | 
			
		||||
            desc = 'Organize Imports',
 | 
			
		||||
          })
 | 
			
		||||
 | 
			
		||||
          vim.api.nvim_buf_create_user_command(bufnr, 'LspPyrightSetPythonPath', function(opts)
 | 
			
		||||
            set_python_path('basedpyright', opts.args)
 | 
			
		||||
          end, {
 | 
			
		||||
            desc = 'Reconfigure basedpyright with the provided python path',
 | 
			
		||||
            nargs = 1,
 | 
			
		||||
            complete = 'file',
 | 
			
		||||
          })
 | 
			
		||||
        end
 | 
			
		||||
      '';
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    python-lsp-server = {
 | 
			
		||||
      package = pkgs.python3Packages.python-lsp-server;
 | 
			
		||||
      lspConfig = ''
 | 
			
		||||
        lspconfig.pylsp.setup{
 | 
			
		||||
          capabilities = capabilities;
 | 
			
		||||
          on_attach = default_on_attach;
 | 
			
		||||
          cmd = ${
 | 
			
		||||
          if isList cfg.lsp.package
 | 
			
		||||
          then expToLua cfg.lsp.package
 | 
			
		||||
          else ''{"${cfg.lsp.package}/bin/pylsp"}''
 | 
			
		||||
        }
 | 
			
		||||
        }
 | 
			
		||||
      '';
 | 
			
		||||
      enable = true;
 | 
			
		||||
      cmd = [(getExe pkgs.python3Packages.python-lsp-server)];
 | 
			
		||||
      filetypes = ["python"];
 | 
			
		||||
      root_markers = [
 | 
			
		||||
        "pyproject.toml"
 | 
			
		||||
        "setup.py"
 | 
			
		||||
        "setup.cfg"
 | 
			
		||||
        "requirements.txt"
 | 
			
		||||
        "Pipfile"
 | 
			
		||||
        ".git"
 | 
			
		||||
      ];
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -171,17 +228,10 @@ in {
 | 
			
		|||
    lsp = {
 | 
			
		||||
      enable = mkEnableOption "Python LSP support" // {default = config.vim.lsp.enable;};
 | 
			
		||||
 | 
			
		||||
      server = mkOption {
 | 
			
		||||
      servers = mkOption {
 | 
			
		||||
        description = "Python LSP server to use";
 | 
			
		||||
        type = enum (attrNames servers);
 | 
			
		||||
        default = defaultServer;
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      package = mkOption {
 | 
			
		||||
        description = "python LSP server package, or the command to run as a list of strings";
 | 
			
		||||
        example = ''[lib.getExe pkgs.jdt-language-server "-data" "~/.cache/jdtls/workspace"]'';
 | 
			
		||||
        type = either package (listOf str);
 | 
			
		||||
        default = servers.${cfg.lsp.server}.package;
 | 
			
		||||
        type = listOf (enum (attrNames servers));
 | 
			
		||||
        default = defaultServers;
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -234,8 +284,34 @@ in {
 | 
			
		|||
    })
 | 
			
		||||
 | 
			
		||||
    (mkIf cfg.lsp.enable {
 | 
			
		||||
      vim.lsp.lspconfig.enable = true;
 | 
			
		||||
      vim.lsp.lspconfig.sources.python-lsp = servers.${cfg.lsp.server}.lspConfig;
 | 
			
		||||
      vim.luaConfigRC.python-util =
 | 
			
		||||
        entryBefore ["lsp-servers"]
 | 
			
		||||
        /*
 | 
			
		||||
        lua
 | 
			
		||||
        */
 | 
			
		||||
        ''
 | 
			
		||||
          local function set_python_path(server_name, path)
 | 
			
		||||
            local clients = vim.lsp.get_clients {
 | 
			
		||||
              bufnr = vim.api.nvim_get_current_buf(),
 | 
			
		||||
              name = server_name,
 | 
			
		||||
            }
 | 
			
		||||
            for _, client in ipairs(clients) do
 | 
			
		||||
              if client.settings then
 | 
			
		||||
                client.settings.python = vim.tbl_deep_extend('force', client.settings.python or {}, { pythonPath = path })
 | 
			
		||||
              else
 | 
			
		||||
                client.config.settings = vim.tbl_deep_extend('force', client.config.settings, { python = { pythonPath = path } })
 | 
			
		||||
              end
 | 
			
		||||
              client.notify('workspace/didChangeConfiguration', { settings = nil })
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
        '';
 | 
			
		||||
 | 
			
		||||
      vim.lsp.servers =
 | 
			
		||||
        mapListToAttrs (n: {
 | 
			
		||||
          name = n;
 | 
			
		||||
          value = servers.${n};
 | 
			
		||||
        })
 | 
			
		||||
        cfg.lsp.servers;
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    (mkIf cfg.format.enable {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,10 +7,11 @@
 | 
			
		|||
  inherit (builtins) attrNames;
 | 
			
		||||
  inherit (lib.options) mkEnableOption mkOption literalExpression;
 | 
			
		||||
  inherit (lib.modules) mkIf mkMerge;
 | 
			
		||||
  inherit (lib.lists) isList;
 | 
			
		||||
  inherit (lib.types) enum either listOf package str;
 | 
			
		||||
  inherit (lib.nvim.lua) expToLua;
 | 
			
		||||
  inherit (lib.types) enum listOf package;
 | 
			
		||||
  inherit (lib.meta) getExe;
 | 
			
		||||
  inherit (lib.nvim.types) mkGrammarOption;
 | 
			
		||||
  inherit (lib.nvim.attrsets) mapListToAttrs;
 | 
			
		||||
  inherit (lib.generators) mkLuaInline;
 | 
			
		||||
 | 
			
		||||
  cfg = config.vim.languages.r;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -50,22 +51,16 @@
 | 
			
		|||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  defaultServer = "r_language_server";
 | 
			
		||||
  defaultServers = ["r_language_server"];
 | 
			
		||||
  servers = {
 | 
			
		||||
    r_language_server = {
 | 
			
		||||
      package = pkgs.writeShellScriptBin "r_lsp" ''
 | 
			
		||||
        ${r-with-languageserver}/bin/R --slave -e "languageserver::run()"
 | 
			
		||||
      '';
 | 
			
		||||
      lspConfig = ''
 | 
			
		||||
        lspconfig.r_language_server.setup{
 | 
			
		||||
          capabilities = capabilities;
 | 
			
		||||
          on_attach = default_on_attach;
 | 
			
		||||
          cmd = ${
 | 
			
		||||
          if isList cfg.lsp.package
 | 
			
		||||
          then expToLua cfg.lsp.package
 | 
			
		||||
          else ''{"${lib.getExe cfg.lsp.package}"}''
 | 
			
		||||
        }
 | 
			
		||||
        }
 | 
			
		||||
      enable = true;
 | 
			
		||||
      cmd = [(getExe r-with-languageserver) "--no-echo" "-e" "languageserver::run()"];
 | 
			
		||||
      filetypes = ["r" "rmd" "quarto"];
 | 
			
		||||
      root_dir = mkLuaInline ''
 | 
			
		||||
        function(bufnr, on_dir)
 | 
			
		||||
          on_dir(vim.fs.root(bufnr, '.git') or vim.uv.os_homedir())
 | 
			
		||||
        end
 | 
			
		||||
      '';
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
| 
						 | 
				
			
			@ -81,17 +76,10 @@ in {
 | 
			
		|||
    lsp = {
 | 
			
		||||
      enable = mkEnableOption "R LSP support" // {default = config.vim.lsp.enable;};
 | 
			
		||||
 | 
			
		||||
      server = mkOption {
 | 
			
		||||
      servers = mkOption {
 | 
			
		||||
        description = "R LSP server to use";
 | 
			
		||||
        type = enum (attrNames servers);
 | 
			
		||||
        default = defaultServer;
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      package = mkOption {
 | 
			
		||||
        description = "R LSP server package, or the command to run as a list of strings";
 | 
			
		||||
        example = literalExpression "[ (lib.getExe pkgs.jdt-language-server) \"-data\" \"~/.cache/jdtls/workspace\" ]";
 | 
			
		||||
        type = either package (listOf str);
 | 
			
		||||
        default = servers.${cfg.lsp.server}.package;
 | 
			
		||||
        type = listOf (enum (attrNames servers));
 | 
			
		||||
        default = defaultServers;
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -127,8 +115,12 @@ in {
 | 
			
		|||
    })
 | 
			
		||||
 | 
			
		||||
    (mkIf cfg.lsp.enable {
 | 
			
		||||
      vim.lsp.lspconfig.enable = true;
 | 
			
		||||
      vim.lsp.lspconfig.sources.r-lsp = servers.${cfg.lsp.server}.lspConfig;
 | 
			
		||||
      vim.lsp.servers =
 | 
			
		||||
        mapListToAttrs (n: {
 | 
			
		||||
          name = n;
 | 
			
		||||
          value = servers.${n};
 | 
			
		||||
        })
 | 
			
		||||
        cfg.lsp.servers;
 | 
			
		||||
    })
 | 
			
		||||
  ]);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue