diff options
| author | talha <talha@talhaamir.xyz> | 2026-07-26 11:55:58 +0500 |
|---|---|---|
| committer | talha <talha@talhaamir.xyz> | 2026-07-26 11:55:58 +0500 |
| commit | 1c8503345693788660ac0a132b111ebeb08ed87f (patch) | |
| tree | f78456b136fef6ad77885ee518e3def2dcde1a6f /lsp | |
| parent | 70fe2441aa025243e29d47aabe1b6674c4e0ed71 (diff) | |
Updated config
Diffstat (limited to 'lsp')
| -rw-r--r-- | lsp/pyright.lua | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/lsp/pyright.lua b/lsp/pyright.lua new file mode 100644 index 0000000..6973622 --- /dev/null +++ b/lsp/pyright.lua @@ -0,0 +1,76 @@ +---@brief +--- +--- https://detachhead.github.io/basedpyright +--- +--- `basedpyright`, a static type checker and language server for python +--- +--- Tagged hints are disabled by default. See Pyright for more details. +--- Set `basedpyright.disableTaggedHints = false` to re-enable. + +local function set_python_path(command) + local path = command.args + 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 + ---@diagnostic disable-next-line: param-type-mismatch + 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 + +---@type vim.lsp.Config +return { + cmd = { 'basedpyright-langserver', '--stdio' }, + filetypes = { 'python' }, + root_markers = { + 'pyrightconfig.json', + 'pyproject.toml', + 'setup.py', + 'setup.cfg', + 'requirements.txt', + 'Pipfile', + '.git', + }, + ---@type lspconfig.settings.basedpyright + settings = { + basedpyright = { + analysis = { + autoSearchPaths = true, + diagnosticMode = 'openFilesOnly', + -- https://docs.basedpyright.com/latest/configuration/language-server-settings/ + -- Explicitly setting `basedpyright.analysis.useLibraryCodeForTypes` is **discouraged** by the official docs. + -- Because it will override per-project configurations like `pyproject.toml`. + -- If left unset, its default value is `true`, and it can be correctly overridden by project config files. + }, + disableTaggedHints = true, + }, + }, + on_attach = function(client, bufnr) + vim.api.nvim_buf_create_user_command(bufnr, 'LspPyrightOrganizeImports', function() + local params = { + 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 + ---@diagnostic disable-next-line: param-type-mismatch + 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', + nargs = 1, + complete = 'file', + }) + end, +} |
