diff --git a/lsp/python.lua b/lsp/python.lua new file mode 100644 index 0000000..a98de3c --- /dev/null +++ b/lsp/python.lua @@ -0,0 +1,56 @@ +---@type vim.lsp.Config + +local function set_python_path(path) + local clients = vim.lsp.get_clients({ + bufnr = vim.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) + 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(0, "LspPyrightSetPythonPath", set_python_path, { + desc = "Reconfigure basedpyright with the provided python path", + nargs = 1, + complete = "file", + }) + end, +} diff --git a/lua/weeheavy/plugins/lsp/conform.lua b/lua/weeheavy/plugins/lsp/conform.lua index 615eeea..df78cea 100644 --- a/lua/weeheavy/plugins/lsp/conform.lua +++ b/lua/weeheavy/plugins/lsp/conform.lua @@ -22,10 +22,11 @@ return { text = { "woke" }, graphql = { "prettier" }, lua = { "stylua" }, - python = { "isort", "black" }, + python = { "ruff" }, sh = { "shfmt" }, terraform = { "tflint" }, hcl = { "hclfmt" }, + gitcommit = { "commitlint" }, }, stop_after_first = false, format_on_save = { diff --git a/lua/weeheavy/plugins/lsp/nvim-lint.lua b/lua/weeheavy/plugins/lsp/nvim-lint.lua index d983885..2cba92b 100644 --- a/lua/weeheavy/plugins/lsp/nvim-lint.lua +++ b/lua/weeheavy/plugins/lsp/nvim-lint.lua @@ -11,7 +11,7 @@ return { javascriptreact = { "eslint_d" }, typescriptreact = { "eslint_d" }, svelte = { "eslint_d" }, - python = { "pylint" }, + python = { "ruff" }, ansible = { "woke" }, markdown = { "woke", "proselint" }, text = { "woke" }, diff --git a/lua/weeheavy/prefs.lua b/lua/weeheavy/prefs.lua index 75a4eb6..4a650f2 100644 --- a/lua/weeheavy/prefs.lua +++ b/lua/weeheavy/prefs.lua @@ -12,6 +12,7 @@ vim.lsp.enable({ "docker-compose", "bicep", "proselint", + "python", }) -- Set highlight on search