local P = {}
+P.lsp_keymaps = function(_, bufnr)
+ local bufopts = { noremap = true, silent = true, buffer = bufnr }
+
+ local function n(cmd) return "<cmd>lua " .. cmd .. "()<CR>" end
+ local function ns(cmd)
+ return "<cmd>split | wincmd j | lua " .. cmd .. "()<CR>"
+ end
+ local function nv(cmd)
+ return "<cmd>vsplit | wincmd l | lua " .. cmd .. "()<CR>"
+ end
+ local function nt(cmd)
+ return "<cmd>tab split | lua " .. cmd .. "()<CR>"
+ end
+
+ local function init_g_cmd(key, command)
+ vim.keymap.set('n', '<leader>' .. key, n(command), bufopts)
+ vim.keymap.set('n', '<leader>s' .. key, ns(command), bufopts)
+ vim.keymap.set('n', '<leader>v' .. key, nv(command), bufopts)
+ vim.keymap.set('n', '<leader>t' .. key, nt(command), bufopts)
+ end
+
+ init_g_cmd('gD', "vim.lsp.buf.declaration")
+ init_g_cmd('gd', "vim.lsp.buf.definition")
+ init_g_cmd('gi', "vim.lsp.buf.implementation")
+ init_g_cmd('gf', "vim.lsp.buf.type_definition")
+ vim.keymap.set('n', '<leader>gr', vim.lsp.buf.references, bufopts)
+
+ vim.keymap.set('n', '<leader>kd', vim.diagnostic.open_float, bufopts)
+ vim.keymap.set('n', '<leader>kk', vim.lsp.buf.signature_help, bufopts)
+ vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, bufopts)
+ vim.keymap.set('n', '<leader>ka', vim.lsp.buf.code_action, bufopts)
+ vim.keymap.set('n', '<leader>F', function()
+ vim.lsp.buf.format { async = true }
+ end, bufopts)
+end
+
P.setup = function()
vim.g.mapleader = vim.keycode ' '
--- /dev/null
+local lsp_keymaps_on_attach = require('keybindings').lsp_keymaps
+
+local P = {}
+
+local function automatic_setup(lsps)
+ local lspconfig = require("lspconfig")
+
+ for i in pairs(lsps) do
+ lspconfig[lsps[i]].setup {
+ on_attach = lsp_keymaps_on_attach
+ }
+ end
+end
+
+local function manual_setup_zig()
+ vim.g.zig_fmt_autosave = 0
+end
+
+local function manual_setup_rust()
+ require("lspconfig")['rust_analyzer'].setup {
+ on_attach = lsp_keymaps_on_attach
+ }
+end
+
+local function manual_setup_lua()
+ require("lspconfig").lua_ls.setup {
+ on_attach = lsp_keymaps_on_attach,
+ settings = {
+ Lua = {
+ diagnostics = {
+ globals = { 'vim', 'require' },
+ },
+ workspace = { library = vim.api.nvim_get_runtime_file("", true) },
+ telemetry = { enable = false, },
+ },
+ },
+ }
+end
+
+local function manual_setup_deno()
+ local lspconfig = require('lspconfig')
+
+ lspconfig.denols.setup {
+ on_attach = lsp_keymaps_on_attach,
+ root_dir = lspconfig.util.root_pattern("deno.json", "deno.jsonc"),
+ }
+end
+
+local function manual_setup_node()
+ local lspconfig = require('lspconfig')
+
+ lspconfig.ts_ls.setup {
+ on_attach = lsp_keymaps_on_attach,
+ root_dir = lspconfig.util.root_pattern("package.json"),
+ single_file_support = false
+ }
+end
+
+local function manual_setup()
+ manual_setup_zig()
+ manual_setup_rust()
+ manual_setup_lua()
+ manual_setup_deno()
+ manual_setup_node()
+end
+
+P.config = function()
+ require('mason-lspconfig').setup({ automatic_installation = false })
+
+ local automatic_setup_lsps = {
+ "clangd",
+ "gopls",
+ "zls",
+ "dartls",
+ }
+
+ automatic_setup(automatic_setup_lsps)
+ manual_setup()
+end
+
+return P
{
"neovim/nvim-lspconfig",
dependencies = { "williamboman/mason-lspconfig.nvim", },
- config = function()
- local manual = {
- "deno_ls",
- "lua_ls",
- "ts_ls",
- }
- local automatic = {
- "clangd",
- "gopls",
- "zls",
- }
-
- -- Install LSPs
- local ensure_installed = {}
- for k, v in pairs(manual) do ensure_installed[k] = v end
- for k, v in pairs(automatic) do ensure_installed[k] = v end
- require('mason-lspconfig').setup({
- ensure_installed = ensure_installed,
- automatic_installation = false,
- })
-
- -- LSP =========================================================================
- local function lsp_keymaps_on_attach(_, bufnr)
- local bufopts = { noremap = true, silent = true, buffer = bufnr }
-
- -- Open in a new tab
- local function n(cmd) return "<cmd>lua " .. cmd .. "()<CR>" end
- local function ns(cmd)
- return "<cmd>split | wincmd j | lua " .. cmd .. "()<CR>"
- end
- local function nv(cmd)
- return "<cmd>vsplit | wincmd l | lua " .. cmd .. "()<CR>"
- end
- local function nt(cmd)
- return "<cmd>tab split | lua " .. cmd .. "()<CR>"
- end
-
- local function init_g_cmd(key, command)
- vim.keymap.set('n', '<leader>' .. key, n(command), bufopts)
- vim.keymap.set('n', '<leader>s' .. key, ns(command), bufopts)
- vim.keymap.set('n', '<leader>v' .. key, nv(command), bufopts)
- vim.keymap.set('n', '<leader>t' .. key, nt(command), bufopts)
- end
-
- init_g_cmd('gD', "vim.lsp.buf.declaration")
- init_g_cmd('gd', "vim.lsp.buf.definition")
- init_g_cmd('gi', "vim.lsp.buf.implementation")
- init_g_cmd('gf', "vim.lsp.buf.type_definition")
- vim.keymap.set('n', '<leader>gr', vim.lsp.buf.references, bufopts)
-
- vim.keymap.set('n', '<leader>kd', vim.diagnostic.open_float, bufopts)
- vim.keymap.set('n', '<leader>kk', vim.lsp.buf.signature_help, bufopts)
- vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, bufopts)
- vim.keymap.set('n', '<leader>ka', vim.lsp.buf.code_action, bufopts)
- vim.keymap.set('n', '<leader>F', function()
- vim.lsp.buf.format { async = true }
- end, bufopts)
- end
-
- local lspconfig = require("lspconfig")
- -- Automatic setup
- for i in pairs(automatic) do
- lspconfig[automatic[i]].setup { on_attach = lsp_keymaps_on_attach }
- end
- lspconfig['dartls'].setup { on_attach = lsp_keymaps_on_attach }
-
- -- Manual setup
- vim.g.zig_fmt_autosave = 0
-
- lspconfig['rust_analyzer'].setup { on_attach = lsp_keymaps_on_attach }
-
- lspconfig.lua_ls.setup {
- on_attach = lsp_keymaps_on_attach,
- settings = {
- Lua = {
- diagnostics = {
- globals = { 'vim', 'require' },
- },
- workspace = { library = vim.api.nvim_get_runtime_file("", true) },
- telemetry = { enable = false, },
- },
- },
- }
-
- lspconfig.denols.setup {
- on_attach = lsp_keymaps_on_attach,
- root_dir = lspconfig.util.root_pattern("deno.json", "deno.jsonc"),
- }
-
- lspconfig.ts_ls.setup {
- on_attach = lsp_keymaps_on_attach,
- root_dir = lspconfig.util.root_pattern("package.json"),
- single_file_support = false
- }
- end
+ config = require('lsp').config
},
})