diff --git a/nix/home/default.nix b/nix/home/default.nix index 6ab7602..6570f2e 100644 --- a/nix/home/default.nix +++ b/nix/home/default.nix @@ -104,7 +104,7 @@ in cmake-format cmake-lint python313Packages.debugpy - pyright + basedpyright lua-language-server typescript-language-server vscode-langservers-extracted diff --git a/nvim/lsp/basedpyright.lua b/nvim/lsp/basedpyright.lua new file mode 100644 index 0000000..79dba73 --- /dev/null +++ b/nvim/lsp/basedpyright.lua @@ -0,0 +1,57 @@ +local api = vim.api +local lsp = vim.lsp + +local function set_python_path(path) + local clients = lsp.get_clients { + bufnr = api.nvim_get_current_buf(), + name = "basedpyright", + } + 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 + +return { + cmd = { "basedpyright-langserver", "--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 = function(client, bufnr) + 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", + }) + + api.nvim_buf_create_user_command(bufnr, "LspPyrightSetPythonPath", set_python_path, { + desc = "Reconfigure basedpyright with the provided python path", + nargs = 1, + complete = "file", + }) + end, +} diff --git a/nvim/lsp/pyright.lua b/nvim/lsp/pyright.lua deleted file mode 100644 index e92ae42..0000000 --- a/nvim/lsp/pyright.lua +++ /dev/null @@ -1,21 +0,0 @@ -return { - cmd = { "pyright-langserver", "--stdio" }, - filetypes = { "python", "py" }, - root_markers = { - "pyproject.toml", - "setup.py", - "setup.cfg", - "requirements.txt", - "Pipfile", - "pyrightconfig.json", - }, - settings = { - python = { - analysis = { - autoSearchPaths = true, - useLibraryCodeForTypes = true, - diagnosticMode = "openFilesOnly", - }, - }, - }, -}