diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index 23afac32..d427188f 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -555,9 +555,3 @@ - Add [nvim-highlight-colors] plugin in `vim.ui.nvim-highlight-colors` with `enable` and `setupOpts` - -[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 - attach behavior. diff --git a/modules/plugins/languages/python.nix b/modules/plugins/languages/python.nix index 8e1f0ebd..f4d749f4 100644 --- a/modules/plugins/languages/python.nix +++ b/modules/plugins/languages/python.nix @@ -6,7 +6,7 @@ }: let inherit (builtins) attrNames; inherit (lib.options) mkEnableOption mkOption literalExpression; - inherit (lib.meta) getExe getExe'; + inherit (lib.meta) getExe; inherit (lib.modules) mkIf mkMerge; inherit (lib.types) enum package bool; inherit (lib.nvim.attrsets) mapListToAttrs; @@ -20,7 +20,7 @@ servers = { pyright = { enable = true; - cmd = [(getExe' pkgs.pyright "pyright-langserver") "--stdio"]; + cmd = [(getExe pkgs.pyright) "--stdio"]; filetypes = ["python"]; root_markers = [ "pyproject.toml" @@ -42,22 +42,18 @@ }; on_attach = mkLuaInline '' function(client, bufnr) - default_on_attach(client, bufnr); vim.api.nvim_buf_create_user_command(bufnr, 'LspPyrightOrganizeImports', function() - local params = { + client:exec_cmd({ command = 'pyright.organizeimports', arguments = { vim.uri_from_bufnr(bufnr) }, - } - - -- Using client.request() directly because "pyright.organizeimports" is private - -- (not advertised via capabilities), which client:exec_cmd() refuses to call. - -- https://github.com/neovim/neovim/blob/c333d64663d3b6e0dd9aa440e433d346af4a3d81/runtime/lua/vim/lsp/client.lua#L1024-L1030 - client.request('workspace/executeCommand', params, nil, bufnr) + }) end, { desc = 'Organize Imports', }) - vim.api.nvim_buf_create_user_command(bufnr, 'LspPyrightSetPythonPath', set_python_path, { - desc = 'Reconfigure basedpyright with the provided python path', + 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', }) @@ -67,7 +63,7 @@ basedpyright = { enable = true; - cmd = [(getExe' pkgs.basedpyright "basedpyright-langserver") "--stdio"]; + cmd = [(getExe pkgs.basedpyright) "--stdio"]; filetypes = ["python"]; root_markers = [ "pyproject.toml" @@ -89,22 +85,18 @@ }; on_attach = mkLuaInline '' function(client, bufnr) - default_on_attach(client, bufnr); vim.api.nvim_buf_create_user_command(bufnr, 'LspPyrightOrganizeImports', function() - local params = { + client:exec_cmd({ command = 'basedpyright.organizeimports', arguments = { vim.uri_from_bufnr(bufnr) }, - } - - -- Using client.request() directly because "basedpyright.organizeimports" is private - -- (not advertised via capabilities), which client:exec_cmd() refuses to call. - -- https://github.com/neovim/neovim/blob/c333d64663d3b6e0dd9aa440e433d346af4a3d81/runtime/lua/vim/lsp/client.lua#L1024-L1030 - client.request('workspace/executeCommand', params, nil, bufnr) + }) end, { desc = 'Organize Imports', }) - vim.api.nvim_buf_create_user_command(bufnr, 'LspPyrightSetPythonPath', set_python_path, { + 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', @@ -309,8 +301,7 @@ in { lua */ '' - local function set_python_path(server_name, command) - local path = command.args + local function set_python_path(server_name, path) local clients = vim.lsp.get_clients { bufnr = vim.api.nvim_get_current_buf(), name = server_name, @@ -321,7 +312,7 @@ in { else client.config.settings = vim.tbl_deep_extend('force', client.config.settings, { python = { pythonPath = path } }) end - client:notify('workspace/didChangeConfiguration', { settings = nil }) + client.notify('workspace/didChangeConfiguration', { settings = nil }) end end '';