Native Treesitter in Neovim

Steve Simkins March 17, 2026
Source

As fate would have it, I make a blog post about returning to Neovim, and for some reason an update to nvim-treesitter breaks my ability to see syntax highlighting for nushell. A very small annoyance, but enough for me to replace it. I remember seeing this awesome post by boltless so I knew it was possible. Turned out to be super simple!

First I needed something to install the parsers. I ended up following boltless' recommendation of using luarocks and making a small script to automate installing necessary parsers:

``rust def tsi [parser: string] { let tree = $"($env.HOME)/.local/share/nvim/site" luarocks --lua-version=5.1 $"--tree=($tree)" install $"tree-sitter-($parser)" } `

Installing them is simple as tsi rust or whichever language I need to grab. Next I needed to add these parsers to my packpath, so I added a new treesitter.lua to core with the following contents.

lua -- Native treesitter parsers installed via luarocks local rocks_path = vim.fn.stdpath("data") .. "/site/lib/luarocks/rocks-5.1" for _, parser_dir in ipairs(vim.fn.glob(rocks_path .. "/tree-sitter-//", true, true)) do vim.opt.runtimepath:prepend(parser_dir) end

One of the last steps is an autocmd to start up tree sitter with the open buffer.

lua vim.api.nvim_create_autocmd("FileType", { callback = function(ev) pcall(vim.treesitter.start, ev.buf) end })

A nice small bonus: adding the following to treesitter.lua lets me use folds with za.

`lua vim.o.foldenable = true vim.o.foldlevel = 99 vim.o.foldmethod = "expr" vim.o.foldexpr = "v:lua.vim.treesitter.foldexpr()" ``

Now everything works how I expect it to, and I've learned more about how treesitter works! Would also highly recommend this post that goes way deeper into the subject. Nothing beats the rush of solving a small problem to make my dev env faster and smoother!

Discussion in the ATmosphere

Loading comments...