summaryrefslogtreecommitdiff
path: root/.config/nvim-old/lua/config/plugins/lsp.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/nvim-old/lua/config/plugins/lsp.lua')
-rw-r--r--.config/nvim-old/lua/config/plugins/lsp.lua240
1 files changed, 240 insertions, 0 deletions
diff --git a/.config/nvim-old/lua/config/plugins/lsp.lua b/.config/nvim-old/lua/config/plugins/lsp.lua
new file mode 100644
index 0000000..eb812d2
--- /dev/null
+++ b/.config/nvim-old/lua/config/plugins/lsp.lua
@@ -0,0 +1,240 @@
+return {
+ "neovim/nvim-lspconfig",
+ event = "VeryLazy",
+ dependencies = {
+ { "williamboman/mason.nvim", opts = {} },
+ "williamboman/mason-lspconfig.nvim",
+ "WhoIsSethDaniel/mason-tool-installer.nvim",
+ {
+ "j-hui/fidget.nvim",
+ opts = {
+ notification = {
+ window = {
+ winblend = 0,
+ },
+ },
+ },
+ },
+ },
+ config = function()
+ vim.api.nvim_create_autocmd("LspAttach", {
+ group = vim.api.nvim_create_augroup("kickstart-lsp-attach", { clear = true }),
+ callback = function(event)
+ local map = function(keys, func, desc, mode)
+ mode = mode or "n"
+ vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = "LSP: " .. desc })
+ end
+
+ -- Jump to the definition of the word under your cursor.
+ -- This is where a variable was first declared, or where a function is defined, etc.
+ -- To jump back, press <C-t>.
+ map("gd", require("fzf-lua").lsp_definitions, "Goto Definition")
+
+ map("gk", function()
+ vim.diagnostic.open_float()
+ end, "Open floating diagnostic")
+
+ -- Find references for the word under your cursor.
+ map("gr", require("fzf-lua").lsp_references, "Goto References")
+
+ -- Jump to the implementation of the word under your cursor.
+ -- Useful when your language has ways of declaring types without an actual implementation.
+ map("gI", require("fzf-lua").lsp_implementations, "Goto Implementation")
+
+ -- Jump to the type of the word under your cursor.
+ -- Useful when you're not sure what type a variable is and you want to see
+ -- the definition of its *type*, not where it was *defined*.
+ map("<leader>D", require("fzf-lua").lsp_typedefs, "Type Definition")
+
+ -- Fuzzy find all the symbols in your current document.
+ -- Symbols are things like variables, functions, types, etc.
+ map("<leader>ds", require("fzf-lua").lsp_document_symbols, "Document Symbols")
+
+ -- Fuzzy find all the symbols in your current workspace.
+ -- Similar to document symbols, except searches over your entire project.
+ map("<leader>ws", require("fzf-lua").lsp_live_workspace_symbols, "Workspace Symbols")
+
+ -- Rename the variable under your cursor.
+ -- Most Language Servers support renaming across files, etc.
+ map("gR", vim.lsp.buf.rename, "Rename")
+
+ -- Execute a code action, usually your cursor needs to be on top of an error
+ -- or a suggestion from your LSP for this to activate.
+ map("<leader>ca", vim.lsp.buf.code_action, "Code Action", { "n", "x" })
+
+ -- WARN: This is not Goto Definition, this is Goto Declaration.
+ -- For example, in C this would take you to the header.
+ map("gD", vim.lsp.buf.declaration, "Goto Declaration")
+ local function client_supports_method(client, method, bufnr)
+ if vim.fn.has("nvim-0.11") == 1 then
+ return client:supports_method(method, bufnr)
+ else
+ return client.supports_method(method, { bufnr = bufnr })
+ end
+ end
+
+ -- The following two autocommands are used to highlight references of the
+ -- word under your cursor when your cursor rests there for a little while.
+ -- See `:help CursorHold` for information about when this is executed
+ --
+ -- When you move your cursor, the highlights will be cleared (the second autocommand).
+ local client = vim.lsp.get_client_by_id(event.data.client_id)
+ if
+ client
+ and client_supports_method(client, vim.lsp.protocol.Methods.textDocument_documentHighlight, event.buf)
+ then
+ local highlight_augroup = vim.api.nvim_create_augroup("kickstart-lsp-highlight", { clear = false })
+ vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, {
+ buffer = event.buf,
+ group = highlight_augroup,
+ callback = vim.lsp.buf.document_highlight,
+ })
+
+ vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, {
+ buffer = event.buf,
+ group = highlight_augroup,
+ callback = vim.lsp.buf.clear_references,
+ })
+
+ vim.api.nvim_create_autocmd("LspDetach", {
+ group = vim.api.nvim_create_augroup("kickstart-lsp-detach", { clear = true }),
+ callback = function(event2)
+ vim.lsp.buf.clear_references()
+ vim.api.nvim_clear_autocmds({ group = "kickstart-lsp-highlight", buffer = event2.buf })
+ end,
+ })
+ end
+
+ -- The following code creates a keymap to toggle inlay hints in your
+ -- code, if the language server you are using supports them
+ --
+ vim.api.nvim_set_hl(0, "LspInlayHint", { fg = "#4c566a", bg = "NONE", italic = true })
+
+ -- This may be unwanted, since they displace some of your code
+ if client and client_supports_method(client, vim.lsp.protocol.Methods.textDocument_inlayHint, event.buf) then
+ map("<leader>th", function()
+ vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = event.buf }))
+ end, "Toggle Inlay Hints")
+ end
+ end,
+ })
+
+ vim.keymap.set("n", "gK", function()
+ local new_config = not vim.diagnostic.config().virtual_lines
+ vim.diagnostic.config({ virtual_lines = new_config })
+ end, { desc = "Toggle diagnostic virtual_lines" })
+
+ -- Diagnostic Config
+ -- See :help vim.diagnostic.Opts
+ vim.diagnostic.config({
+ severity_sort = true,
+ float = { border = "rounded", source = "if_many" },
+ underline = { severity = vim.diagnostic.severity.ERROR },
+ signs = {
+ text = {
+ [vim.diagnostic.severity.ERROR] = "󰅚 ",
+ [vim.diagnostic.severity.WARN] = "󰀪 ",
+ [vim.diagnostic.severity.INFO] = "󰋽 ",
+ [vim.diagnostic.severity.HINT] = "󰌶 ",
+ },
+ },
+ virtual_text = {
+ source = "if_many",
+ spacing = 2,
+ },
+ update_in_insert = true,
+ virtual_lines = false,
+ -- virtual_text = {
+ -- source = "if_many",
+ -- spacing = 2,
+ -- format = function(diagnostic)
+ -- local diagnostic_message = {
+ -- [vim.diagnostic.severity.ERROR] = diagnostic.message,
+ -- [vim.diagnostic.severity.WARN] = diagnostic.message,
+ -- [vim.diagnostic.severity.INFO] = diagnostic.message,
+ -- [vim.diagnostic.severity.HINT] = diagnostic.message,
+ -- }
+ -- return diagnostic_message[diagnostic.severity]
+ -- end,
+ -- },
+ })
+ local original_capabilities = vim.lsp.protocol.make_client_capabilities()
+ local capabilities = require("blink.cmp").get_lsp_capabilities(original_capabilities)
+ -- Enable the following language servers
+ -- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
+ --
+ -- Add any additional override configuration in the following tables. Available keys are:
+ -- - cmd (table): Override the default command used to start the server
+ -- - filetypes (table): Override the default list of associated filetypes for the server
+ -- - capabilities (table): Override fields in capabilities. Can be used to disable certain LSP features.
+ -- - settings (table): Override the default settings passed when initializing the server.
+ -- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/
+ local lspconfig_util = require("lspconfig.util")
+ local servers = {
+ bashls = {},
+ marksman = {},
+ pyright = {
+ settings = {
+ python = {
+ analysis = {
+ typeCheckingMode = "basic",
+ autoSearchPaths = true,
+ useLibraryCodeForTypes = true,
+ },
+ },
+ },
+ },
+ clangd = {
+ cmd = {
+ "clangd",
+ "--fallback-style={BasedOnStyle: LLVM, IndentWidth: 4, TabWidth: 4, UseTab: Never}",
+ },
+ },
+ rust_analyzer = {
+ single_file_support = true,
+ root_dir = function(fname)
+ return lspconfig_util.root_pattern("Cargo.toml", "rust-project.json", ".git")(fname)
+ or vim.fs.dirname(fname)
+ end,
+ },
+ lua_ls = {},
+ } -- Ensure the servers and tools above are installed
+ --
+ -- To check the current status of installed tools and/or manually install
+ -- other tools, you can run
+ -- :Mason
+ --
+ -- You can press `g?` for help in this menu.
+ --
+ -- `mason` had to be setup earlier: to configure its options see the
+ -- `dependencies` table for `nvim-lspconfig` above.
+ --
+ -- You can add other tools here that you want Mason to install
+ -- for you, so that they are available from within Neovim.
+ local ensure_installed = vim.tbl_keys(servers or {})
+ vim.list_extend(ensure_installed, {
+ "stylua",
+ "prettierd",
+ })
+ require("mason-tool-installer").setup({ ensure_installed = ensure_installed })
+
+ require("mason-lspconfig").setup({
+ ensure_installed = {}, -- explicitly set to an empty table (Kickstart populates installs via mason-tool-installer)
+ automatic_installation = false,
+ automatic_enable = false,
+ handlers = {
+ function(server_name)
+ if server_name == "rust_analyzer" then
+ return
+ end
+ local server = servers[server_name] or {}
+ -- This handles overriding only values explicitly passed
+ -- by the server configuration above. Useful when disabling
+ -- certain features of an LSP (for example, turning off formatting for ts_ls)
+ server.capabilities = vim.tbl_deep_extend("force", {}, capabilities, server.capabilities or {})
+ require("lspconfig")[server_name].setup(server)
+ end,
+ },
+ })
+ end,
+}