61 lines
1.6 KiB
Lua
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,
|
|
})
|