/ plugins / lspconfig / configuration.lua
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  )