]> git.rmz.io Git - dotfiles.git/blobdiff - nvim/lua/plugins/lsp.lua
nvim: don't quit nvim from dashboard
[dotfiles.git] / nvim / lua / plugins / lsp.lua
index 7fd027497dc74794e6b4488576f246d89e8e71b9..d020443ec8815d679700aa70083e01ac7534516f 100644 (file)
@@ -3,13 +3,121 @@ return {
   {
     "neovim/nvim-lspconfig",
     ---@class PluginLspOpts
-    --
-    init = function ()
+    opts = function()
       local keys = require("lazyvim.plugins.lsp.keymaps").get()
-
       -- TODO: setup a new mapping for this
       -- { "gr", "<cmd>Telescope lsp_references<cr>", desc = "References" },
       keys[#keys+1] = { "gr", false }
+
+      return {
+        diagnostics = {
+          underline = true,
+          update_in_insert = false,
+          virtual_text = {
+            spacing = 4,
+            source = "if_mani",
+            prefix = "●",
+          },
+          severity_sort = true,
+          signs = {
+            text = {
+              [vim.diagnostic.severity.ERROR] = " ",
+              [vim.diagnostic.severity.WARN]  = " ",
+              [vim.diagnostic.severity.HINT]  = " ",
+              [vim.diagnostic.severity.INFO]  = " ",
+            },
+          },
+        },
+        inlay_hints = { enabled = false, },
+        codelens = { enabled = false, },
+        document_highlight = { enabled = true, },
+        capabilities = {
+          workspace = {
+            fileOperations = {
+              didRename = true,
+              willRename = true,
+            },
+          },
+        },
+        format = {
+          formatting_options = nil,
+          timeout_ms = nil,
+        },
+        -- Automatically format on save
+        -- autoformat = false,
+        -- LSP Server Settings
+        ---@type lspconfig.options
+        servers = {
+          lua_ls = {
+            settings = {
+              Lua = {
+                workspace = { checkThirdParty = false, },
+                codeLens = { enable = true, },
+                completion = { callSnippet = "Replace", },
+                doc = { privateName = { "^_" }, },
+                hint = {
+                  enable = true,
+                  setType = false,
+                  paramType = true,
+                  paramName = "Disable",
+                  semicolon = "Disable",
+                  arrayIndex = "Disable",
+                },
+                diagnostics = {
+                  disable = { "missing-fields", },
+                },
+              },
+            },
+          },
+          -- Add clangd extensions
+          -- https://github.com/p00f/clangd_extensions.nvim
+        },
+        -- you can do any additional lsp server setup here
+        -- return true if you don't want this server to be setup with lspconfig
+        ---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?>
+        setup = {
+          -- example to setup with typescript.nvim
+          -- tsserver = function(_, opts)
+          --   require("typescript").setup({ server = opts })
+          --   return true
+          -- end,
+          -- Specify * to use this function as a fallback for any server
+          -- ["*"] = function(server, opts) end,
+        },
+      }
+    end,
+  },
+
+  -- cmdline tools and lsp servers
+  {
+
+    "williamboman/mason.nvim",
+    cmd = "Mason",
+    keys = { { "<leader>cm", "<cmd>Mason<cr>", desc = "Mason" } },
+    opts = {
+      ensure_installed = {
+        "stylua",
+        "shfmt",
+        -- "flake8",
+      },
+    },
+    ---@param opts MasonSettings | {ensure_installed: string[]}
+    config = function(_, opts)
+      require("mason").setup(opts)
+      local mr = require("mason-registry")
+      local function ensure_installed()
+        for _, tool in ipairs(opts.ensure_installed) do
+          local p = mr.get_package(tool)
+          if not p:is_installed() then
+            p:install()
+          end
+        end
+      end
+      if mr.refresh then
+        mr.refresh(ensure_installed)
+      else
+        ensure_installed()
+      end
     end,
-  }
+  },
 }