summaryrefslogtreecommitdiff
path: root/vim/.config/nvim/lsp
diff options
context:
space:
mode:
Diffstat (limited to 'vim/.config/nvim/lsp')
-rw-r--r--vim/.config/nvim/lsp/basedpyright.lua66
-rw-r--r--vim/.config/nvim/lsp/clangd.lua7
-rw-r--r--vim/.config/nvim/lsp/csharp-ls.lua9
-rw-r--r--vim/.config/nvim/lsp/cspell-ls.lua8
-rw-r--r--vim/.config/nvim/lsp/gdscript.lua9
-rw-r--r--vim/.config/nvim/lsp/pyright.lua65
-rw-r--r--vim/.config/nvim/lsp/rust-analyzer.lua15
-rw-r--r--vim/.config/nvim/lsp/rust_analyzer.lua9
-rw-r--r--vim/.config/nvim/lsp/tinymist.lua77
-rw-r--r--vim/.config/nvim/lsp/zigscient.lua12
-rw-r--r--vim/.config/nvim/lsp/zls.lua16
11 files changed, 274 insertions, 19 deletions
diff --git a/vim/.config/nvim/lsp/basedpyright.lua b/vim/.config/nvim/lsp/basedpyright.lua
new file mode 100644
index 0000000..5f54c3d
--- /dev/null
+++ b/vim/.config/nvim/lsp/basedpyright.lua
@@ -0,0 +1,66 @@
+---@brief
+---
+--- https://detachhead.github.io/basedpyright
+---
+--- `basedpyright`, a static type checker and language server for python
+
+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
+ 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 = {
+ '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()
+ 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
+ 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,
+}
diff --git a/vim/.config/nvim/lsp/clangd.lua b/vim/.config/nvim/lsp/clangd.lua
index ddbab4f..2fd489a 100644
--- a/vim/.config/nvim/lsp/clangd.lua
+++ b/vim/.config/nvim/lsp/clangd.lua
@@ -4,7 +4,11 @@ return {
-- '--clang-tidy',
'--background-index',
'--offset-encoding=utf-8',
- '--query-driver=/Users/scie/.platformio/packages/toolchain-xtensa-esp32/**'
+ '--query-driver=/Users/scie/.platformio/packages/toolchain-xtensa-esp32/**',
+ '--query-driver=/Users/scie/.platformio/packages/framework-arduinoststm32/**',
+ -- '--query-driver=/Users/scie/.platformio/packages/**',
+ -- '--query-driver=/opt/homebrew/Cellar/avr-gcc@9/9.4.0_1/bin/avr-gcc',
+ -- '--query-driver=/opt/homebrew/Cellar/avr-gcc@9/9.4.0_1/bin/avr-g++'
},
filetypes = { 'c', 'cpp', 'objc', 'objcpp', 'cuda', 'proto', 'arduino' },
root_markers = {
@@ -25,4 +29,3 @@ return {
offsetEncoding = { 'utf-8', 'utf-16' },
},
}
-
diff --git a/vim/.config/nvim/lsp/csharp-ls.lua b/vim/.config/nvim/lsp/csharp-ls.lua
new file mode 100644
index 0000000..037650b
--- /dev/null
+++ b/vim/.config/nvim/lsp/csharp-ls.lua
@@ -0,0 +1,9 @@
+---@type vim.lsp.Config
+return {
+ cmd = { 'csharp-ls' },
+ root_markers = { ".git" },
+ filetypes = { 'cs' },
+ init_options = {
+ AutomaticWorkspaceInit = true,
+ },
+}
diff --git a/vim/.config/nvim/lsp/cspell-ls.lua b/vim/.config/nvim/lsp/cspell-ls.lua
index 4f184af..b01c7a3 100644
--- a/vim/.config/nvim/lsp/cspell-ls.lua
+++ b/vim/.config/nvim/lsp/cspell-ls.lua
@@ -4,7 +4,7 @@
---
return {
cmd = { 'cspell-lsp', '--stdio' },
- filetypes = {"go", "rust", "js", "ts", "html", "css", "json", "yaml", "markdown", "gitcommit", "typst", "lua", "htmlua"},
+ filetypes = { "go", "rust", "js", "ts", "html", "css", "json", "yaml", "markdown", "gitcommit", "typst", "lua", "htmlua", "c", "cpp", "arduino" },
root_markers = {
'.git',
'cspell.json',
@@ -20,4 +20,10 @@ return {
'cspell.yaml',
'cspell.yml',
},
+ init_options = {
+ userWordsFile = vim.fn.expand('~/.config/cspell/user-dictionary.txt'),
+ configPaths = {
+ vim.fn.expand('~/.cspell.json'),
+ },
+ },
}
diff --git a/vim/.config/nvim/lsp/gdscript.lua b/vim/.config/nvim/lsp/gdscript.lua
new file mode 100644
index 0000000..42f3ae2
--- /dev/null
+++ b/vim/.config/nvim/lsp/gdscript.lua
@@ -0,0 +1,9 @@
+local port = os.getenv 'GDScript_Port' or '6005'
+local cmd = vim.lsp.rpc.connect('127.0.0.1', tonumber(port))
+
+---@type vim.lsp.Config
+return {
+ cmd = cmd,
+ filetypes = { 'gd', 'gdscript', 'gdscript3' },
+ root_markers = { 'project.godot', '.git' },
+}
diff --git a/vim/.config/nvim/lsp/pyright.lua b/vim/.config/nvim/lsp/pyright.lua
new file mode 100644
index 0000000..edc802e
--- /dev/null
+++ b/vim/.config/nvim/lsp/pyright.lua
@@ -0,0 +1,65 @@
+---@brief
+---
+--- https://github.com/microsoft/pyright
+---
+--- `pyright`, a static type checker and language server for python
+
+local function set_python_path(command)
+ local path = command.args
+ local clients = vim.lsp.get_clients {
+ bufnr = vim.api.nvim_get_current_buf(),
+ name = 'pyright',
+ }
+ for _, client in ipairs(clients) do
+ if client.settings then
+ client.settings.python = vim.tbl_deep_extend('force', client.settings.python, { 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 = { 'pyright-langserver', '--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 = function(client, bufnr)
+ vim.api.nvim_buf_create_user_command(bufnr, 'LspPyrightOrganizeImports', function()
+ local params = {
+ 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 pyright with the provided python path',
+ nargs = 1,
+ complete = 'file',
+ })
+ end,
+}
diff --git a/vim/.config/nvim/lsp/rust-analyzer.lua b/vim/.config/nvim/lsp/rust-analyzer.lua
new file mode 100644
index 0000000..31c9b63
--- /dev/null
+++ b/vim/.config/nvim/lsp/rust-analyzer.lua
@@ -0,0 +1,15 @@
+return {
+ cmd = { "rust-analyzer" },
+ filetypes = { "rust", "rs" },
+ root_markers = { "Cargo.lock" },
+ settings = {
+ ["rust-analyzer"] = {
+ check = {
+ command = "clippy",
+ },
+ diagnostics = {
+ enable = true,
+ },
+ },
+ },
+}
diff --git a/vim/.config/nvim/lsp/rust_analyzer.lua b/vim/.config/nvim/lsp/rust_analyzer.lua
deleted file mode 100644
index 6187a15..0000000
--- a/vim/.config/nvim/lsp/rust_analyzer.lua
+++ /dev/null
@@ -1,9 +0,0 @@
-return {
- cmd = { 'rust-analyzer' },
- filetypes = { 'rust', 'rs' },
- root_markers = {
- 'cargo.toml',
- '.git'
- },
-}
-
diff --git a/vim/.config/nvim/lsp/tinymist.lua b/vim/.config/nvim/lsp/tinymist.lua
new file mode 100644
index 0000000..5b6a449
--- /dev/null
+++ b/vim/.config/nvim/lsp/tinymist.lua
@@ -0,0 +1,77 @@
+---@brief
+---
+--- https://github.com/Myriad-Dreamin/tinymist
+--- An integrated language service for Typst [taɪpst]. You can also call it "微霭" [wēi ǎi] in Chinese.
+---
+--- Currently some of Tinymist's workspace commands are supported, namely:
+--- `LspTinymistExportSvg`, `LspTinymistExportPng`, `LspTinymistExportPdf
+--- `LspTinymistExportMarkdown`, `LspTinymistExportText`, `LspTinymistExportQuery`,
+--- `LspTinymistExportAnsiHighlight`, `LspTinymistGetServerInfo`,
+--- `LspTinymistGetDocumentTrace`, `LspTinymistGetWorkspaceLabels`, and
+--- `LspTinymistGetDocumentMetrics`.
+
+---@param command_name string
+---@param client vim.lsp.Client
+---@param bufnr integer
+---@return fun():nil run_tinymist_command, string cmd_name, string cmd_desc
+local function create_tinymist_command(command_name, client, bufnr)
+ local export_type = command_name:match 'tinymist%.export(%w+)'
+ local info_type = command_name:match 'tinymist%.(%w+)'
+ if info_type and info_type:match '^get' then
+ info_type = info_type:gsub('^get', 'Get')
+ end
+ local cmd_display = export_type or info_type
+ ---@return nil
+ local function run_tinymist_command()
+ local arguments = { vim.api.nvim_buf_get_name(bufnr) }
+ local title_str = export_type and ('Export ' .. cmd_display) or cmd_display
+ ---@type lsp.Handler
+ local function handler(err, res)
+ if err then
+ return vim.notify(err.code .. ': ' .. err.message, vim.log.levels.ERROR)
+ end
+ -- If exporting, show the string result; else, show the table for inspection
+ vim.notify(export_type and res or vim.inspect(res), vim.log.levels.INFO)
+ end
+ return client:exec_cmd({
+ title = title_str,
+ command = command_name,
+ arguments = arguments,
+ }, { bufnr = bufnr }, handler)
+ end
+ -- Construct a readable command name/desc
+ local cmd_name = export_type and ('TinymistExport' .. cmd_display) or ('Tinymist' .. cmd_display) ---@type string
+ local cmd_desc = export_type and ('Export to ' .. cmd_display) or ('Get ' .. cmd_display) ---@type string
+ return run_tinymist_command, cmd_name, cmd_desc
+end
+
+---@type vim.lsp.Config
+return {
+ cmd = { 'tinymist' },
+ filetypes = { 'typst' },
+ root_markers = { '.git' },
+ on_attach = function(client, bufnr)
+ for _, command in ipairs {
+ 'tinymist.exportSvg',
+ 'tinymist.exportPng',
+ 'tinymist.exportPdf',
+ -- 'tinymist.exportHtml', -- Use typst 0.13
+ 'tinymist.exportMarkdown',
+ 'tinymist.exportText',
+ 'tinymist.exportQuery',
+ 'tinymist.exportAnsiHighlight',
+ 'tinymist.getServerInfo',
+ 'tinymist.getDocumentTrace',
+ 'tinymist.getWorkspaceLabels',
+ 'tinymist.getDocumentMetrics',
+ } do
+ local cmd_func, cmd_name, cmd_desc = create_tinymist_command(command, client, bufnr)
+ vim.api.nvim_buf_create_user_command(bufnr, 'Lsp' .. cmd_name, cmd_func, { nargs = 0, desc = cmd_desc })
+ end
+ end,
+ settings = {
+ ["tinymist"] = {
+ formatterMode = "typstyle"
+ }
+ }
+}
diff --git a/vim/.config/nvim/lsp/zigscient.lua b/vim/.config/nvim/lsp/zigscient.lua
new file mode 100644
index 0000000..cdce2f3
--- /dev/null
+++ b/vim/.config/nvim/lsp/zigscient.lua
@@ -0,0 +1,12 @@
+---@brief
+--- https://github.com/zigtools/zls
+---
+--- Zig LSP implementation + Zig Language Server
+
+---@type vim.lsp.Config
+return {
+ cmd = { 'zigscient' },
+ filetypes = { 'zig', 'zir' },
+ root_markers = { 'zls.json', 'build.zig', '.git' },
+ workspace_required = false,
+}
diff --git a/vim/.config/nvim/lsp/zls.lua b/vim/.config/nvim/lsp/zls.lua
index 332c059..6a8dc08 100644
--- a/vim/.config/nvim/lsp/zls.lua
+++ b/vim/.config/nvim/lsp/zls.lua
@@ -1,10 +1,12 @@
+---@brief
+--- https://github.com/zigtools/zls
+---
+--- Zig LSP implementation + Zig Language Server
+
+---@type vim.lsp.Config
return {
cmd = { 'zls' },
- filetypes = { 'zig' },
- root_markers = {
- 'zls.json',
- 'build.zig',
- '.git'
- },
+ filetypes = { 'zig', 'zir' },
+ root_markers = { 'zls.json', 'build.zig', '.git' },
+ workspace_required = false,
}
-