local null_ls = require('null-ls') null_ls.setup({sources = { null_ls.builtins.formatting.phpcbf, null_ls.builtins.diagnostics.phpcs }}) require('null-ls').register(require('none-ls-shellcheck.diagnostics')) require('null-ls').register(require('none-ls-shellcheck.code_actions')) -- makes cmp tab functionality work as expected local has_words_before = function() unpack = unpack or table.unpack local line, col = unpack(vim.api.nvim_win_get_cursor(0)) return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match('%s') == nil end local cmp = require('cmp') cmp.setup{ mapping = { [''] = cmp.mapping( function (fallback) if cmp.visible() then cmp.select_next_item() elseif has_words_before() then cmp.complete() else fallback() end end, {'i'}), [''] = cmp.mapping( cmp.mapping.select_prev_item(), {'i'}), [''] = cmp.mapping( cmp.mapping.confirm({select=true}), {'i'}), }, completion = { autocomplete = false }, snippet = { expand = function(args) require('luasnip').lsp_expand(args.body) end }, sources = cmp.config.sources( {{name = 'nvim_lsp_signature_help'}}, {{name = 'nvim_lsp'}}, {{name = 'buffer'}}, {{name = 'path'}} ) } local capabilities = require('cmp_nvim_lsp').default_capabilities() require('lspconfig').clangd.setup{capabilities=capabilities} require('mason-lspconfig').setup_handlers{ function (server_name) require('lspconfig')[server_name].setup {capabilities=capabilities} end }