diff --git a/group_vars/all/neovim.yml b/group_vars/all/neovim.yml index 767a4b7..db66908 100644 --- a/group_vars/all/neovim.yml +++ b/group_vars/all/neovim.yml @@ -22,7 +22,7 @@ neovim_plugins: name: "cmp-nvim-lua" - url: "https://github.com/nvim-treesitter/nvim-treesitter" name: "nvim-treesitter" - version: master # main seems broken? + version: main - url: "https://github.com/nvim-lua/plenary.nvim" name: "plenary.nvim" - url: "https://github.com/nvim-telescope/telescope-fzf-native.nvim" diff --git a/tasks/neovim.yml b/tasks/neovim.yml index 3303d3a..f574e65 100644 --- a/tasks/neovim.yml +++ b/tasks/neovim.yml @@ -102,7 +102,7 @@ dest: "{{ xdg_config_dir }}/nvim/lua/options.lua" - src: "templates/nvim/lua/tree-sitter.lua.j2" - dest: "{{ xdg_config_dir }}/nvim/lua/tree-sitter.lua" + dest: "{{ xdg_config_dir }}/nvim/lua/_tree-sitter.lua" - src: "templates/nvim/lua/git-signs.lua.j2" dest: "{{ xdg_config_dir }}/nvim/lua/git-signs.lua" diff --git a/templates/nvim/init.lua.j2 b/templates/nvim/init.lua.j2 index a18b81c..8c2d7e9 100644 --- a/templates/nvim/init.lua.j2 +++ b/templates/nvim/init.lua.j2 @@ -4,7 +4,7 @@ require('options') require('_filetype') require('colorscheme') require('lsp') -require('tree-sitter') +require('_tree-sitter') require('git-signs') require('_telescope') require('indent-blankline') diff --git a/templates/nvim/lua/tree-sitter.lua.j2 b/templates/nvim/lua/tree-sitter.lua.j2 index d1730ad..1ee1701 100644 --- a/templates/nvim/lua/tree-sitter.lua.j2 +++ b/templates/nvim/lua/tree-sitter.lua.j2 @@ -1,26 +1,31 @@ -- {{ ansible_managed }} --- Tree sitter language parsers are installed automatically (through `auto_install`). -- To update installed parsers use `:TSUpdate {language}`. -- See https://github.com/nvim-treesitter/nvim-treesitter for more info. -local tree_sitter_config = require('nvim-treesitter.configs') +local tree_sitter_config = require('nvim-treesitter') -tree_sitter_config.setup { - ensure_installed = { - 'lua', 'yaml', 'bash', 'python', 'javascript', 'typescript', 'css', 'scss', - 'html', 'htmldjango', 'sql', 'json', 'dockerfile', 'markdown', 'rst', 'tmux', - 'xml', 'toml', 'editorconfig', 'diff', 'gitcommit', 'git_config', 'gitignore', - 'gitattributes', 'make', 'nginx', 'vim', 'vimdoc', 'passwd', 'regex' - }, - auto_install = true, - highlight = { - enable = true, - additional_vim_regex_highlighting = false, - }, - indent = { - enable = true, - }, - incremental_selection = { - enable = true, - }, +local ensure_installed = { + 'lua', 'yaml', 'bash', 'python', 'javascript', 'typescript', 'jsx', 'css', 'scss', + 'html', 'htmldjango', 'sql', 'json', 'dockerfile', 'markdown', 'rst', 'tmux', + 'xml', 'toml', 'editorconfig', 'diff', 'gitcommit', 'git_config', 'gitignore', + 'gitattributes', 'make', 'nginx', 'vim', 'vimdoc', 'passwd', 'regex' } + +local already_installed = require('nvim-treesitter.config').get_installed() +local parsers_to_install = vim.iter(ensure_installed) + :filter(function(parser) return not vim.tbl_contains(already_installed, parser) end) + :totable() + +tree_sitter_config.install(parsers_to_install) + +vim.api.nvim_create_autocmd('FileType', { + callback = function() + -- Enable treesitter highlighting and disable regex syntax + pcall(vim.treesitter.start) + -- folds, provided by Neovim + vim.wo.foldexpr = 'v:lua.vim.treesitter.foldexpr()' + vim.wo.foldmethod = 'expr' + -- indentation, provided by nvim-treesitter + vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()" + end, +})