summaryrefslogtreecommitdiff
path: root/lua/plugins
diff options
context:
space:
mode:
authorDavid Luevano Alvarado <david@luevano.xyz>2024-02-23 01:16:07 -0600
committerDavid Luevano Alvarado <david@luevano.xyz>2024-02-23 01:16:07 -0600
commitb87090c9527d4190ce1dc391f4cee983263f4853 (patch)
tree16f919adec567edefd271ffa24a84f3b903e5de5 /lua/plugins
parent616b79bd3dd74d935defbb794bbcf5fc51fb8b24 (diff)
refactor: lspconfig/mason and add null-ls, add c and python support
Diffstat (limited to 'lua/plugins')
-rw-r--r--lua/plugins/lspconfig.lua193
-rw-r--r--lua/plugins/null-ls.lua23
-rw-r--r--lua/plugins/treesitter.lua1
3 files changed, 132 insertions, 85 deletions
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',