diff --git a/init.lua b/init.lua index c3185061..dd3239fb 100644 --- a/init.lua +++ b/init.lua @@ -17,91 +17,6 @@ vim.opt.rtp:prepend(lazypath) require('lazy').setup('plugins'); require('lua/settings'); --- [[ Configure Telescope ]] --- [[ Configure LSP ]] -local on_attach = function(_, bufnr) - local nmap = function(keys, func, desc) - if desc then - desc = 'LSP: ' .. desc - end - - vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) - end - - nmap('rn', vim.lsp.buf.rename, '[R]e[n]ame') - nmap('ca', vim.lsp.buf.code_action, '[C]ode [A]ction') - - nmap('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition') - nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') - nmap('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation') - nmap('D', require('telescope.builtin').lsp_type_definitions, 'Type [D]efinition') - nmap('ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') - nmap('ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') - - nmap('K', vim.lsp.buf.hover, 'Hover Documentation') - nmap('', vim.lsp.buf.signature_help, 'Signature Documentation') - - -- Lesser used LSP functionality - nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') - nmap('wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') - nmap('wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') - nmap('wl', function() - print(vim.inspect(vim.lsp.buf.list_workspace_folders())) - end, '[W]orkspace [L]ist Folders') - - -- Create a command `:Format` local to the LSP buffer - vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) - vim.lsp.buf.format() - end, { desc = 'Format current buffer with LSP' }) -end - --- mason-lspconfig requires that these setup functions are called in this order --- before setting up the servers. -require('mason').setup() -require('mason-lspconfig').setup() - --- Enable the following language servers -local servers = { - -- clangd = {}, - -- gopls = {}, - -- pyright = {}, - rust_analyzer = { filetypes = {'rust', 'rs'}}, - tsserver = {}, - -- html = { filetypes = { 'html', 'twig', 'hbs'} }, - - lua_ls = { - Lua = { - workspace = { checkThirdParty = false }, - telemetry = { enable = false }, - }, - }, -} - --- Setup neovim lua configuration -require('neodev').setup() - --- nvim-cmp supports additional completion capabilities, so broadcast that to servers -local capabilities = vim.lsp.protocol.make_client_capabilities() -capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) - --- Ensure the servers above are installed -local mason_lspconfig = require 'mason-lspconfig' - -mason_lspconfig.setup { - ensure_installed = vim.tbl_keys(servers), -} - -mason_lspconfig.setup_handlers { - function(server_name) - require('lspconfig')[server_name].setup { - capabilities = capabilities, - on_attach = on_attach, - settings = servers[server_name], - filetypes = (servers[server_name] or {}).filetypes, - } - end, -} - -- [[ Configure nvim-cmp ]] local cmp = require 'cmp' local luasnip = require 'luasnip' @@ -135,7 +50,5 @@ cmp.setup { }, } -vim.opt.spell = true -vim.opt.spelloptions = 'camel' -- vim: ts=2 sts=2 sw=2 et diff --git a/lua/plugins/lspconfig.lua b/lua/plugins/lspconfig.lua index b28c83b1..122cda60 100644 --- a/lua/plugins/lspconfig.lua +++ b/lua/plugins/lspconfig.lua @@ -1,3 +1,34 @@ +local function keymaps(bufnr) + local keymap = function(keys, func, desc) + if desc then + desc = 'LSP: ' .. desc + end + + vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) + end + + keymap('rn', vim.lsp.buf.rename, '[R]e[n]ame') + keymap('ca', vim.lsp.buf.code_action, '[C]ode [A]ction') + + keymap('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition') + keymap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') + keymap('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation') + keymap('D', require('telescope.builtin').lsp_type_definitions, 'Type [D]efinition') + keymap('ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') + keymap('ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') + + keymap('K', vim.lsp.buf.hover, 'Hover Documentation') + keymap('', vim.lsp.buf.signature_help, 'Signature Documentation') + + -- Lesser used LSP functionality + keymap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') + keymap('wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') + keymap('wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') + keymap('wl', function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, '[W]orkspace [L]ist Folders') +end + return { -- LSP Configuration & Plugins 'neovim/nvim-lspconfig', @@ -10,5 +41,58 @@ return { -- Additional lua configuration, makes nvim stuff amazing! 'folke/neodev.nvim', - } + }, + config = function() + local on_attach = function(_, bufnr) + keymaps(bufnr) + + -- Create a command `:Format` local to the LSP buffer + vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) + vim.lsp.buf.format() + end, { desc = 'Format current buffer with LSP' }) + end + + -- mason-lspconfig requires that these setup functions are called in this order + -- before setting up the servers. + require('mason').setup() + require('mason-lspconfig').setup() + + -- Enable the following language servers + local servers = { + rust_analyzer = { filetypes = {'rust', 'rs'}}, + tsserver = {}, + lua_ls = { + Lua = { + workspace = { checkThirdParty = false }, + telemetry = { enable = false }, + }, + }, + } + + -- Setup neovim lua configuration + require('neodev').setup() + + -- nvim-cmp supports additional completion capabilities, so broadcast that to servers + local capabilities = vim.lsp.protocol.make_client_capabilities() + capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) + + -- Ensure the servers above are installed + local mason_lspconfig = require 'mason-lspconfig' + + mason_lspconfig.setup { + ensure_installed = vim.tbl_keys(servers), + } + + mason_lspconfig.setup_handlers { + function(server_name) + require('lspconfig')[server_name].setup { + capabilities = capabilities, + on_attach = on_attach, + settings = servers[server_name], + filetypes = (servers[server_name] or {}).filetypes, + } + end, + } + + end } diff --git a/lua/settings.lua b/lua/settings.lua index 905f368f..d793e745 100644 --- a/lua/settings.lua +++ b/lua/settings.lua @@ -13,6 +13,10 @@ vim.opt.mouse = '' -- Sync clipboard between OS and Neovim. vim.opt.clipboard = 'unnamedplus' +-- Enable spell check +vim.opt.spell = true +vim.opt.spelloptions = 'camel' + -- FIX: tabs do not seem to be working as expected -- Handle indentation vim.opt.tabstop = 4