return { "neovim/nvim-lspconfig", dependencies = { "williamboman/mason.nvim", "williamboman/mason-lspconfig.nvim", "hrsh7th/cmp-nvim-lsp", "hrsh7th/cmp-buffer", "hrsh7th/cmp-path", "hrsh7th/cmp-cmdline", "hrsh7th/nvim-cmp", "L3MON4D3/LuaSnip", "saadparwaiz1/cmp_luasnip", "j-hui/fidget.nvim", }, config = function() local cmp = require('cmp') local cmp_lsp = require("cmp_nvim_lsp") local capabilities = vim.tbl_deep_extend( "force", {}, vim.lsp.protocol.make_client_capabilities(), cmp_lsp.default_capabilities()) require("fidget").setup({}) require("mason").setup() require("mason-lspconfig").setup({ ensure_installed = { "lua_ls", "ansiblels", "terraformls", "pylsp", }, handlers = { function(server_name) -- default handler (optional) require("lspconfig")[server_name].setup { capabilities = capabilities } end, ["ansiblels"] = function() local lspconfig = require("lspconfig") lspconfig["ansiblels"].setup({ cmd = { 'ansible-language-server', '--stdio' }, settings = { ansible = { python = { interpreterPath = 'python' }, ansible = { path = 'ansible' }, executionEnvironment = { enabled = false }, validation = { enabled = false, -- lint = { enabled = true, path = 'ansible-lint' }, }, }, }, filetypes = { 'yaml', 'yml', 'ansible' }, root_dir = lspconfig.util.root_pattern("roles", "playbooks", "Documents"), single_file_support = false, }) end, ["pylsp"] = function () local lspconfig = require("lspconfig") lspconfig["pylsp"].setup({ cmd = {"pylsp"}, filetypes = { 'py' }, root_dir = lspconfig.util.root_pattern("Documents"), single_file_support = false, }) end, ["terraformls"] = function () local lspconfig = require("lspconfig") lspconfig["terraformls"].setup({ cmd = {"terraform-ls", "server"}, filetypes = { 'terraform', 'terraform-vars', 'tf', 'hcl' }, root_dir = lspconfig.util.root_pattern("Documents"), single_file_support = false, }) end, ["lua_ls"] = function() local lspconfig = require("lspconfig") lspconfig.lua_ls.setup { capabilities = capabilities, settings = { Lua = { diagnostics = { globals = { "vim", "it", "describe", "before_each", "after_each" }, } } } } end, } }) local cmp_select = { behavior = cmp.SelectBehavior.Select } cmp.setup({ snippet = { expand = function(args) require('luasnip').lsp_expand(args.body) -- For `luasnip` users. end, }, mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping.select_prev_item(cmp_select), [''] = cmp.mapping.select_next_item(cmp_select), [''] = cmp.mapping.confirm({ select = true }), [""] = cmp.mapping.complete(), }), sources = cmp.config.sources({ { name = 'nvim_lsp' }, { name = 'luasnip' }, -- For luasnip users. }, { { name = 'buffer' }, }) }) vim.diagnostic.config({ -- update_in_insert = true, float = { focusable = false, style = "minimal", border = "rounded", source = "always", header = "", prefix = "", }, }) end }