diff --git a/lua/shelbybark/plugins/nvim-cmp.lua b/lua/shelbybark/plugins/cmp.lua similarity index 100% rename from lua/shelbybark/plugins/nvim-cmp.lua rename to lua/shelbybark/plugins/cmp.lua diff --git a/lua/shelbybark/plugins/lsp/lspconfig.lua b/lua/shelbybark/plugins/lsp/lspconfig.lua index 6c747d8..bed9a71 100644 --- a/lua/shelbybark/plugins/lsp/lspconfig.lua +++ b/lua/shelbybark/plugins/lsp/lspconfig.lua @@ -1,15 +1,103 @@ return { "neovim/nvim-lspconfig", dependencies = { + { "hrsh7th/cmp-nvim-lsp" }, { "williamboman/mason.nvim" }, { "williamboman/mason-lspconfig.nvim" }, }, lazy = false, config = function() require("mason").setup() - require("mason-lspconfig").setup({ - automatic_enable = true, + -- import lspconfig plugin + local lspconfig = require("lspconfig") + + -- require("mason-lspconfig").setup({ + -- automatic_enable = true, + -- }) + -- import mason_lspconfig plugin + local mason_lspconfig = require("mason-lspconfig") + + -- import cmp-nvim-lsp plugin + local cmp_nvim_lsp = require("cmp_nvim_lsp") + + local keymap = vim.keymap -- for conciseness + + vim.api.nvim_create_autocmd("LspAttach", { + group = vim.api.nvim_create_augroup("UserLspConfig", {}), + callback = function(ev) + -- Buffer local mappings. + -- See `:help vim.lsp.*` for documentation on any of the below functions + local opts = { buffer = ev.buf, silent = true } + + -- set keybinds + opts.desc = "Show LSP references" + keymap.set("n", "gR", "Telescope lsp_references", opts) -- show definition, references + + opts.desc = "Go to declaration" + keymap.set("n", "gD", vim.lsp.buf.declaration, opts) -- go to declaration + + opts.desc = "Show LSP definitions" + keymap.set("n", "gd", "Telescope lsp_definitions", opts) -- show lsp definitions + + opts.desc = "Show LSP implementations" + keymap.set("n", "gi", "Telescope lsp_implementations", opts) -- show lsp implementations + + opts.desc = "Show LSP type definitions" + keymap.set("n", "gt", "Telescope lsp_type_definitions", opts) -- show lsp type definitions + + opts.desc = "See available code actions" + keymap.set({ "n", "v" }, "ca", vim.lsp.buf.code_action, opts) -- see available code actions, in visual mode will apply to selection + + opts.desc = "Smart rename" + keymap.set("n", "rn", vim.lsp.buf.rename, opts) -- smart rename + + opts.desc = "Show buffer diagnostics" + keymap.set("n", "D", "Telescope diagnostics bufnr=0", opts) -- show diagnostics for file + + opts.desc = "Show line diagnostics" + keymap.set("n", "d", vim.diagnostic.open_float, opts) -- show diagnostics for line + + opts.desc = "Go to previous diagnostic" + keymap.set("n", "[d", vim.diagnostic.goto_prev, opts) -- jump to previous diagnostic in buffer + + opts.desc = "Go to next diagnostic" + keymap.set("n", "]d", vim.diagnostic.goto_next, opts) -- jump to next diagnostic in buffer + + opts.desc = "Show documentation for what is under cursor" + keymap.set("n", "K", vim.lsp.buf.hover, opts) -- show documentation for what is under cursor + + opts.desc = "Restart LSP" + keymap.set("n", "rs", ":LspRestart", opts) -- mapping to restart lsp if necessary + end, }) + + -- used to enable autocompletion (assign to every lsp server config) + local capabilities = cmp_nvim_lsp.default_capabilities() + + -- Change the Diagnostic symbols in the sign column (gutter) + -- (not in youtube nvim video) + local signs = { Error = " ", Warn = " ", Hint = "󰠠 ", Info = " " } + for type, icon in pairs(signs) do + local hl = "DiagnosticSign" .. type + vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" }) + end + + vim.lsp.config.emmet_ls = { + on_attach = on_attach, + capabilities = capabilities, + filetypes = { + "html", + "htmldjango", + "typescriptreact", + "javascriptreact", + "css", + "sass", + "scss", + "less", + "svelte", + "php", + }, + } end, } -- return {