diff options
author | David Luevano Alvarado <david@luevano.xyz> | 2024-02-23 01:16:07 -0600 |
---|---|---|
committer | David Luevano Alvarado <david@luevano.xyz> | 2024-02-23 01:16:07 -0600 |
commit | b87090c9527d4190ce1dc391f4cee983263f4853 (patch) | |
tree | 16f919adec567edefd271ffa24a84f3b903e5de5 /lua | |
parent | 616b79bd3dd74d935defbb794bbcf5fc51fb8b24 (diff) |
refactor: lspconfig/mason and add null-ls, add c and python support
Diffstat (limited to 'lua')
-rw-r--r-- | lua/config/set.lua | 3 | ||||
-rw-r--r-- | lua/plugins/lspconfig.lua | 193 | ||||
-rw-r--r-- | lua/plugins/null-ls.lua | 23 | ||||
-rw-r--r-- | lua/plugins/treesitter.lua | 1 |
4 files changed, 135 insertions, 85 deletions
diff --git a/lua/config/set.lua b/lua/config/set.lua index 1f4d774..aaa7e42 100644 --- a/lua/config/set.lua +++ b/lua/config/set.lua @@ -47,3 +47,6 @@ vim.api.nvim_create_autocmd('TextYankPost', { group = highlight_group, pattern = '*', }) + +-- Clang +vim.g.c_syntax_for_h = true diff --git a/lua/plugins/lspconfig.lua b/lua/plugins/lspconfig.lua index 27ad7b7..3390b51 100644 --- a/lua/plugins/lspconfig.lua +++ b/lua/plugins/lspconfig.lua @@ -1,4 +1,5 @@ local servers = { + clangd = {}, gopls = { -- just the key for the gopls config gopls = { -- settings parameter in lspconfig.setup requires a this table with another "gopls" name completeUnimported = true, @@ -15,7 +16,6 @@ local servers = { allFeatures = true, }, }, - -- jedi_language_server = {}, pyright = {}, lua_ls = { Lua = { @@ -29,104 +29,127 @@ local servers = { } }, }, - } + }, + gdscript = {}, } return { - 'neovim/nvim-lspconfig', - dependencies = { - 'hrsh7th/cmp-nvim-lsp', - -- Required for the keybinds - 'nvim-telescope/telescope.nvim', + { 'williamboman/mason.nvim', - 'williamboman/mason-lspconfig.nvim', - { 'j-hui/fidget.nvim', tag = 'legacy', opts = {} }, - { 'folke/neodev.nvim', opts = {} }, + opts = { + ensure_installed = { + 'clangd', + 'clang-format', + 'gopls', + 'rust-analyzer', + 'mypy', + 'ruff', + 'autopep8', + 'pyright', + 'lua-language-server', + }, + }, + config = function(_, opts) + local mason = require("mason") + mason.setup(opts) + + -- taken from the nvchad + vim.api.nvim_create_user_command("MasonInstallAll", function() + if opts.ensure_installed and #opts.ensure_installed > 0 then + vim.cmd("MasonInstall " .. table.concat(opts.ensure_installed, " ")) + end + end, {}) + + vim.g.mason_binaries_list = opts.ensure_installed + end, }, - config = function() - local lspconfig = require('lspconfig') - local mason = require('mason') - local mason_lspconfig = require('mason-lspconfig') + { + 'neovim/nvim-lspconfig', + dependencies = { + 'hrsh7th/cmp-nvim-lsp', + -- Required for the keybinds + 'nvim-telescope/telescope.nvim', + { 'j-hui/fidget.nvim', tag = 'legacy', opts = {} }, + { 'folke/neodev.nvim', opts = {} }, + }, + config = function() + local lspconfig = require('lspconfig') - -- 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) + -- 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) - local on_attach = function(_, bufnr) -- _ is client - -- Create a command `:Format` local to the LSP buffer - vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) - -- on 0.8, you should use vim.lsp.buf.format({ bufnr = bufnr }) instead - -- on later neovim version, you should use vim.lsp.buf.format({ async = false }) instead - vim.lsp.buf.format() - end, { desc = 'Format current buffer with LSP' }) + -- TODO: change keybinds to the autocmd suggested by the lspconfig github + local on_attach = function(_, bufnr) -- _ is client + -- Create a command `:Format` local to the LSP buffer + vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) + vim.lsp.buf.format({ async = false }) + end, { desc = 'Format current buffer with LSP' }) - -- autoformatting on save from: https://github.com/jose-elias-alvarez/null-ls.nvim/wiki/Formatting-on-save - -- pretty sure this will autoformat any code - -- temporarily disabled as using the keymap is better so far, else a lot of unnecessary changes will be made to random files (such as thesenvim configs) - -- local augroup = vim.api.nvim_create_augroup('LspFormatting', {}) - -- if client.supports_method('textDocument/formatting') then - -- vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr }) - -- vim.api.nvim_create_autocmd('BufWritePre', { - -- group = augroup, - -- buffer = bufnr, - -- callback = function() - -- vim.cmd('Format') - -- end, - -- }) - -- end + -- autoformatting on save from: https://github.com/jose-elias-alvarez/null-ls.nvim/wiki/Formatting-on-save + -- pretty sure this will autoformat any code + -- temporarily disabled as using the keymap is better so far, else a lot of unnecessary changes will be made to random files (such as thesenvim configs) + -- local augroup = vim.api.nvim_create_augroup('LspFormatting', {}) + -- if client.supports_method('textDocument/formatting') then + -- vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr }) + -- vim.api.nvim_create_autocmd('BufWritePre', { + -- group = augroup, + -- buffer = bufnr, + -- callback = function() + -- vim.cmd('Format') + -- end, + -- }) + -- end - local nmap = function(keys, func, desc) - if desc then - desc = 'LSP: ' .. desc + local nmap = function(keys, func, desc) + if desc then + desc = 'LSP: ' .. desc + end + vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) end - vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) - end - nmap('<leader>f', '<CMD>Format<CR>', '[F]ormat') - nmap('<leader>R', '<CMD>LspRestart<CR>', '[R]estart (lsp)') - nmap('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame') - nmap('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction') + nmap('<leader>f', '<CMD>Format<CR>', '[F]ormat') + nmap('<leader>R', '<CMD>LspRestart<CR>', '[R]estart (lsp)') + nmap('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame') + nmap('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction') - nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition') - nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') - nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation') - nmap('<leader>D', vim.lsp.buf.type_definition, 'Type [D]efinition') - nmap('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') - nmap('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') + nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition') + nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') + nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation') + nmap('<leader>D', vim.lsp.buf.type_definition, 'Type [D]efinition') + nmap('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') + nmap('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') - -- See `:help K` for why this keymap - nmap('<leader>k', vim.lsp.buf.hover, 'Hover Documentation') - nmap('<leader>K', vim.lsp.buf.signature_help, 'Signature Documentation') + -- See `:help K` for why this keymap + nmap('<leader>k', vim.lsp.buf.hover, 'Hover Documentation') + nmap('<leader>K', vim.lsp.buf.signature_help, 'Signature Documentation') - -- Lesser used LSP functionality - nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') - nmap('<leader>wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') - nmap('<leader>wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') - nmap('<leader>wl', function() - print(vim.inspect(vim.lsp.buf.list_workspace_folders())) - end, '[W]orkspace [L]ist Folders') - end + -- Lesser used LSP functionality + nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') + nmap('<leader>wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') + nmap('<leader>wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') + nmap('<leader>wl', function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, '[W]orkspace [L]ist Folders') + end - mason.setup({}) - mason_lspconfig.setup({ - ensure_installed = vim.tbl_keys(servers), - handlers = { - function(server_name) - lspconfig[server_name].setup({ - capabilities = capabilities, - on_attach = on_attach, - settings = servers[server_name], - }) - end, - } - }) + -- generic server setup + local function setup_server(server_name) + lspconfig[server_name].setup({ + capabilities = capabilities, + on_attach = on_attach, + settings = servers[server_name], + }) + end - -- At the end, add GDscript support, which is only supported by lspconfig itself - lspconfig.gdscript.setup({ - capabilities = capabilities, - on_attach = on_attach, - -- Need a better setup, this is for wsl -> win setup, but the ip will change dynamically - -- cmd = { 'nc', '172.30.112.1', '6005' }, - }) - end, + setup_server('clangd') + setup_server('gopls') + setup_server('rust_analyzer') + setup_server('pyright') + setup_server('lua_ls') + -- change the gdscript cmd for wsl -> win support, need to set: + -- cmd = { 'nc', '172.30.112.1', '6005' }, but the ip changes dynamically + setup_server('gdscript') + end, + }, } diff --git a/lua/plugins/null-ls.lua b/lua/plugins/null-ls.lua new file mode 100644 index 0000000..91f94e6 --- /dev/null +++ b/lua/plugins/null-ls.lua @@ -0,0 +1,23 @@ +return { + 'nvimtools/none-ls.nvim', + dependencies = { + 'nvim-lua/plenary.nvim', + }, + config = function() + local null_ls = require("null-ls") + + null_ls.setup({ + sources = { + null_ls.builtins.formatting.clang_format, + null_ls.builtins.formatting.autopep8, + null_ls.builtins.diagnostics.mypy.with({ + extra_args = function() + local virtual = os.getenv("VIRTUAL_ENV") or os.getenv("CONDA_PREFIX") or "/usr" + return { "--python-executable", virtual .. "/bin/python" } + end, + }), + null_ls.builtins.diagnostics.ruff, + }, + }) + end +} diff --git a/lua/plugins/treesitter.lua b/lua/plugins/treesitter.lua index 5f4cb18..eaa6b33 100644 --- a/lua/plugins/treesitter.lua +++ b/lua/plugins/treesitter.lua @@ -8,6 +8,7 @@ return { -- as it has to be configured with the required...'.config' opts = { ensure_installed = { + 'c', 'bash', 'ini', 'go', |