From 22157e682a92fcf48e2071d19887fe3b7eb6b620 Mon Sep 17 00:00:00 2001 From: Pratik Tripathy Date: Tue, 29 Jul 2025 11:33:35 +0530 Subject: [PATCH] fix(neovim-lsp): Default LSP configured with default LSP client & color completions - Default configs for: markdownlint, marksman, prettier, shellcheck, shellharden, shfmt, trivy - Configure `mason` to `append` PATH - Configure completions for `nvim-highlight-colors` --- common/.config/nvim/lsp/markdownlint.lua | 1 + common/.config/nvim/lsp/markman.lua | 1 + common/.config/nvim/lsp/prettier.lua | 1 + common/.config/nvim/lsp/shellcheck.lua | 1 + common/.config/nvim/lsp/shellharden.lua | 1 + common/.config/nvim/lsp/shfmt.lua | 1 + common/.config/nvim/lsp/trivy.lua | 1 + common/.config/nvim/lua/core/lsp.lua | 31 +++++------- common/.config/nvim/lua/plugins/code-lsp.lua | 52 ++++++++++++++++++-- 9 files changed, 67 insertions(+), 23 deletions(-) create mode 100644 common/.config/nvim/lsp/markdownlint.lua create mode 100644 common/.config/nvim/lsp/markman.lua create mode 100644 common/.config/nvim/lsp/prettier.lua create mode 100644 common/.config/nvim/lsp/shellcheck.lua create mode 100644 common/.config/nvim/lsp/shellharden.lua create mode 100644 common/.config/nvim/lsp/shfmt.lua create mode 100644 common/.config/nvim/lsp/trivy.lua diff --git a/common/.config/nvim/lsp/markdownlint.lua b/common/.config/nvim/lsp/markdownlint.lua new file mode 100644 index 0000000..a564707 --- /dev/null +++ b/common/.config/nvim/lsp/markdownlint.lua @@ -0,0 +1 @@ +return {} diff --git a/common/.config/nvim/lsp/markman.lua b/common/.config/nvim/lsp/markman.lua new file mode 100644 index 0000000..a564707 --- /dev/null +++ b/common/.config/nvim/lsp/markman.lua @@ -0,0 +1 @@ +return {} diff --git a/common/.config/nvim/lsp/prettier.lua b/common/.config/nvim/lsp/prettier.lua new file mode 100644 index 0000000..a564707 --- /dev/null +++ b/common/.config/nvim/lsp/prettier.lua @@ -0,0 +1 @@ +return {} diff --git a/common/.config/nvim/lsp/shellcheck.lua b/common/.config/nvim/lsp/shellcheck.lua new file mode 100644 index 0000000..a564707 --- /dev/null +++ b/common/.config/nvim/lsp/shellcheck.lua @@ -0,0 +1 @@ +return {} diff --git a/common/.config/nvim/lsp/shellharden.lua b/common/.config/nvim/lsp/shellharden.lua new file mode 100644 index 0000000..a564707 --- /dev/null +++ b/common/.config/nvim/lsp/shellharden.lua @@ -0,0 +1 @@ +return {} diff --git a/common/.config/nvim/lsp/shfmt.lua b/common/.config/nvim/lsp/shfmt.lua new file mode 100644 index 0000000..a564707 --- /dev/null +++ b/common/.config/nvim/lsp/shfmt.lua @@ -0,0 +1 @@ +return {} diff --git a/common/.config/nvim/lsp/trivy.lua b/common/.config/nvim/lsp/trivy.lua new file mode 100644 index 0000000..a564707 --- /dev/null +++ b/common/.config/nvim/lsp/trivy.lua @@ -0,0 +1 @@ +return {} diff --git a/common/.config/nvim/lua/core/lsp.lua b/common/.config/nvim/lua/core/lsp.lua index 0d717c7..9e7055a 100644 --- a/common/.config/nvim/lua/core/lsp.lua +++ b/common/.config/nvim/lua/core/lsp.lua @@ -4,15 +4,22 @@ -- Step 2: Append the LSP server name in the below array vim.lsp.enable({ "bashls", - "cssls", + "shellcheck", + "shellharden", + "shfmt", "docker_compose_language_service", "dockerls", - "html", "jsonls", "lua_ls", "pylsp", "sqlls", + "cssls", + "html", "ts_ls", + "prettier", + "marksman", + "markdownlint", + "trivy", }) -- TIP: On new systems, install these through Mason @@ -61,34 +68,22 @@ vim.api.nvim_create_autocmd("LspAttach", { callback = function(event) local client = vim.lsp.get_client_by_id(event.data.client_id) - -- Setup native LSP completion - -- This is already done by blink, but better prefer the builtin one - if client:supports_method("textDocument/completion") then - vim.opt.completeopt = { "menu", "menuone", "noinsert", "fuzzy", "popup" } - vim.lsp.completion.enable(true, client.id, event.buf, { autotrigger = true }) - vim.keymap.set("i", "", function() - vim.lsp.completion.get() - end) - end - - -- Keymaps + -- Generic Keymaps local map = function(keys, func, desc, mode) mode = mode or "n" vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = "LSP: " .. desc }) end map("", vim.lsp.buf.rename, "Rename Symbol") + map("cR", vim.lsp.buf.rename, "Rename Symbol") map("gD", vim.lsp.buf.declaration, "[G]oto [D]eclaration") - map("nf", function() - vim.fn.setreg("+", vim.fn.expand("%:p")) - print("Copied: " .. vim.fn.expand("%:p") .. " to + register") - end, "Copy current [F]ile path to register") -- LspSaga map("", "Lspsaga code_action", "Code Actions") + map("K", "Lspsaga hover_doc", "Hover Documentation") map("cr", "Lspsaga finder", "Goto References") map("cF", "Lspsaga peek_definition", "Peek definition: Function") - map("cT", "Lspsaga peek_type_definition", "Peek definition: Class") + map("cT", "Lspsaga peek_type_definition", "Peek definition: Type") map("cI", "Lspsaga finder imp", "Peek: Implementations") -- e to jump to the symbol under cursor; q to quit map("co", "Lspsaga outline", "Outline Panel on Left") diff --git a/common/.config/nvim/lua/plugins/code-lsp.lua b/common/.config/nvim/lua/plugins/code-lsp.lua index 398f9ed..e20b798 100644 --- a/common/.config/nvim/lua/plugins/code-lsp.lua +++ b/common/.config/nvim/lua/plugins/code-lsp.lua @@ -3,7 +3,11 @@ return { "neovim/nvim-lspconfig", cond = require("config.util").is_not_vscode(), dependencies = { - { "williamboman/mason.nvim", config = true }, -- TIP: Must be loaded before dependants + { + "williamboman/mason.nvim", + config = true, + opts = { PATH = "append" }, + }, "williamboman/mason-lspconfig.nvim", "WhoIsSethDaniel/mason-tool-installer.nvim", "saghen/blink.cmp", @@ -156,11 +160,49 @@ return { -- Highlight colors { "brenoprata10/nvim-highlight-colors", - setup = { - enable_tailwind = true, - }, + setup = { enable_tailwind = true }, config = function() - require("nvim-highlight-colors").setup() + require("nvim-highlight-colors").setup({ + render = "virtual", + virtual_symbol_position = "eow", + virtual_symbol_prefix = " ", + virtual_symbol_suffix = "", + completion = { + menu = { + draw = { + components = { + -- customize the drawing of kind icons + kind_icon = { + text = function(ctx) + -- default kind icon + local icon = ctx.kind_icon + -- if LSP source, check for color derived from documentation + if ctx.item.source_name == "LSP" then + local color_item = require("nvim-highlight-colors").format(ctx.item.documentation, { kind = ctx.kind }) + if color_item and color_item.abbr ~= "" then + icon = color_item.abbr + end + end + return icon .. ctx.icon_gap + end, + highlight = function(ctx) + -- default highlight group + local highlight = "BlinkCmpKind" .. ctx.kind + -- if LSP source, check for color derived from documentation + if ctx.item.source_name == "LSP" then + local color_item = require("nvim-highlight-colors").format(ctx.item.documentation, { kind = ctx.kind }) + if color_item and color_item.abbr_hl_group then + highlight = color_item.abbr_hl_group + end + end + return highlight + end, + }, + }, + }, + }, + }, + }) end, }, }