configuration.lua
1 local lspconfig = require("lspconfig") 2 local capabilities = require("blink.cmp").get_lsp_capabilities() 3 4 local default_options = { 5 capabilities = capabilities, 6 on_attach = function(client, bufnr) 7 if client.server_capabilities.inlayHintProvider then 8 vim.lsp.inlay_hint.enable(true, { bufnr = bufnr }) 9 end 10 end, 11 } 12 13 ------------------------------------------------------------------ 14 -- Servers Setup 15 ------------------------------------------------------------------ 16 lspconfig.aiken.setup(default_options) 17 lspconfig.bashls.setup(default_options) 18 lspconfig.buf_ls.setup(default_options) 19 lspconfig.docker_compose_language_service.setup(default_options) 20 lspconfig.dockerls.setup(default_options) 21 lspconfig.jqls.setup(default_options) 22 lspconfig.luau_lsp.setup(default_options) 23 lspconfig.nixd.setup(default_options) 24 lspconfig.postgres_lsp.setup(default_options) 25 lspconfig.ruff.setup(default_options) 26 lspconfig.taplo.setup(default_options) 27 28 lspconfig.clangd.setup({ 29 capabilities = default_options.capabilities, 30 on_attach = default_options.on_attach, 31 settings = { 32 clangd = { 33 InlayHints = { 34 Designators = true, 35 Enabled = true, 36 ParameterNames = true, 37 DeducedTypes = true, 38 }, 39 fallbackFlags = { "-std=c++20" }, 40 }, 41 }, 42 }) 43 44 lspconfig.gopls.setup({ 45 capabilities = default_options.capabilities, 46 on_attach = default_options.on_attach, 47 settings = { 48 hints = { 49 rangeVariableTypes = true, 50 parameterNames = true, 51 constantValues = true, 52 assignVariableTypes = true, 53 compositeLiteralFields = true, 54 compositeLiteralTypes = true, 55 functionTypeParameters = true, 56 }, 57 }, 58 }) 59 60 lspconfig.lua_ls.setup({ 61 capabilities = default_options.capabilities, 62 on_attach = default_options.on_attach, 63 settings = { 64 Lua = { 65 hints = { 66 enable = true, 67 setType = true, 68 arrayIndex = "Enable", 69 }, 70 runtime = { 71 version = "LuaJIT", 72 pathStrict = true, 73 }, 74 telemetry = { 75 enable = false, 76 }, 77 workspace = { 78 check3rdParty = false, 79 80 diagnostics = { 81 globals = { "vim" }, 82 }, 83 84 library = { 85 os.getenv("NIGHTVIM_ROOT") .. "/pack/nightvim/start", 86 vim.env.VIMRUNTIME, 87 }, 88 }, 89 }, 90 }, 91 }) 92 93 lspconfig.pyright.setup({ 94 capabilities = default_options.capabilities, 95 on_attach = default_options.on_attach, 96 settings = { 97 pyright = { 98 disableOrganizeImports = true, 99 }, 100 }, 101 }) 102 103 ------------------------------------------------------------------ 104 -- Diagnostic Symbols 105 ------------------------------------------------------------------ 106 vim.fn.sign_define("DiagnosticSignError", { text = " ", texthl = "DiagnosticSignError" }) 107 vim.fn.sign_define("DiagnosticSignWarn", { text = " ", texthl = "DiagnosticSignWarn" }) 108 vim.fn.sign_define("DiagnosticSignInfo", { text = " ", texthl = "DiagnosticSignInfo" }) 109 vim.fn.sign_define("DiagnosticSignHint", { text = "", texthl = "DiagnosticSignHint" }) 110 111 ------------------------------------------------------------------ 112 -- Keybindings 113 ------------------------------------------------------------------ 114 vim.keymap.set( 115 "n", 116 "gd", 117 "<cmd>lua vim.lsp.buf.declaration()<CR>", 118 { noremap = true, silent = true, desc = "LSP: Go to declaration" } 119 ) 120 vim.keymap.set( 121 "n", 122 "gD", 123 "<cmd>lua vim.lsp.buf.definition()<CR>", 124 { noremap = true, silent = true, desc = "LSP: Go to definition" } 125 ) 126 vim.keymap.set( 127 "n", 128 "K", 129 "<cmd>lua vim.lsp.buf.hover()<CR>", 130 { noremap = true, silent = true, desc = "LSP: Show hover information" } 131 ) 132 vim.keymap.set( 133 "n", 134 "gi", 135 "<cmd>lua vim.lsp.buf.implementation()<CR>", 136 { noremap = true, silent = true, desc = "LSP: Go to implementation" } 137 ) 138 vim.keymap.set( 139 "n", 140 "<leader>ls", 141 "<cmd>lua vim.lsp.buf.signature_help()<CR>", 142 { noremap = true, silent = true, desc = "LSP: Show signature help" } 143 ) 144 vim.keymap.set( 145 "n", 146 "<leader>D", 147 "<cmd>lua vim.lsp.buf.type_definition()<CR>", 148 { noremap = true, silent = true, desc = "LSP: Go to type definition" } 149 ) 150 vim.keymap.set( 151 "n", 152 "<leader>ca", 153 "<cmd>lua vim.lsp.buf.code_action()<CR>", 154 { noremap = true, silent = true, desc = "LSP: Code action" } 155 ) 156 vim.keymap.set( 157 "n", 158 "<leader>cF", 159 "<cmd>lua vim.diagnostic.open_float()<CR>", 160 { noremap = true, silent = true, desc = "LSP: Open diagnostic float" } 161 ) 162 vim.keymap.set( 163 "n", 164 "[d", 165 "<cmd>lua vim.diagnostic.goto_prev()<CR>", 166 { noremap = true, silent = true, desc = "LSP: Go to previous diagnostic" } 167 ) 168 vim.keymap.set( 169 "n", 170 "d]", 171 "<cmd>lua vim.diagnostic.goto_next()<CR>", 172 { noremap = true, silent = true, desc = "LSP: Go to next diagnostic" } 173 ) 174 vim.keymap.set( 175 "n", 176 "<leader>cq", 177 "<cmd>lua vim.diagnostic.setloclist()<CR>", 178 { noremap = true, silent = true, desc = "LSP: Set location list" } 179 ) 180 vim.keymap.set( 181 "n", 182 "<leader>cr", 183 "<cmd>lua vim.lsp.buf.rename()<CR>", 184 { noremap = true, silent = true, desc = "LSP: Rename symbol" } 185 )