dotfiles/nvim/lua/config/treesitter.lua
2026-06-02 08:20:14 +02:00

61 lines
1.6 KiB
Lua

-- a list of filetypes to install treesitter parsers and queries
local nvim_treesitter = require("nvim-treesitter")
local ensure_installed = {
"cpp",
"diff",
"go",
"gomod",
"gosum",
"javascript",
"json",
"lua",
"markdown",
"python",
"sh",
"toml",
"typescript",
"vim",
"yaml",
"zsh",
}
vim.api.nvim_create_autocmd("FileType", {
pattern = ensure_installed,
callback = function(args)
local ft = vim.bo[args.buf].filetype
local lang = vim.treesitter.language.get_lang(ft)
if lang == nil then
return
end
-- check if parser is available
local is_parser_available = vim.treesitter.language.add(lang)
if not is_parser_available then
local available_langs = vim.g.ts_available or nvim_treesitter.get_available()
if not vim.g.ts_available then
vim.g.ts_available = available_langs
end
if vim.tbl_contains(available_langs, lang) then
-- install treesitter parsers and queries
local install_msg = string.format("Installing parsers and queries for %s", lang)
vim.print(install_msg)
require("nvim-treesitter").install(lang)
end
end
if vim.treesitter.language.add(lang) then
-- start treesitter highlighting
vim.treesitter.start(args.buf, lang)
-- the following two statements will enable treesitter folding
-- vim.wo[0][0].foldexpr = "v:lua.vim.treesitter.foldexpr()"
-- vim.wo[0][0].foldmethod = "expr"
-- enable treesitter-based indentation
-- vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
end
end,
})