return { { 'neovim/nvim-lspconfig' }, { 'dense-analysis/ale', config = function() -- Run linters only on save vim.g.ale_lint_on_text_changed = 'never' vim.g.ale_lint_on_insert_leave = 0 -- Include the linter name (e.g. 'hack' or 'hhast'), code, and message in errors vim.g.ale_echo_msg_format = '[%linter%] %s' vim.g.ale_linters = { hack = {'hack', 'hhast'}, haskell = {"hlint"}, javascript = {'eslint'}, d = {'dmd'}, php = {'phpcs', 'phpstan'}, ruby = {'rubocop'}, cpp = {}, asm = {}, } vim.g.ale_ruby_rubocop_executable = 'bundle' vim.g.ale_cpp_cc_options = '-std=c++17 -Wall' vim.g.ale_open_list = 1 vim.g.ale_disable_lsp = 1 end }, { -- Tag bar. 'liuchengxu/vista.vim', lazy = false, config = function() vim.g.vista_default_executive = 'nvim_lsp' end }, { 'nvim-treesitter/nvim-treesitter', lazy = false, branch = 'master', build = ':TSUpdate', config = function() require'nvim-treesitter'.setup { ensure_installed = { 'haskell', 'php', 'lua', 'css', 'dockerfile', 'html', 'javascript', 'markdown', 'ruby', 'vue' }, highlight = { enable = true, additional_vim_regex_highlighting = true } } end }, { 'kevinhwang91/nvim-ufo', dependencies = {'kevinhwang91/promise-async'}, config = function() vim.wo.foldcolumn = '1' vim.wo.foldlevel = 99 -- feel free to decrease the value vim.wo.foldenable = true require('ufo').setup() end }, }