summaryrefslogtreecommitdiffstats
path: root/.config/nvim/lua/lsp
diff options
context:
space:
mode:
Diffstat (limited to '.config/nvim/lua/lsp')
-rw-r--r--.config/nvim/lua/lsp/bashls.lua12
-rw-r--r--.config/nvim/lua/lsp/ccls.lua30
-rw-r--r--.config/nvim/lua/lsp/gopls.lua25
-rw-r--r--.config/nvim/lua/lsp/luals.lua14
4 files changed, 81 insertions, 0 deletions
diff --git a/.config/nvim/lua/lsp/bashls.lua b/.config/nvim/lua/lsp/bashls.lua
new file mode 100644
index 0000000..54d562f
--- /dev/null
+++ b/.config/nvim/lua/lsp/bashls.lua
@@ -0,0 +1,12 @@
+vim.lsp.config('bashls', {
+ cmd = { 'bash-language-server', 'start' },
+ settings = {
+ bashIde = {
+ globPattern = vim.env.GLOB_PATTERN or '*@(.sh|.inc|.bash|.command)',
+ },
+ },
+ filetypes = { 'bash', 'sh', 'zsh' },
+ root_markers = { '.git' },
+})
+
+vim.lsp.enable('bashls')
diff --git a/.config/nvim/lua/lsp/ccls.lua b/.config/nvim/lua/lsp/ccls.lua
new file mode 100644
index 0000000..431d547
--- /dev/null
+++ b/.config/nvim/lua/lsp/ccls.lua
@@ -0,0 +1,30 @@
+local function switch_source_header(client, bufnr)
+ local method_name = 'textDocument/switchSourceHeader'
+ local params = vim.lsp.util.make_text_document_params(bufnr)
+ client:request(method_name, params, function(err, result)
+ if err then
+ error(tostring(err))
+ end
+ if not result then
+ vim.notify('corresponding file cannot be determined')
+ return
+ end
+ vim.cmd.edit(vim.uri_to_fname(result))
+ end, bufnr)
+end
+
+vim.lsp.config('ccls', {
+ cmd = { 'ccls' },
+ filetypes = { 'c', 'cpp', 'objc', 'objcpp', 'cuda' },
+ root_markers = { 'compile_commands.json', '.ccls', '.git' },
+ offset_encoding = 'utf-32',
+ -- ccls does not support sending a null root directory
+ workspace_required = true,
+ on_attach = function(client, bufnr)
+ vim.api.nvim_buf_create_user_command(bufnr, 'LspCclsSwitchSourceHeader', function()
+ switch_source_header(client, bufnr)
+ end, { desc = 'Switch between source/header' })
+ end,
+})
+
+vim.lsp.enable('ccls')
diff --git a/.config/nvim/lua/lsp/gopls.lua b/.config/nvim/lua/lsp/gopls.lua
new file mode 100644
index 0000000..c37da39
--- /dev/null
+++ b/.config/nvim/lua/lsp/gopls.lua
@@ -0,0 +1,25 @@
+vim.lsp.config('gopls', {
+ cmd = {'gopls'},
+ filetypes = { 'go', 'gomod', 'gowork', 'gotmpl' },
+ root_markers = {'go.mod', 'go.sum', '.git'},
+ settings = {
+ gopls = {
+ analyses = {
+ unreachable = true,
+ unusedparams = true,
+ },
+ codelenses = {
+ generate = true,
+ gc_details = true,
+ },
+ annotations = {
+ bounds = true,
+ escape = true,
+ inline = true,
+ },
+ gofumpt = true,
+ }
+ }
+})
+
+vim.lsp.enable('gopls')
diff --git a/.config/nvim/lua/lsp/luals.lua b/.config/nvim/lua/lsp/luals.lua
new file mode 100644
index 0000000..40d4c3d
--- /dev/null
+++ b/.config/nvim/lua/lsp/luals.lua
@@ -0,0 +1,14 @@
+vim.lsp.config('luals', {
+ cmd = {'lua-language-server'},
+ filetypes = {'lua'},
+ root_markers = {'.luarc.json', '.luarc.jsonc'},
+ settings = {
+ Lua = {
+ diagnostics = {
+ globals = { "vim" }
+ }
+ }
+ }
+})
+
+vim.lsp.enable('luals')